微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 firwin 应用带通滤波器

如何解决使用 firwin 应用带通滤波器

我想将带有 firwin 的带通滤波器应用于三音信号。三种音调分别为 7、11 和 30 Hz。具体来说,我需要修改截止频率,以便过滤掉第一个和最后一个音调(7 和 30hz)。据我了解,f1 和 f2 应该是带通滤波器的边缘。如果我将它们设置为 10 和 20 hz,它会给我一个错误,告诉我我不能将截止设置高于 fs/2。我不理解错误,因为我之前将 fs 设置为 100hz。有什么办法可以设置截止频率,以便仅通过 11hz 吗?

f1,f2 = 0.5,0.8 
# f1,f2 = 10.0,20.0

bandpass_coeff = signal.firwin(N_taps,[f1,f2],pass_zero=False) 

freqzPlot(bandpass_coeff,'bandpass filter with firwin ' + str(N_taps) + ' taps')

filterHighest(Fs,Fc,bandpass_coeff)


def generateThreetones(Fs,interval,freq1 = 7.0,amp1 = 5.0,phase1 = 0.0,freq2 = 11.0,amp2 = 3.0,phase2 = 5.0,freq3 = 30.0,amp3 = 4.0,phase3 = 11.0):

dt = 1.0/Fs                          # sampling period (increment in time)
time = np.arange(0,dt)    # time vector over interval



# generate the sin signal
x = amp1*np.sin(2*math.pi*freq1*time+phase1)+amp2*np.sin(2*math.pi*freq2*time+phase2)+amp3*np.sin(2*math.pi*freq3*time+phase3)
return time,x

解决方法

您应该将 Fs 传递给 signal.firwin。类似的东西:

bandpass_coeff = signal.firwin(N_taps,[f1,f2],pass_zero=False,fs=Fs)

否则 fs 将使用默认值,根据文档为 2。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。