我正在尝试使用matlab中的designfilt来设计Type 1 Chebyshev低通滤波器,但是,我不断遇到如下错误:
使用designfilt时出错(第411行)
过滤器响应无效。
我的代码相对简单:
filt = designfilt('cheby1','FilterOrder',3,'CutoffFrequency', 20, 'PassbandRipple', 10);
filtered_signal = filter(filt, signal);
这应该做的是,创建一个Chebyshev Type 1滤波器,其阶数为3,截止频率为20 Hz,通带纹波为10 Hz。最后,但并非最不重要的是,它应该在我的信号上调用它,名称为signal。
在matlab中实现低通Chebyshev Type 1滤波器还有更多的东西,或者我只是混淆了designfilt
的输入?
答案 0 :(得分:0)
关于你的问题,有一些问题:
'cheby1'
不是designfilt
第一个参数(MATLAB 2014)的允许字符串之一。如果您键入help designfilt
,它将为您提供允许的不同选项列表。我看到的最近的是:'lowpassiir'
。
结帐示例3,特别是将参数'designmethod'
与命名过滤器(例如'cheby1'
)一起使用。
'PassbandRipple
'未以Hz为单位指定,但以dB为单位。它不是频率范围,而是指定在指定频率范围内纹波的所需幅度响应。
在这种情况下,请使用'PassbandFrequency'
代替'CutoffFrequency'
。切比雪夫滤波器在该频率范围内具有允许指定的最大纹波的通带。在低通滤波器中,概念上它在频率的末尾被截止,但是在这里它被理解为将频率从0传递到您指定的截止频率。
您以Hz为单位指定频率单位(即未归一化为0到1),但未指定采样频率。您可以将频率指定为标准化单位,不包括采样频率,否则需要包括
以下是采样率为100 Hz时的样子。
filt = designfilt('lowpassiir', 'FilterOrder', 3, 'PassbandFrequency', 20,...
'PassbandRipple', 10, 'SampleRate', 100, 'DesignMethod', 'cheby1');
最好直接使用cheby1
(方法)来设计滤波器系数,然后将其传递给filter
。这是documentation。通过这种方式,混合和匹配的选项并不多,参考文献可以帮助我们更好地解决任何差异。