在matlab中的Chebyshev Type 1低通滤波器

时间:2017-08-25 23:30:37

标签: matlab filter signal-processing

我正在尝试使用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的输入?

1 个答案:

答案 0 :(得分:0)

关于你的问题,有一些问题:

  1. 'cheby1'不是designfilt第一个参数(MATLAB 2014)的允许字符串之一。如果您键入help designfilt,它将为您提供允许的不同选项列表。我看到的最近的是:'lowpassiir'。 结帐示例3,特别是将参数'designmethod'与命名过滤器(例如'cheby1')一起使用。

  2. 'PassbandRipple'未以Hz为单位指定,但以dB为单位。它不是频率范围,而是指定在指定频率范围内纹波的所需幅度响应。

  3. 在这种情况下,请使用'PassbandFrequency'代替'CutoffFrequency'。切比雪夫滤波器在该频率范围内具有允许指定的最大纹波的通带。在低通滤波器中,概念上它在频率的末尾被截止,但是在这里它被理解为将频率从0传递到您指定的截止频率。

  4. 您以Hz为单位指定频率单位(即未归一化为0到1),但未指定采样频率。您可以将频率指定为标准化单位,不包括采样频率,否则需要包括

  5. 以下是采样率为100 Hz时的样子。

    filt = designfilt('lowpassiir', 'FilterOrder', 3, 'PassbandFrequency', 20,...
                      'PassbandRipple', 10, 'SampleRate', 100, 'DesignMethod', 'cheby1');
    

    最好直接使用cheby1(方法)来设计滤波器系数,然后将其传递给filter。这是documentation。通过这种方式,混合和匹配的选项并不多,参考文献可以帮助我们更好地解决任何差异。