IBM ESSL:DFT - 实数到复数和复数到实数 - 最终数组大于初始数组

IBM ESSL: DFT - Real to complex & Complex to real - Final array bigger than initial one

我有一个真正的二维双精度数组。我想对其执行 FFT,对结果进行一些操作,然后执行逆 FFT。我在 Blue Gene Q 上使用 IBM ESSL 库。

函数 DRCFT2 正在进行实数到复数的转换 (http://www-01.ibm.com/support/knowledgecenter/SSFHY8_5.3.0/com.ibm.cluster.essl.v5r3.essl100.doc/am5gr_hsrcft2.htm?lang=en). The function DCRFT2 is doing the complex to real transform (http://www-01.ibm.com/support/knowledgecenter/SSFHY8_5.3.0/com.ibm.cluster.essl.v5r3.essl100.doc/am5gr_hscrft2.htm?lang=en)。

起始实际数组大小为 (nx,nz)。在 DRCFT2 之后,复数数组大小为 (nx/2+1,nz)。 DCRFT2之后,最终真正的数组大小为(nx+2,nz).

开始和最终的真实数组大小不同,我该如何比较它们?

ps:如果我把第一个实数数组放在一个复数数组中并执行复数到复数的DFT(DCFT2),那么最终结果和第一个的大小相同,我可以比较它们.无论如何要对 DRCFT2 和 DCRFT2 做一些类似的事情?

根据 DCRFT2 documentation you link to:

x
is the array X, containing n2 columns of data to be transformed. Due to complex conjugate symmetry, the input consists of only the first ((n1)/2)+1 rows of the array
[...]
On Return
y
[...]
is the array Y, containing n1 rows and n2 columns of results of the real discrete Fourier transform of X.

你的情况是 n1=nxn2=nz。换句话说,如果您将一个大小为 (nx/2+1,nz) 的复杂数组作为 DCRFT2 的输入参数,您应该得到一个大小为 (nx,nz) 的真实数组输出,这样您就可以很容易地比较您的开始和最终的真实数组。