2014-10-20 68 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