数字信号处理 实验报告
实验名称:滤波器设计
实验班级: 09信息工程3班 姓 名: 学 号:
指导教师: 张军 实验日期: 11月18号
一、实验目的
1、加深对数字滤波器的常用指标理解。 2、学习数字滤波器的设计方法。
二、实验原理
图1 FIR幅值函数
低通滤波器的常用指标:
(1)通带边缘频率(2)阻带边缘频率(3)通带起伏
;
,
。
; ;
(4)通带峰值起伏(5)阻带起伏
,最小阻带衰减
三、实验结果及分析
1、求系统
的零、极点和幅度频率响应和相位响应。 实验结果如下:
零点为zs =-1.5870 + 1.4470i,-1.5870 - 1.4470i,0.8657 + 1.5779i,0.8657 - 1.5779i,-0.0669
极点为ps =0.1328 + 0.9221i,0.1328 - 0.9221i,0.4736 + 0.4752i,0.4736 - 0.4752i,0.5979 幅度频率响应和相位响应如下:
源代码如下:
b=[0.0528 0.0797 0.1295 0.1295 0.797 0.0528]; a=[1 -1.8107 2.2947 -1.8801 0.9537 -0.2336]; zs=roots(b) ps=roots(a) freqz(b,a)
2、利用MATLAB编程,分别用窗函数法和等波纹滤波器法设计两种FIR数字滤波器,指标要求如下:
通带边缘频率:,通带峰值起伏:。
阻带边缘频率:,最小阻带衰减:。
用窗函数法设计的FIR数字滤波器如下:
源代码如下:
[n,Wn,beta,ftype]=kaiserord([0.3 0.45 0.65 0.75],[0 1 0],[0.01 0.1087 0.01]); h=fir1(n,Wn,ftype,kaiser(n+1,beta),'noscale'); [h1,w1]=freqz(h,1,256); subplot(2,1,1)
plot(w1/pi,20*log10(abs(h1))) xlabel('归一化的频率w') ylabel('幅度响应/dB') grid
subplot(2,1,2) plot(w1/pi,angle(h1)) xlabel('归一化的频率w') ylabel('相位/rad') grid
用等波纹滤波器法设计的FIR数字滤波器如下:
源代码如下:
[n,fpts,mag,wt]=remezord([0.3 0.45 0.65 0.75],[0 1 0],[0.01 0.1087 0.01]); h=remez(n,fpts,mag,wt);%设计出等波纹滤波器 [h1,w1]=freqz(h,1,256); subplot(2,1,1)
plot(w1/pi,20*log10(abs(h1))); xlabel('归一化的频率w') ylabel('幅度响应/dB') grid
subplot(2,1,2) plot(w1/pi,angle(h1)) xlabel('归一化的频率w') ylabel('相位/rad') grid
分析:在幅度频谱上等波纹滤波器阻带边缘比用窗函数实现的更平滑(理想滤波器为垂直下降的)。
从设计的角度考虑,由于窗函数设计法都是通过已有的窗函数对理想滤波器的改造,因此,可以用手算的办法方便的设计滤波器。
而等波纹滤波器,其实现是通过大量的迭代运算来实现,这样的方法一般只能通过软件来设计。
项数的问题由于等波纹滤波器能较平均的分布误差,因此对于相同的阻带衰减,其所需的滤波系数比窗函数的要少。
3、利用MATLAB编程,用脉冲响应不变法和双线性变换法设计一个数字带通滤波器,指标要求如下: 通带边缘频率:阻带边缘频率:
,,
,通带峰值起伏:,最小阻带衰减:
; 。
用脉冲响应不变法设计的数字带通滤波器如下:
源代码如下: Wp=[0.45*pi,0.65*pi]; Ws=[0.3*pi,0.8*pi]; Rp=1; As=40;
T=1;
[N,Wc]=buttord(Wp*T,Ws*T,Rp,As,'s'); [cs,ds]=butter(N,Wc,'s'); [b,a]=impinvar(cs,ds,T); [H,w]=freqz(b,a); mag=abs(H);
db=20*log10(mag/max(mag)); plot(w/pi,db); title('幅频特性') xlabel('w(/pi)'); ylabel('|H(jw)|/(dB)'); grid
用双线性变换法设计的数字带通滤波器如下:
源代码如下: wp1=tan(0.45*pi/2);
wp2=tan(0.65*pi/2); ws1=tan(0.3*pi/2); ws2=tan(0.8*pi/2); Ap=1; As=40;
wp=[wp1 wp2]; ws=[ws1 ws2];
[n,wn]=buttord(wp,ws,Ap,As,'s');%计算滤波器阶数N和3dB截止频率wn Bw=wn(2)-wn(1); %通带宽度 Wo=sqrt(wn(2)*wn(1)); %计算中心频率
[z,p,k]=buttap(n);%计算模拟低通原型滤波器系统函数零、极点和增益因子 [b1,a1] = zp2tf(z,p,k);% 将零极点增益模型转换为传递函数模型 [b2,a2] = lp2bp(b1,a1,Wo,Bw) ;%将低通转换成带通
[b,a] = bilinear(b2,a2,0.5); %用双线性变换法将模拟滤波器转换成数字滤波器 [h,w]=freqz(b,a);
plot(w/pi,20*log10(abs(h))); title('幅频特性') xlabel('w(/pi)'); ylabel('|H(jw)|(/dB)'); grid on
分析:比较可知,用双线性变换法设计的数字带通滤波器的实现效果比脉冲响应不变法设计的好。这是因为用脉冲响应不变法设计的数字带通滤波器可能会有频域混叠的现象,而双线性变换不存在频率混叠问题。
因篇幅问题不能全部显示,请点此查看更多更全内容