我已经多次使用 1D c2c 变换,没有任何问题。具有 N 个网格点的变换的傅立叶系数的顺序为:f_0、f_1、f_2、...、f_N/2、f_-N/2+1、...、f_-1。
我只是无法弄清楚 2D R2C FFTW 的系数顺序。我正在使用以下代码。使用 2D_r2c,归一化然后使用 2D_c2r 会产生原始输入,因此应该没有错误。
void mFFTW2D(double INPUT[][STEPS], fftw_complex OUTPUT[][STEPS]){
fftw_plan my_PLAN = fftw_plan_dft_r2c_2d(STEPS,
STEPS,
*INPUT,
*OUTPUT,
FFTW_ESTIMATE);
fftw_execute(my_PLAN);
fftw_destroy_plan(my_PLAN);
}
void mIFFTW2D(fftw_complex INPUT[][STEPS], double OUTPUT[][STEPS]){
fftw_plan my_PLAN = fftw_plan_dft_c2r_2d(STEPS,
STEPS,
*INPUT,
*OUTPUT,
FFTW_ESTIMATE);
fftw_execute(my_PLAN);
fftw_destroy_plan(my_PLAN);
D2Norm(OUTPUT); //properly normalized: STEPS^-2
}
double INN[STEPS][STEPS];
fftw_complex OUTT[STEPS][STEPS];
// read in signal in INN
mFFTW2D(INN, OUTT);
// what is the order of the fourier coefficients in OUTT?
mIFFTW2D(OUTT, INN);
我使用 f(x,y)=sin(ax)*sin(ay) 作为测试输入信号。'a' 的选择方式是,信号将是正弦周期的整数倍(无泄漏效应)。我对 x 和 y 的傅立叶系数没有对称性感到特别惊讶。