FFTW: сигнал состоит из шума после 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);

Может быть, я ' Данные 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;
        }
8
задан Kirill Dubovikov 13 December 2010 в 19:13
поделиться