主要内容

本页翻译不是最新的。点击此处可查看最新英文版本。

滤波器分析器

查看、分析和比较滤波器

自 R2024a 起. 建议替换 FVTool.

说明

滤波器分析器是一款交互式工具,用于可视化、分析和比较数字滤波器。使用该 App,您可以:

  • 导入滤波器对象或滤波器系数。有关详细信息,请参阅 Import Filter

  • 查看、分析和比较多个数字滤波器的响应。有关详细信息,请参阅 Analysis

  • 查看滤波器表中的滤波器列表以及滤波器信息表中每个滤波器的详细信息。

  • 在单独的显示画面窗口中绘制新滤波器分析图。

  • 单独指定滤波器采样率和分析采样率。

  • 保存当前会话的状态,包括滤波器、显示画面和分析选项,以供 App 将来的会话使用。

您可以使用 filterAnalyzer 命令行界面来添加、删除和更新滤波器、显示画面和分析选项。

Filter Analyzer app

打开 滤波器分析器 App

  • MATLAB® 工具条:在 App 选项卡的信号处理和通信下,点击 App 图标。

  • MATLAB 命令提示符:输入 filterAnalyzer

示例

全部展开

设计六阶切比雪夫 1 型低通滤波器和高通滤波器,其归一化通带边缘频率为 0.4π 弧度/采样点,通带波纹为 12 dB。将设计表示为四阶传递函数的级联。使用滤波器分析器显示滤波器的幅值和相位响应。

[zl,pl,kl] = cheby1(6,12,0.4);
[bl,al] = zp2ctf(zl,pl,kl,SectionOrder=4);
[zh,ph,kh] = cheby1(6,12,0.4,"high");
[bh,ah] = zp2ctf(zh,ph,kh,SectionOrder=4);

filterAnalyzer(bl,al,bh,ah,OverlayAnalysis="phase")

设计一个 30 阶 FIR 带通滤波器,对以 2 kHz 采样的信号进行滤波。指定一个范围从 250 Hz 到 400 Hz 的阻带。使用滤波器分析器显示滤波器传递函数的极点和零点。

iirbp = designfilt("bandpassfir",FilterOrder=30, ...
    CutoffFrequency1=250,CutoffFrequency2=400, ...
    SampleRate=2000);

filterAnalyzer(iirbp,Analysis="polezero")

设计通带波纹为 5 dB、阻带衰减为 60 dB 的十阶椭圆带通滤波器。指定 0.2π 弧度/采样点和 0.45π 弧度/采样点的通带边缘频率。将设计表示为四阶传递函数的级联。

[z,p,k] = ellip(5,5,60,[0.2 0.45]);
[bb,aa] = zp2ctf(z,p,k,SectionOrder=4);

设计一个具有 5 dB 通带波纹和不对称阻带的有限冲激响应带通滤波器,用于以 2 kHz 采样的信号。

  • 在较低频率下,阻带具有 80 dB 的衰减,过渡区域范围为 500 Hz 到 600 Hz。

  • 在较高频率下,阻带具有 40 dB 的衰减,过渡区域范围为 750 Hz 到 900 Hz。

dfir = designfilt("bandpassfir", ...
    SampleRate=2e3,PassbandRipple=5, ...
    StopbandFrequency1=500,PassbandFrequency1=600, ...
    StopbandAttenuation1=80, ...
    PassbandFrequency2=750,StopbandFrequency2=900, ...
    StopbandAttenuation2=40);

启动一个滤波器分析器会话以分析滤波器。导入滤波器。在分析器选项卡上,点击导入滤波器

  • 要导入椭圆滤波器,请选择滤波器系数。选择 bb 作为分子,选择 aa 作为分母。为滤波器名称指定 Ellip,并将采样率保留为 Normalized。点击导入

  • 要导入 FIR 滤波器,请选择滤波器对象,选择 dfir,然后点击导入并关闭

或者,使用命令行界面打开滤波器分析器。默认情况下,App 显示幅值响应。只有其中一个滤波器具有采样率,因此 App 使用归一化频率显示响应。

fa = filterAnalyzer(bb,aa,dfir,FilterNames=["ellip" "dfir"]);

添加一个显示画面,并使用它来绘制滤波器的幅值响应和相位响应。

  • 分析器选项卡上,点击新建显示画面

  • 展开分析库,使叠加分析部分可见,然后点击 Phase

  • 通过点击滤波器表上的眼睛图标添加滤波器。

或者,使用 filterAnalysisOptions 对象以及 addDisplaysshowFilters 函数。

opts = filterAnalysisOptions(OverlayAnalysis="phase");
addDisplays(fa,AnalysisOptions=opts)
showFilters(fa,true,FilterNames=["ellip" "dfir"])

添加另一个显示画面,显示指定椭圆滤波器的级联传递函数的累积幅值响应。

  • 点击新建显示画面以添加显示画面,然后点击椭圆滤波器的眼睛图标。

  • 显示选项选项卡上,点击 CTF 视图 ▼ 并选择累积

或者,使用命令行界面。

addDisplays(fa,CTFAnalysisMode="cumulative")
showFilters(fa,true,FilterNames="ellip")

再添加一个显示画面,显示 FIR 滤波器的滤波器设定模板。

  • 分析器选项卡上,点击新建显示画面,然后点击 FIR 滤波器的眼睛图标。该 App 以 Hz 为单位显示频率。

  • 对于 digitalFilter 对象,App 默认显示滤波器设定模板。要删除该模板,请在显示选项选项卡上,点击模板 ▼ 并清除设定

或者,使用命令行界面。

addDisplays(fa)
showFilters(fa,true,FilterNames="dfir")

相关示例

参数

全部展开

使用滤波器表来编辑有关正在分析的滤波器的信息。

  • 名称 - 双击此列中的条目以编辑滤波器的名称。您也可以右键点击滤波器表中的滤波器,然后选择重命名

  • 信号线 - 点击此列中的条目以编辑用于显示该滤波器响应的颜色。

  • 眼图 - 点击此列中的条目以将对应的滤波器添加到当前显示画面中或将其删除。您还可以 (自 R2024b 起)将滤波器从滤波器表拖到任何显示画面上进行可视化。

  • 游标 - 点击此列中的条目以显示或删除对应滤波器的数据游标。将光标指向此列的一个条目,以在显示一个游标和显示两个游标之间进行选择。

  • 采样率 - 点击此列中的条目以编辑对应滤波器的采样率。

要复制一个滤波器,请在滤波器表中右键点击它,然后选择复制

要从 App 中删除一个滤波器,请在滤波器表中右键点击该滤波器,然后选择删除

点击导入滤波器以导入您要分析的滤波器。滤波器分析器支持这些滤波器类型。

滤波器系数

您可以使用滤波器分析器来分析指定为分子系数和分母系数的滤波器。如果将系数指定为 L 行矩阵

B=[b11b12b1,m+1b21b22b2,m+1bL1bL2bL,m+1],A=[a11a12a1,n+1a21a22a2,n+1aL1aL2aL,n+1],

滤波器分析器假设您已将滤波器指定为一系列 L 级联传递函数 (CTF),使得滤波器的完整传递函数为

H(z)=b11+b12z1++b1,m+1zma11+a12z1++a1,n+1zn×b21+b22z1++b2,m+1zma21+a22z1++a2,n+1zn××bL1+bL2z1++bL,m+1zmaL1+aL2z1++aL,n+1zn,

其中 m ≥ 0 是滤波器的分子阶数n ≥ 0分母阶数

  • 如果 L = 1,则 BA 是指定 IIR 滤波器传递函数的行向量。

  • 如果将 BA 都指定为列向量,则滤波器分析器假设它们表示 IIR 滤波器的传递函数。

  • 如果 B 是标量,则滤波器分析器假设您将滤波器指定为所有极点 IIR 滤波器的级联,每个节的缩放增益等于 B

  • 如果 A 是标量,则滤波器分析器假设您将滤波器指定为 FIR 滤波器的级联,每个节的缩放增益等于 1/A

注意

  • 要将二阶节矩阵转换为级联传递函数,请使用 sos2ctf 函数。

  • 要将零极点增益滤波器表示转换为级联传递函数,请使用 zp2ctf 函数。

系数和增益

如果您有独立于系数值的缩放增益,可以使用“导入滤波器”对话框在滤波器分析器中输入该增益。在命令行中,您可以将系数和增益指定为 {B,A,g} 形式的元胞数组,其中 BA 如“滤波器系数”节中所定义。

增益可以是标量整体增益或节增益向量。

  • 如果增益是标量,则滤波器分析器会将该值均匀地应用于所有级联滤波器节。

  • 如果增益是向量,则它必须比级联中的滤波器节数多一个元素。滤波器分析器将一个尺度值应用于每个滤波器节,并将最后一个值均匀地应用于所有滤波器节。

如果将系数矩阵和增益向量指定为

B=[b11b12b1,m+1b21b22b2,m+1bL1bL2bL,m+1],A=[a11a12a1,n+1a21a22a2,n+1aL1aL2aL,n+1],g=[g1g2gLgS],

滤波器分析器使用传递函数

H(z)=gS(g1b11+b12z1++b1,m+1zma11+a12z1++a1,n+1zn×g2b21+b22z1++b2,m+1zma21+a22z1++a2,n+1zn××gLbL1+bL2z1++bL,m+1zmaL1+aL2z1++aL,n+1zn).

digitalFilter 对象

您可以使用滤波器分析器来分析 digitalFilter 对象。使用 designfilt 根据频率响应设定生成或编辑数字滤波器。

滤波器 System object

如果您有 DSP System Toolbox™,您可以使用滤波器分析器来分析以下滤波器 System object。

System object™
dsp.AllpassFilter (DSP System Toolbox)
dsp.AllpoleFilter (DSP System Toolbox)
dsp.CICCompensationDecimator (DSP System Toolbox)
dsp.CICCompensationInterpolator (DSP System Toolbox)
dsp.CICDecimator (DSP System Toolbox)
dsp.CICInterpolator (DSP System Toolbox)

dsp.ComplexBandpassDecimator (DSP System Toolbox) (自 R2024b 起)

dsp.CoupledAllpassFilter (DSP System Toolbox)

dsp.DCBlocker (DSP System Toolbox) (自 R2024b 起)

dsp.Delay (DSP System Toolbox)
dsp.Differentiator (DSP System Toolbox)
dsp.DigitalDownConverter (DSP System Toolbox)
dsp.DigitalUpConverter (DSP System Toolbox)
dsp.FIRDecimator (DSP System Toolbox)
dsp.FIRFilter (DSP System Toolbox)
dsp.FIRHalfbandDecimator (DSP System Toolbox)
dsp.FIRHalfbandInterpolator (DSP System Toolbox)
dsp.FIRInterpolator (DSP System Toolbox)
dsp.FIRRateConverter (DSP System Toolbox)
dsp.FarrowRateConverter (DSP System Toolbox)
dsp.FilterCascade (DSP System Toolbox)
dsp.FourthOrderSectionFilter (DSP System Toolbox) - 滤波器分析器不支持此对象的定点算术
dsp.HighpassFilter (DSP System Toolbox)
dsp.IIRFilter (DSP System Toolbox)
dsp.IIRHalfbandDecimator (DSP System Toolbox)
dsp.IIRHalfbandInterpolator (DSP System Toolbox)
dsp.LowpassFilter (DSP System Toolbox)
dsp.NotchPeakFilter (DSP System Toolbox) - 滤波器分析器不支持此 System object 的定点算术
dsp.ParallelFilter (DSP System Toolbox)
dsp.SOSFilter (DSP System Toolbox)
dsp.VariableBandwidthFIRFilter (DSP System Toolbox)
dsp.VariableBandwidthIIRFilter (DSP System Toolbox)

如果您也有 DSP HDL Toolbox™,可以使用滤波器分析器来分析这些滤波器 System object。

System object

dsphdl.FIRFilter (DSP HDL Toolbox) (自 R2024b 起)

dsphdl.BiquadFilter (DSP HDL Toolbox) (自 R2024b 起)

滤波器分析器支持以下分析类型。要访问对每个分析可用的选项,请使用分析选项工具条部分中的分析选项按钮。

频域分析

分析图标选项描述
幅值响应

幅值模式:选择 dB线性平方零相位

归一化幅值:打开或关闭

  • 频率响应是在单位圆上计算的滤波器传递函数,即 H(z) = H(e)

  • 频率响应通常是复数值。您可以选择以线性单位或分贝或其幅值的平方来绘制频率响应的幅值

  • 零相位响应 Hr(ω) 与频率响应的关系是:H(e) = Hr(ω)e(ω),其中 ϕ(ω) 是连续相位。

  • 有关详细信息,请参阅 freqzzerophase

相位响应

相位单位:选择弧度

相位显示:选择相位连续

  • 相位响应是滤波器传递函数的与频率相关的相位角 ϕ(ω)

  • 有关详细信息,请参阅 phasezangleunwrap

群延迟响应

群延迟单位:选择采样时间
  • 群延迟是相位响应关于频率的导数。

  • 群延迟是作为频率函数的滤波器的平均延迟。

  • 有关详细信息,请参阅 grpdelay

相位延迟响应

相位单位:选择弧度
  • 相位延迟是相位响应除以频率。

  • 相位延迟是滤波器对输入信号的每个频率分量施加的时滞。

  • 有关详细信息,请参阅 phasedelay

幅值估计

幅值模式:选择 dB线性平方

归一化幅值:打开或关闭

试验次数:指定数值标量

  • 滤波器分析器通过对具有均匀分布的随机频率的正弦波进行滤波并计算输出与输入之比来估计幅值响应

  • 有关详细信息,请参阅 freqrespest (DSP System Toolbox)freqrespopts (DSP System Toolbox)

舍入噪声功率谱

试验次数:指定数值标量
  • 滤波器分析器可以计算滤波器内量化误差产生的舍入噪声导致的功率谱密度。结果是基于指定次数的试验的平均值。

  • 有关详细信息,请参阅 noisepsd (DSP System Toolbox)noisepsdopts (DSP System Toolbox)

时域分析

分析图标选项描述
冲激响应

指定长度:选择自动用户定义
  • 冲激响应是滤波器对单位冲激的响应。

  • 传递函数是冲激响应的傅里叶变换。

  • 有关详细信息,请参阅 impz

阶跃响应

指定长度:选择自动用户定义
  • 阶跃响应是滤波器对阶跃输入的响应。

  • 阶跃响应是冲激响应的累积和。

  • 有关详细信息,请参阅 stepz

其他分析

分析图标选项描述
零极点图

不适用
  • 零极点图显示滤波器传递函数在 z 平面上的极点和零点。

  • 滤波器分析器使用符号 o 表示零点,使用符号 x 表示极点。

  • 有关详细信息,请参阅 zplane

滤波器系数

系数格式:选择十进制十六进制二进制
  • 系数取决于滤波器结构(级联传递函数、直接型或格型)。

  • 对于指定为级联传递函数的滤波器,滤波器分析器单独显示级联各节的分子系数、分母系数和增益。

  • 您必须有 Fixed-Point Designer™ 许可证才能使用二进制选项。

滤波器信息

不适用
  • 滤波器信息包括滤波器的结构、相位、稳定性和实现成本。

频率归一化

滤波器分析器中,您可以使用归一化频率或您选择的采样率来显示滤波器响应。要选择如何显示频率,请在分析器选项卡的分析选项部分,将频率归一化设置为以下值之一。

  • 自动 - 如果某些滤波器没有采样率,则 App 会使用以弧度/采样点为单位测量的归一化频率来分析滤波器响应。如果所有滤波器都有采样率,则 App 将使用以 Hz 为单位测量的循环频率来分析滤波器响应。

  • 归一化 - App 使用以弧度/采样点为单位测量的归一化频率来分析滤波器响应。

  • 非归一化 - App 使用以 Hz 为单位测量的循环频率来分析滤波器响应。

分析采样率

您可以通过输入分析采样率的值选择一个参考采样率,用于比较在显示画面中绘制的滤波器。您也可以通过选择最大值来选择显示画面中所有滤波器的最高采样率。要编辑采样率单位,请点击铅笔图标。

分析选项

选择分析选项以打开分析选项窗格,其中包含适用于所有频域分析的以下选项:

  • 频率刻度 - 要以线性频率刻度显示响应,请选择线性。要使用对数频率刻度,请选择对数

  • 频率范围 - 要仅显示正频率上的响应,请选择单边。要显示整个频率范围上的响应,请选择双边。要显示以零为中心的整个频率范围上的响应,请选择居中。要显示自定义频率范围上的响应,请选择用户定义

  • 点数 - 选择要用于显示频域响应的离散傅里叶变换点数。

有关每种分析类型的可用选项列表,请参阅分析

滤波器分析器支持以下显示画面选项:

  • 图例 - 点击以在活动画面或所有显示画面中显示或隐藏图例。

  • 网格 - 点击以在活动画面或所有显示画面中显示或隐藏网格。

  • 隐藏游标 - 点击以在活动画面或所有显示画面中隐藏游标。要显示与给定滤波器对应的游标,请点击滤波器表中一个信号的游标列。

  • 模板 - 点击以在活动画面中显示或隐藏频谱模板。您可以使用标准滤波器设定模板,也可以定义自己的模板。

    将自定义模板指定为一组频率和对应的一组值。要指定您的选择,请点击用户设置。您可以使用归一化频率或以 Hz、kHz、MHz 或 GHz 为单位表示频率。您可以指定感兴趣的幅值、幅值的平方或以 dB 表示的幅值。频率和值必须为有限值。

    注意

    要使用标准设定模板,滤波器必须具有设计元数据。要在设计中包含元数据,请使用 digitalFilter 对象或滤波器 System object。

如果您将滤波器指定为传递函数的级联,则可以选择滤波器分析器显示逐节响应的方式。此选项仅适用于具有一个滤波器的显示画面。在显示选项选项卡中,点击 CTF 视图以在显示整体响应和逐节显示响应之间切换。点击 CTF 视图 ▼ 以选择以下选项之一:

  • 单个 - 显示单个节的滤波器响应。

  • 累积 - 显示累积节的滤波器响应。

  • 用户定义 - 显示选定节或节组合的滤波器响应。要指定您的选择,请点击用户设置并将指定为一个元胞数组。

    例如,{[1 2 3] [4 5 6]} 指示 App 显示节 1、2 和 3 的级联以及节 4、5 和 6 的级联的响应。

编程用途

全部展开

filterAnalyzer(filt1,...,filtn) 绘制滤波器分析器中指定滤波器的响应。

  • 如果滤波器分析器未打开,此语法将打开该 App 并绘制响应。

  • 如果滤波器分析器已打开,此语法将在该 App 的新显示画面中绘制响应。

将输入滤波器指定为系数矩阵、元胞数组、digitalFilter 对象或 System object。有关详细信息,请参阅导入滤波器

filterAnalyzer(filt1,...,filtn,Name=Value) 使用一个或多个名称-值参量指定非默认选项。

filterAnalyzer(filename) 打开存储在指定 MAT 文件 filename 中的滤波器分析器会话。如果滤波器分析器已打开,此语法会用新会话替换当前 App 会话。

filterAnalyzer(filename,"append") 将存储在指定 MAT 文件 filename 中的滤波器追加到当前滤波器分析器会话中。如果滤波器分析器未打开,则此语法等效于上述语法。

[fa,dispnums] = filterAnalyzer(___) 使用上述语法中输入参量的任意组合,返回滤波器分析器的句柄对象以及与新添加的显示画面对应的编号。您也可以通过在命令行中键入 fa = getFilterAnalyzerHandle 来获得句柄 fa

版本历史记录

在 R2024a 中推出

全部展开