Python 3.x np.fft.fft工作不正常

Python 3.x np.fft.fft工作不正常,python-3.x,fft,Python 3.x,Fft,我试图使用Python3.x对一些数据进行fft。但当我绘图时,我得到的是原始数据(?)而不是数据的fft。我正在使用matlab,以便比较结果。 我已经在这个网站上尝试了很多例子,但似乎没有任何效果。我不习惯使用python。如何获得类似于matlab的绘图?我不管是-f/2到f/2还是0到f/2的光谱。 来自python的FFT: 来自matlab的FFT: 导入的信号sinal2具有大小(1997,1)。对于这样的二维阵列,默认情况下,沿最后一个轴计算FFT。在这种情况下,这意味着计算

我试图使用Python3.x对一些数据进行fft。但当我绘图时,我得到的是原始数据(?)而不是数据的fft。我正在使用matlab,以便比较结果。 我已经在这个网站上尝试了很多例子,但似乎没有任何效果。我不习惯使用python。如何获得类似于matlab的绘图?我不管是-f/2到f/2还是0到f/2的光谱。

来自python的FFT:

来自matlab的FFT:

导入的信号
sinal2
具有大小
(1997,1)
。对于这样的二维阵列,默认情况下,沿最后一个轴计算FFT。在这种情况下,这意味着计算大小为1的1997 FFT。正如您所知,1点FFT是一种单位映射(意味着单个值的FFT给出相同的值),因此生成的2D阵列与原始阵列相同

要避免这种情况,可以显式指定另一个轴:

fsig = np.fft.fft(sinal2, axis=0)
或者将数据转换为一维数组,然后计算一维数组的FFT:

sinal2 = singal2[:,0]
fsig = np.fft.fft(sinal2)
最后,FFT图显示了连接频谱上半部分和下半部分的水平线。请参阅以解决此问题。由于您提到实际上只需要一半的频谱,您还可以将结果截断到第一个
N//2+1
点:

plt.plot( freq[0:len(freq)//2+1], np.abs(fsig[0:len(fsig)//2+1]))

天哪,我花了好长时间才找到问题!谢谢
plt.plot( freq[0:len(freq)//2+1], np.abs(fsig[0:len(fsig)//2+1]))