《数字信号处理》
课程设计报告
FIR数字滤波器设计及MATLAB实现
专 业: 通信工程 班 级: 通信09-1BF 组 次: 第10组 姓 名: 张 三 学 号: 14062300513
FIR数字滤波器设计及MATLAB实现
一、设计目的
MATLAB是一种以数值计算和数据图示为主的计算机软件,并包含适应多个学科的专业软件包,以及完善程序开发功能。在MATLAB中设计并实现FIR数字滤波器,就是MATLAB软件在信号处理中的应用。通过这次课程设计,以期我们能更加熟悉MATLAB的功能,掌握MATLAB程序设计,为以后的毕业设计奠定一定的基础。
二、设计任务
用窗函数法设计线性相位FIR低通滤波器,该滤波器的通带截止频率wc??/4,单位脉冲响应h(n)的长度M=21,并绘出h(n)及其幅度响应特性曲线。
三、设计原理
① 窗函数设计法的基本原理:为了用H(e)??h(n)en?0jwM?1?jnw逼近理想的频率响应
Hd(e)?jwn????hd(n)e??jnw,获取有限长序列h(n)的最有效方法是用一个有限长的窗口函数
序列w(n)来截取无限长序列hd(n),即: h(n)=w(n)hd(n) 其中:
?j?w?iw?e?w?wcHd(e)????0?wc?w??
hd(n)?sinwc(n??)1wc?j?wjnwdw()= eH?de?2?wc?(n??)?? ② 在MATLAB信号处理工具箱中为用户提供了Boxcar(矩形),Bartlet(巴特利特),
Hanning(汉宁)等函数,这些函数可通过“help signal﹨signal”获取。由于这些窗函数调用格式相同,下面仅以矩形函数为例说明其调用格式。
格式:w=boxcar(M)
功能:返回M点矩形窗序列。
窗的长度M又称为窗函数设计FIR数字滤波器的阶数。根据卷积理论可知,
H(e)=
因此,H(jw12?????Hd(e)W(ej?j(w??))d?
ejw)逼近程度的好坏完全取决于窗函数的频率特性。表(1)给出了部分窗函数
的频率特性。
表(1) 在相同条件下,部分窗函数的频率特性
名称 Boxcar (矩形) Bartlet (巴特利特) Hanning (汉宁) Hamming(哈明) Blackman(布莱克曼)
主 瓣 带 宽 4?/M 8?/M 8?/M 8?/M 12?/M 过 渡 带 宽 1.8?/M 4.2?/M 6.2?/M 6.6?/M 11?/M 最 小 阻 带 衰 减 21dB 25dB 44dB 51dB 74dB 四、设计过程
在这里我假设低通滤波响应的频率响应为
H(ediw?j?w??e?w?wc )????0?wc?w??中心点??(N?1)/2=(21-1)/2=10 ;
w??/4
c相应的单位脉冲响应hd(n)为
hd(n)?sinwc(n??)1wc?j?wjnw()dw= eH?de?2?wc?(n??)sin??/4(n?10)?
?(n?10)?? =
对于滤波器窗函数序列的形状及长度的选择很关键,一般希望窗函数满足以下两项要求:
⑴ 窗函数主瓣尽可能地窄,以获取较陡的过渡带。
⑵ 尽量减少窗谱的最大旁瓣的相对幅度。也就是能尽量集中于主瓣,这样使肩峰和波纹减少,就可增大阻带的衰减。
但是这两项是不能同时都满足的。当选用主瓣宽度较窄时,虽然得到较陡的过渡带,但通带和阻带的波动明显增加;当选用最小的旁瓣幅度时,虽能得到平坦的幅度响应和较小的阻带波纹,但过渡带会加宽,也即主瓣会加宽。因此,对于这个设计,我决定采用矩形窗设计。
h(n)?hd(n)w(n) 0?n?N?1 而对于矩形窗
??10?n?20 w(n)?RN(n)? ?
??0其他
WR(e)?WR(w)ejw?10jw
WR(w)?sin(21w/2)
sin(w/2)sin??/4(n?10)??(n?10) h(n)?hd(n)w(n)=
20RN(n)
FIR滤波器的系统函数H(z)
H(z)??h(n)z=?n?0n?0?n20sin??/4(n?10)??(n?10)RN(n)z?n
MATLAB源程序为:
M=21;wc=pi/4; %理想低通滤波器参数 n=0:M-1;r=(M-1)/2; nr=n-r+eps*((n-r)==0);
hdn=sin(wc*nr)/pi./nr; %计算理想低通单位脉冲响应hd(n)
if rem(M,2)~=0,hdn(r+1)=wc/pi;end; %M为奇数时,处理n=r点的0/0型 wn1=boxcar(M); %矩形窗 hn1=hdn.*wn1'; %加窗 subplot(2,1,1);stem(n,hn1,'.');line([0,20],[0,0]); xlabel('n'),ylabel('h(n)'),title('矩形窗设计的h(n)'); hw1=fft(hn1,512);w1=2*[0:511]/512; %求频谱 subplot(2,1,2),plot(w1,20*log10(abs(hw1)))
xlabel('w/pi'),ylabel('幅度(dB)');title('幅度特性(dB)');
程序运行结果如下图:
结论:
通过这次课程设计,我们可总结得知窗函数设计FIR滤波器的步骤: ①根据技术要求确定待求滤波器的单位取样响应。
②由过渡带及阻带衰减的要求,选择窗函数的形式,并估计窗口长度N。 ③计算滤波器的单位取样响应。 ④验算技术指标是否满足要求。
而在用窗函数设计FIR数字滤波器的时候,我们应该特别注意窗函数序列的形状及长度的选择。即设计窗函数的时候,窗函数形式的选择最为关键。
五、收获与体会
因为这次课程设计,我重新温习了有关FIR滤波器的这部分内容,以前遗留下的很多疑问再通过这次作业,有一部分已得到解决。用MATLAB设计滤波器,使我对MATLAB这个软件有了更深层次的了解,相信如果以后还要用MATLAB这个软件的话,特别是写有关数字信号处理方面的程序,应该不是问题。