我正在尝试从单个数据阵列中利用多维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的理解是什么?我阅读了帮助页面并且“想”我做得对,但显然我错过了一些东西......
答案 0 :(得分:0)
在询问后,我发现了我的问题:fftwf_plan_dft_r2c_2d执行2D FFT,我的阅读方式不同。我需要使用fftwf_plan_many_dft_r2c代替,这允许我指定步幅和大小以多次执行1D FFT。