主要内容

使用滤波器设计工具

滤波器设计工具是用于设计和分析滤波器的功能强大的用户界面。滤波器设计工具使您能够通过设置滤波器性能设定、从 MATLAB® 工作区导入滤波器或通过添加、移动或删除零极点来快速设计数字 FIR 或 IIR 滤波器。滤波器设计工具还提供用于分析滤波器的工具,例如幅值和相位响应图以及零极点图。

快速入门

要打开滤波器设计工具,请键入

filterDesigner
(在 MATLAB 命令提示符下键入。)

将显示每日提示对话框,其中包含使用滤波器设计工具的建议。然后,界面显示默认滤波器。

滤波器设计工具界面有三个主要区域:

  • “当前滤波器信息”区域

  • “滤波器显示”区域

  • “设计”面板

界面的上半部分显示当前滤波器的滤波器设定和响应信息。左上角的“当前滤波器信息”区域显示滤波器属性,即滤波器结构、阶、使用的节数以及滤波器是否稳定。还可以通过它访问滤波器管理器以处理多个滤波器。

右上角的“滤波器显示”区域显示各种滤波器响应,如幅值响应、群延迟和滤波器系数。

界面的下半部分是滤波器设计工具的交互部分。下半部分中的“设计”面板用于对滤波器进行设定。它控制两个上部区域中显示的内容。使用边栏按钮可以在下半部分中显示其他面板。

该工具包括快捷帮助。您可以右键点击或点击这是什么? 按钮以获取关于该工具不同部分的信息。

请注意,当您打开滤波器设计工具时,设计滤波器并未启用。您必须对默认滤波器设计进行更改以启用设计滤波器。每次您要更改滤波器设计时,均需如此。对单选按钮项或下拉菜单项(如响应类型滤波器阶数下的那些项)的更改会立即启用设计滤波器。对文本框中设定(如 FsFpassFstop)的更改要求您在文本框外点击才能启用设计滤波器

选择响应类型

您可以选择下列响应类型之一:

  • 低通

  • 升余弦

  • 高通

  • 带通

  • 带阻

  • 微分器

  • 多频带

  • 希尔伯特变换器

  • 任意幅值

  • 任意群延迟

  • 峰值

  • 陷波

要设计带通滤波器,请在 App 的“响应类型”区域中选择带通旁边的单选按钮。

注意

并非所有滤波器设计方法对所有响应类型均适用。如果您已选择了响应类型,则可用的滤波器设计方法可能会受到限制。对于所选响应类型不可用的滤波器设计方法将从 App 的设计方法区域中移除。

选择滤波器设计方法

您可以对所选响应类型使用默认的滤波器设计方法,也可以从 App 中列出的可用 FIR 和 IIR 方法中选择一种滤波器设计方法。

要选择雷米兹算法来计算 FIR 滤波器系数,请选择 FIR 单选按钮,并从方法列表中选择 Equiripple

设置滤波器设计设定

查看滤波器设定

您可以设置的滤波器设计设定因响应类型和设计方法而异。当您选择分析 > 滤波器设定或点击滤波器设定工具栏按钮时,显示区域会显示滤波器设定。

您还可以通过选择查看 > 滤波器设定模板,在设计的滤波器的幅值图上查看滤波器设定。

滤波器阶数

在设计等波纹滤波器时,有两个互斥的选项来确定滤波器的阶数:

  • 指定阶数:您可以在文本框中输入滤波器阶数。

  • 最小阶:滤波器设计方法决定最小阶滤波器。

为此示例选择最小阶单选按钮。

请注意,滤波器的阶数设定选项取决于您选择的滤波器设计方法。某些滤波器方法可能不会同时提供这两个选项。

选项

可用选项取决于所选滤波器设计方法。只有 FIR 等波纹和 FIR 窗设计方法有可设置的选项。对于 FIR 等波纹,选项为密度因子。有关详细信息,请参阅 firpm。对于 FIR 窗,选项为缩放通带窗口选项,对于以下窗口,选项有可设置的参数:

参数

切比雪夫 (chebwin)

旁瓣衰减

Gaussian (gausswin)

Alpha

凯塞 (kaiser)

Beta

泰勒 (taylorwin)

Nbar 和旁瓣电平

图基 (tukeywin)

Alpha

用户定义

函数名称、参数

您可以通过点击 查看 按钮,在窗口可视化工具 (WVTool) 中查看窗口。

对于此示例,将密度因子设置为 16

带通滤波器频率设定

对于带通滤波器,您可以设置

  • 频率单位:

    • Hz

    • kHz

    • MHz

    • GHz

    • 归一化(0 到 1)

  • 采样频率

  • 通带频率

  • 阻带频率

您可以用两个频率指定通带。第一个频率决定通带的下边缘,第二个频率决定通带的上边缘。

同样,您可以用两个频率指定阻带。第一个频率确定第一个阻带的上边缘,第二个频率确定第二个阻带的下边缘。

对于此示例:

  • 保留默认单位 Hz

  • 将采样频率 (Fs) 设置为 2000 Hz。

  • 将第一个阻带 (Fstop1) 的结束设置为 200 Hz。

  • 将通带 (Fpass1) 的开始设置为 300 Hz。

  • 将通带 (Fpass2) 的结束设置为 700 Hz。

  • 将第二个阻带 (Fstop2) 的开始设置为 800 Hz。

带通滤波器幅值设定

对于带通滤波器,您可以指定以下幅值响应特征:

  • 幅值响应的单位(dB 或线性)

  • 通带波纹

  • 阻带衰减

对于此示例:

  • 保留单位dB(默认值)。

  • 将通带波纹 (Apass) 设置为 0.1 dB。

  • 将两个阻带(Astop1Astop2)的阻带衰减设置为 75 dB。

计算滤波器系数

您已经指定了滤波器设计,现在请点击设计滤波器按钮计算滤波器系数。

请注意,在计算滤波器设计的系数后,设计滤波器按钮将被禁用。在对滤波器设定进行任何更改后,此按钮将再次启用。

分析滤波器

显示滤波器响应

您可以在显示区域或单独的窗口中查看以下滤波器响应特征。

  • 幅值响应

  • 相位响应

  • 幅值响应和相位响应

  • 群延迟响应

  • 相位延迟响应

  • 冲激响应

  • 阶跃响应

  • 零极点图

  • 零相位响应 - 可从幅值或幅值和相位响应图中的 y 轴上下文菜单中获得。

  • 幅值响应估计

  • 舍入噪声功率谱

幅值响应估计舍入噪声功率谱分析使用滤波器内部选项。

您可以在同一绘图中显示两个响应,方法是选择分析 > 叠加分析并选择可用的响应。第二个 y 轴会添加到响应图的右侧。(请注意,并非所有响应都可以相互叠加。)

您还可以在此区域显示滤波器系数和详细的滤波器信息。

对于零相位响应之外的所有分析方法,您可以从分析菜单、上下文菜单中的“分析参数”对话框或使用工具栏按钮访问它们。对于零相位,请右键点击绘图的 y 轴,并从上下文菜单中选择零相位

例如,要查看滤波器的幅值响应,请在工具栏上选择幅值响应按钮

您也可以在幅值图上叠加滤波器设定,方法是选择查看 > 滤波器设定模板

注意

仅当 FVTool 是从滤波器设计工具启动时,您才能在 FVTool 中使用滤波器设定模板。

使用数据提示

您可以点击响应以添加绘图数据提示,显示关于响应上特定点的信息。

有关使用数据提示的信息,请参阅以交互方式浏览和分析绘图数据

绘制频谱模板

要将频谱模板或拒绝域边界线添加到幅值图中,请点击查看 > 用户定义的频谱模板

模板由频率向量和幅值向量定义。这些向量长度必须相同。

  • Enable Mask - 选择打开模板显示。

  • Normalized Frequency - 选择此项可在显示的频率范围内将频率归一化至 0 到 1 之间。

  • Frequency Vector - 输入 x 轴频率值的向量。

  • Magnitude Units - 选择所需的幅值单位。这些单位应与幅值图中使用的单位相匹配。

  • Magnitude Vector - 输入 y 轴幅值的向量。

以下幅值响应显示频谱模板。

更改采样频率

要更改滤波器的采样频率,请右键点击任一滤波器响应图,并从上下文菜单中选择采样频率

要更改滤波器名称,请在滤波器名称中键入新名称。(在 FVTool 中,如果您有多个滤波器,请选择所需的滤波器,然后输入新名称。)

要更改采样频率,请从单位中选择所需单位并在 Fs 中输入采样频率。(对于 fvtool 中的每个滤波器,您可以指定不同采样频率,或将采样频率应用于所有滤波器。)

要将显示的参数保存为默认值,以便在打开滤波器设计工具或 FVTool 时使用,请点击保存为默认值

要还原默认值,请点击还原原始默认值

在 FVTool 中显示响应

要在单独的窗口中显示滤波器响应特征,请选择查看 > 滤波器可视化工具(在显示区域中显示的是分析而非滤波器设定时,此选项可用),或点击完整视图分析按钮:

这将启动滤波器可视化工具 (fvtool)。

注意

如果滤波器设定出现在显示区域中,点击完整视图分析工具栏按钮将启动 MATLAB 图窗窗口,而不是 FVTool。有关详细信息,请参阅向图中添加注解。相关联的菜单项是打印到图窗,仅当显示滤波器设定时才会启用。

您可以使用此工具对您的设计进行注解,查看其他滤波器特征,并打印您的滤波器响应。您可以将滤波器设计工具和 fvtool 链接起来,以便在滤波器设计工具中所做的更改立即反映在 fvtool 中。有关详细信息,请参阅 FVTool

使用零极点编辑器编辑滤波器

显示零极点图

您可以使用零极点编辑器面板,通过移动、删除或添加极点和/或零点来编辑设计的或导入的滤波器系数。

注意

如果您的滤波器是用零极点编辑器设计或编辑的,则无法生成 MATLAB 代码(文件 > 生成 MATLAB 代码)。

您无法移动量化零极点。您只能移动参考零极点。

在边栏中点击极点/零点编辑器按钮或选择编辑 > 零极点编辑器以显示此面板。

极点使用 x 符号显示,零点使用 o 符号显示。

更改零极点图

绘图模式按钮位于零极点图的左侧。选择按钮之一来更改零极点图的模式。零极点编辑器从左到右有以下按钮:移动极点、添加极点、添加零点、删除极点或零点。

下列绘图参数和控件位于零极点图的左侧、绘图模式按钮的下方。

  • 增益 - 补偿滤波器零极点增益的因子

  • 坐标 - 所选极点或零点的单位(PolarRectangular

  • 幅值 - 所选极点或零点的幅值(选择极坐标时出现)

  • 角度 - 所选极点或零点的角度(选择极坐标时出现)

  • 实部 - 所选极点或零点的实部(选择直角坐标时出现)

  • 虚部 - 所选极点或零点的虚部(选择直角坐标时出现)

  • - 当前节的编号(对于多节滤波器)

  • 共轭 - 创建对应的共轭极点或零点,或者自动选择已有的共轭极点或零点。

  • 自动更新 - 添加、移动或删除极点或零点时,立即更新显示的幅值响应。

编辑 > 零极点编辑器具有多个选项,分别用于选择多个零极点、反转和镜像零极点以及删除、缩放和旋转零极点。

移动垂直轴上的零点之一会产生以下结果:

  • 选定的零点对以绿色显示。

  • 当您选择共轭对组中的零点之一时,共轭复选框和对应的共轭点会自动选中。

  • 幅值响应图会立即更新,因为自动更新处于活动状态。

转换滤波器结构

转换为新结构

您可以使用编辑 > 转换结构将当前滤波器转换为新结构。所有滤波器都可以转换为以下表示:

  • 直接 I 型

  • 直接 II 型

  • 直接 I 型转置

  • 直接 II 型转置

  • 格型 ARMA

注意

如果安装了 DSP System Toolbox™ 产品,您还会在“转换结构”对话框中看到其他结构。

此外,特定种类的滤波器还支持以下转换:

  • 最小相位 FIR 滤波器可以转换为格型最小相位

  • 最大相位 FIR 滤波器可以转换为格型最大相位

  • 全通滤波器可以转换为格型全通滤波器

  • IIR 滤波器可以转换为格型 ARMA

注意

从一个滤波器结构转换为另一个滤波器结构可能会产生与原始滤波器不同的特征。这是由于计算机的算术运算精度有限,且转换的舍入计算会导致一些变化。

例如:

  • 选择编辑 > 转换结构以打开“转换结构”对话框。

  • 在滤波器结构列表中选择 Direct-form I

转换为二阶节

您可以使用编辑 > 转换为二阶节将转换后的滤波器结构存储为二阶节的集合,而不是一体式的高阶结构。

注意

用于修改 SOS 滤波器结构的编辑 > 重排并定标二阶节也具有以下选项。

以下缩放选项仅在转换直接 II 型结构时可用:

  • None(默认值)

  • L-2L2 范数)

  • L-infinityL 范数)

方向UpDown)决定二阶节的排序。最佳排序取决于所选缩放选项。

例如:

  • 选择编辑 > 转换为二阶节以打开“转换为 SOS”对话框。

  • 缩放菜单中选择 L-infinity 以进行 L 范数缩放。

  • 方向选项设置为 Up

    注意

    要从一组二阶节转换回单个节,请使用编辑 > 转换为单节

导出滤波器设计

将系数或对象导出到工作区

您可以将滤波器保存为滤波器系数变量或滤波器 System object™ 变量。要将滤波器保存到 MATLAB 工作区,请执行以下操作:

  1. 选择文件 > 导出。此时会出现“导出”对话框。

  2. 导出到菜单中选择 Workspace

  3. 导出为菜单中选择 Coefficients 以保存滤波器系数,或选择 System Objects 以将滤波器保存在滤波器 System object 中。

  4. 导出系数时,请在“变量名称”部分的分子(对于 FIR 滤波器)或分子分母(对于 IIR 滤波器)或 SOS 矩阵尺度值(对于二阶节形式的 IIR 滤波器)文本框中指定变量名称。

    导出 System object 时,请在离散滤波器(或量化滤波器)文本框中指定变量名称。如果您的工作区中有同名变量,并且您要覆盖它们,请选中覆盖变量复选框。

  5. 点击导出按钮。

将系数导出到 ASCII 文件

要将滤波器系数保存到文本文件中,请执行以下操作:

  1. 选择文件 > 导出。此时会出现“导出”对话框。

  2. 导出到菜单中选择 Coefficients File (ASCII)

  3. 点击导出按钮。出现“将滤波器系数导出到 .FCF 文件”对话框。

  4. 选择或输入文件名并点击保存按钮。

系数保存在您指定的文本文件中,MATLAB 编辑器会打开以显示该文件。文本文件还包含注释,其中描述了 MATLAB 版本号、Signal Processing Toolbox™ 版本号和滤波器信息。

将系数或对象导出到 MAT 文件

要将滤波器系数或滤波器对象作为变量保存在 MAT 文件中,请执行以下操作:

  1. 选择文件 > 导出。此时会出现“导出”对话框。

  2. 导出到菜单中选择 MAT-file

  3. 导出为菜单中选择 Coefficients 以保存滤波器系数,或选择 Objects 以将滤波器保存在滤波器对象中。

  4. 导出系数时,请在“变量名称”部分的分子(对于 FIR 滤波器)或分子分母(对于 IIR 滤波器)或 SOS 矩阵尺度值(对于二阶节形式的 IIR 滤波器)文本框中指定变量名称。

    导出对象时,请在离散滤波器(或量化滤波器)文本框中指定变量名称。如果您的工作区中有同名变量,并且您要覆盖它们,请选中覆盖变量复选框。

  5. 点击导出按钮。此时会出现“导出到 MAT 文件”对话框。

  6. 选择或输入文件名并点击保存按钮。

导出到 Simulink 模型

如果您安装了 Simulink® 产品,您可以导出 Simulink 滤波器设计模块,并将其插入新的或现有 Simulink 模型。

您可以导出使用滤波器设计工具提供的任何滤波器设计方法设计的滤波器。

注意

如果您安装了 DSP System Toolbox 和 Fixed-Point Designer™,可以将 CIC 滤波器导出到 Simulink 模型。

  1. 设计滤波器后,点击实现模型边栏按钮或选择文件 > 导出到 Simulink 模型。此时会出现“实现模型”面板。

  2. 模块名称中指定您要使用的模块名称。

  3. 要将该模块插入当前(最近选择的)Simulink 模型,请将目标设置为 Current。要将该模块插入一个新模型,请选择 New。要将该模块插入用户定义的子系统,请选择 User defined

  4. 如果您要覆盖以前从该面板创建的模块,请选中覆盖生成的 `Filter' 模块

  5. 如果选中使用基本元素构建模型复选框,您的滤波器将被创建为一个子系统 (Simulink)模块,该模块使用单独的子元素。在这种模式下,可以进行以下优化:

    • 零增益优化 - 从滤波器结构中删除零值增益路径。

    • 单位增益优化 - 用一条线(短路)来代替滤波器结构中等于 1 的增益。

    • 负增益优化 - 用一条线(短路)代替等于 -1 的增益,并将滤波器结构中的对应加法更改为减法。

    • 延迟链优化 - 用一个长度为 n 的延迟替代由 n 个单位延迟组成的延迟链。

    • 单位尺度值优化 - 从滤波器结构中删除缩放值等于 1 的乘法运算。

    下图显示一些优化的效果:

    优化效果

    注意

    仅当您拥有 DSP System Toolbox 许可证且您的滤波器可以使用该库提供的数字滤波器模块设计时,使用基本元素构建模型复选框才会启用。

  6. 设置输入处理参数,以指定生成的滤波器对输入执行基于样本还是基于帧的处理。根据您设计的滤波器类型,以下选项之一或全部两个选项可用:

    • 列作为通道(基于帧) - 选择此选项时,模块会将输入的每列视为一个单独的通道。

    • 元素作为通道(基于采样) - 选择此选项时,模块会将输入的每个元素视为一个单独的通道。

  7. 点击实现模型按钮创建滤波器模块。如果选中使用基本元素构建模型复选框,滤波器设计工具会将滤波器实现为一个由 Sum (Simulink)Gain (Simulink)Delay (Simulink) 模块组成的子系统模块。

如果双击 Simulink Filter 模块,将显示滤波器结构。

导出滤波器的其他方式

您也可以将滤波器发送到 C 头文件或生成 MATLAB 代码以从命令行构造滤波器。有关详细说明,请参阅以下各节:

生成 C 头文件

您可能希望在外部 C 程序中包含滤波器信息。要使用包含滤波器参数数据的变量创建 C 头文件,请按照以下步骤进行操作:

  1. 选择目标 > 生成 C 头文件。此时会出现“生成 C 头文件”对话框。

  2. 输入要在 C 头文件中使用的变量名称。具体的滤波器结构决定了文件中要创建哪些变量

    滤波器结构

    变量参数

    直接 I 型
    直接 II 型
    直接 I 型转置
    直接 II 型转置

    分子、分子长度*、分母、分母长度*、节数(如果滤波器只有一节,则此项处于非活动状态)

    格型 ARMA

    格型系数、格型系数长度*、梯形系数、梯形系数长度*、节数(如果滤波器只有一节,则此项处于非活动状态)

    格型 MA

    格型系数、格型系数长度*和节数(如果滤波器只有一节,则此项处于非活动状态)

    直接型 FIR 直接型 FIR 转置

    分子、分子长度*、节数(如果滤波器只有一节,则此项处于非活动状态)

    *长度变量包含该类型系数的总数。

    注意

    变量名称不能为 C 语言保留字,如 for。

  3. 选择导出为建议类型以使用建议的数据类型,或者选择导出为并从下拉列表中选择所需的数据类型。

    注意

    如果没有安装 DSP System Toolbox 软件,选择双精度浮点以外的任何数据类型都会致使导出的滤波器与您在滤波器设计工具中设计的滤波器不完全一致。这是由舍入和截断差异造成的。

  4. 点击生成以生成 C 头文件。点击关闭以关闭对话框。

生成 MATLAB 代码

您可以生成 MATLAB 代码,以便通过命令行构造您在滤波器设计工具中设计的滤波器。选择文件 > 生成 MATLAB 代码 > 滤波器设计函数,并在“生成 MATLAB 代码”对话框中指定文件名。

注意

如果您的滤波器是使用零极点编辑器设计或编辑的,则无法通过文件 > 生成 MATLAB 代码 > 滤波器设计函数(使用 System object) 或通过文件 > 生成 MATLAB 代码 > 数据滤波函数(使用 System object) 生成 MATLAB 代码。

以下是当您为在此示例中设计的等波纹带通滤波器选择文件 > 生成 MATLAB 代码 > 数据滤波函数(使用 System object) 时生成的 MATLAB 代码。

function Hd = ExFilter
%EXFILTER Returns a discrete-time filter object.

% MATLAB Code
% Generated by MATLAB(R) 9.1 and the DSP System Toolbox 9.3.
% Generated on: 17-Nov-2016 14:55:28

% Equiripple Bandpass filter designed using the FIRPM function.

% All frequency values are in Hz.
Fs = 2000;  % Sampling Frequency

Fstop1 = 200;              % First Stopband Frequency
Fpass1 = 300;              % First Passband Frequency
Fpass2 = 700;              % Second Passband Frequency
Fstop2 = 800;              % Second Stopband Frequency
Dstop1 = 0.000177827941;   % First Stopband Attenuation
Dpass  = 0.0057563991496;  % Passband Ripple
Dstop2 = 0.000177827941;   % Second Stopband Attenuation
dens   = 16;               % Density Factor

% Calculate the order from the parameters using FIRPMORD.
[N, Fo, Ao, W] = firpmord([Fstop1 Fpass1 Fpass2 Fstop2]/(Fs/2), [0 1 ...
    0], [Dstop1 Dpass Dstop2]);

% Calculate the coefficients using the FIRPM function.
b  = firpm(N, Fo, Ao, W, {dens});
Hd = dsp.FIRFilter( ...
    'Numerator', b);

% [EOF]

管理当前会话中的滤波器

您可以将设计的滤波器存储在当前滤波器设计工具会话中,以便将其级联使用,导出到 FVTool,或稍后在相同的或未来的滤波器设计工具会话中重新调用。

您可以在当前滤波器信息窗格中分别使用存储滤波器滤波器管理器按钮来存储和访问保存的滤波器。

存储滤波器 - 显示“存储滤波器”对话框,您可以在其中指定在滤波器管理器中存储滤波器时要使用的滤波器名称。默认名称是滤波器的类型。

滤波器管理器 - 打开滤波器管理器。

当前滤波器显示在列表框下方。要更改当前滤波器,请突出显示所需的滤波器。如果选择编辑当前滤波器,滤波器设计工具将显示当前选择的滤波器设定。如果您对设定进行任何更改,存储的滤波器会立即更新。

要级联两个或多个滤波器,请突出显示所需的滤波器,然后按级联。新的级联滤波器会添加到滤波器管理器中。

要更改存储的滤波器的名称,请按重命名。此时将显示“重命名滤波器”对话框。

要从滤波器管理器中删除存储的滤波器,请按删除

要将一个或多个滤波器导出到 FVTool,请突出显示所需滤波器,然后按 FVTool

保存和打开滤波器设计会话

您可以将滤波器设计会话保存为 MAT 文件,以便今后返回同一会话。

选择保存会话按钮 ,将您的会话保存为 MAT 文件。第一次保存会话时,将打开“保存滤波器设计会话”浏览器,提示您输入会话名称。

例如,通过在文件名字段中键入 TestFilter,将此设计会话保存为当前工作目录中的 TestFilter.fda

.fda 扩展名会自动添加到您保存的所有滤波器设计会话。

注意

您还可以使用文件 > 保存会话文件 > 会话另存为保存会话。

您可以通过选择打开会话按钮 文件 > 打开会话将现有会话加载到滤波器设计和分析工具中。此时将打开“加载滤波器设计会话”浏览器,您可从以前保存的滤波器设计会话中进行选择。

另请参阅

主题