步骤如下:
1)确定数字滤波器的通带频率、阻带频率,通带最大衰减和阻带最小衰减。
2)计算对应的模拟低通滤波器的频率。
3)确定模拟低通滤波器的阶数N和3dB截止频率?c。 4)模拟低通滤波器的系统函数H(s)。
5)由H(s)经过双线性变换法确定数字低通滤波器的系统函数H(s)。 (4)Matlab源程序:
fp=100;fs=300;Fs=1000; rp=3;rs=20; wp=2*pi*fp/Fs; ws=2*pi*fs/Fs; Fs=Fs/Fs;% 使Fs=1
[n,wc]=buttord(wp,ws,rp,rs,'s'); %巴特沃斯模拟低通滤波器阶数和3db截止频率 [z,p,k]=buttap(n); %求零极点及增益
[bp,ap]=zp2tf(z,p,k) %由零点极点增益形式转换为传递函数形式
[bs,as]=lp2lp(bp,ap,wp) %低通模拟原型滤波器至低通滤波器的频率变换 [bz,az]=bilinear(bs,as,Fs/2) %运用双线性变换法把模拟转换成数字滤波器 [h,w]=freqz(bz,az,256,Fs*1000); %求频率响应 plot(w,abs(h));grid ;
xlabel('频率/Hz');ylabel('幅值');
(5)结果和仿真波形: 结果:
bp =
0 0 0 1.0000 ap =
1.0000 2.0000 2.0000 1.0000 bs =
0.2481 as =
1.0000 1.2566 0.7896 0.2481
bz =
0.0753 0.2259 0.2259 0.0753 az =
1.0000 -0.8266 0.5154 -0.0865
仿真波形:
3.FIR(有限脉冲响应)数字滤波器设计
设计一:调用MATLAB工具箱函数fir1设计基于凯塞窗的FIR滤波器 (1)设计题目:基于凯塞窗的FIR滤波器设计
(2)设计要求:(通带截止频率 wp=0.4*pi;阻带截止频率ws=0.7*pi; 阻带最小衰减Rs=45分贝;窗函数类型:凯塞窗) (3)设计原理:
设欲设计的滤波器的理想频率响应为
hd(n)Hd(ej?),单位脉冲响应为
,
hd(n)j?与
?Hd(ej?)是一对傅式变换,因此有
Hd(e)??n???hd(n)e?jn?hd(n)?12?????Hd(eHd(ej?)e)jn?d?
根据给定的
j?求得的hd(n)一般是无限长的且是非因果的。为
了得到一个因果的有限长的滤波器h(n),最直接的方法是截断hd(n),或者说用一个窗口函数w(n)对hd(n)进行加窗处理
h(n)?hd(n)w(n)h(n)
成为实际设计FIR滤波器的单位脉冲响应,其频率响应为
j?H(e)为:
N?1j?H(e)??h(n)en?0j?
其中N为窗口w(n)的长度。窗口函数的形状和窗口长度N决定了窗函数法设计出的FIR滤波器的性能。 (4)Matlab源程序:
wp=0.4*pi; ws=0.7*pi; Rs=45;
DB=ws-wp; %计算过度带宽 beta=0.5842*(Rs-21)^0.4+0.07886*(Rs-21); %计算凯撒窗的控制参数 M=ceil((Rs-8)/2.285/DB); %计算凯撒窗所需阶数M
wc=(wp+ws)/2/pi; %计算理想低通滤波器通带截止频率 hn=fir1(M,wc,kaiser(M+1,beta)); %调用fir1函数计算低通FIRDF的h(n) figure(1); plot(hn); figure(2); freqz(hn,1,512)
(5)结果和仿真波形:
设计二:不调用fir1函数,直接按照窗函数设计法编程
(1)设计题目:基于布莱克曼窗(三阶升余弦窗)的FIR滤波器 (2)设计要求:
(低端阻带截止频率ws1=0.2*pi;低端通带截止频率 wp1=0.35*pi; 高端阻带截止频率 ws2=0.8pi;高端通带截止频率 wp2=0.65pi;通带最大衰减Rp=1分贝;阻带最小衰减Rs=60分贝; 窗函数类型:布莱克曼窗) (3)Matlab源程序: 函数一:
function [db,mag,pha,grd,w]=freqz_m(b,a); [H,w]=freqz(b,a,1000,'whole'); H=(H(1:1:501))'; w=(w(1:1:501))'; mag=abs(H);
db=20*log10((mag+eps)/max(mag)); pha=angle(H);
grd=grpdelay(b,a,w);
函数二:
function hd=ideal_lp(wc,M); alpha=(M-1)/2; n=[0:1:(M-1)]; m=n-alpha+eps;
hd=sin(wc*m)./(pi*m);
主程序:
ws1=0.2*pi;wp1=0.35*pi;wp2=0.65*pi;ws2=0.8*pi; As=60;
tr_width=min((wp1-ws1),(ws2-wp2)); M=ceil(11*pi/tr_width)+1; n=[0:1:M-1];
wc1=(ws1+wp1)/2;wc2=(wp2+ws2)/2; hd=ideal_lp(wc2,M)-ideal_lp(wc1,M); w_bla=(blackman(M))'; h=hd.*w_bla;