基于 MATLAB 的滤波器设计
由于 MATLAB 的广泛使用和功能的不断更新,基于 MATLAB 的滤波器设
计方法以其方便快捷的特点,受到了设计者的欢迎。下面将举例说明基于
MATLAB 的 FIR 滤波器的设计。
1 基于 FDATool 的 FIR 滤波器设计
使用 FDATool 设计 FIR 滤波器的具体步骤如下:
1.1 滤波器指标
若需要设计一个 16 阶的 FIR 滤波器(h(0)=0),给定的参数如下:
(1) 低通滤波器
(2) 采样频率 FS 为 48kHz,滤波器 FC 为 10.8kHz
(3) 输入序列位宽为 9 位(最高位为符号位)
在此利用 MATLAB 来完成 FIR 滤波器系数的确定。
1.2 打开 MATLAB 的 FDATool
MATLAB 集成了一套功能强大的滤波器设计工具 FDATool(Filter Design &
Analysis Tool),可以完成多种滤波器的设计、分析和性能评估。
单击 MATLAB 主窗口下方的“Start”按钮,如图 B.1 所示,选择菜单“ToolBox”
→“Filter Design” →“Filter Design & Analysis Tool(FDATool)”命令,打开
FDATool,如图 B.2 所示。
图 B.1 FDATool 的启动
图 B.2 FDATool 的主界面
另外,在 MATLAB 主命令窗口内键入“fdatool”,同样可打开 FDATool 程
序界面。
1.3 选择 Design Filter
FDATool 界面左下侧排列了一组工具按钮,其功能分别如下所述:
● 滤波器转换(TransForm Filter)
● 设置量化参数(Set Quantization Parameters)
● 实现模型(Realize Model)
● 导入滤波器(Import Filter)
● 多速率滤波器(Multirate Filter)
● 零极点编辑器(Pole-zero Editor)
● 设计滤波器(Design Filter)
选择其中的按钮,进入设计滤波器界面,进行下列选择,如图 B.3 所示。
图 B.3 FDATool 设计 FIR 滤波器
● 滤波器类型(Filer Type)为低通(Low Pass)
● 设计方法(Design Method)为 FIR,采用窗函数法(Window)
● 滤波器阶数(Filter order)定制为 15
● 窗口类型为 Kaiser,Beta 为 0.5
● FS 为 48kHz,FC 为 10.8kHz
最后单击 Design Filter 图标,让 MATLAB 计算 FIR 滤波器系数并作相关分
析。
其系统函数 H(z)可用下式来表示:
16
H(z)=
1k
k
k zb
显然上式可以写成:
H(z)=
z
1
k
k zb
15
k
0
即可以看成是一个 15 阶的 FIR 滤波器的输出结果经过了一个单位延时单元
1z ,所以在 FDATool 中,把它看成 15 阶 FIR 滤波器来计算参数。
1.4 滤波器分析
计算完 FIR 滤波器系数以后,往往需要对设计好的 FIR 滤波器进行相关的
性能分析,以便了解该滤波器是否满足设计要求。分析操作步骤如下:
选择 FDATool 的菜单“Analysis”→“Magnitude Response”,启动幅频响应
分析如图 B.4 所示,x 轴为频率,y 轴为幅度值(单位为 dB)。
图 B.4 FIR 滤波器幅频响应
在图的左侧列出了当前滤波器的相关信息:
● 滤波器类型为 Direct Form FIR(直接 I 型 FIR 滤波器)
● 滤波器阶数为 15
选择菜单“Analysis”→“Phase Response”,启动相频响应分析,如图 B.5
所示。由该图可以看到设计的 FIR 滤波器在通带内其相位响应为线性的,即该滤
波器是一个线性相位的滤波器。
图 B.5 滤波器相频响应
图 B.6 显 示 了 滤 波 器 幅 频 特 性 与 相 频 特 性 的 比 较 , 这 可 以 通 过 菜 单
“Analysis”→“Magnitude and Phase Response”来启动分析。
图 B.6 滤波器幅频和相频响应
选择菜单“Analysis”→“Group Delay Response”,启动群时延分析。
FDATool 还提供了以下几种分析工具:
● 群时延响应分析。
● 冲激响应分析(Impulse Response),如图 B.7 所示。
● 阶跃响应分析(Step Response),如图 B.8 所示。
● 零极点图分析(Pole/Zero Plot),如图 B.9 所示。
图 B.7 冲激响应
图 B.8 阶跃响应
图 B.9 零极点图
求出的FIR 滤波器的系数可以通过选择菜单“Analysis”→“Filter Coefficients”
来观察。如图 B.10 所示,图中列出了 FDATool 计算的 15 阶直接 I 型 FIR 滤波器
的部分系数。
图 B.10 滤波器系数
1.5 量化
可以看到,FDATool 计算出的值是一个有符号的小数,如果建立的 FIR 滤波
器模型需要一个整数作为滤波器系数,就必须进行量化,并对得到的系数进行归
一化。为此,单击 FDATool 左下侧的工具按钮进行量化参数设置。量化参数有
三种方式:双精度、单精度和定点。在使用定点量化前,必须确保 MATLAB 中
已经安装定点工具箱并有相应的授权。
1.6 导出滤波器系数
为导出设计好的滤波器系数,选择 FDATool 菜单的“File”→“Export”命
令,打开 Export(导出)对话框,如图 B.11 所示。
图 B.11 滤波器系数 Export 对话框
在该窗口中,选择导出到工作区(Workplace)。这时滤波器系数就存入到一
个一维变量 Num 中了。不过这时 Num 中的元素是以小数形式出现的:
Num=
Columns 1 through 9
-0.0369
0.0109
0.0558
0.0054
-0.0873
-0.0484
0.1805
0.4133
0.4133
Columns 10 through 16
0.1805
-0.0484
-0.0873
0.0054
0.0558
0.0109 -0.0369
2 基于 MATLAB 内建函数的 FIR 设计
在 Matlab 中已经内建有各种滤波器的设计函数,可以直接在程序中调用,
这里介绍其中几个函数。
2.1 fir1 函数
功能:设计标准频率响应的基于窗函数的 FIR 滤波器。
语法:b=fir1(n,Wn);
b=fir1(n,Wn,‘ftytpe’);
b=fir1(n,Wn,Window);
b=fir1(n,Wn,‘ftype’,Window);