淮北煤炭师范学院学士学位论文 基于MATLAB的数字滤波器设计
用于程序(动态链接),读写MAT文件的功能[7]。
除此之外,MATLAB系统还具有如下特点: (1)具有易学易用的语言体系; (2)具有交互式的工作环境; (3)具有多层面的图像处理系统; (4)具有丰富高效的MATLAB工具箱; (5)具有便利的程序接口(API); (6)应用领域广泛;
(7)嵌入了面向对象编程语言。
7
淮北煤炭师范学院学士学位论文 基于MATLAB的数字滤波器设计
3 IIR滤波器设计
3.1 双线性变换法设计IIR数字滤波器
从S平面到Z平面是多值的映射关系会造成频率响应的混叠失真。为了克服这一缺点,可以采用非线性频率压缩方法,将整个频率轴上的频率范围压缩到-π/T~π/T之间,再用z=esT转换到Z平面上。也就是说,第一步先将整个S平面压缩映射到S1平面的-π/T~π/T一条横带里;第二步再通过标准变换关系z=es1T将此横带变换到整个Z平面上去。这样就使S平面与Z平面建立了一一对应的单值关系,消除了多值变换性,也就消除了频谱混叠现象,映射关系如图4所示。
图4 双线性变换的映射关系
为了将S平面的整个虚轴jΩ压缩到S1平面jΩ1轴上的-π/T到π/T段上,可以通过以下的正切变换实现
(3-1)
式中,T仍是采样间隔。
当Ω1由-π/T经过0变化到π/T时,Ω由-∞经过0变化到+∞,也即映射了整个jΩ轴。将式(3-1)写成
(3-2)
将此关系解析延拓到整个S平面和S1平面,令jΩ=s,jΩ1=s1,则得
(3-3)
再将S1平面通过以下标准变换关系映射到Z平面z=es1T 从而得到S平面和Z平面的单值映射关系为:
8
淮北煤炭师范学院学士学位论文 基于MATLAB的数字滤波器设计
(3-4)
(3-5)
式(3-4)与式(3-5)是S平面与Z平面之间的单值映射关系,这种变换都是两个线性函数之比,因此称为双线性变换
式(3-1)与式(34)的双线性变换符合映射变换应满足的两点要求。 首先,把z=ejω,可得
(3-6)
即S平面的虚轴映射到Z平面的单位圆。
其次,将s=σ+jΩ代入式(3-6),得
(3-7)
因此
(3-8)
由此看出,当σ<0时,|z|<1;当σ>0时,|z|>1。也就是说,S平面的左半平面映射到Z平面的单位圆内,S平面的右半平面映射到Z平面的单位圆外,S平面的虚轴映射到Z平面的单位圆上。因此,稳定的模拟滤波器经双线性变换后所得的数字滤波器也一定是稳定的。
双线性变换法优缺点:
双线性变换法,其主要的优点是避免了频率响应的混叠现象。这是因为这里S平面与Z平面是单值的一一对应关系。S平面整个jΩ轴单值地对应于Z平面单位圆一周,即频率轴是单值变换关系。这个关系如式(3-6)所示,重写如下:
(3-9)
上式表明,S平面上Ω与Z平面的ω成非线性的正切关系,如图5所示。
9
淮北煤炭师范学院学士学位论文 基于MATLAB的数字滤波器设计
由图5看出,在零频率附近,模拟角频率Ω与数字频率ω之间的变换关系接近于线性关系;但当Ω进一步增加时,ω增长得越来越慢,最后当Ω→∞时,ω终止在折叠频率ω=π处,因而双线性变换就不会出现由于高频部分超过折叠频率而混淆到低频部分去的现象,从而消除了频率混叠现象。
图5 双线性变换法的频率变换关系
但是双线性变换的这个特点是靠频率的严重非线性关系而得到的,如式(3-6)及图5所示。由于这种频率之间的非线性变换关系,就产生了新的问题。首先,一个线性相位的模拟滤波器经双线性变换后得到非线性相位的数字滤波器,不再保持原有的线性相位了;其次,这种非线性关系要求模拟滤波器的幅频响应必须是分段常数型的,即某一频率段的幅频响应近似等于某一常数(这正是一般典型的低通、高通、带通、带阻型滤波器的响应特性),不然变换所产生的数字滤波器幅频响应相对于原模拟滤波器的幅频响应会有畸变,如图8所示。
图6 双线性变换法幅度和相位特性的非线性映射
对于分段常数的滤波器,双线性变换后,仍得到幅频特性为分段常数的滤波器,但是各个分段边缘的临界频率点产生了畸变,这种频率的畸变,可以通过频率的预畸来加以校正。也就是将临界模拟频率事先加以畸变,然后经变换后正好映射到所需要的数字频率上。
在MATLAB中,双线性变换法的调用函数是bilinear。其调用格式为: a.[zd,pd,kd]= bilinear(z,p,k,fs)
10
淮北煤炭师范学院学士学位论文 基于MATLAB的数字滤波器设计
b.[zd,pd,kd]= bilinear(z,p,k,fs,fp) c. [numd,dend]=bilinear(num,den,fs) d. [numd,dend]=bilinear(num,den,fs,fp) e. [Aa,Bb,Cc,Dd]=bilinear(A,B,C,D,fs) f. [Aa,Bb,Cc,Dd]=bilinear(A,B,C,D,fs,fp)
[zd,pd,kd]=bilinear(z,p,k,fs)是把模拟滤波器的零极点模型转换为数字滤波器的零极点模型,fs为采样频率,z,p,k分别为滤波器的零点、极点和增益;
[numd,dend]=bilinear(num,den,fs)是把模拟滤波器的传递函数模型转换为数字滤波器的传递模型;
[Aa,Bb,Cc,Dd]=bilinear(A,B,C,D,fs)是把模拟滤波器的状态方程模型转换为数字滤波器状态方程模型。
例如,用双线性变换法设计一个巴特沃思数字低通滤波器,技术指标如下:通带截止频率?p=2??4k rad/s,阻带截止频率?s=2??8k rad/s,通带波纹系数
Rp=0.3dB, 阻带波纹系数Rs=50dB,采样频率fs=20000Hz。
程序如下:
[N,Wn]=buttord(wp,ws,Rp,Rs,?s?) %估计滤波器最小阶数 [z,p,k]=buttap(N); [Bap,Aap]=zp2tf(z,p,k); [b,a]=lp2lp(Bap,Aap,Wn); [bz,az]=bilinear(b,a,fs) freqz(bz,az,Nn,fs)
程序在MATLAB环境下的运行及结果如图7所示: 结果如下: N =11
Wn =1.4892e+004 bz =
Columns 1 through 6
0.0110 0.1211 0.6055 1.8166 3.6333 5.0866 Columns 7 through 12
5.0866 3.6333 1.8166 0.6055 0.1211 0.0110 az =
Columns 1 through 6
11