主要内容

designNotchPeakIIR

设计并实现高阶巴特沃斯陷波或峰值 IIR 滤波器

自 R2023b 起

说明

[B,A] = designNotchPeakIIR 设计一个滤波器阶数为 2、中心频率为 0.5 弧度/秒、质量因子为 2.5 的峰值 IIR 滤波器。

BA 分别包含峰值 IIR 滤波器的分子和分母的二阶节系数。数组 BA 的大小为 N×3,其中 N 是滤波器节数,等于滤波器阶数的一半。

默认情况下,System object™ 参量为 false。要实现滤波器,请将滤波器系数赋给 dsp.SOSFilter 对象。

[B,A] = designNotchPeakIIR(Name=Value) 使用一个或多个名称-值参量指定选项。

例如,[B,A] = designNotchPeakIIR(Response="notch",FilterOrder=10,CenterFrequency=0.55,Bandwidth=0.3) 设计一个滤波器阶数为 10、中心频率为 0.55 弧度/秒、3-dB 带宽为 0.3 的陷波 IIR 滤波器。

当您仅指定部分滤波器参数时,函数通过将其他设计参数设置为其默认值来设计滤波器。

此函数在特定条件下支持代码生成。有关详细信息,请参阅代码生成

示例

当您指定 HasScaleValues 参量时,[B,A,SV] = designNotchPeakIIR(Name=Value) 还会返回缩放值。当您将该参量设置为 false 时,SV 是一个由 1 组成的向量;当您将其设置为 true 时,SV 是一个缩放值向量。

filtObj = designNotchPeakIIR(Name=Value) 设计陷波或峰值 IIR 滤波器并实现 dsp.SOSFilter 对象。

当您将 SystemObject 参量设置为 true 时,应用此语法。

示例

示例

全部折叠

使用 designNotchPeakIIR 函数设计一个阶数为 14、中心频率为 0.2 弧度/秒的峰值滤波器。通过将 HasScaleValues 属性设置为 true 来输出缩放值。

[b,a,sv] = designNotchPeakIIR(FilterOrder=14, CenterFrequency=0.2,...
    HasScaleValues=true)
b = 7×3

    1.0000    2.0000    1.0000
    1.0000   -2.0000    1.0000
    1.0000    2.0000    1.0000
    1.0000   -2.0000    1.0000
    1.0000    2.0000    1.0000
    1.0000   -2.0000    1.0000
    1.0000         0   -1.0000

a = 7×3

    1.0000   -1.4026    0.9374
    1.0000   -1.7004    0.9549
    1.0000   -1.3637    0.8373
    1.0000   -1.6111    0.8736
    1.0000   -1.3788    0.7823
    1.0000   -1.5195    0.8103
    1.0000   -1.4366    0.7757

sv = 8×1

    0.1220
    0.1220
    0.1166
    0.1166
    0.1133
    0.1133
    0.1122
    1.0000

将滤波器设计系数赋给 dsp.SOSFilter 对象。

peakFilter = dsp.SOSFilter(b,a,ScaleValues=sv)
peakFilter = 
  dsp.SOSFilter with properties:

            Structure: 'Direct form II transposed'
    CoefficientSource: 'Property'
            Numerator: [7×3 double]
          Denominator: [7×3 double]
       HasScaleValues: true
          ScaleValues: [8×1 double]

  Show all properties

创建一个 dsp.DynamicFilterVisualizer 对象以显示滤波器的幅值响应。

dfv = dsp.DynamicFilterVisualizer(NormalizedFrequency=true);
dfv(peakFilter)

创建一个 spectrumAnalyzer 对象以可视化输入和输出频谱。

scope = spectrumAnalyzer(SampleRate=2,PlotAsTwoSidedSpectrum=false,...
    ChannelNames=["Input Signal","Filtered Signal"]);

流式传入随机数据,并使用您设计的峰值滤波器对信号进行滤波。

for i = 1:1000
    x = randn(1024, 1);
    y = peakFilter(x);
    scope(x,y);
end

使用 designNotchPeakIIR 函数设计一个阶数为 48、带宽为 0.15 的陷波滤波器对象。

notchFilter = designNotchPeakIIR(FilterOrder=48,Bandwidth=0.15,...
    Response='notch',SystemObject=true)
notchFilter = 
  dsp.SOSFilter with properties:

            Structure: 'Direct form II transposed'
    CoefficientSource: 'Property'
            Numerator: [24×3 double]
          Denominator: [24×3 double]
       HasScaleValues: false

  Show all properties

创建一个 dsp.DynamicFilterVisualizer 对象以显示滤波器的幅值响应。

dfv = dsp.DynamicFilterVisualizer(NormalizedFrequency=true,YLimits=[-250 50]);
dfv(notchFilter)

创建一个 spectrumAnalyzer 对象以可视化输入和输出频谱。

scope = spectrumAnalyzer(SampleRate=2,PlotAsTwoSidedSpectrum=false,...
    ChannelNames=["Input Signal","Filtered Signal"]);

流式传入随机数据,并使用陷波滤波器对信号进行滤波。

for i = 1:1000
    x = randn(1024, 1);
    y = notchFilter(x);
    scope(x,y);
end

名称-值参数

全部折叠

将可选参量对组指定为 Name1=Value1,...,NameN=ValueN,其中 Name 是参量名称,Value 是对应的值。名称-值参量必须出现在其他参量之后,但对各个参量对组的顺序没有要求。

示例: designNotchPeakIIR(FilterOrder=14,CenterFrequency=0.2,HasScaleValues=true)

滤波器响应,指定为 "peak""notch"

数据类型: char | string

陷波或峰值 IIR 滤波器的阶数 N,指定为非负偶数。

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

陷波或峰值 IIR 滤波器的中心频率 ω0,以弧度/秒为单位,指定为以下范围内的归一化标量:

数据类型: single | double

陷波或峰值 IIR 滤波器的质量因子(或 Q 因子)Q,指定为正标量。Q 因子定义为中心频率 ω0 除以带宽 bw,即 Q=ω0/bw。Q 因子越高,对应的陷波或峰值越窄。

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

陷波或峰值 IIR 滤波器的 3-dB 带宽 bw,指定为范围 [0,1] 内的归一化标量。

数据类型: single | double

为每个节计算缩放值的选项,指定为 truefalse。当您将此属性设置为 true 时,函数返回可在二阶节滤波器每个节之前和之后应用的缩放值。

数据类型: logical

创建 System object 的选项,指定为:

  • false - 函数返回二阶节系数矩阵。

  • true - 函数返回 dsp.SOSFilter 对象。

数据类型: logical

用于在 MATLAB 中打印整个函数调用的选项,指定为以下项之一:

  • false - 函数不打印函数调用。

  • true - 函数打印整个函数调用,包括您在调用函数时未指定的 Name=Value 参量的默认值。

    使用此参量可查看函数用于设计和实现滤波器的所有值。

数据类型: logical

输出参量

全部折叠

陷波或峰值 IIR 滤波器的分子系数,以 N/2×3 数组形式返回,其中 N/2 是滤波器节数,N 是滤波器阶数。

数据类型: double

陷波或峰值 IIR 滤波器的分母系数,以 N/2×3 数组形式返回,其中 N/2 是滤波器节数,N 是滤波器阶数。

分母首项系数始终为 1。

数据类型: double

节间缩放值,以长度为 N/2+1 的列向量形式返回,其中 N/2 是滤波器节数,N 是滤波器阶数。

如果您将 HasScaleValues 设置为 true,则 SV 是由 1 组成的列向量。

数据类型: double

滤波器对象,以 dsp.SOSFilter 对象形式返回。根据您在调用函数时将 HasScaleValues 参量设置为 true 还是 falsedesignNotchPeakIIR 函数会更新 dsp.SOSFilter 对象中的 HasScaleValuesScaleValues 参量。

参考

[1] Orfanidis , SJ. High-Order Digital Parametric Equalizer Design. 2005, pp. 1026–46.

扩展功能

全部展开

版本历史记录

在 R2023b 中推出