我应该使用 Halfcomplex2Real 还是 Complex2Complex

Should I use Halfcomplex2Real or Complex2Complex

早上好,我正在尝试执行 2D FFT as 2 1-Dimensional FFT

问题设置如下:

有一个由 inverse FFT 实数数组 上生成的复数矩阵,我们称它为 arr[-nx..+nx][-nz..+nz]

现在,由于原始数组由实数组成,我利用对称性将我的数组简化为 arr[0..nx][-nz..+nz]

我的问题从这里开始,提供了 arr[0..nx][-nz..nz]。 现在我应该回到实数领域。 问题是我应该在2个方向上使用什么样的转换?

x 中,我使用了 fftw_plan_r2r_1d( .., .., .., FFTW_HC2R, ..),称为 Half complex to Real 变换,因为在那个方向上我利用了对称性,我认为这没问题。 但是在 z 方向我不知道我是否应该使用相同的转换或者 Complex to complex (C2C) 转换? 一次正确的是什么?为什么?

如果需要here,在第11页,简要描述了HC2R变换

谢谢

"To easily retrieve a result comparable to that of fftw_plan_dft_r2c_2d(), you can chain a call to fftw_plan_dft_r2c_1d() and a call to the complex-to-complex dft fftw_plan_many_dft(). The arguments howmany and istride can easily be tuned to match the pattern of the output of fftw_plan_dft_r2c_1d(). Contrary to fftw_plan_dft_r2c_1d(), the r2r_1d(...FFTW_HR2C...) separates the real and complex component of each frequency. A second FFTW_HR2C can be applied and would be comparable to fftw_plan_dft_r2c_2d() but not exactly similar.

As quoted on the page 11 of the documentation that you judiciously linked,

'Half of these column transforms, however, are of imaginary parts, and should therefore be multiplied by I and combined with the r2hc transforms of the real columns to produce the 2d DFT amplitudes; ... Thus, ... we recommend using the ordinary r2c/c2r interface.'

由于您有一个复数数组,您可以使用 c2r 变换或展开 real/imaginary 部分并尝试使用 HC2R 变换。前一个选项似乎最 practical.Which 可能解决您的问题?

-@弗朗西斯