1

我使用 fftw/C++ 和在线计算器 ( http://calculator-fx.com/calculator/fast-fourier-transform-calculator-fft/ ) 计算了数组 {1,2,3,4,5,6} 的 FFT一维离散傅里叶变换)。结果似乎有点不同。

fftw输出:

0     21.000000      0.000000
1     -3.000000      5.196152
2     -3.000000      1.732051
3     -3.000000      0.000000
4      0.000000      0.000000
5      0.000000      0.000000

在线计算器输出:

 21 + 0j
 -3 + 5.196152j
 -3 + 1.732051j
 -3 + 0j
 -3 - 1.732051j
 -3 - 5.196152j

如上图,fftw的后两个结果都变为零了。想不通为什么。有人可以帮帮我吗?谢谢。

[已编辑] cpp 代码:

int main()
{
    fftw_complex *out;
    fftw_plan plan;

    double arr[]={1,2,3,4,5,6};
    int n = sizeof(arr)/sizeof(double);

    out = (fftw_complex*)fftw_malloc ( sizeof ( fftw_complex ) * n );
    plan = fftw_plan_dft_r2c_1d ( n, arr, out, FFTW_ESTIMATE );
    fftw_execute ( plan );

    for (int i = 0; i < n; i++ )
    {
        printf ( "  %3d  %12lf  %12lf\n", i, out[i][0], out[i][1] );
    }

    fftw_free(out);
    fftw_destroy_plan(plan);
    return 0;
}
4

1 回答 1

6

哦,你使用的是R2C模式(不知道为什么我之前没有想到)。由于对称性,这只写 n/2 + 1 个结果。

这种行为记录在案:http ://www.fftw.org/doc/One_002dDimensional-DFTs-of-Real-Data.html 。

于 2013-09-11T23:52:51.410 回答