原始数据位于google drive。它是两列数据,t和x。我做了以下离散fft变换。 我不太明白主峰(尖峰)的高度低于侧峰。第二个子图显示确实尖峰(最接近2.0)是主要频率。代码和图如下:
import numpy as np
import math
import matplotlib.pyplot as plt
from scipy.fftpack import fft,fftfreq
freqUnit=0.012/(2*np.pi)
data = np.loadtxt(fname='data.txt')
t = data[:,0]
x = data[:,1]
n=len(t)
d=t[1]-t[0]
fig=plt.figure()
ax1=fig.add_subplot(3,1,1)
ax2=fig.add_subplot(3,1,2)
ax3=fig.add_subplot(3,1,3)
y = abs(fft(x))
freqs = fftfreq(n, d)/freqUnit
ax1.plot(t, x)
ax2.plot(t, x)
ax2.set_xlim(40000,60000)
ax2.set_ylim(0.995,1.005)
ax3.plot(freqs,y,'-.')
ax3.set_xlim(0,4)
ax3.set_ylim(0,1000)
plt.show()
答案 0 :(得分:0)
您需要在FFT之前应用window function,否则您将看到如上所述的假象,特别是频谱中的峰值与FFT bin中心不直接对应的位置。
有关详细信息,请参阅"Why do I need to apply a window function to samples when building a power spectrum of an audio signal?"问题。