【问题标题】:Bandstop butterworth filter带阻巴特沃斯滤波器
【发布时间】:2020-08-24 21:02:31
【问题描述】:

我正在尝试使用 python 中的 scipy 库创建一个带阻巴特沃斯滤波器,你能告诉我我做错了什么吗? fc11750fc24100fs30000ft150。我已经定义了它们(fc 是截止频率区间之外的所有事物的并集,fc1fc2ft 是时间频率,rprs 是通带和阻带波纹, a 是幅度,wp(passband)ws(stopband)wn 是归一化频率。

我的错误:

ValueError: Wn must specify start and stop frequencies for bandpass or bandstop filter.

这是我到目前为止所拥有的代码: fs = 33000 r = 55 英尺 = 150 rp = 0.3 rs = 55 订单 = 3 a=1 fc1 = 1750 fc2 = 4100 fc=np.union1d(np.array([1,1750]),([4100,10000])) wp = (fc1-ft/2) *2/fs

ws = (fc2 + ft/2) *2/fs

N, wn = sp.buttord(wp, ws, rp, rs)

b, a = sp.butter(N, wn , btype = "bandstop")

w,h = sp.freqz(b, a,  worN=512, plot=None)

f=(fs/2)*w/(np.pi)

plt.figure()

plt.plot(f,abs(h))

【问题讨论】:

    标签: python filtering signal-processing butterworth


    【解决方案1】:

    请考虑改进您的问题,因为 fc 及其朋友可能是任何人,因此不清楚您要达到什么目的。
    从语法和信号处理的角度来看,需要定义一个带通/带阻滤波器,您应该指定 4 个点,因为该滤波器具有钟形形状。请参考buttord parameters:

    wp, ws : 浮动
    带阻:wp = [0.1, 0.6]ws = [0.2, 0.5]

    所以wpws 的形状应该是(2,)。
    要使示例中的语法正确,请更改

    wp = (fc1-ft/2) *2/fs
    ws = (fc2 + ft/2) *2/fs
    

    wp = [(fc1-ft/2) *2/fs, (fc2 + ft) *2/fs]
    ws = [(fc1+ft) *2/fs, (fc2 + ft/2) *2/fs]
    

    当然,频率是任意选择的,但请记住,它必须是 wp_low < ws_low < ws_high < wp_high 所以通过范围完全包括停止范围。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多