实验4 基于MATLAB的FIR数字滤波器设计 联系客服

发布时间 : 星期二 文章实验4 基于MATLAB的FIR数字滤波器设计更新完毕开始阅读3e9dd923031ca300a6c30c22590102020740f2aa

图4-2

用freqz(h2,1,256);直接得图:

二、对课本作业9.23画图。 2-1)用汉宁窗实现:

1)手动计算

>> n=0.001:58.001;

>> hd=sin(0.18125*pi*(n-29))./(pi*(n-29)); >> win=0.5+0.5*cos(2*pi*(n-29)/58); >> h1=2*cos(pi*(n-29)/2).*hd.*win; >> [hh1,w1]=freqz(h1,1,256); >> figure(1)

>> subplot(2,1,1)

>> plot(w1,20*log10(abs(hh1))) >> grid

>> xlabel('数字频率w/rad');ylabel('幅度/db'); >> subplot(2,1,2)

>> plot(w1,angle(hh1)) >> grid

>> xlabel('数字频率w/rad');ylabel('相位/rad');

图4-3

2-2)用自带的fir1函数:

>> n=59;

>> wn=[3/8 5/8];

>> h2=fir1(n,wn,'bandpass',hann(n+1)); >> [hh2,w2]=freqz(h2,1,256); >> figure(2)

>> subplot(2,1,1)

>> plot(w2,20*log10(abs(hh2)))

>> xlabel('数字频率w/rad');ylabel('幅度/db'); >> grid

>> subplot(2,1,2)

>> plot(w2,angle(hh2))

>> xlabel('数字频率w/rad');ylabel('相角/rad'); >> grid

图4-4

2-3)用等波纹法设计:

调用函数[n,fpts,mag,wt]=remezord(f,a,dev) f=[0.2625 0.375 0.625 0.7375] a=[0 1 0]

dev=[0.01 0.1087 0.01]

>> [n,fpts,mag,wt]=remezord([0.2625 0.375 0.625 0.7375],[0 1 0],[0.01 0.1087 0.01]); >> h2=remez(n,fpts,mag,wt); >> [hh2,w2]=freqz(h2,1,256); >> figure(2)

>> subplot(2,1,1)

>> plot(w2/pi,20*log10(abs(hh2))) >> grid

>> xlabel('归一化频率w');ylabel('幅度/db'); >> subplot(2,1,2)

>> plot(w2/pi,angle(hh2)) >> grid

>> xlabel('归一化频率w');ylabel('相位/rad'); >> h2 画图为:

另外带通滤波器还可以用低通和高通级联的方法实现,因为步骤过多,这里不作讨论。

三、实验分析:

1)总结:FIR滤波器实现一般采用窗函数法和等纹波设计法。窗函数法还包含两个分支,一种是用公式先手动算出N值和其他对应得窗函数参数值,再代入窗函数和fir1实现,一种是用函数*rord估算出N和相应参数再用fir1实现。不过要注意*rord会低估或高估阶次