采用窗函数法设计理想低通,高通滤波器,参考北京交通大学陈后金主编的【数字信号处理】5.2节 窗函数法设计线性相位FIR数字滤波器P164,和P188。
设计步骤如下:
1) 确定滤波器类型,不同的FIR类型可设计不同类型的滤波器,I型可设计LP(低通滤波器),HP(高通滤波器),BP(带通滤波器),BS(带阻滤波器)。
Fir I型 | Fir II型 | Fir III型 | Fir IV型 |
LP,HP,BP,BS | LP,BP | BP | 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的计算方法可参看另外一篇博客: https://www.cnblogs.com/xhslovecx/p/10118570.html
3) 确定窗函数
窗的类型 | 主瓣宽度 | 近似过渡带宽度 | δp,δs | Ap(dB) | As(dB) |
矩形窗 | 4pi/N | 1.8pi/N | 0.09 | 0.82 | 21 |
Hann | 8pi/N | 6.2pi/N | 0.0064 | 0.056 | 44 |
Hamming | 8pi/N | 7pi/N | 0.0022 | 0.019 | 53 |
Blackman | 12pi/N | 11.4pi/N | 0.0002 | 0.0017 | 74 |
Kaiser | 可调窗,需要确定 β值 |
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)
Fir I型 | Fir II型 | Fir III型 | Fir IV型 |
脉冲响应h[k]为偶对称 | h[k]为偶对称 | h[k]为奇对称 | h[k]为奇对称 |
窗函数长度:N=mod(N+1,2)+N | N=mod(N,2)+N | N=mod(N+1,2)+N | N=mod(N,2)+N |
阶数M=N-1为偶数 | M=N-1为奇数 | M=N-1为偶数 | M=N-1为奇数 |
若采用Kaiser窗,则
M≈ (A-7.95)÷ 2.285*|Wp-Ws|,A>21。其中,A = -20lg(min(δp,δs))
5) 理想滤波器脉冲信号如下:
hd = (Wc/pi)*sinc(Wc*(k-0.5*M)/pi);%低通
hd = -(Wc/pi)*sinc(Wc*(k-0.5*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);
matlab代码实现详见:FIR I 型 滤波器设计