我正在尝试使用python中的scipy库创建一个带阻Butterworth滤波器,您能告诉我我做错了什么吗? fc1
是1750
,fc2
是4100
,fs
是30000
和ft
是150
。我已经定义了它们(fc
是截止频率间隔之外的所有事物的并集,fc1
和fc2
,ft
是时间频率,rp
和{ {1}}是通带和阻带纹波,rs
是幅度,a
,wp(passband)
和ws(stopband)
是归一化频率)。
我的错误:
wn
这是我到目前为止所拥有的代码: 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
ValueError: Wn must specify start and stop frequencies for bandpass or bandstop filter.
答案 0 :(得分:0)
请考虑改善您的问题,因为fc
及其朋友可以是任何人,因此尚不清楚您要实现什么目标。
从语法和信号处理的角度来看,您需要定义一个带通/带阻滤波器,您应该指定4个点,因为该滤波器具有类似钟形的形状。请参考buttord parameters:
wp
,ws
:浮点数
带阻:wp = [0.1, 0.6]
,ws = [0.2, 0.5]
因此wp
和ws
的形状应为(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
,因此通过范围完全包括停止范围。