试试这样:
# My symmetric spectrum
spectrum = numpy.array( [0+0j,1+1j,2+2j,3+3j,0+0j,3-3j,2-2j,1-1j] )
# Perform the iFFT
print numpy.fft.ifft(spectrum)
通常 bin 0 是 DC,bin N/2 是 Nyquist,并且这两个值都是实数。对于其他项,对称性是围绕 Nyquist 的复共轭。
使用 Octave(MATLAB 克隆)对于原始输入数据,我得到与您相同的结果:
octave-3.4.0:1> x = [1+1j,2+2j,3+3j,3-3j,2-2j];
octave-3.4.0:2> y = ifft(x)
y =
2.20000 + 0.20000i -1.98979 + 0.20000i 0.59465 + 0.20000i -0.74743 + 0.20000i 0.94258 + 0.20000i
而使用上面的输入数据,我得到了一个纯粹真实的结果:
octave-3.4.0:3> x = [0+0j,1+1j,2+2j,3+3j,0+0j,3-3j,2-2j,1-1j];
octave-3.4.0:4> y = ifft(x)
y =
1.50000 -1.56066 0.00000 0.14645 -0.50000 0.56066 -1.00000 0.85355
我假设 numpy 可能使用相同的约定来订购 FFT/IFFT 输入/输出数据。