Python 无法正确获取numpy.fft中的频率
我有一个频域的信号,然后我得到了信号的numpy.fft.ifft,我得到了时域信号,同样我得到了同一时间信号的fft,我没有得到负频率和正频率(图3)。Python 无法正确获取numpy.fft中的频率,python,numpy,fft,Python,Numpy,Fft,我有一个频域的信号,然后我得到了信号的numpy.fft.ifft,我得到了时域信号,同样我得到了同一时间信号的fft,我没有得到负频率和正频率(图3)。 一般性意见:我避免使用time作为变量名,因为IPython将其作为“神奇”命令加载 有时,我发现matplotlib令人困惑的是,当你plotacomplexarray时,它实际上绘制了真实的部分。在代码段中: tt = np.arange(0, 10, .01) N = len(tt) signal_td
一般性意见:我避免使用
time
作为变量名,因为IPython
将其作为“神奇”命令加载
有时,我发现matplotlib
令人困惑的是,当你plot
acomplex
array时,它实际上绘制了真实的部分。在代码段中:
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\u td
。其他的是complex128
。在fd2
中只看到一个峰值的原因是因为它是exp(4j*np.pi*tt)
的转换,而不是cos(4*np.pi*tt)
发布用于生成绘图的代码如何?否则,很难理解您的问题。@frank128791:我发布了代码:谢谢frank。如果我再做一次信号的ifft和fft。我得到了两个与singl\u fd相同的峰值。为什么这里的fd2 transform exp()而不是cos()trans_1=np.fft.ifft(signal_fd)
trans_2=np.fft.fft(trans_1)当您进行第一次变换时,您会得到一个复数数组。仅删除信号中的负频率_fd2
有效地删除了sin()
项。如果您查看这些数组的.imag.std()
,signal\u td
是实的,signal\u td.imag.std()
正好为零。对于signal_fd
和signal_fd2
仅得到舍入误差,对于inv_td2
则得到sqrt(2)。虚构的部分在那里,但没有出现在情节中。我希望这能回答你的问题:非常感谢你,弗兰克。现在我明白了。
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)