2n
2n
N-1
其中,Wr「’)为矩形窗函数的幅度频率特性函数。
海明窗函数的最大旁瓣值比主瓣值低41dB,但它和汉宁窗函数的主瓣宽度是一样大的。
4.
布莱克曼窗
血血二042-05co$上t+0.08cos
3-1丿3-1丿
增加一个二次谐波余弦分量,可进一步降低旁瓣,但主瓣宽度进一步增加,增加N可减少过渡带。
频谱的幅度函数为:
肌辺一
+0.04
5.三角窗函数
三角窗是最简单的频谱函数We「为非负的一种窗函数。
三角窗函数的
时域形式可以表示为:
当n为奇数时:
2k
w(k)=
n1'
2(n-k1)
当n为偶数时:
2k-1
它的频域特性为:
三角窗函数的主瓣宽度为8n/N,比矩形窗函数的主瓣宽度增加了倍,但是它的旁瓣宽度却小得多。
6.凯泽窗
以上几种窗函数,都是以增加主瓣宽度为代价来降低旁瓣。
凯泽窗
则可自由选择主瓣宽度和旁瓣衰减,如图
(2)。
w(n)
LO
0.5
0N-1N_\
y—j—
图
(2)
式中lo(x)是零阶贝塞尔函数,参数B可自由选择,决定主瓣宽度与旁瓣衰减。
B越大,w(n)窗越窄,其频谱的主瓣变宽,旁瓣变小。
四MATLAB仿真滤波实现
4.1MATLAB软件简介
MATLAB是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。
它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平。
4.2设计中主要用到的MATLAB函数
4.2.1fir1函数
fir1函数实现线性相位FIR数字滤波器的窗函数法设计.利用这一函数可以设计出标准的低通、高通、带通和带阻线性相位FIR滤波器。
调用格式:
(1)b=fir1(n,wn)
用海明窗设计低通或带通的FIR滤波器.wn是截止频率,以“弧度”为单位。
fir1函数返回FIR滤波器的系数向量b。
如果wn是一个标量,则返回的是一个n阶的低通FIR数字滤波器。
(2)b=fir1(n,wn,'type','window')
‘type'为滤波器的类型,当type=high时,设计高通FIR滤波器;当type=stop时,设计带阻FIR滤波器。
向量window用来指定窗函数类型,其长度为n+1,缺省时为海明窗。
4.2.2freqz函数
为了检验所设计的数字滤波器是否正确,可以画出其幅频特性.MATLAB提供了求解数字滤波器频率响应的函数freqz,其调用格式如下:
[h,w]=freqz(b,a,n)
返回数字滤波器的n点频率响应h和频率向量w。
若n缺省,则自动取n为默认值512。
4.2.3plot函数
plot(Y)如果Y是mKn的数组,以1:
m为X横坐标,Y中的每一列元素为Y坐标,绘制n条曲线;如果Y是nx1或者1Xn的向量,则以1:
n为横坐标,Y为坐标表绘制1条曲线;如果Y是复数,则plot(Y)等效于plot(real(Y),imag(Y));其它使用情况下,忽略坐标数据中的虚部。
4.2.4title函数
title就是给已经画出的图加一个标题.title('')里面的内容就是图片标题的名称。
4.2.5legend函数
legend(string1,string2,string3,...)
分别将字符串1、字符串2、字符串3……标注到图中,每个字符串对应的图标为画图时的图标。
Xlabel()函数给x坐标轴添加标注,ylabel()函数给y坐标轴添加标注。
4.2.7holdon
Holdon命令可以保护当前的坐标系,使以后再使用plot()函数时将新的曲线叠印在原来的图上,用holdoff则可以取消保护状态。
4.2.8axis
axis(【xminxmaxyminymax】)设置坐标轴的极限范围。
4.3实验程序及结果分析
(1)相同的窗口加不同的窗长(M=10,20,40)程序一、汉宁窗不同窗长
wc=0.25;
N=[112141];
M=N-1;
hl1=fir1(M
(1),wc,hanning(N
(1)));
hl2=fir1(M
(2),wc,hanning(N
(2)));
hl3=fir1(M(3),wc,hanning(N(3)));
[h1,w11]=freqz(hl1,1,512);
[h2,w12]=freqz(hl2,1,512);
[h3,w13]=freqz(hl3,1,512);
plot(w11/pi,20*log(abs(h1)/max(abs(h1))));
holdon
plot(w12/pi,20*log(abs(h2)/max(abs(h2))),':
');
holdon
plot(w13/pi,20*log(abs(h3)/max(abs(h3))),'--');
gridon;
axis([01-35010]);
3)|');
title('汉宁窗不同窗长');
xlabel('3/n');ylabel('|H(eAj
legend({'M=10','M=20','M=40'});
汉宁窗不同窗长
图(3)分别给出了M=1O,M=20及M=40时的He''的幅频特性曲线。
由图可知当M的值逐渐增大,即窗口的长度逐渐变长时,过渡带的宽度逐渐变窄,但阻带内的波动幅度没有多大改善。
说明调整窗口长度可以有效的控制过度带的宽度,但不改变旁瓣的相对宽度,不能加大阻带的衰减。
(2)不同窗口加相同的窗长
程序二、同窗长的汉宁窗与矩形窗比较
wc=0.25;
N=21;
M=N-1;
hl1=fir1(M,wc,hanning(N));
hl2=fir1(M,wc,boxcar(N));
[h1,w11]=freqz(hl1,1,512);
[h2,w12]=freqz(hl2,1,512);
plot(w11/pi,20*log(abs(h1)/max(abs(h1))));
holdonplot(w12/pi,20*log(abs(h2)/max(abs(h2))),':
');
gridon;
axis([01-35010]);
title('
同窗长的汉宁窗与矩形窗比较');
xlabel('
3/n');ylabel('|H(eAj3)|')
legend({'
汉宁窗','矩形窗'})
同裔长的汉宁裔与矩形窗比较
由上图可以看出,加汉宁窗比加矩形窗可以更好的减小阻带内的波动,但同时却增大了过渡带的宽度。
因此在选择窗函数时,既要考虑过渡带的宽度,也要考虑阻带波动。
一般选着窗函数的原则是在保证阻带衰减满足要求的情况下,尽量减小过渡带的宽度。
五.心得体会与总结
通过一周的课设,我对数字信号处理有了更进一步的理解,通过对数字滤波器的设计,我又了解了数字滤波器的基本结构和基本特性。
通过对作为论文的重要部分MATLAB的运用,从而大大提高了我对计算,变成和绘图于一体的该应用软件的运用能力。
在每次的课程设计中,遇到问题,最好的办法就是问别人,因为每个人掌握情况不一样,不可能做到处处都懂,发挥群众的力量,复杂的事情就会变得很简单。
这一点我深有体会,在很多时候,我遇到的困难或许别人之前就已遇到,向他们请教远比自己在那冥思苦想来得快。
而且通过此次的课程设计,使我在学习理论基础知识的同时学会了应用MATLAB,增强了对理论知识的理解。
六.参考文献
1.谢平王娜林洪彬编著《信号处理原理及应用》机械工业出版社
2008.10
2.万永革编著《数字信号处理的MATLAB实现》科学出版社
3.王世一著《数字信号处理》(修订版)北京理工大学出版社2003.2