【问题标题】:Chebyshev Type 1 Low-pass filter in matlabmatlab中的Chebyshev Type 1低通滤波器
【发布时间】:2017-08-25 23:30:37
【问题描述】:

我正在尝试使用 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。最后但同样重要的是,它应该在我的信号上调用它,名称为信号。

在 matlab 中实现低通 Chebyshev Type 1 滤波器是否还有更多内容,或者我只是将designfilt 的输入混合在一起?

【问题讨论】:

    标签: matlab filter signal-processing


    【解决方案1】:

    关于您的问题,这里有几个:

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

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

    3. 在这种情况下使用 'PassbandFrequency' 而不是 'CutoffFrequency'。 Chebyshev 滤波器的通带具有指定的最大允许纹波,跨越该频带。在低通滤波器中,从概念上讲,它是频率末端的截止频率,但在这里它理解为将频率从 0 传递到您指定的截止频率。

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

    这是采样率为 100 Hz 时的样子。

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

    您最好直接使用cheby1(该方法)来设计您的滤波器系数,然后将其传递给filter。这是documentation。这样一来,混合和匹配的选项就没有那么多了,参考文献可能有助于更早地磨练任何差异。

    【讨论】:

    • 'DesignMethod'下有使用cheby1的选项,所以我这就是我尝试使用它的原因。
    • 好的,但是你必须将它作为命名值对传递,而不是作为第一个参数。请参阅help designfilt 的示例 2。我会更新我的答案。
    • 没有汗水。感谢您对'DesignMethod' 的后续评论;因为它,我了解了更多关于designfilt 的信息。
    猜你喜欢
    • 2018-03-28
    • 1970-01-01
    • 2013-03-29
    • 2021-03-08
    • 2016-02-13
    • 1970-01-01
    • 2017-09-17
    • 1970-01-01
    • 2015-05-03
    相关资源
    最近更新 更多