在numpy.fft中未正确获取频率

1 投票
1 回答
1583 浏览
提问于 2025-04-28 13:57

我有一个在频率域的信号。然后我用numpy库里的ifft函数对这个信号进行了处理,得到了时间域的信号。接着,我又对这个时间信号进行了fft处理,但我发现我没有得到负频率和正频率(见图中的第三个图)。

enter image description here
     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)

以下数组的 dtypefloat64ttsignal_td。其他的则是 complex128。你在 fd2 中只看到一个峰值的原因是,它是 exp(4j*np.pi*tt) 的变换,而不是 cos(4*np.pi*tt)

撰写回答