摘要:
在进行信号处理算法的嵌入式代码实现时,经常需要设计滤波器来对信号进行预处理或者后处理。常用的有IIR滤波器和FIR滤波器。虽然IIR滤波器在稳定性和相位响应上比FIR滤波器较差,但是在相同滤波需要下IIR的MIPS和内存要求要少很多。本文将从工程实践的角度来讲解IIR滤波器的设计。本文采用间接法设计数字滤波器:先设计模拟低通滤波器在通过双线性变换法得到数字低通、高通、带通、带阻滤波器。
先介绍几种模拟滤波器及其特性,方便根据实际需求来选择滤波器类型。
1. 巴特沃斯 Butterworth
也被称作最大平坦滤波器。巴特沃斯滤波器的特点是通频带内的频率响应曲线最大限度平坦,没有纹波。
一阶巴特沃斯滤波器的衰减率为每倍频6分贝,每十倍频20分贝。二阶巴特沃斯滤波器的衰减率为每倍频12分贝、三阶巴特沃斯滤波器的衰减率为每倍频18分贝、如此类推。巴特沃斯滤波器的振幅对角频率单调下降,并且也是唯一的无论阶数,振幅对角频率曲线都保持同样的形状的滤波器。只不过滤波器阶数越高,在阻频带振幅衰减速度越快。
MATLAB Butterwirth滤波器设计函数:
[b,a] = butter(n,Wn,‘ftype’)
[z,p,k] = butter(n,Wn,‘ftype’)
[A,B,C,D] = butter(n,Wn,‘ftype’)
n-滤波器阶数
‘ftype’ Wn归一化频率[0,1]
‘high’ 高通截断频率Wn
‘low’ 低通截断频率Wn
‘stop’ 带阻频率Wn = [w1 w2]
‘bandpass’ 带通频率Wn = [w1 w2]
z是零点响应矢量,p是极值响应矢量,k是gain值。
b,a 为IIR直接型的分子分母参数: