主要内容

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

filterAnalyzer

使用滤波器分析器分析滤波器

自 R2024a 起

说明

filterAnalyzer 对象使用滤波器分析器分析输入滤波器的响应。

创建对象

描述

filterAnalyzer 打开滤波器分析器

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

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

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

filterAnalyzer(filt1,...,filtn,Name=Value) 使用一个或多个名称-值参量指定其他选项。例如,您可以指定滤波器名称、采样率或分析选项。

示例

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

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

[fa,dispnums] = filterAnalyzer(___) 使用上述语法中输入参量的任意组合,返回滤波器分析器的句柄对象以及与新添加的显示画面对应的编号。

您也可以通过在命令行中键入 fa = getFilterAnalyzerHandle 来获得句柄 fa

示例

输入参量

全部展开

输入滤波器,每个滤波器都指定为一对系数矩阵、一个元胞数组或一个 digitalFilter 对象。

有关详细信息,请参阅滤波器分析器页面上的导入滤波器

示例: b = [1 3 3 1]/6a = [3 0 1 0]/3 一起指定一个归一化 3 dB 频率为 0.5π 弧度/采样点的三阶低通巴特沃斯滤波器。

示例: sos2ctf([2 4 2 6 0 2; 3 3 0 6 0 0]) 指定一个归一化 3 dB 频率为 0.5π 弧度/采样点的三阶低通巴特沃斯滤波器。

示例: d = designfilt("lowpassiir",FilterOrder=3,HalfPowerFrequency=0.5) 指定一个归一化 3 dB 频率为 0.5π 弧度/采样点的三阶低通巴特沃斯滤波器。

滤波器系数

您可以使用滤波器分析器来分析指定为分子系数和分母系数的滤波器。如果将系数指定为 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 根据频率响应设定生成或编辑数字滤波器。

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

会话文件名,指定为字符向量或字符串标量。

示例: 'lowpassdesigns.mat'

示例: "C:\MyFolder\myfilters.mat"

数据类型: char | string

名称-值参数

全部展开

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

示例: filterAnalyzer(Analysis="impulse",OverlayAnalysis="step") 指定在冲激响应分析上叠加的阶跃响应分析。

分析类型,指定为以下选项之一:

  • 频域分析:

    • "magnitude" - 幅值响应

    • "phase" - 相位响应

    • "groupdelay" - 群延迟响应

    • "phasedelay" - 相位延迟响应

    • "magestimate" - 幅值响应估计

    • "noisepsd" - 噪声功率谱密度 (PSD)

  • 时域分析:

    • "impulse" - 冲激响应

    • "step" - 阶跃响应

  • 其他分析:

    • "polezero" - 零极点图

    • "info" - 滤波器信息

    • "coefficients" -滤波器系数

有关详细信息,请参阅滤波器分析器页上的分析

分析选项,指定为 filterAnalysisOptions 对象或元胞数组。有关可用选项的详细信息,请参阅 filterAnalysisOptions

注意

当调用 filterAnalyzer 时,您还可以将分析选项指定为名称-值参量。但是,您无法混合使用格式。

示例: filterAnalysisOptions("phase") 指定显示画面显示滤波器相位响应。

滤波器名称,指定为字符串向量或字符向量元胞数组。滤波器名称是在滤波器分析器滤波器表中标识不同滤波器的名称。如果不指定此参量,则会出现以下情况:

  • 如果已将滤波器指定为分子系数和分母系数,则滤波器分析器使用 num_den 作为滤波器名称,其中 num 是指定滤波器分子系数的变量,den 是指定对应分母系数的变量。

  • 如果滤波器已指定为元胞数组或对象,则滤波器分析器使用将每个元胞数组或对象指定为滤波器名称的变量。

  • 否则,滤波器分析器将使用由 Filter_nn 组成的名称,其中 n 是编号,表示该滤波器添加到滤波器表中的顺序:Filter_1Filter_2,依此类推。

滤波器分析器中的滤波器名称必须唯一。如果名称已存在,App 会在名称后追加后缀数字。滤波器表显示 App 会话中已存在的名称。

示例: ["LPbutter" "LPelliptic"]

数据类型: cell | string

叠加分析,指定为字符串标量或字符向量。

  • 如果将 Analysis 设置为频域分析,则 OverlayAnalysis 也必须为频域分析。

  • 如果将 Analysis 设置为时域分析,则 OverlayAnalysis 也必须为时域分析。

  • AnalysisOverlayAnalysis 必须设置为不同值。

  • 如果将 Analysis 设置为 "polezero""info""coefficients",则不支持此参量。

有关详细信息,请参阅滤波器分析器页上的分析

滤波器采样率,指定为以 Hz 为单位的标量或向量值。

  • 如果 SampleRates 是标量,则指定的值会应用于所有滤波器。

  • 如果 SampleRates 是向量,其元素数必须等于滤波器数。

如果一个或多个滤波器是具有采样率的对象,则此参量不适用。

示例: [150 3e3]

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

输出参量

全部展开

滤波器分析器句柄,以 filterAnalyzer 对象形式返回。要获取当前滤波器分析器实例的 fa,请在命令行中输入 getFilterAnalyzerHandle

新添加的显示画面的标识号,以整数或整数向量形式返回。如果没有添加显示画面,则此参量为空数组。

对象函数

addDisplays向滤波器分析器添加新分析显示画面
addFilters向滤波器分析器添加新滤波器
clearLegendStrings清除滤波器分析器中滤波器的替代图例字符串
close关闭滤波器分析器
deleteDisplays从滤波器分析器中删除显示画面
deleteFilters从滤波器分析器中删除滤波器
duplicateDisplays复制滤波器分析器中的显示画面
getAnalysisOptions获取滤波器分析器中显示画面的分析选项
newSession清空滤波器分析器会话并启动一个新会话
renameFilters在滤波器分析器中重命名滤波器
replaceFilters在滤波器分析器中用新滤波器替换现有滤波器
saveSession保存滤波器分析器会话
setAnalysisOptions在滤波器分析器中设置显示画面的分析选项
setLegendStrings在滤波器分析器中为滤波器追加图例字符串
showFilters在滤波器分析器中显示或隐藏滤波器
showLegend在滤波器分析器中显示或隐藏显示画面图例
showUserDefinedMask在滤波器分析器中显示或隐藏用户定义的频谱模板
zoom在滤波器分析器显示画面中放大感兴趣区域

示例

全部折叠

设计两个滤波器。使用滤波器分析器分析其幅值和相位响应。

d1 = designfilt("lowpassfir", ...
    PassbandFrequency=0.45,StopbandFrequency=0.55);
d2 = designfilt("highpassfir", ...
    StopbandFrequency=0.35,PassbandFrequency=0.45);

filterAnalyzer(d1,d2,FilterNames=["LP" "HP"], ...
    Analysis="magnitude",OverlayAnalysis="phase")

设计通带波纹为 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")

版本历史记录

在 R2024a 中推出