2012-01-30 64 views
3

我在對稱譜上執行iFFT(使用Python)。爲什麼結果不是實值信號,而是包含複數值?對稱譜的iFFT

# 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) 
+0

您的對稱頻譜是否偏移?我的意思是說,當頻譜相對於0對稱時,頻譜是對稱的。通常,恆定的虛部與頻移相對應。 – jimifiki 2012-01-30 11:03:17

+1

使用1 + 0j而不是1 + 1j – 2012-01-30 11:05:38

回答

2
嘗試

像這樣:

# 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) 

通常倉0是DC,倉N/2是奈奎斯特,和這兩個值是真實的。對於其他項,對稱性是奈奎斯特周圍的複共軛。

隨着八度(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輸入/輸出數據進行排序。

+0

我已經再次檢查過它,並且在玩耍時似乎DC必須是真正的價值。此外,如果樣本(包括DC)的總數甚至是N/2 Nyquist-Sample也必須是實值。 – user1177816 2012-01-30 11:08:27

+0

是的,我認爲這是正確的。 – 2012-01-30 11:11:06