二、IIR滤波器的基本结构
IIR滤波器由于它的脉冲响应序列是无限长的,故称为无限脉冲响应滤波器。IIR滤波器系统函数的极点可以位于单位元内的任何地方,因此可以用较低的阶数获得较高的选择性,所用存储单元少,经济效益高。但这些是以相位的非线性为代价的,选择性越好,相位非线性越严重。
IIR滤波器差分方程: (2.1)
IIR滤波器的系统函数:
IIR滤波器的网络结构主要有:直接型(也称直接Ⅰ型)、标准型(也称直接Ⅱ型)、级联型和并联型,下面是二阶IIR滤波器的标准型结构。从图可以看出,左右两组延迟单元可以重叠,由于这种结构所使用的延迟单元最少(只有2个),因此得到了广泛地应用,故称之为标准型IIR滤波器。
| z-1 |
| z-1 |
| b0 |
| b1 |
| b2 |
| -a1 |
| -a2 |
| x(n) |
| y(n) |
| w(n) |
| + |
| + |
| + |
| + |
三、IIR数字滤波器的的设计
(一)IIR数字滤波器的设计方法
IIR滤波器计方法有直接法和间接法。由于模拟滤波器的设计方法已经非常成熟,不仅有完整的公式、完善的图标和曲线可供查阅,而且还有一些优良的滤波器类型可供使用。间接法就是借助于模拟滤波器的设计方法进行的。基本思路是:根据实际要求的数字滤波器的的性能指标先设计模拟滤波器得到传输函数 ,然后将 按某种方法转换成数字滤波器的系统函数 。
实现系统传递函数 从S域至Z域映射工程上常用脉冲响应不变和双线性变换两种方法。脉冲响应不变法一般会产生频谱混叠现象,对于高通和带阻滤波器不适合,本文中采用双线性不变法。
(二)双线性变换法
由于S平面和Z平面的单值双线性映射关系为
(3.1)
式中, 为采样周期。因此,实际中线利用MATLAB设计得到模拟滤波器的系统函数 ,将式(2.1)代入 即可得到数字滤波器的系统函数 ,即
式(3.2)
在双线性变换中,模拟角频率 和数字角频率 存在下面关系:
式(3.3)
可见, 和 之间的变换是非线性的。双线性变换法克服了脉冲响应不变法的频谱混叠问题,其幅值逼近程度好,也可适用于高通、带阻等各种滤波器设计。但是,由于 与 之间是非线性关系,这将直接影响数字滤波器频率响应。
(三)MATLAB中IIR低通数字滤波器的设计方法
MATLAB中利用原型模拟滤波器设计IIR低通数字滤波器的方法为:①根据给定的性能指标和方法首先对设计性能指标中的频率指标进行转换,转换后的频率指标作为模拟低通滤波器原型设计性能指标;②调用相应的MATLAB函数设计模拟低通滤波器,估计模拟滤波器最小阶数和边界频率;③由模拟低通原型经频率变换获得相应的过度模拟滤波器;④采用双线性变换将相应类型的模拟滤波器转换为数字滤波器。
例:用双线性变换法设计一个巴特沃斯低通数字滤波器,性能指标如下:通带截止频率 rad/s,阻带截止频率 rad/s,通带波纹Rp小于3dB,阻带衰减大于15dB,采样频率 。
MATLAB程序:
wp=2000*2*pi;ws=3000*2*pi;Rp=3;Rs=15;
Nn=512;Fs=10000;
[N,Wn]=buttord(wp,ws,Rp,Rs,'s')
[z,p,k]=buttap(N);
[Bp,Ap]=zp2tf(z,p,k);
[b,a]=lp2lp(Bp,Ap,Wn);
[bz,az]=bilinear(b,a,Fs); %用双线性变换法将模拟滤波器转换成数字滤波器
[h,w]=freqz(bz,az,Nn,Fs); %数字滤波器频率响应
subplot(2,2,2); zplane(bz,az);%pzmap(b,a);title('系统零极点图');
Hmag=abs(h); %系统频率响应的模
Hpah=angle(h); %系统频率响应的相位
RHpah=unwrap(Hpah); %展开freqz产生的频率w
……省略绘图程序
程序运行结果结果:
四、IIR滤波器的DSP实现方法
(一)标准型二阶IIR滤波器的实现
在二阶IIR滤波器结构中,标准型结构是最常见的滤波器结构,由IIR滤波器的标准结构图可以写出反馈通道和前向通道的差分方程。
反馈通道:
前向通道:
由式(4.1)和式(4.2),对二阶IIR滤波器进行编程,其中乘法-累加运算可采用单操作数指令或双操作数指令,数据和系数可存放在DARAM中,如图4.1所示。
数据存储器 数据存储器 数据存储器
| w(n-2) |
| AR2 |
| w |
| x(n) |
| w(n-1) |
| b2 |
| AR2 |
| w(n) |
| y(n) |
| AR2 |
| COEF |
图4.1双操作数数据存放和系数表
主程序节选如下:
……
IIR: PORTR PA1,*AR2 ;输入数据x(n)
LD *AR2+0%,16,A ;x(n)送入AH,修改指针
MAC *AR2+0%,*AR3-,A ;第1次乘法累加a1×w(n-1)+x(n)→A
MAC *AR2+0%,*AR3-,A ;第2次乘法累加a2×w(n-2)+A→A
STH A,*AR2 ;保存w(n)
MPY *AR2+0%,*AR3-,A ;乘法运算b0×w(n)+A→A
MAC *AR2+0%,*AR3-,A ;第1次乘法累加b1×w(n-1)+A→A
MAC *AR2,*AR3-,A ;第2次乘法累加b2×w(n-2)+A→A
STH A,*AR2 ;保存y(n)
……
(二)高阶IIR滤波器的实现
一个高阶IIR滤波器可以由若干个二阶基本节相级联或并联构成。实现方法:将高阶IIR滤波器分解成若干个二阶基本节,然后进行级联来实现。特点:各基本节的极、零点,便于系统性能的调整。
以四阶椭圆低通IIR滤波器为例,介绍高阶滤波器的实现方法:
(1)先求出四阶椭圆低通滤波器的传递函数H(z);
(2)再分解成两个级联的二阶基本节,分别求出系数,保存在iir_coff中;
(3)循环执行两次二阶基本节IIR滤波,得到一个滤波后的值;
(4)处理的采样点数由K_FRAME_SIZE决定。
程序节选:
……
irr_y .usect “iir_vars”,1
.def iir_init
.def iir_task
.sect “iir”
iir_init: STM #iir_coff_table,AR1
RPT #K_IIR_SIZE-1
MVPD #iir_table_start,*AR1+
STM #iir_d,AR2
RPTZ A,#5
STL A,*AR2+
RET
.sect “iir”
iir_task: STM #in_buf,AR3
STM #out_buf,AR4
STM #K_FRAME_SIZE-1,BRC
RPTB iir_filter_loop-1
LD *AR3+,8,A
iir_filter:STM #iir_d+5,AR2
STM #iir_coff_table,AR1
……
程序说明:在程序中AR1指向滤波器系数;AR2指向输入数据缓冲;AR3指向采样数据入口;AR4指向输出数据口。该程序可以方便地推广到多节情况只需定义多节系数,并修改K_BIQUAD。
此外,由于字长有限,每个二阶基本节运算后都会带来一定的误差,合理安排各二阶基本节的前后顺序,使系统的精度得到优化。
五、结束语
IIR滤波器以它优越的性能,在数字信号处理领域中占有很重要的地位。IIR滤波器的设计主要是利用成熟的模拟滤波器设计方法。IIR滤波器可以用较少的阶数获得很高的选择特性,所用的存储单元少、运算次数少,具有经济、高效的特点.主要应用在相位要求不敏感的场合。因为IIR数字滤波器是递归结构,极点必须在z平面单位圆内才能稳定,这种结构运算中的四舍五入处理有时会引起寄生振荡.除了有限字长效应以外,不同结构引入的误差也有所不同.在实际设计中,要注意实现中的误差问题.另外,IIR滤波器在对相位要求严格线性的场合,需加全通网络进行较正,增加了滤波器的阶数和复杂性。这时可选用FIR滤波器,它具有严格的线性相位。
参考文献
[l]邹彦主.DSP原理及应用[M].北京:电子工业出版社,2008
[2]丁玉美,高西全.数字信号处理[M].西安:西安电子科技大学出版社,2006
[3]薛年喜.ATLAB在数字信号处理中的应用[M].北京:清华大学出版社
[4]汪安民,程昱.DSP实用子程序集.北京:人民邮电出版社,2005
[5]刘泉,阙大顺.数字信号处理原理与实现[M].北京:电子工业出版社,2005,8下载本文