实验七 IIR数字滤波器的MATLAB实现
一、 实验目的:要求掌握IIR数字滤波器的设计原理、设计方法和设计步骤;能根据给定的滤波器指标进行滤波器设计;掌握数字巴特沃斯滤波器、数字切比雪夫滤波器的设计原理和步骤。
二、 实验仪器:电脑一台,MATLAB6.5或更高级版本软件一套。 三、 实验内容:
(一) 实验原理及实例分析
1. IIR数字滤波器的传递函数及特点
设IIR滤波器的输入序列为x(n),则IIR滤波器的输入序列x(n)与输出序列y(n)之间的关系可以用下面的方程式表示:
y(n)??bix(n?i)??ajx(n?j)
i?0j?1MN
其中,aj和bi是滤波器的系数,其中aj中至少有一个非零。与之相对应的差分方程为:
Y(z)b0?b1z?1?....bMz?MH(Z)??X(z)1?a1z?1?....aNz?N
由传递函数可以发现无限常单位冲激响应滤波器有如下特点: (1) 单位冲激响应h(n)是无限长的。
(2) 系统传递函数H(z)在有限z平面上有极点存在。
(3) 结构上存在着输出到输入的反馈,也就是结构上是递归型的。 2. IIR数字滤波器的设计与实现
IIR数字滤波器的设计有多种方法,如频率变换法、数字域直接设计以及计算辅助设计等。下面只介绍频率变换设计法。首先考虑由模拟低通滤波器到数字低通滤波器的转换,其基本的设计过程如下:
(1) 将数字滤波器的技术指标转换为模拟滤波器的技术指标; (2) 设计模拟滤波器G(S);
(3) 将G(S)转换成数字滤波器H(Z);
在低通滤波器的设计基础上,可以得到数字高通、带通、带阻滤波器的设计流程如下:
(1) 给定数字滤波器的设计要求(高通、带阻、带通); (2) 转换为模拟(高通、带阻、带通)滤波器的技术指标; (3) 转换为模拟低通滤波器的指标;
(4) 设计得到满足第三步要求的低通滤波器传递函数; (5) 通过频率转换得到模拟(高通、带阻、带通)滤波器; (6) 变换为数字(高通、带阻、带通)滤波器。
在MATLAB中设计IIR滤波器的方法及其它们所用到的函数如表6-1所示。
表7-1 MATLAB中设计IIR滤波器的方法列表
方法 描述 函数 完整设计函数: Beself,butter,cheby1,cheby2,ellip 滤波器的阶估计函数: Buttord,cheb1ord,cheb2ord,ellipord 低通模拟滤波器原型函数: beselap,buttap,cheb1ap,cheb2ap,ellipap 频域变换函数: Lp2bp,lp2bs,lp2hp,lp2lp 其他函数: Bilinear,impinvar yulewalk Maxflat 时域上的建模函数: Lpc,prony,stmcb 频域上的建模函数: Invfreqs,invfreqz 模拟原型法 采用经典低通滤波器作为 连续域上的设计模型,通 过频率变换得到IIR数字 滤波器,最后进行离散化处理 直接设计方法 通用butterworth 设计方法 直接在离散时域上估计线 性的幅度响应 使用butterworth设计低通 数字滤波器 寻找接近于所需要设计的 滤波器的通用原型 参数建模方法 表7-2 频率转换函数列表 频率转换 低通到低通s??s/?0 低通到高通s???0/s 转换函数 [numt,dent]=lp2lp(num.den,w0) [At,Bt,Ct,Dt]=lp2lp(A,B,C,D,w0) [numt,dent]=lp2hp(num.den,w0) [At,Bt,Ct,Dt]=lp2hp(A,B,C,D,w0) [numt,dent]=lp2bp(num.den,w0) [At,Bt,Ct,Dt]=lp2bp(A,B,C,D,w0) [numt,dent]=lp2bs(num.den,w0) [At,Bt,Ct,Dt]=lp2bs(A,B,C,D,w0) ?0(s/?0)2?1低通到带通s?? B?s/?0s/?0低通到带阻s?? ?0(s/?0)2?1B?3. 标准数字滤波器设计函数 MATLAB提供了一组标准的数字滤波器设计函数,大大简化了滤波器的设计过程。 1、 butter
功能:Butterworth模拟/数字滤波器设计 格式:[b,a]=butter(n,wn,'ftype',’s’)
[b,a]=butter(n,wn,'ftype') 说明:
? 选项中加入‘S’用于设计各种模拟Butterworth滤波器;不加设计各种数字Butterworth
滤波器
? Ftype为缺省,设计低通滤波器
? Ftype=hign,设计高通滤波器 ? Ftype=stop,设计带阻滤波器
【实例7-1】设计一个5阶Butterworth数字高通滤波器,阻带截止频率为250Hz。设采样频率为1000Hz。 解:源代码如下:
[b,a]=butter(5,250/500,'high') [z,p,k]=butter(5,250/500,'high') freqz(b,a,512,1000)
程序运行后,产生结果如下所示。 b =
0.0528 -0.2639 0.5279 -0.5279 0.2639 -0.0528 a =
1.0000 -0.0000 0.6334 -0.0000 0.0557 -0.0000 z =
1 1 1 1 1 p =
0.0000 + 0.7265i 0.0000 - 0.7265i 0.0000 + 0.3249i 0.0000 - 0.3249i 0.0000 k = 0.0528 图7-1
5阶Butterworth数字高通滤波器
2、 Cheby1、Cheby2
功能:chebyshevI、chebyshevII型模拟/数字滤波器设计 格式:[b,a]= cheby1(n,Rp,wn,'ftype',)
[b,a]= cheby2(n,Rs,wn,'ftype')
【实例7-2】设计一个7阶chebyshevII型数字低通滤波器,截止频率为3000Hz,
Rs=30dB。设采样频率为1000Hz。
解:源程序如下:
[b,a]=cheby2(7,30,300/500');
[z,p,k]=butter(5,250/500,'high'); freqz(b,a,512,1000)
程序运行后,产生如图6-2所示的波形。
图7-2 7阶chebyshevII型数字低通滤波器
4. 冲激响应不变法
一般来说,在要求时域冲激响应能模仿模拟滤波器的场合,一般使用冲激响应不变法。冲激响应不变法一个重要特点是频率坐标的变换是线性的,因此如果模拟滤波器的频响带限于折叠频率的话,则通过变换后滤波器的频响应可不失真的反映原响应与频率的关系。 【实例7-3】设计一个中心频率为500HZ,带宽为600Hz的数字带通滤波器,采样频率为
1000Hz。
解:源代码如下:
[z,p,k]=buttap(3); [b,a]=zp2tf(z,p,k);
[bt,at]=lp2bp(b,a,500*2*pi,600*2*pi);
[bz,az]=impinvar(bt,at,1000); %将模拟滤波器变换成数字滤波器 freqz(bz,az,512,'whole',1000) 程序运行后,产生如图6-3所示的波形。

