Main Content

滤波器设计工具快速入门

滤波器设计工具使您能够设计和分析数字滤波器。您还可以导入和修改现有滤波器设计。

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

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

将打开滤波器设计工具并显示“设计滤波器”面板。

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

选择响应类型

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

  • 低通

  • 升余弦

  • 高通

  • 带通

  • 带阻

  • 微分器

  • 多频带

  • 希尔伯特变换器

  • 任意幅值

如果您安装了 DSP System Toolbox™ 软件,还可以使用其他响应类型。

注意

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

选择滤波器设计方法

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

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

设置滤波器设计设定

查看滤波器设定

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

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

滤波器阶数

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

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

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

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

选项

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

参数

切比雪夫 (chebwin)

旁瓣衰减

Gaussian (gausswin)

Alpha

凯塞 (kaiser)

Beta

泰勒 (taylorwin)

Nbar 和旁瓣电平

图基 (tukeywin)

Alpha

用户定义

函数名称、参数

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

带通滤波器频率设定

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

  • 频率单位:

    • Hz

    • kHz

    • MHz

    • 归一化(0 到 1)

  • 采样率

  • 通带频率

  • 阻带频率

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

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

带通滤波器幅值设定

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

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

  • 通带波纹

  • 阻带衰减

计算滤波器系数

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

注意

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

分析滤波器

显示滤波器响应

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

  • 幅值响应

  • 相位响应

  • 幅值响应和相位响应

  • 群延迟响应

  • 相位延迟响应

  • 冲激响应

  • 阶跃响应

  • 零极点图

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

注意

如果您安装了 DSP System Toolbox,还可以进行另外两种分析:幅值响应估计和舍入噪声功率。只有这两种分析需要设置滤波器内部选项。

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

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

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

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

使用数据提示

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

有关使用数据提示的信息,请参阅交互式探查绘图数据

绘制频谱模板

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

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

  • 启用模板 - 选择打开模板显示。

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

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

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

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

更改采样率

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

要更改滤波器名称,请在滤波器名称中键入新名称。

要更改采样率,请从单位中选择所需的单位,并在 Fs 中输入采样率。

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

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

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

显示零极点图

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

注意

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

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

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

极点用 x 符号表示,零点用 o 符号表示。

更改零极点图

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

注意

对于阶数在 100 左右或更高的滤波器,零极点编辑器在计算传递函数多项式时可能会遇到数值问题。因此,显示的滤波器响应可能与预期不同。要在不尝试计算高阶多项式的情况下检查极点和零点,请选择分析 > 零极点图。您无法在此视图中编辑滤波器。

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

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

  • 坐标 - 所选极点或零点的单位(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. 导出为菜单中选择系数保存滤波器系数,选择对象将滤波器保存为滤波器对象,或选择 System object 将滤波器保存为 System object。您必须有 DSP System Toolbox 许可证才能将滤波器保存为 System object。

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

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

  5. 点击导出按钮。

将系数导出到 ASCII 文件

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

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

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

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

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

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

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

要在 MAT 文件中保存滤波器系数、滤波器对象或滤波器 System object,请执行以下操作:

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

  2. 导出到菜单中选择 MAT 文件

  3. 导出为菜单中选择系数保存滤波器系数,选择对象将滤波器保存为滤波器对象,或选择 System object 将滤波器保存为 System object。您必须有 DSP System Toolbox 许可证才能将滤波器保存为 System object。

  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 模型,请将目标设置为当前。要将该模块插入一个新模型,请选择新建。要将该模块插入用户定义的子系统,请选择用户定义

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

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

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

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

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

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

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

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

    注意

    仅当您拥有 DSP System Toolbox 许可证且您的滤波器可以用 Biquad Filter (DSP System Toolbox) 模块或 Discrete FIR Filter (Simulink) 模块设计时,使用基本元素构建模型复选框才会启用。有关详细信息,请参阅 DSP System Toolbox 文档中的 Filter Realization Wizard (DSP System Toolbox) 主题。

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

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

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

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

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

生成 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 代码(文件 > 生成 MATLAB 代码 > 滤波器设计函数)。

以下是为滤波器设计工具中的默认低通滤波器生成的 MATLAB 代码。

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

%
% MATLAB Code
% Generated by MATLAB(R) 7.11 and the Signal Processing Toolbox 6.14.
%
% Generated on: 17-Feb-2010 14:15:37
%

% Equiripple Lowpass filter designed using the FIRPM function.

% All frequency values are in Hz.
Fs = 48000;  % Sample Rate

Fpass = 9600;            % Passband Frequency
Fstop = 12000;           % Stopband Frequency
Dpass = 0.057501127785;  % Passband Ripple
Dstop = 0.0001;          % Stopband Attenuation
dens  = 20;              % Density Factor

% Calculate the order from the parameters using FIRPMORD.
[N, Fo, Ao, W] = firpmord([Fpass, Fstop]/(Fs/2), [1 0], [Dpass, Dstop]);

% Calculate the coefficients using the FIRPM function.
b  = firpm(N, Fo, Ao, W, {dens});
Hd = dfilt.dffir(b);

% [EOF]

管理当前会话中的滤波器

您可以将设计的滤波器存储在当前滤波器设计工具会话中,以便将它们级联在一起,进行导出,或稍后在相同的或未来的滤波器设计工具会话中重新调用。

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

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

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

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

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

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

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

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

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

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

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

注意

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

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