信号处理问题 (用python或者matlab)

比如产生这样的正弦信号,做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)
幅度结果就会相差很大很大。
为什么呢

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 以帮助更多的人 ^-^