Python 对称谱的iFFT

Python 对称谱的iFFT,python,numpy,fft,ifft,Python,Numpy,Fft,Ifft,我在对称频谱上执行iFFT(使用Python)。为什么结果不是实值信号,而是包含复数值 # My symmetric spectrum spectrum = numpy.array( [1+1j,2+2j,3+3j,3-3j,2-2j] ) # Perform the iFFT print numpy.fft.ifft(spectrum) 输出: (2.2+0.2j) (-1.98979431354+0.2j) (0.59464641547+0.2j) (-0.74743281997+0.2

我在对称频谱上执行iFFT(使用Python)。为什么结果不是实值信号,而是包含复数值

# My symmetric spectrum
spectrum = numpy.array( [1+1j,2+2j,3+3j,3-3j,2-2j] )

# Perform the iFFT
print numpy.fft.ifft(spectrum)
输出:

(2.2+0.2j)
(-1.98979431354+0.2j)
(0.59464641547+0.2j)
(-0.74743281997+0.2j)
(0.942580718037+0.2j)
试着这样做:

# 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,这两个值都是实值。对于其他项,对称性是围绕奈奎斯特的复共轭

使用倍频程(MATLAB clone),我得到了与原始输入数据相同的结果:

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输入/输出数据进行排序。

您的对称频谱是否发生偏移?我的意思是你说,当一个光谱相对于0对称时,它是对称的。通常,一个常数的虚部对应一个移位。用1+0j代替1+1jI。我们再次检查了它,在玩游戏时,DC似乎必须是一个实数。此外,如果样本总数(包括DC)为偶数,则N/2奈奎斯特样本也必须是实数。