黎美琪 201300800610 通信工程2班
实验一 基于FDATool的FIR及IIR滤波器设计
一、实验目的:
1.学会使用fdatool设计滤波器 2.分析比较不同滤波器的特性 二、实验条件
Matlab 2013b pc机 三、实验过程
知识储备:使用FDATool设计FIR滤波器的具体步骤 1.1 滤波器指标
若需要设计一个16阶的FIR滤波器(h(0)=0),给定的参数如下: (1) 低通滤波器 注:阶数问题
这个选项直接影响滤波器的性能,阶数越高,性能越好,但是相应在FPGA实现耗用的资源需要增多。在这个设置中提供2个选项:Specify order和Minimum order,Specify order是工程师自己确定滤波器的阶数,Minimum order是让工具自动确定达到期望的频率相应所需要的最小阶数。
(2) 采样频率Fs为8kHz,滤波器Fpass为3kHz,Fstop为3050hz
(3) 输入序列位宽为9位(最高位为符号位) 在此利用MATLAB来完成FIR滤波器系数的确定。
1.2 打开MATLAB的FDATool
MATLAB集成了一套功能强大的滤波器设计工具FDATool(Filter Design & Analysis Tool),可以完成多种滤波器的设计、分析和性能评估。在MATLAB主命令窗口内键入“fdatool”,打开FDATool程序界面,如图B.2所示。
1.3 滤波器设计
FDATool界面左下侧排列了一组工具按钮,其功能分别如下所述: 滤波器转换(TransForm Filter)
设置量化参数(Set Quantization Parameters) 实现模型(Realize Model) 导入滤波器(Import Filter)
多速率滤波器(Multirate Filter) 零极点编辑器(Pole-zero Editor) 设计滤波器(Design Filter) 选择其中的选择Design Filter按钮,进入设计滤波器界面,进行下列选择,如图B.3所示。 滤波器类型(Filer Type)为低通(Low Pass) 设计方法(Design Method)为FIR/IIR,分别采用Equiripple、Least-squares、Window、Constr.LeastPth-norm 、Constrained Equiripple、Constr.Band Equiripple(FIR滤波器设计)和 Butterworth、Chebyshev Type I、Chebyshev Type I、Elliptic、Maximally flat、Least Pth-norm、Constr.LeastPth-norm(IIR滤波器设计)。 滤波器阶数(Filter order)定制为15 Fs =8kHz,Fpass=3kHz ,Fstop=3050hz 最后单击Design Filter 图标,让MATLAB 计算FIR 滤波器系数并作相关分析。 其系统函数H(z)可用下式来表示: 显然上式可以写成:
即可以看成是一个15 阶的FIR 滤波器的输出结果经过了一个单位延时单元,所以在FDATool 中,把它看成15 阶FIR 滤波器来计算参数。 1.4 滤波器分析
计算完FIR 滤波器系数以后,往往需要对设计好的FIR 滤波器进行相关的性能分析,以便了解该滤波器是否满足设计要求。分析操作步骤如下: 选择选择工具栏中“Magnitude and Phase Response”,启动幅、相频比较分析;选择工具栏中的圆图图标,启动零极点位置分析(主要分析滤波器的稳定性,但是通过滤波器基本信息栏也可以直接看滤波器的稳定性)。除此之外,工具栏{
}的不同图标还可以对滤波器进
行群延时、相位延时、单位脉冲响应、单位阶跃响应、滤波器的系数的分析(此实验中没有对各方面都展开分析)。
在图形的左侧,显示了当下滤波器的基本信息,如:
1.5 量化
可以看到,FDATool计算出的值是一个有符号的小数,如果建立的FIR滤波器模型需要一个整数作为滤波器系数,就必须进行量化,并对得到的系数进行归一化。为此,单击FDATool左下侧的工具按钮进行量化参数设置。量化参数有三种方式:双精度、单精度和定点。(注意:当使用DSP处理器时,FTR滤波器的系数要量化,量化误差将导致所设计的滤波器形状发生很大的变化;对于IIR滤波器,会改变滤波器的特性,甚至导致滤波器不稳定。) 1.6 导出滤波器系数
为导出设计好的滤波器系数,选择FDATool菜单的“File”→“Export”命令,打开Export(导出)对话框,选择导出到工作区(Workplace)。这时FIR滤波器系数就存入到一个一维变量Num(名称按照顺序取为a-g)中了,不过这时Num中的元素是以小数形式出现的。对于IIR滤波器,导出得到矩阵SOS(名称按照顺序取为h、k-p)和G(名称按照顺序取为h1、k1-p1)。
导出后的数据在workplace中的显示如下:
其中FIR滤波器系数
滤波器名称 滤波器系数 Equiripple(a) 1 -0.179 -0.036 -0.037 -0.038 0.5342 -0.011 -0.179 9 0.5875 0.5904 0.588 0.5872 -0.168 0.5881 0.5872 2 -0.057 0.0131 0.0179 0.017 0.2105 0.0271 -0.057 10 -0.076 -0.087 -0.081 -0.08 -0.015 -0.083 -0.076 3 0.086 0.027 0.021 0.022 -0.48 0.024 0.086 11 -0.06 -0.04 -0.05 -0.05 -0.08 -0.04 -0.06 4 -0.113 -0.067 -0.064 -0.064 -0.255 -0.046 -0.113 12 0.1142 0.0814 0.0829 0.0826 -0.089 0.0686 0.1143 5 0.114 0.081 0.083 0.083 -0.07 0.069 0.114 13 -0.11 -0.07 -0.06 -0.06 0.008 -0.05 -0.11 6 -0.064 -0.043 -0.048 -0.049 -0.259 -0.039 -0.064 14 0.0855 0.0273 0.0214 0.0225 -0.123 0.0245 0.0855 7 -0.076 -0.087 -0.081 -0.08 -0.102 -0.083 -0.076 15 -0.057 0.0131 0.0179 0.017 0.0165 0.0271 -0.057 8 0.587 0.59 0.588 0.587 -0.06 0.588 0.587 16 -0.18 -0.04 -0.04 -0.04 0.307 -0.01 -0.18 Least-squares(b) Window(c) Constr.LeastPth-norm (d) Least Pth-norm(e) Constrained Equiripple(f) Constr.Band Equiripple(g) 滤波器名称 滤波器系数 Equiripple(a) Least-squares(b) Window(c) Constr.LeastPth-norm (d) Least Pth-norm(e) Constrained Equiripple(f) Constr.Band Equiripple(g) 对于IIR滤波器:
[b,a]=sos2tf(SOS);得到滤波器系统函数的分子分母多项式系数,只是差了一个比例因子k。 K=cumprod(G); k=K(end);
滤波输出结果filteredpWave可以这样求: filteredpWave=filter(b,a,pWave)*k; 导出的数与传输函数的系数的关系
a,b含义,在MATLAB中函数如下公式:
这种用法主要出现在信号处理方向,控制方向上主要使用z,而不是z^-1,这是习惯问题,都一样。
其次,了解了其具体函数,则它的传递函数就好写了,如下:
h = tf(b,a,0.1,'variable','z^-1'); %0.1表示采样时间,你可以根据自己设计的滤波器来设定。h表示的传递函数就是上面公式中的H(z)。
当然,你也可以用“Discrete Transfer Fcn”模块来建立传递函数,由于这个模块是直接以Z的形式,所以a,b系统应该倒过来写,相信这个你应该理解。
按照上述操作,得到的滤波器设计相关图形如下: FIR滤波器设计
滤波器幅度、相位响应 滤波器零极点图形 滤波器单位脉冲响应
Equiripple
Least-squares
Window(Kaiser Beta=0.5)
滤波器幅度、相位响应 滤波器零极点图形 滤波器单位脉冲响应
Constr.LeastPth-norm
Constrained Equiripple
Constr.Band Equiripple
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库滤波器设计—fdatool工具及代码设计在线全文阅读。
相关推荐: