我需要对非严格周期性的步态信号执行 FFT。下面是我为双面和单面创建的代码。但是,我不知道这是否正确,因为信号不是严格周期性的——人们每走一步都不同。如果我每个周期采样相同数量的样本,那么我不知道给 fftpack.fftfreq(n,d) 参数 d 提供什么。现在我将 d 设置为样本之间的时间间隔。如果我每个时期创建相同数量的样本,那么 d 将会改变。
不知道该怎么办。这里有现有代码吗?
def plotDoubleSidedSpectrum(y,timestep,SigName,xlimit):
n=len(y)
FFT = fftpack.fft(y)
freqs = fftpack.fftfreq(n,d=timestep)
print(FFT)
fig,ax=plt.subplots()
ax.plot(freqs,np.abs(FFT)/n,'r')
ax.set_xlabel(SigName+ ': Double Sided Frequency in Hertz [Hz]')
ax.set_ylabel('Frequency Domain (Spectrum) Magnitude')
ax.set_xlim(-xlimit, xlimit)
def plotSingleSidedSpectrum(y,timestep,SigName,xlimit):
n=len(y)
FFT = fftpack.fft(y)
freqs = fftpack.fftfreq(n,d=timestep)
freqSingle = freqs[:n//2]
AmpSingle = 2*np.abs(FFT[:n//2])/n # divided by n is to normalize it
fig,ax=plt.subplots()
ax.plot(freqSingle,AmpSingle,'r')
ax.set_xlabel(SigName+':Single Sided Frequency in Hertz [Hz]')
ax.set_ylabel('Frequency Domain (Spectrum) Magnitude')
ax.set_xlim(0,xlimit)