主要内容

fdesign.lowpass

低通滤波器设定

注意

现在,使用 fdesign.lowpassdesign 函数进行多级滤波器设计要求您将 SystemObject 标志设置为 true,除非最终设计是单级滤波器而不是级联滤波器。此设置生成 dsp.FilterCascade 对象而不是 mfilt.cascade 对象。

有关详细信息,请参阅版本历史记录

语法

D = fdesign.lowpass
D = fdesign.lowpass(SPEC)
D = fdesign.lowpass(SPEC,specvalue1,specvalue2,...)
D = fdesign.lowpass(specvalue1,specvalue2,specvalue3,specvalue4)
D = fdesign.lowpass(...,Fs)
D = fdesign.lowpass(...,MAGUNITS)

描述

D = fdesign.lowpass 构造一个低通滤波器设定对象 D,对默认设定选项 'Fp,Fst,Ap,Ast' 应用默认值。

D = fdesign.lowpass(SPEC) 构造对象 D 并将 Specification 属性设置为 SPEC 中的条目。SPEC 中的条目表示各种滤波器响应特征,例如控制滤波器设计的滤波器阶数。SPEC 的有效条目如下所示。选项不区分大小写。

注意

标有星号的设定选项需要 DSP System Toolbox™ 软件。

  • 'Fp,Fst,Ap,Ast'(默认选项)

  • 'N,F3db'

  • 'N,F3db,Ap' *

  • 'N,F3db,Ap,Ast' *

  • 'N,F3db,Ast' *

  • 'N,F3db,Fst' *

  • 'N,Fc'

  • 'N,Fc,Ap,Ast'

  • 'N,Fp,Ap'

  • 'N,Fp,Ap,Ast'

  • 'N,Fp,Fst,Ap' *

  • 'N,Fp,F3db' *

  • 'N,Fp,Fst'

  • 'N,Fp,Fst,Ast' *

  • 'N,Fst,Ap,Ast' *

  • 'N,Fst,Ast'

  • 'Nb,Na,Fp,Fst' *

滤波器设定定义如下:

  • Ap - 通带中允许的波纹量,单位为分贝(默认单位)。也称为 Apass。

  • Ast - 阻带中的衰减,单位为分贝(默认单位)。也称为 Astop。

  • F3db - 比通带值低 3 dB 的点的截止频率。以归一化频率单位指定。

  • Fc - 比通带值低 6 dB 的点的截止频率。以归一化频率单位指定。

  • Fp - 通带结束时的频率。以归一化频率单位指定。也称为 Fpass。

  • Fst - 阻带开始时的频率。以归一化频率单位指定。也称为 Fstop。

  • N - 滤波器阶数。

  • NaNb 是分母和分子的阶数。

在图形上,滤波器设定与下图所示类似。

设定值(如 FpFst)之间的区域是过渡区域,其中滤波器响应未显式定义。

D = fdesign.lowpass(SPEC,specvalue1,specvalue2,...) 构造对象 D,并在构造时使用 specvalue1specvalue2 等为 SPEC 中的所有设定变量设置设定值。

D = fdesign.lowpass(specvalue1,specvalue2,specvalue3,specvalue4) 使用您以输入参量 specvalue1,specvalue2,specvalue3,specvalue4 形式提供的设定来构造对象 D,其中包含默认 Specification 属性 'Fp,Fst,Ap,Ast' 的值。

D = fdesign.lowpass(...,Fs) 添加参量 Fs(以 Hz 为单位指定)来定义要使用的采样频率。在这种情况下,设定中的所有频率也以 Hz 为单位。

D = fdesign.lowpass(...,MAGUNITS) 指定您在输入参量中提供的任何幅值设定的单位。MAGUNITS 可以是以下项之一:

  • 'linear' - 以线性单位指定幅值

  • 'dB' - 以 dB(分贝)为单位指定幅值

  • 'squared' - 以功率单位指定幅值

当您省略 MAGNUNITS 参量时,fdesign 假定所有幅值都以分贝为单位。请注意,fdesign 将所有幅值设定都以分贝为单位存储(在必要时转换为分贝),而无论您以何种方式指定幅值。

示例

全部折叠

设计一个具有低通和高通频率响应的巴特沃斯滤波器。滤波器设计过程如下:

  1. 使用 fdesign 函数指定滤波器设计设定。

  2. 选取 designmethods 函数提供的一种设计方法。

  3. 要确定可选的设计选项,请使用 designoptions 函数。

  4. 使用 design 函数设计滤波器。

低通滤波器

使用 fdesign.lowpass 构造一个默认低通滤波器设计设定对象。

designSpecs = fdesign.lowpass
designSpecs = 
  lowpass with properties:

               Response: 'Lowpass'
          Specification: 'Fp,Fst,Ap,Ast'
            Description: {4×1 cell}
    NormalizedFrequency: 1
                  Fpass: 0.4500
                  Fstop: 0.5500
                  Apass: 1
                  Astop: 60

使用 designmethods 函数确定可用的设计方法。要设计巴特沃斯滤波器,请选取 butter

designmethods(designSpecs,SystemObject=true)
Design Methods that support System objects for class fdesign.lowpass (Fp,Fst,Ap,Ast):


butter
cheby1
cheby2
ellip
equiripple
ifir
kaiserwin
multistage

在设计滤波器时,您可以指定其他设计选项。使用 designoptions 函数查看选项列表。此函数还会显示滤波器使用的默认设计选项。

designoptions(designSpecs,'butter',SystemObject=true)
ans = struct with fields:
           FilterStructure: {'df1sos'  'df2sos'  'df1tsos'  'df2tsos'  'cascadeallpass'  'cascadewdfallpass'}
              SOSScaleNorm: 'ustring'
              SOSScaleOpts: 'fdopts.sosscaling'
              MatchExactly: {'passband'  'stopband'}
    DefaultFilterStructure: 'df2sos'
       DefaultMatchExactly: 'stopband'
       DefaultSOSScaleNorm: ''
       DefaultSOSScaleOpts: [1×1 fdopts.sosscaling]

使用 design 函数设计滤波器。将 'butter' 和变量 designSpecs 给定的设定作为输入参量传递。将 'matchexactly' 设计选项指定为 'passband'

lpFilter = design(designSpecs,'butter',matchexactly='passband',SystemObject=true)
lpFilter = 
  dsp.SOSFilter with properties:

            Structure: 'Direct form II'
    CoefficientSource: 'Property'
            Numerator: [13×3 double]
          Denominator: [13×3 double]
       HasScaleValues: true
          ScaleValues: [0.4095 0.3669 0.3330 0.3059 0.2841 0.2666 0.2525 0.2414 0.2328 0.2263 0.2219 0.2193 0.4674 1]

  Show all properties

可视化所设计滤波器的频率响应。

filterAnalyzer(lpFilter)

高通滤波器

使用 fdesign.highpass 构造一个高通滤波器设计设定对象。将阶数指定为 7,将 3 dB 频率指定为 0.6π 弧度/采样点。

designSpecs = fdesign.highpass('N,F3dB',7,.6)
designSpecs = 
  highpass with properties:

          Specification: 'N,F3dB'
               Response: 'Highpass'
            Description: {2×1 cell}
    NormalizedFrequency: 1
            FilterOrder: 7
                   F3dB: 0.6000

确定可用的设计方法。要设计巴特沃斯滤波器,请选取 butter

designmethods(designSpecs,SystemObject=true)
Design Methods that support System objects for class fdesign.highpass (N,F3dB):


butter
maxflat

在设计滤波器时,您可以指定其他设计选项。使用 designoptions 函数查看选项列表。此函数还会显示滤波器使用的默认设计选项。

designoptions(designSpecs,'butter',SystemObject=true)
ans = struct with fields:
           FilterStructure: {'df1sos'  'df2sos'  'df1tsos'  'df2tsos'  'cascadeallpass'  'cascadewdfallpass'}
              SOSScaleNorm: 'ustring'
              SOSScaleOpts: 'fdopts.sosscaling'
    DefaultFilterStructure: 'df2sos'
       DefaultSOSScaleNorm: ''
       DefaultSOSScaleOpts: [1×1 fdopts.sosscaling]

要设计巴特沃斯滤波器,请使用 design 函数并将 'butter' 指定为输入。将 'FilterStructure' 设置为 'cascadeallpass'

hpFilter = design(designSpecs,'butter',FilterStructure='cascadeallpass',SystemObject=true)
hpFilter = 
  dsp.CoupledAllpassFilter with properties:

               Structure: 'Minimum multiplier'
         PureDelayBranch: 0
    AllpassCoefficients1: {2×1 cell}
    AllpassCoefficients2: {2×1 cell}
                   Gain1: '-1'
                   Gain2: '1'

可视化高通频率响应。

filterAnalyzer(hpFilter)

对由两个正弦波组成的离散时间信号进行低通滤波。

创建一个低通滤波器设定对象。将通带频率指定为 0.15π 弧度/采样,阻带频率指定为 0.25π 弧度/采样。指定 1 dB 的允许通带波纹和 60 dB 的阻带衰减。

d = fdesign.lowpass("Fp,Fst,Ap,Ast",0.15,0.25,1,60);

查询您的滤波器设定对象 d 的有效设计方法。

designmethods(d)
Design Methods for class fdesign.lowpass (Fp,Fst,Ap,Ast):


butter
cheby1
cheby2
ellip
equiripple
ifir
kaiserwin
multistage

创建一个 FIR 等波纹滤波器并查看滤波器频率响应。

Hd = design(d,"equiripple");
freqz(Hd.Numerator,1)

Figure contains 2 axes objects. Axes object 1 with title Phase, xlabel Normalized Frequency (\times\pi rad/sample), ylabel Phase (degrees) contains an object of type line. Axes object 2 with title Magnitude, xlabel Normalized Frequency (\times\pi rad/sample), ylabel Magnitude (dB) contains an object of type line.

创建一个信号,该信号由两个离散时间正弦信号(频率分别为 π/8π/4 弧度/采样、振幅分别为 1 和 0.25)之和组成。使用 FIR 等波纹滤波器对象 Hd 对离散时间信号进行滤波。

n = 0:159;
x = (0.25*cos((pi/8)*n)+sin((pi/4)*n));
y = filter(Hd,x);

使用汉明窗计算原始信号和滤波后信号的修正周期图。验证高频分量已滤除。

periodogram([x;y]',hamming(length(x)),1024)
legend("Original Signal","Filtered Signal")

Figure contains an axes object. The axes object with title Periodogram Power Spectral Density Estimate, xlabel Normalized Frequency ( times pi rad/sample), ylabel Power/Frequency (dB/(rad/sample)) contains 2 objects of type line. These objects represent Original Signal, Filtered Signal.

创建一个阶数为 10、6-dB 频率为 9.6 kHz、采样频率为 48 kHz 的滤波器。查看可用的设计方法。

d = fdesign.lowpass('N,Fc',10,9600,48000);
designmethods(d)
Design Methods for class fdesign.lowpass (N,Fc):


window

唯一有效的设计方法是 FIR 加窗方法。设计滤波器。

Hd = design(d);

显示滤波器幅值响应。-6 dB 点位于 9.6 kHz 处,符合预期。

freqz(Hd)

Figure contains 2 axes objects. Axes object 1 with title Phase, xlabel Normalized Frequency (\times\pi rad/sample), ylabel Phase (degrees) contains an object of type line. Axes object 2 with title Magnitude, xlabel Normalized Frequency (\times\pi rad/sample), ylabel Magnitude (dB) contains an object of type line.

创建一个 FIR 等波纹滤波器,其通带频率为 0.2π 弧度/采样,阻带频率为 0.25π 弧度/采样,通带波纹为 1 dB,阻带衰减为 60 dB。设计具有 20 dB/ 弧度/采样线性阻带的滤波器。

D = fdesign.lowpass('Fp,Fst,Ap,Ast',0.2,0.25,1,60);
Hd = design(D,'equiripple','StopbandShape','linear','StopbandDecay',20);

可视化该滤波器的频率响应。

freqz(Hd)

Figure contains 2 axes objects. Axes object 1 with title Phase, xlabel Normalized Frequency (\times\pi rad/sample), ylabel Phase (degrees) contains an object of type line. Axes object 2 with title Magnitude, xlabel Normalized Frequency (\times\pi rad/sample), ylabel Magnitude (dB) contains an object of type line.

版本历史记录

在 R2009a 中推出

全部展开

另请参阅

| |