После выполнения FFT и IFFT я слышу только шум в наушниках ... Вот код:
double* spectrum = new double[n];
fftw_plan plan;
plan = fftw_plan_r2r_1d(n, data, spectrum, FFTW_REDFT10, FFTW_ESTIMATE);
fftw_execute(plan);
fftw_destroy_plan(plan);
plan = fftw_plan_r2r_1d(n, spectrum, data, FFTW_REDFT01, FFTW_ESTIMATE);
fftw_execute(plan);
fftw_destroy_plan(plan);
Может быть, я выбрал неправильный тип FFT?
PS Данные исходныесигнал
ОБНОВЛЕНИЕ
Хорошо, теперь код равен
fftw_complex* spectrum = (fftw_complex*) fftw_malloc(sizeof(fftw_complex) * n);
fftw_plan plan;
plan = fftw_plan_dft_r2c_1d(n, data, spectrum, FFTW_ESTIMATE);
fftw_execute(plan);
fftw_destroy_plan(plan);
plan = fftw_plan_dft_c2r_1d(n, spectrum, data, FFTW_ESTIMATE);
fftw_execute(plan);
fftw_destroy_plan(plan);
Проблема остается той же, мой массив данных поврежден.
ОБНОВЛЕНИЕ # 2
Итак, проблема в моем размере преобразования и нормализации.Если я использую реальные преобразования в реальные FFTW_REDFT10 и FFTW_REDFT01, какие размеры преобразования мне нужно использовать?2 * п?Или что-то другое?И тогда мне нужно нормализовать мой выходной сигнал, разделив каждый элемент на 2 * n?
Спасибо всем за ответ.
ОБНОВЛЕНИЕ # 3
Спасибо всем за повторный ответ.Я решил проблему с вашей помощью.Вот рабочий код:
// FFT
fftw_complex* spectrum = (fftw_complex*) fftw_malloc(sizeof(fftw_complex) * n);
fftw_plan plan;
plan = fftw_plan_dft_r2c_1d(n, data, spectrum, FFTW_ESTIMATE);
fftw_execute(plan);
fftw_destroy_plan(plan);
// some filtering here
// IFFT
plan = fftw_plan_dft_c2r_1d(n, spectrum, data, FFTW_ESTIMATE);
fftw_execute(plan);
fftw_destroy_plan(plan);
// normalizing
for (int i = 0; i < n; i++) {
data[i] = data[i] / n;
}