如何对不同周期的信号进行FFT

时间:2018-03-06 15:51:07

标签: python numpy signal-processing fft fftpack

我需要对非严格定期的步态信号执行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)

1 个答案:

答案 0 :(得分:0)

d =应该是采样频率之上的一个。这样可以让您的结果显示步态的频率,这些变化将帮助您了解步态模式的差异。