【问题标题】:FFTW multi-dimensional FFTFFTW 多维 FFT
【发布时间】:2013-08-06 20:58:40
【问题描述】:

我正在尝试从单个数据数组中利用多维 FFT fftwf_plan_dft_r2c_2d。我有 M 个数据点,N 次:

float *input = (float*)malloc( M * N * sizeof( float ) );
// load M*N data points data
fftwf_complex *outputFFT = (fftwf_complex*)fftwf_malloc( N * ((M/2) + 1) * sizeof( fftwf_complex ) );
fftwf_plan forwardFFTPlan = fftwf_plan_dft_r2c_2d( N, M, input, outputFFT,  FFTW_ESTIMATE );

fftwf_execute( forwardFFTPlan );
fftwf_destroy_plan( forwardFFTPlan );

// Plot M data points, ignore the rest. Plotting magnitude of the data sqrtf( ([REAL] * [REAL]) + ([IMAG] * [IMAG]) )

FFT 结果不正确(通过工作 MATLAB 脚本验证),但如果我只对 M 个数据点进行 1D FFT:

for( int i = 0; i < N; i++ )
{
   float *input = (float*)malloc( M * sizeof( float ) );
   // load M data points
   fftwf_complex *outputFFT = (fftwf_complex*)fftwf_malloc( ((M/2) + 1) * sizeof( fftwf_complex ) );
   fftwf_plan forwardFFTPlan = fftwf_plan_dft_r2c_1d( M, input, outputFFT, FFTW_ESTIMATE );

   fftwf_execute( forwardFFTPlan );
   fftwf_destroy_plan( forwardFFTPlan );
}
// Plot M data points, ignore the rest. Plotting magnitude of the data sqrtf( ([REAL] * [REAL]) + ([IMAG] * [IMAG]) )

结果是正确的。加载到数组中的数据是相同的。我对多维 FFT 有什么不了解的地方?我通读了帮助页面,我“认为”我做得对,但显然我遗漏了一些东西......

【问题讨论】:

    标签: fftw multidimensional-array


    【解决方案1】:

    四处询问后,我发现了我的问题:fftwf_plan_dft_r2c_2d 执行 2D FFT,我的阅读方式有所不同。我需要改用fftwf_plan_many_dft_r2c,它允许我指定步幅和大小以多次执行一维 FFT。

    【讨论】:

      猜你喜欢
      • 2013-02-24
      • 2013-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多