2014-10-20 34 views
1

我有一個信號頻率域。然後我拿numpy.fft.ifft信號。我得到時域信號。再次我fft同時信號正確我沒有得到負頻率和正頻率(圖3中的曲線3)。 enter image description here正確地沒有頻率numpy.fft

 time  = np.arange(0, 10, .01) 
    N   = len(time) 
    signal_td = np.cos(2.0*np.pi*2.0*time) 
    signal_fd = np.fft.fft(signal_td) 
    signal_fd2 = signal_fd[0:N/2] 
    inv_td2 = np.fft.ifft(signal_fd2) 
    fd2  = np.fft.fft(inv_td2) 
+0

如何發佈用於生成圖的代碼?否則,很難理解你的問題。 – 2014-10-20 15:48:37

+0

@ frank128791:我發佈了代碼 – 2014-10-20 16:06:25

回答

1

一般性意見:我避免使用time作爲一個變量的名字,因爲IPython負載它作爲一個「神奇」的命令。

我發現有時令人迷惑的matplotlib的東西是,當你plot一個complex數組,它實際上繪製了實際的部分。中的代碼片斷:

tt  = np.arange(0, 10, .01) 
N   = len(tt) 
signal_td = np.cos(2.0*np.pi*2.0*tt) 
signal_fd = np.fft.fft(signal_td) 
signal_fd2 = signal_fd[0:N/2] 
inv_td2 = np.fft.ifft(signal_fd2) 
fd2  = np.fft.fft(inv_td2) 

以下陣列具有dtypefloat64的:ttsignal_td和。其他人是complex128。您只在fd2中看到一個峯的原因是因爲它是exp(4j*np.pi*tt)而不是cos(4*np.pi*tt)的變換。

+0

:謝謝frank.If我再做一次ifft和fft的signal_fd.I有兩個峯,與singl_fd相同。爲什麼fd2 transform exp()..而不是cos( ) 這裏。 'trans_1 = np.fft.ifft(signal_fd)''trans_2 = np.fft.fft(trans_1)' – 2014-10-20 17:56:32

+0

當你做第一次轉換時,你會得到一個複數值的數組。去除'signal_fd2'中的負頻率有效地消除了'sin()'項。如果你看看這些數組的'.imag.std()','signal_td'是真實的,'signal_td.imag.std()'恰好爲零。對於'signal_fd'和'signal_fd2',你只會遇到舍入錯誤,對於'inv_td2'你會得到sqrt(2)。虛構的部分在那裏,但沒有出現在劇情中。我希望能回答你的問題。 – 2014-10-20 18:41:26

+0

:非常感謝您的坦白。現在我明白了。 – 2014-10-20 18:57:09