实验11用MATLAB设计FIR数字滤波器综述
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验11 用MATLAB 设计FIR 数字滤波器
一、实验目的:
1、加深对窗函数法设计FIR 数字滤波器的基本原理的理解。
2、学习用MA TLAB 语言的窗函数法编写设计FIR 数字滤波器的程序。
3、了解MATLAB 语言有关窗函数法设计FIR 数字滤波器的常用函数用法。
二、实验内容及步骤
2、选择合适的窗函数设计FIR 数字低通滤波器,要求: w p =0.2π,R p =0.05dB ; w s =0.3π,A s =40dB 。描绘该滤波器的脉冲响应、窗函数及滤波器的幅频响应曲线和相频响应曲线。 分析:根据设计指标要求,并查表11-1,选择汉宁窗。程序清单如下: function hd=ideal_lp(wc,N)
wp=0.2*pi;ws=0.3*pi;deltaw=ws-wp; tao=(N-1)/2; n=[0:(N-1)];
m=n-tao+eps; hd=sin(wc*m)./(pi*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);
wp=0.2*pi;ws=0.3*pi;deltaw=ws-wp; wc=(ws+wp)/2;
课程名称:数字信号处理 实验成绩: 指导教师:
实 验 报 告
院系: 信息工程学院 班级: 电信二班 学号: 姓名: 日期:
N0=ceil(6.6*pi/deltaw);
N=N0+mod(N0+1,2)
windows=(hanning(N))';
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
N =67
Rp =0.0706
As = 44
20
40
60
实际脉冲响应
n
h (n )
窗函数特性
n
w d (n
)
0.20.3
1
-50
-20
-3
0幅度频率响应
频率(单位:π)
H (e j ω)
0.20.3
1
-3.1416
3.1416
4
相位频率响应
频率(单位:π)
φ(ω)
3、用凯塞窗设计一个FIR 数字高通滤波器,要求: w p =0.3π,R p =0.1dB ;w s =0.2π,A s =50dB 。描绘该滤波器的脉冲响应、窗函数及滤波器的幅频响应曲线和相频响应曲线。 程序清单如下:
function hd=ideal_lp(wc,N) tao=(N-1)/2; n=[0:(N-1)]; m=n-tao+eps; hd=sin(wc*m)./(pi*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);
wp=0.3*pi;ws=0.2*pi;
deltaw=wp-ws;
N0=ceil(6.6*pi/deltaw);
N=N0+mod(N0+1,2)
windows=(kaiser(N,7.865))';
wc=(ws+wp)/2;
hd=ideal_lp(pi,N)-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(wp/dw+1:501))) %检验通带波动
As=-round(max(db(1:ws/dw+1))) %检验最小阻带衰减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,-100,2]);title('幅度频率响应');
xlabel('频率(单位:\pi)');ylabel('H(e^{j\omega})'); set(gca,'XTickMode','manual','XTick',[0,ws/pi,wp/pi,1]); set(gca,'YTickMode','manual','YTick',[,-40-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,ws/pi,wp/pi,1]); set(gca,'YTickMode','manual','YTick',[-pi,0,pi]);grid
N =67
Rp = 0.2321