2

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

问题设置如下:

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

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

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

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

如有需要请在第 11 页简要介绍 HC2R 转换

谢谢

4

1 回答 1

0

“要轻松检索与 的结果相当的结果fftw_plan_dft_r2c_2d(),您可以链接fftw_plan_dft_r2c_1d()对复杂到复杂 dft 的调用和调用fftw_plan_many_dft()。参数howmanyistride可以轻松调整以匹配 的输出模式fftw_plan_dft_r2c_1d()。与fftw_plan_dft_r2c_1d()r2r_1d相反(...FFTW_HR2C...) 将每个频率的实数和复数分开。FFTW_HR2C可以应用第二个,并且可以与fftw_plan_dft_r2c_2d()但不完全相似。

正如您明智地链接的文档的第 11 页所引用的那样,

'然而,这些列变换中有一半是虚部,因此应该乘以 I 并与实列的 r2hc 变换结合以产生 2d DFT 幅度;...因此,...我们建议使用普通的 r2c/c2r 接口。

由于您有一个复数数组,您可以使用 c2r 变换或展开实部/虚部并尝试使用 HC2R 变换。前一个选项似乎最实用。哪一个可以解决您的问题?

-@弗朗西斯

于 2019-08-23T19:06:38.403 回答