窗函数法设计一个数字带通FIR滤波器.docx
- 文档编号:28181935
- 上传时间:2023-07-09
- 格式:DOCX
- 页数:20
- 大小:156.92KB
窗函数法设计一个数字带通FIR滤波器.docx
《窗函数法设计一个数字带通FIR滤波器.docx》由会员分享,可在线阅读,更多相关《窗函数法设计一个数字带通FIR滤波器.docx(20页珍藏版)》请在冰豆网上搜索。
窗函数法设计一个数字带通FIR滤波器
课程设计任务书
学生姓名:
专业班级:
指导教师:
工作单位:
信息工程学院
题目:
利用Matlab仿真软件系统结合窗函数法设计一个数字带通FIR滤波器
初始条件:
1.《数字信号处理》基本理论知识
2.《信号与系统》基本理论知识
3.MATLAB编程基础知识
4.装有MATLAB的PC机
要求完成的主要任务:
分别使用矩形窗、三角形窗、汉明窗、布莱克曼窗、凯泽窗进行设计,并输出滤波器的频率特性。
时间安排:
第20周理论设计、实验室安装调试,地点:
鉴主15楼通信实验室一
序号
阶段内容
所需时间
1
方案设计
1天
2
软件设计
2天
3
系统仿真
1天
4
答辩
1天
总计
5天
指导教师签名:
年月日
系主任(或责任教师)签名:
年月日
中文摘要
现代图像、语声、数据通信对线性相位的要求是普遍的。
正是此原因,使得具有线性相位的FIR数字滤波器得到大力发展和广泛应用。
在实际进行数字信号处理时,往往需要把信号的观察时间限制在一定的时间间隔内,只需要选择一段时间信号对其进行分析。
这样,取用有限个数据,即将信号数据截断的过程,就等于将信号进行加窗函数操作。
而这样操作以后,常常会发生频谱分量从其正常频谱扩展开来的现象,即所谓的“频谱泄漏”。
当进行离散傅立叶变换时,时域中的截断是必需的,因此泄漏效应也是离散傅立叶变换所固有的,必须进行抑制。
而要对频谱泄漏进行抑制,可以通过窗函数加权抑制DFT的等效滤波器的振幅特性的副瓣,或用窗函数加权使有限长度的输入信号周期延拓后在边界上尽量减少不连续程度的方法实现。
而在后面的FIR滤波器的设计中,为获得有限长单位取样响应,需要用窗函数截断无限长单位取样响应序列。
另外,在功率谱估计中也要遇到窗函数加权问题。
由此可见,窗函数加权技术在数字信号处理中的重要地位。
传统的数字滤波器的设计过程复杂,计算工作量大,滤波特性调整困难,影响了它的应用。
本文介绍了一种利用MATLAB信号处理工具箱(SignalProcessingToolbox)快速有效的设计由软件组成的常规数字滤波器的设计方法。
本文给出了使用MATLAB语言进行程序设计和利用信号处理工具箱的FDATool工具进行界面设计的方法。
利用MATLAB设计滤波器,可以随时对比设计要求和滤波器特性调整参数,直观简便,极大的减轻了工作量,有利于滤波器设计的最优化。
Abstract
Amodernimage,Voiceanddatacommunicationstothelinearphaserequirementisuniversal.Itisforthisreason,makingalinearphaseFIRdigitalfiltersaretodevelopandwidelyused.
Inpractice,digitalsignalprocessing,theyoftenneedtoobservethetimelimitforthesignalinacertaintimeinterval,onlyneedtoselectaperiodoftimetoanalyzethesignals.Inthisway,accesstoafinitenumberofdataabouttheprocessofsignaldatatruncationisequivalenttothesignal,theadditionalwindowfunctionoperation.Andthisaftertheoperation,oftenoccurfromthenormalcomponentofthespectrumspreadspectrumopentothephenomenonofso-called"spectralleakage."WhenitcomestodiscreteFouriertransform,thetimedomaintruncationisnecessary,therefore,leakageeffectsarealsoinherentindiscreteFouriertransform,andmustbeinhibited.ButwouldliketosuppressthespectralleakagecanbeinhibitedbytheweightedwindowfunctionequivalentDFTfilteramplitudecharacteristicsofside-lobe,ortheweightedwindowfunctionsothatthelimitedlengthoftheextensionoftheinputsignalcycle,afterthebordertominimizethedegreeofdiscontinuityThemethodofimplementation.InthebackoftheFIRfilterdesign,inordertoobtainfinitesamplingunitstorespondtotheneedtotruncatetheinfinitelengthwindowfunctionwithunitsamplingresponsesequence.Inaddition,powerspectrumestimationproblemalsoencounteredintheweightedwindowfunction.Thus,theweightedwindowsfunctionindigitalsignalprocessinginanimportantposition.Conventionaldigitalfilterdesignprocessiscomplex,computingworkload,difficultiesinadjustmentoffiltercharacteristics,affectingitsapplication.ThispaperintroducesaMATLABSignalProcessingToolbox(SignalProcessingToolbox)quicklyandefficientlydesignformedbythesoftwareofconventionaldigitalfilterdesignmethods.ThisarticlepresentsuseMATLABlanguageforprogrammingandutilizationofsignalprocessingToolboxFDAToolforinterfacedesign.AfilterwasdesignedusingMATLAB.Youcanalwayscomparethedesignrequirementsandadjusttheparametersoffiltercharacteristics,visualsimpleandgreatlyreducedtheworkloadwillhelpfilterdesignoptimized.
1MATLAB的概况
MATLAB是矩阵实验室(Matrix Laboratory)之意。
除具备卓越的数值计算能力外,它还提供了专业水平的符号计算,文字处理,可视化建模仿真和实时控制等功能。
MATLAB的基本数据单位是矩阵,它的指令表达式与数学,工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完相同的事情简捷得多.
应用MATLAB这一软件来设计滤波器,与传统的设计思路相比是非常的简便的.具体来说主要有以下几点:
1)MATLAB的GUID可以提供给使用者一个进行人机交换的环境,在此环境中,使用者没有必要了解程序内部具体的编写情况,在这个界面上他只要输入他所期望的滤波器的性能指标就可以了。
2)利用MATLAB可以进行系统仿真,也就是说,使用者可以通过计算机进行对数字滤波器的频率响应图据的处理和波形的检测,不像以前必须借助一定的实验器材才可以得到。
3)MATLAB内部有丰富的函数可供调用,使用者只需要根据自己的需要查到所需要的函数名,那就可以直接调用使用了.不需要自己把函数详细的编写出来.使编写内部程序变的简单。
MATLAB包括拥有数百个内部函数的主包和三十几种工具包(Toolbox).工具包又可以分为功能性工具包和学科工具包.功能工具包用来扩充MATLAB的符号计算,可视化建模仿真,文字处理及实时控制等功能.学科工具包是专业性比较强的工具包,控制工具包,信号处理工具包,通信工具包等都属于此类.
开放性使MATLAB广受用户欢迎.除内部函数外,所有MATLAB主包文件和各种工具包都是可读可修改的文件,用户通过对源程序的修改或加入自己编写程序构造新的专用工具包.
2MATLAB结合窗函数设计法原理
数字滤波器可以理解为是一个计算程序或算法,将代表输入信号的数字时间序列转化为代表输出信号的数字时间序列,并在转化过程中,使信号按预定的形式变化。
数字滤波器有多种分类,根据数字滤波器冲激响应的时域特征,可将数字滤波器分为两种,即无限长冲激响应(IIR)滤波器和有限长冲激响应(FIR)滤波器。
IIR数字滤波器具有无限宽的冲激响应,与模拟滤波器相匹配。
所以IIR滤波器的设计可以采取在模拟滤波器设计的基础上进一步变换的方法。
FIR数字滤波器的单位脉冲响应是有限长序列。
它的设计问题实质上是确定能满足所要求的转移序列或脉冲响应的常数问题,设计方法主要有窗函数法、频率采样法和等波纹最佳逼近法等。
FIR滤波器具有严格的相位特性,这对于语音信号处理和数据传输是和重要的。
目前FIR滤波器的设计方法主要有三种:
窗函数法、频率取样法和切比雪夫等波纹逼近的最优化设计方法。
常用的是窗函数法和切比雪夫等波纹逼近的最优化设计方法。
因此设计FIR滤波器的方法之一可以从时域出发,截取有限长的一段冲击响应作为H(z)的系数,冲击响应长度N就是系统函数H(z)的阶数。
只要N足够长,截取的方法合理,总能满足频域的要求。
一般这种时域设计、频域检验的方法要反复几个回合才能成功。
要设计一个线性相位的FIR数字滤波器,首先要求理想频率响应
。
是w的周期函数,周期为
,可以展开成傅氏级数:
(公式2-1)
使用上述的传递函数去逼近
,一个理想的频率响应
的傅立叶反变换:
(公式2-2)
其中
是与理想频响对应的理想单位抽样响应序列。
但不能用来作为设计FIRDF用的
,因为
一般都是无限长、非因果的,物理上无法实现。
为了设计出频响类似于理想频响的滤波器,可以考虑用
来近似
。
窗函数的基本思想:
先选取一个理想滤波器(它的单位抽样响应是非因果、无限长的),再截取(或加窗)它的单位抽样响应得到线性相位因果FIR滤波器。
这种方法的重点是选择一个合适的窗函数和理想滤波器。
设
是一个长序列,
是长度为N的窗函数,用
截断
,得到N点序列
,即
(公式2-3)
在频域上则有
(公式2-4)
由此可见,窗函数
不仅仅会影响原信号
在时域上的波形,而且也会影响到频域内的形状。
MATLAB信号工具箱主要提供了以下几种窗函数,如表1-1所示:
窗
窗函数
矩形窗
Boxcar
三角窗
Triang
汉明窗
Hamming
布莱克曼
Blackman
凯塞窗
Kaiser
表1-1MATLAB窗函数
加矩形窗后的频谱和理想频谱可得到以下结论:
加窗使过渡带变宽,过渡带的带宽取决于窗谱的主瓣宽度。
矩形窗情况下的过渡带宽是
。
N越大,过渡带越窄、越陡;
过渡带两旁产生肩峰,肩峰的两侧形成起伏振荡。
肩峰幅度取决于窗谱主瓣和旁瓣面积之比。
矩形窗情况下是8.95%,与N无关。
工程上习惯用相对衰耗来描述滤波器,相对衰耗定义为:
(公式2-5)
这样两个肩峰点的相对衰耗分别是0.74dB和-21dB。
其中(-0.0895)对应的点的值定义为阻带最小衰耗。
以上的分析可见,滤波器的各种重要指标都是由窗函数决定,因此改进滤波器的关键在于改进窗函数。
窗函数谱的两个最重要的指标是:
主瓣宽度和旁瓣峰值衰耗。
旁瓣峰值衰耗定义为:
旁瓣峰值衰耗=20lg(第一旁瓣峰值/主瓣峰值)(公式2-6)
为了改善滤波器的性能,需使窗函数谱满足:
(1)主瓣尽可能窄,以使设计出来的滤波器有较陡的过渡带。
(2)尽量减少最大旁瓣的相对幅度,也就是能量集中于主瓣,以减小带内、带外波动的最大幅度,增大阻带衰减。
一般来说,以上两点很难同时满足。
当选取主瓣宽度很窄时,旁瓣的分量势必增加,从而带内、带外的波动也增加了;当选取最小的旁瓣幅度时,降低了带内、带外的波动,但是过渡带的陡度减小了。
所以实际采用的窗函数其特性往往是它们的折中,在保证主瓣宽度达到一定要求的前提下,适当牺牲主瓣宽度来换取旁瓣波动的减小。
3各类窗函数简介
数字信号处理领域中所用到的窗函数主要分为两大类,分别是:
基本窗函数与广义窗函数。
3.1基本窗函数
基本窗函数包括以下三类,主要有:
矩形窗函数、三角窗函数和巴特利特窗函数。
下面就对这些窗函数展开介绍。
3.1.1矩形窗函数
矩形窗(RectangularWindow)函数的时域形式可以表示为:
(公式3-1)
它的频域特性为
(公式3-2)
Boxcar函数:
生成矩形窗
调用方式w=boxcar(n):
输入参数n是窗函数的长度;输出参数w是由窗函数的值组成的n阶向量。
从功能上讲,该函数又等价于w=ones(n,1)。
3.1.2三角窗
三角窗(TriangularWindow)函数时域形式可表示为:
(公式3-3)
窗谱为:
(公式3-4)
式中,当N远大于1时,此时,窗谱主瓣宽度为8
/N。
3.2广义余弦窗
汉明窗和布莱克曼窗,都可以用一种通用的形式表示,这就是广义余弦窗。
这些窗都是广义余弦窗的特例,汉明窗又被称为改进的升余弦窗,而布莱克曼窗又被称为二阶升余弦窗。
采用这些窗可以有效地降低旁瓣的高度,但是同时会增加主瓣的宽度。
这些窗都是频率为0、2π/(N–1)和4π/(N–1)的余弦曲线的合成,其中N为窗的长度。
通常采用下面的命令来生成这些窗:
(公式3-5)
(公式3-6)
其中,A、B、C适用于自己定义的常数。
根据它们取值的不同,可以形成不同的窗函数,分别是:
汉明窗A=0.54,B=0.54,C=0;
布莱克曼窗A=0.5,B=0.5,C=0.08;
4方案设计与论证
用窗函数法设计一个FIR带通滤波器。
指示如下:
低端阻带截止频率wls=0.2*pi;
低端通带截止频率wlp=0.35*pi;
高端通带截止频率whp=0.65*pi;
高端阻带截止频率whs=0.8*pi;
六种窗函数的基本参数如表1-2:
窗函数
旁瓣峰值幅度/dB
过渡带宽
阻带最小衰减/dB
矩形窗
-13
4π/N
-21
三角形窗
-25
8π/N
-25
汉明窗
-41
8π/N
-53
布莱克曼窗
-57
12π/N
-74
凯泽窗
-57
10π/N
-80
表1-2窗函数基本参数
以上表格里的参数设置是最佳窗函数设计,根据设计方案的要求,选择一个合适的窗函数进行滤波器的设计,从上表可以看出:
最小带阻衰减仅有窗函数决定,不受N的影响,而过渡带的宽度则随窗函数的增加而减小。
选定窗函数类型和长度N之后,求出单位脉冲响应
,并按照公式2-1求出
。
是否满足要求,要进行演算。
一般在
尾部加零使长度满足2的整数次幂,以便用FFT计算
。
如果要观察细节,补零点数增多即可。
如果
不满足要求,则要重新选择窗函数类型和长度N,再次验算,直至满足要求。
如果要求线性相位特性,则
还必须满足
(公式4-1)
根据上式中的正、负号和长度N的奇偶性又将线性相位FIR滤波器分成四类。
要根据所设计的滤波特性正确选择其中一类,例如,要设计线性相位低通特性,可以选择
这一类,而不能选择
这一类。
4.1程序设计法
主程序框图如图4.1所示。
其中幅度特性要求用dB表示。
开始
读入窗口长度N
计算hd(n)
调用窗函数子程序求w(n)
调用子程序(函数)计算H(k)=DFT[h(n)]
调用绘图子程序(函数)绘制H(k)幅度相位曲线
结束
图4-1主程序框图
计算h(n)=hd(n)w(n)
下面为matlab主程序:
%用窗函数法设计FIR数字滤波器
b=1;
closeall;
i=0;
while(b);
temp=menu('选择窗函数长度N','N=10','N=15','N=20','N=25','N=30','N=33','N=35','N=40','N=45','N=50','N=55','N=60','N=64');
menu1=[10,15,20,25,30,33,35,40,45,50,55,60,64];
N=menu1(temp);
temp=menu('选择逼近理想低通滤波器截止频率Wc','Wc=pi/4','Wc=pi/2','Wc=3*pi/4','Wc=pi','Wc=0.5','Wc=1.0','Wc=1.5','Wc=2.0','Wc=2.5','Wc=3.0');
menu2=[pi/4,pi/2,3*pi/4,pi,0.5,1,1.5,2,2.5,3];
w=menu2(temp);
n=[0:
(N-1)];alpha=(N-1)/2;
m=n-alpha+eps;
hd=sin(w*m)./(pi*m)%得到理想低通滤波器
k=menu('请选择窗口类型:
','boxcar','Triang','Hamming','blackman','Kaiser');
ifk==1
B=boxcar(N);
string=['Boxcar','N=',num2str(N)];
elseifk==2
B=Triang(N);
string=['Triang','N=',num2str(N)];
elseifk==3
B=Hamming(N);
string=['Hamming','N=',num2str(N)];
elseifk==4
B=blackman(N);
string=['Blackman','N=',num2str(N)];
elseifk==5
B=Kaiser(N);
string=['Kaiser','N=',num2str(N)];
end
end
end
end
end
h=hd.*(B)';%得到FIR数字滤波器
[H,m]=freqz(h,[1],1024,'whole');%求其频率响应
mag=abs(H);%得到幅值
db=20*log10((mag+eps)/max(mag));
pha=angle(H);%得到相位
i=i+1;
figure(i)
subplot(2,2,1);
n=0:
N-1;
stem(n,h,'.');
axis([0,N-1,-0.1,0.3]);
holdon;
n=0:
N-1;
x=zeros(N);
plot(n,x,'-');
xlabel('n');
ylabel('h(n)');
title('实际低通滤波器的h(n)');
text((0.3*N),0.27,string);
holdoff;
subplot(2,2,2);
plot(m/pi,db);
axis([0,1,-100,0]);
xlabel('w/pi');
ylabel('dB');
title('衰减特性(dB)');
grid;
subplot(2,2,3);
plot(m,pha);
holdon;
n=0:
7;
x=zeros(8);
plot(n,x,'-');
title('相频特性');
xlabel('频率(rad)');
ylabel('相位(rad)');
axis([0,3.15,-4,4]);
subplot(2,2,4);
plot(m,mag);
title('频率特性');
xlabel('频率W(rad)');
ylabel('幅值');
axis([0,3.15,0,1.5]);
text(0.9,1.2,string);
b=menu('DoYouwantToContinue?
','Yes','No');
ifb==2
b=0;
end
end
temp=menu('CloseAllFigure?
','Yes','No');
iftemp==1
closeall
end
5窗函数仿真结果分析
矩形窗、三角形窗、汉明窗、布莱克曼窗、凯泽窗的仿真结果分别如图5-1、5-2、5-3、5-4和5-5所示:
图5-1
图52
图53
图5-4
图5-5
6总结与体会
这一次的课程设计时间比较紧,任务重,最主要的是我们通信专业还没有开设这门课,这就要求我们大家有足够的自学能力。
虽然以前接触过Matlab这个软件,但是还是第一次使用这个软件对于电路进行数学建模,为了这次课程设计,自己自学了数字信号处理领域中窗函数的有关知识。
我发现MATLAB的功能非常强大,以前怎么也想不明白MATLAB怎么能和我们专业联系起来,现在才渐渐明白MATLAB在我们专业中占据着如此重要的地位。
这次课程设计确实是比较基础的东西,也不是很难,可能以后会面临更多、更难的关于MATLAB的问题,但我认为只要有耐心,一般的问题都还是可以一步一步的解决的。
网上资源比较丰富,要好好利用互联网这个平台,把自己解决问题的能力提高,学到东西才最关键。
通过这次学习,我不但掌握了FIR数字滤波器窗函数的基本知识及其实际应用的技巧了,而且还学会了一些Matlab编程语言,对这款软件也有了更深刻的认识,我觉得最重要的是我又一次提高了自己还提高了自己写报告的能力,有很大的收获。
最后,我认为学校开设这门课设对我们来说是很有用的,能够提高我们独立去做一个工程的能力,体会将来我们要面对的实际问题,这对日后我们走
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 函数 设计 一个 数字 FIR 滤波器