【问题标题】:Applying a bandpass filter with firwin使用 firwin 应用带通滤波器
【发布时间】:2021-01-27 18:15:11
【问题描述】:

我想将带有 firwin 的带通滤波器应用于三音信号。这三种音调分别为 7、11 和 30 赫兹。具体来说,我需要修改截止频率,以便过滤掉第一个和最后一个音调(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, interval, 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

【问题讨论】:

    标签: python scipy signals bandpass-filter


    【解决方案1】:

    您应该将 Fs 传递给 signal.firwin。比如:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-06
      • 1970-01-01
      • 2016-02-29
      • 2015-03-05
      • 2019-04-09
      • 2017-01-05
      • 1970-01-01
      相关资源
      最近更新 更多