比如产生这样的正弦信号,做FFT变换。取得频谱上三个频率分量对应的下标,根据下标求出相应的频率值。
t = np.arange(0,N-1)*T_interval
sig = np.sin(200*np.pi*t)+np.sin(500*2*np.pi*t)+np.sin(700*2*np.pi*t)
对于幅度就是用巴特沃斯滤波器,计算过滤出的信号时域上的峰值,求幅度。
def calculate_amp(freq,sig,Fs,N):
nyq=0.5*Fs
j=0
signature=[None]*len(freq)
peak=[None]*len(freq)
for i in freq:
#print i
low=(i-10)/nyq
high=(i+10)/nyq
b,a=butter(3,[low,high],btype='band')
#print b,a
signature[j]=lfilter(b,a,sig)
maximum=max(signature[j])
minimum=min(signature[j])
peak[j]=(abs(maximum)+abs(minimum))/2
j=j+1
return peak
如果这个正弦信号,频率都为1,2,这些比较小的数值的话,结果都是正确的。但是如果
sig = 100*np.sin(200*np.pi*t)+20*np.sin(500*2*np.pi*t)+np.sin(700*2*np.pi*t)
幅度结果就会相差很大很大。
为什么呢