?s??20lgH(ej?s)dB
图1 低通滤波器的幅度特性
2.3数字滤波器设计方法概述
IIR滤波器和FIR滤波器的设计方法有很多不同之处,IIR滤波器设计方法有两类,经常用到的一类设计方法是借助于模拟滤波器的设计方法进行的。其设计思路是:先设计模拟滤波器得到传输函数H(s),然后将H(s)按某种方法转换成数字滤波器的系统函数H(Z)。这类方法是基于模拟滤波器的设计方法相对比较成熟。它不仅有完整的设计公式,也有完整的图表供查阅。更可以直接调用MATLAB中的对应的函数进行设计。另一类是直接在频域或者时域中进行设计的,设计时必须用计算机作辅助设计,直接调用MatLab中的一些程序或者函数可以很方便地设计出所需要的滤波器。
FIR滤波器不能采用由模拟滤波器的设计进行转换的方法。经常用的是窗函数法和频率采样法。也可以借助计算机辅助设计软件采用切比雪夫等波逼近法进行设计。
第三章 IIR滤波器的设计
3.1典型的IIR数字滤波器的设计
模拟滤波器的理论和设计方法己发展得相当成熟,且有一些典型的模拟滤波器供我们选择,如巴特沃斯( Butterworth )滤波器、切比雪夫(Chebyshev)滤波器、椭圆( Cauer)滤波器、贝塞尔(Bessel )滤波器等,这些典型的滤波器各有特点。
这种方法基于模拟滤波器的频率变换,即先设计模拟低通滤波器,再利用频率变换将模拟低通滤波器转换成所需类型的模拟滤波器,最后将模拟滤波器转换成所需类
- 4 -
型的数字滤波器。
用MATLAB进行典型的数字滤波器的设计,具体步骤如下:
(1)按一定规则将给出的数字滤波器的技术指标转换成模拟低通滤波器的技术指标; (2)根据转换后的技术指标使用滤波器阶数选择函数,确定最小阶数N和固有频率Wn,根据选用的模拟低通滤波器的类型可分别用函数:buttord, cheb1ord, cheb2ord, ellipord等;
(3)运用最小阶数N产生模拟滤波器原型,模拟低通滤波器的创建函数有:buttap, cheb1ap, cheb2ap, ellipap、besselap等;
(4)运用固有频率Wn把模拟低通滤波器原型转换成模拟低通、高通、带通、带阻滤波器,可分别用函数lp2lp、lp2hp, lp2bp, lp2bs;
(5〕运用冲激响应不变法或双线性变换法把模拟滤波器转换成数字滤波器,分别用函数imoinvar和bilinear实现。
低通Chebyshev I型数字滤波器的设计:设计中需要限定其通带上限临界频率wp,阻带临界滤波频率ws,在通带内的最大衰减rp,阻带内的最小衰减rs.
设计过程如下:
(例如设定各参数wp=30*2 *pi;ws=40*2* pi;Fs=100;rp=0.3;rs=80;)
选择滤波器的阶数:
[N, Wn]=cheb1ord(wp, ws, rp, rs, 's'); 创建Chebyshev I型滤波器原型: [z,p,k]=cheblap(N,rp);
表达形式从零极点增益形式转换成状态方程形式: [A, B, C, D)=zp2ss(z,p,k);
把模拟低通滤波器原型转换成模拟低通滤波器: [At, Bt, Ct, Dt]=lp2lp(A, B, C, D, Wn); 表达形式从状态方程形式转换成传递函数形式: [num1 ,den 1]=ss2tf(At,Bt,Ct,Dt);
采用冲激响应不变法将模拟滤波器转换成数字滤波器: [num2,den2]=impinvar(num1l ,den1, 100); 返回数字滤波器的频率响应 [H, W]=freqz(num2,den2,N) 频率响应如图2:
- 5 -
图2低通Chebyshev I型数字滤波器的频率响应
[N,Wn]=cheb1ord(wp, ws, rp, rs, 's');该函数返回模拟滤波器的最小阶数N和Chebyshev I型固有频率Wn.其中的wp,ws是以弧度为单位.如果rp=3dB ,则固有频率Wn等于通带截止频率Wp。
[z,p,k]=cheb1ap(N,rp);该函数返回一个N阶ChebyshevI型滤波器的零点,极点和增益。这个滤波器有通带内的最大衰减为rp. ChebyshevI型滤波器的主要特点是在阻带内达到最大平滑。
[At,Bt,Ct;Dt]=lp2lp(A,B,C,D, Wn)该函数把模拟低通滤波器原型转换成截止频率为Wn的低通滤波器。
[num2,den2]=impinvar(num1 ,den1, Fs)该函数模拟滤波器传递函数形式
[num1,den1]转换为采样频率为Fs的数字滤波器的传递函数形式[num2,den2]。 Fs缺省时默认为1Hz。
[H, W]=freqz(num2,den2,N) 该函数返回数字滤波器的频率响应。当N是一个整数时,函数返回N点的频率向量H和N个点的复频响应向量W。N最好选用2的整数次幂,这样使用FFT进行快速运算。N个频率点均匀地分布在单位圆的上半圆上。系统的N默认值为512。
3.2 Matlab提供的其它设计IIR滤波器的函数
MATLAB信号处理工具箱提供了几个直接设计IIR数字滤波器的函数,直接调用就可以设计滤波器,这为设计通用滤波器提供了方便.
设计Butterworth滤波器用函数butter().可以设计低通、高通、带通和带阻的数
- 6 -
字和模拟滤波器.其特性是通带内的幅度响应最大限度的平滑,但损失了截止频率处的下降斜度。
设计Chebyshev I型滤波器用函数cheby1().可以设计低通、高通、带通和带阻的数字和模拟Chebyshev I型滤波器,其通带内为等波纹,阻带内为单调。Che- byshevI型滤波器的下降斜度比II型大,但其代价目是通带内波纹较大.
设计Chebyshev II型滤波器用函数cheby2().可以设计低通、高通、带通和带阻的数字和模拟ChebyshevII型滤波器,其通带内为单调,阻带内等波纹。Che- byshevII型滤波器的下降斜度比I型小,但其阻带内波纹较大。
设计椭圆滤波器用函数ellip(),与cheby1, cheby2类似,可以设计低通、高通、带通和带阻的数字和模拟滤波器。与Butterworth和chebyshev滤波器相比,ellip函数可以得到下降斜度更大的滤波器,得通带和阻带均为等波纹。一般情况下,椭圆滤波器能以最低的阶实现指定的性能指标。
3.3 直接法设计IIR滤波器
前述IIR数字滤波器设计方法是通过先设计模拟滤波器,再进行S-Z平面转换,来达到设计数字滤波器的目的。这种设计方法实际上是数字滤波器的一种间接设计方法。
MATLAB提供yulewalk函数设计IIR滤波器,这个函数使用最小二乘拟和逼近给定的频率特性。可以使用这个函数来直接设计IIR滤波器。函数用法如下:
[b, a]=yulewalk(n, f, m),该函数返回一个Yule-Walk滤波器的系数矩阵[b, a];其中矩阵f和m是已知的频率响应;n是滤波器的阶数,其中f的元素必须在0和1之间,而且必须是升序,以0开始,以1结束,允许出现相同的频率值。
由[b, a] = yulewalk(n, f, m)得到的滤波器可写成
H(z)=Y(z)X(z)?b(1)?b(2)z1?a(2)z?1?1?...?b(n?1)z?n?...?a(n?1)z?n
如图2是用函数yulewalk设计的Yule-Walk滤波器幅频响应和理想的幅频响应的比较图。理想的响应是:在频率在0-0.6之间,幅值为1;在频率在0.6-1之间的幅值为0。设计程序为:
n=10;
f=[0 0.6 0.6 1]; m=[1 1 0 0 ];
- 7 -
[b,a]=yulewalk(n, f , m); [h,w]=freqz(b,a,128)
图3 yulewalk滤波器和理想低通滤波器频响对比
3.4 IIR滤波器设计小结
IIR滤波器的设计有很多方法,典型设计法和直接设计法是较常见的两种方法。在使用典型设计法设计IIR滤波器时,必须按照本文所列五个步骤有序地进行设计。文中给出的数字低通滤波器是设计的基础,当需要设计其它滤波器时,应当选择使用lp2lp、lp2hp, lp2bp, lp2bs函数进行转换。
直接设计法设计IIR滤波器相对比较简单,需要注意的是,使用Yulewalk函数时,必须确定所需的频率响应,文中给出的是理想低通滤波器的频率响应,实际应用中,根据具体情况具体分析,给出正确的频率响应参数f和m。
第四章 FIR滤波器的设计
IIR数字滤波器的设计方法是利用模拟滤波器成熟的理论及设计图表进行设计的,
- 8 -