如何在 FFTW 库中进行实数反演 FFT

2024-02-24

我正在尝试使用 FFT 进行一些过滤。我正在使用 r2r_1d 计划,但我不知道如何进行逆变换......

    void PerformFiltering(double* data, int n)
    {
                    /* FFT */
        double* spectrum = new double[n];

        fftw_plan plan;

        plan = fftw_plan_r2r_1d(n, data, spectrum, FFTW_REDFT00, FFTW_ESTIMATE);

        fftw_execute(plan); // signal to spectrum
        fftw_destroy_plan(plan); 


                    /* some filtering here */


                    /* Inverse FFT */
        plan = fftw_plan_r2r_1d(n, spectrum, data, FFTW_REDFT00, FFTW_ESTIMATE);
        fftw_execute(plan); // spectrum to signal (inverse FFT)
        fftw_destroy_plan(plan);

}

我做的所有事情都正确吗?我很困惑,因为在 FFTW 复杂的 DFT 中,您可以通过标志设置变换方向,如下所示:
p = fftw_plan_dft_1d(N, 输入, 输出, FFTW_FORWARD, FFTW_ESTIMATE);
or
p = fftw_plan_dft_1d(N, 输入, 输出, FFTW_BACKWARD, FFTW_ESTIMATE);


http://www.fftw.org/fftw3_doc/Real_002dto_002dReal-Transform-Kinds.html http://www.fftw.org/fftw3_doc/Real_002dto_002dReal-Transform-Kinds.html

http://www.fftw.org/fftw3_doc/1d-Real_002deven-DFTs-_0028DCTs_0029.html http://www.fftw.org/fftw3_doc/1d-Real_002deven-DFTs-_0028DCTs_0029.html

“种类”指定方向。

(另请注意,您可能希望通过除以 n 来重新规范化信号。FFTW 的规范化约定在变换及其逆之后乘以 n。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 FFTW 库中进行实数反演 FFT 的相关文章

随机推荐