用MATLAB设计FIR数字滤波器.实验八.doc
文本预览下载声明
WORD 格式 整理
学习 参考 资料 分享
课程名称:
课程名称:数字信号处理
实验成绩:
指导教师:
实 验 报 告
院系: 信息工程学院
班级: 学号:
姓名:
日期: 2011. 11.26
实验八:用MATLAB设计FIR数字滤波器
1、 选择合适的窗函数设计FIR数字低通滤波器,要求: wp=0.2,Rp=0.05dB; ws=0.3,As=40dB。描绘该滤波器的脉冲响应、窗函数及滤波器的幅频响应曲线和相频响应曲线。
程序清单如下:
wp=0.2*pi;ws=0.3*pi;deltaw=ws-wp;
N0=ceil(6.6*pi/deltaw);
N=N0+mod(N0+1,2) %为实现FIR类型1偶对称滤波器,应确保N为奇数
windows=(hamming(N));
wc=(ws+wp)/2;
hd=ideal_lp(wc,N);
b=hd.*windows;
[db,mag,pha,grd,w]=freqz_m(b,1);
n=0:N-1;dw=2*pi/1000;
Rp=-(min(db(1:wp/dw+1))) %检验通带波动
As=-round(max(db(ws/dw+1:501))) %检验最小阻带衰减
subplot(2,2,1);stem(n,b);
axis([0,N,1.1*min(b),1.1*max(b)]);title(实际脉冲响应);
xlabel(n);ylabel(h(n));
subplot(2,2,2);stem(n,windows);
axis([0,N,0,1.1]);title(窗函数特性);
xlabel(n);ylabel(wd(n));
subplot(2,2,3);plot(w/pi,db);
axis([0,1,-80,10]);title(幅度频率响应);
xlabel(频率(单位:\pi));ylabel(H(e^{j\omega}));
set(gca,XTickMode,manual,XTick,[0,wp/pi,ws/pi,1]);
set(gca,YTickMode,manual,YTick,[-50,-20,-3,0]);grid
subplot(2,2,4);plot(w/pi,pha);
axis([0,1,-4,4]);title(相位频率响应);
xlabel(频率(单位:\pi));ylabel(\phi(\omega));
set(gca,XTickMode,manual,XTick,[0,wp/pi,ws/pi,1]); set(gca,YTickMode,manual,YTick,[-3.1416,0,3.1416,4]);grid
函数 ideal_lp 调用部分如下
function hd=ideal_lp(wc,N) %点0到N-1之间的理想脉冲响应
%wc=截止频率(弧度)
%N=理想滤波器的长度
tao=(N-1)/2;
n=[0:(N-1)];
m=n-tao+eps; %加一个小数以避免0作除数
hd=sin(wc*m)./(pi*m);
函数 freqz_m 调用部分如下
function[db,mag,pha,grd,w]=freqz_m(b,a)
[H,w]=freqz(b,a,1000,whole);
H=(H(1:501));w=(w(1:501));
mag=abs(H);
db=20*log10((mag+eps)/max(mag));
pha=angle(H);
grd=grpdelay(b,a,w);
程序运行结果如下:
N =
67
Rp =
0.0394
As =
52
2、 用凯塞窗设计一个FIR数字高通滤波器,要求: wp=0.3,Rp=0.1dB;ws=0.2,As=50dB。描绘该滤波器的脉冲响应、窗函数及滤波器的幅频响应曲线和相频响应曲线。
程序清单如下:
N=61;As=50;
wp=0.3*pi;ws=0.2*pi;
beta=0.112*(As-8.7)
windows=kaiser(N,beta);
显示全部