我有一个真正的2D双精度数组。我想对它进行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)。函数DCRFT2正在进行复数到实数变换(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类似的事情?
答案 0 :(得分:1)
根据DCRFT2
documentation you link to:
<强> X 强>
是数组X
,包含要转换的n2
个数据列。由于复共轭对称性,输入仅由数组的第一((n1)/2)+1
行组成 [...]
返回时
的ý强>
[...]
是数组Y,包含n1
行和n2
实数离散傅里叶变换X
列的n1=nx
列。
案例n2=nz
和(nx/2+1,nz)
。换句话说,如果你输入一个大小为DCRFT2
的复杂数组作为(nx,nz)
的输入参数,你应该得到一个大小为{{1}}的实数组输出,这样你就可以很容易地比较你的开始和最后的真实数组。