我正在尝试对具有共轭甚至对称性的复数输入数组进行一维IFFT变换,其中z(1)
和z(N/2+1)
是真实的。数组的总大小为N=256
。如果我按以下方式准备IFFT:
stat = DftiCreateDescriptor( desc_handle, DFTI_DOUBLE, DFTI_REAL, 1,256)
stat = DftiSetValue(desc_handle, DFTI_CONJUGATE_EVEN_STORAGE, DFTI_COMPLEX_COMPLEX)
stat = DftiSetValue(desc_handle, DFTI_PLACEMENT, DFTI_NOT_INPLACE)
stat = DftiComputeBackward(desc_handle, X_in, M_out)
...其中X_in
具有甚至如上所述的共轭对称性。这意味着M_out
在某种意义上应该是一个数学真实数组:
real(dp) :: M_out(N+2)
然后预期的真实fortran数组中的每个其他元素都等于零。
complex(dp) :: M_out(N/2)
然后预期的复数fortran数组将具有N/2
大小,虚部为零。
然而,在完成上述操作后,我得到的结果并不真实。就像例程不理解输入复数fortran数组没有共轭甚至对称性。这是为什么?我是否必须添加任何其他首选项参数以确保正确读取输入结构?
答案 0 :(得分:0)
在此示例中,前向域是实际的,后向域即使是复杂的存储也是共轭的。因此,MKL期望X_in的类型为Complex [],而M_out的类型为Real []。结果是真实的。
我怀疑,你提供了一个复杂的数组作为M_out。然后该数组被解释为Real []并包含反向变换的实际结果。没有插入虚部的零。