gpt4 book ai didi

c - 二维 R2C FFTW : Order of Fourier coefficients

转载 作者:太空宇宙 更新时间:2023-11-04 04:43:23 26 4
gpt4 key购买 nike

我已经多次使用 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 的傅立叶系数不对称。

最佳答案

fftw_plan_dft_r2c_2d 的输出不是STEP double 数组的STEP。由于输入是实数,在傅立叶空间中,相反的频率是共轭的 $X_{N-k} = X_k^*$。 ( http://en.wikipedia.org/wiki/Fast_Fourier_transform )

fftw_c2rfftw_r2c 考虑到了这一点。只存储了一半的频率,减少了计算量。

http://www.fftw.org/fftw3_doc/Real_002ddata-DFT-Array-Format.html#Real_002ddata-DFT-Array-Format

因此,您可能宁愿使用这样的东西(如果它有效):

  mFFTW2D(double INPUT[][STEPS], fftw_complex OUTPUT[][STEPS/2+1])

注意数组的大小 OUTT:您也可以减少它并获得内存!

 fftw_complex OUTT[STEPS][STEPS/2+1];

再见,

关于c - 二维 R2C FFTW : Order of Fourier coefficients,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23717086/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com