我们的教科书中总喜欢先介绍IIR,再介绍FIR,我也先介绍IIR。
IIR滤波器的设计:
低通滤波器顾名思义就是低频率成分通过,高频率成分截止,那么在设计一个低通滤波器时首先要明白想要截止多大的频率。比如想截掉4Hz以上的信号,理想状态下就是将4Hz以上的信号成分全部截止,4Hz以下的信号全部保留。然而事实上几乎不存在这样的滤波器,通常情况下总是在通过频率和截止频率之间存在一个过渡带。通过频率这部分称为通带,允许通过的最大频率为通带截止频率ωp,截至频率这部分称为阻带,阻带最小截至频率为ωs,通带和阻带之间的部分为过渡带,也即ωp~ωp。通带之间的波动称为通带波动δp,阻带之间的波动称为阻带波动δs。
数字滤波器设计中,Wp和Ws为归一化角频率,如果工程要求设计低通数字滤波器满足通带截止频率为fp = 40,阻带截止频率fs = 50,则fp,fs和Wp,Ws之间的转换关系为:
Wp = 2*pi*fp/Fs;
Ws = 2*pi*fs/Fs;
截止频率的定义是当输出幅值响应下降到输入幅值的-3dB ( 20*log(1/sqrt(2)) ),也就是0.707(也就是 1/sqrt(2))时对应的频率,也称3db截频。
%%巴特沃斯数字滤波器函数:
[n,Wc] = buttord(Wp/pi,Ws/pi,Ap,As);
[b,a] = butter(n,Wc,'low');%低通滤波器
----------------------------------------
%% 切比雪夫1型低通滤波器
[N,wc] = cheb1ord(Wp/pi,Ws/pi,Ap,As);
[b,a] = cheby1(N,Ap,wc,'low');
%% 椭圆低通滤波器
[N,wc] = ellipord(Wp/pi,Ws/pi,Ap,As);
[b,a] = ellip(N,Ap,As,wc,'low');
FIR滤波器的设计:
采用窗函数法设计理想低通,高通滤波器,参考北京交通大学陈后金主编的【数字信号处理】5.2节 窗函数法设计线性相位FIR数字滤波器P164,和P188。
设计步骤如下:
1) 确定滤波器类型,不同的FIR类型可设计不同类型的滤波器,I型可设计LP(低通滤波器),HP(高通滤波器),BP(带通滤波器),BS(带阻滤波器)。
2) 确定设计的滤波器的参数
Eg:若要设计一个低通滤波器,fp=20,fs=30;Ap=1,As=40,则3db截频Wc = 2*pi*(fs-fp)/Fs;Fs为采样频率。
当选定某一窗函数时,衰耗Ap和As就已经确定,凯撒窗除外。Ap和As的计算方法可参看另外一篇博客:
3) 确定窗函数
50<A , β = 0.1102(A-8.7);
21<=A<=50, β=0.5842(A-21)^0.4 + 0.07886(A-21);
A<21, β = 0;
4) 确定滤波器的阶数M,首先确定滤波器的长度N。对于除凯撒窗以外的窗函数,N值由以下公式确定:
N>=(窗函数近似过渡带宽度)/(Wp-Ws)
若采用Kaiser窗,则
M≈ (A-7.95)÷ 2.285*|Wp-Ws|,A>21。其中,A = -20lg(min(δp,δs))
5) 理想滤波器脉冲信号如下:
hd = (Wc/pi)*sinc(Wc**M)/pi);%低通
hd = -(Wc/pi)*sinc(Wc**M)/pi);%高通
6) 加窗:
W = hanning(N); W = hamming(N); W = blackman(N); N = M+1;
W = kaiser(N,beta);
7) 截断
h = hd.*W;
8)滤波
sigFiltered = filter(h,[1],signal);