在numpy.fft中未正确获取频率
我有一个在频率域的信号。然后我用numpy库里的ifft函数对这个信号进行了处理,得到了时间域的信号。接着,我又对这个时间信号进行了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)
1 个回答
1
一般来说,我不喜欢用 time
作为变量名,因为 IPython
会把它当作一个“魔法”命令来处理。
有时候我觉得 matplotlib
有点让人困惑,因为当你绘制一个 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)
以下数组的 dtype
是 float64
:tt
和 signal_td
。其他的则是 complex128
。你在 fd2
中只看到一个峰值的原因是,它是 exp(4j*np.pi*tt)
的变换,而不是 cos(4*np.pi*tt)
。