Matlab仿真软件系统结合窗函数法设计一个数字带通FIR滤波器.docx
《Matlab仿真软件系统结合窗函数法设计一个数字带通FIR滤波器.docx》由会员分享,可在线阅读,更多相关《Matlab仿真软件系统结合窗函数法设计一个数字带通FIR滤波器.docx(22页珍藏版)》请在冰豆网上搜索。
Matlab仿真软件系统结合窗函数法设计一个数字带通FIR滤波器
课程设计任务书
学生姓名:
专业班级:
通信工程
指导教师:
魏洪涛工作单位:
信息工程学院
题目:
利用Matlab仿真软件系统结合窗函数法设计一个数字带通FIR滤波器
初始条件:
1.数字信号处理与滤波器基础知识
2.《信号与系统》基本理论知识
3.MATLAB编程基础知识
4.装有MATLAB的PC机
要求完成的主要任务:
利用MATLAB仿真软件系统结合窗函数法设计一个数字带通FIR滤波器
指导教师签名:
2011年12月15日
系主任(或责任教师)签名:
2011年12月15日
目录
目录1
摘要I
AbstractII
1原理说明1
1.1数字滤波技术1
1.2FIR滤波器2
1.3窗函数3
2数字滤波器设计4
2.1滤波器设计标准4
2.2设计函数的选取4
2.3窗函数介绍5
2.4设计步骤8
2.5设计方法8
3滤波器测试15
3.1滤波器滤波性能测试15
3.2滤波器稳定性测量16
3.3滤波器时延测量17
4心得体会19
5参考文献20
附件一:
21
附件二:
22
摘要
现代图像、语声、数据通信对线性相位的要求是普遍的。
正是此原因,使得具有线性相位的FIR数字滤波器得到大力发展和广泛应用。
数字滤波器是一种用来过滤时间离散信号的数字系统,通过对抽样数据进行数学处理来达到频域滤波的目的。
根据其单位冲激响应函数的时域特性可分为两类:
无限冲激响应(IIR)滤波器和有限冲激响应(FIR)滤波器。
与IIR滤波器相比,FIR的实现是非递归的,总是稳定的;更重要的是,FIR滤波器在满足幅频响应要求的同时,可以获得严格的线性相位特性。
因此,它在高保真的信号处理,如数字音频、图像处理、数据传输、生物医学等领域得到广泛应用。
滤波器的设计是信号处理的核心问题之一。
根据FIR滤波器的原理,提出了FIR滤波器的窗函数设计法,给出了在MATLAB环境下,用窗函数法设计FIR滤波器的过程和设计实例。
通过利用不同的窗函数方法设计FIR滤波器,对所设计的滤波器进行分析比较,得出各种方法设计的滤波器的优缺点及其不同的使用场合,从而可以在设计滤波器时能够正确的选择FIR数字滤波器的窗函数的选取及设计方法。
关键词 :
MATLAB,数字滤波器,有限冲激响应,窗函数
Abstract
Amodernimage,Voiceanddatacommunicationstothelinearphaserequirementisuniversal.Itisforthisreason,makingalinearphaseFIRdigitalfiltersaretodevelopandwidelyused.
Digitalfilterisatimediscretesignalwhichisusedtofilterdigitalsystem,throughthemathematicaltreatmentofthesampledatatoachievethefrequency-domainfilteringpurposes. Inaccordancewithitsunitimpulseresponsefunctionofthetime-domaincharacteristicscanbedividedintotwocategories:
InfiniteImpulseResponse(IIR)filterandfiniteimpulseresponse(FIR)filters.ComparedwiththeIIRfilters,FIRrealizationofanon-recursive,isalwaysstable;moreimportantly,FIRfilterstomeettherequirementsoftheamplitude-frequencyresponseatthesametime,getastrictlylinearphasecharacteristics. Therefore,itishigh-fidelitysignalprocessing,suchasdigitalaudio,imageprocessing,datatransmission,biomedicalareassuchaswidelyused.
Signalprocessingfilterdesignisoneofthecoreissues. AccordingtotheprincipleofFIRfiltersisproposedFIRfilterwindowfunctiondesignmethodisgivenintheMATLABenvironment,withthewindowfunctionmethodforFIRfilterdesignprocessanddesignexamples. ThroughtheuseofdifferentwindowfunctionsdesignedFIRfilter,thefilterdesignedtoanalyzeandcompareavarietyofmethodsdesignedtofilterobtainedtheadvantagesanddisadvantagesoftheuseoftheirdifferentoccasions,soyoucandesignafiltertocorrect thechoiceofFIRdigitalfilterfunctionselectionwindowandthedesignmethod.
Keywords:
MATLAB,digitalfilters,finiteimpulseresponse,windowfunction
1原理说明
随着信息时代的到来,数字信号处理已经成为一门极其重要的学科和技术,并且在通信、语音、图像、自动控制等众多领域得到了广泛的应用。
在数字信号处理中,数字滤波器占有极其重要的地位,它具有精度高、可靠性好、灵活性大等特点。
软件方式实现的优点是通过滤波器参数的改变去调整滤波器的性能。
MATLAB是“矩阵实验室”(MATrixLABoratoy)的缩写,是一种科学计算软件,主要适用于矩阵运算及控制和信息处理领域的分析设计,它使用方便,输入简捷,运算高效,内容丰富,因此很多专家在自己擅长的领域用它编写了许多专门的MATLAB工具包。
MATLAB一个高级的矩阵/阵列语言,它包含控制语句、函数、数据结构、输入和输出和面向对象编程特点。
用户可以在命令窗口中将输入语句与执行命令同步,也可以先编写好一个较大的复杂的应用程序(M文件)后再一起运行。
MATLAB更利于非计算机专业的科技人员使用。
这种语言可移植性好、可拓展性极强,这也是MATLAB能够深入到科学研究及工程计算各个领域的重要原因。
1.1数字滤波技术
数字滤波,就是通过一定的计算或判断程序减少干扰在有用信号中的比重,故实质上是一种程序滤波。
与此对应的就是模拟滤波,由于模拟滤波牵扯到的其他知识太多在此不详细介绍了,模拟滤波主要无源绿波(直接用电阻、电容、电感等不外接电源的元件组成的)与有源滤波(如运算放大器等需要外接电源组成的),其目的是将信号中的噪音和干扰滤去或者将希望得到的频率信号滤出为我所用。
数字滤波的出现克服了模拟滤波的很多不足,具有以下优点:
A.是用程序实现的,不需要增加硬设备,所以可靠性高,稳定性好。
B.可以对频率很低的信号实现滤波,克服了模拟滤波的缺陷。
C.可以根据信号的不同,采用不同的滤波方法或参数,具有灵活、方便、功能强的特点。
1.2FIR滤波器
FIR(FiniteImpulseResponse)滤波器,即有限长单位冲激响应滤波器,是数字信号处理系统中最基本的元件,它可以在保证任意幅频特性的同时具有严格的线性相频特性,同时其单位冲激响应是有限的,是稳定的系统。
FIR滤波器具有以下主要优点:
1.FIR滤波器具有准确的线性相位;
2.FIR滤波器永远稳定;
3.FIR滤波器设计方法一般是线性的;
4.FIR滤波器在硬件上具有更高的运行效率;
5.FIR滤波器启动传输时间只需要有限时间。
FIR滤波器的主要缺点有:
1.FIR滤波器为达到同样的性能要求需要比IIR滤波器高得多的阶数;
2.相应的FIR滤波器的时延比同等性能的IIR滤波器高很多。
FIR滤波器的设计方法主要有窗函数法、多带和过渡带、约束最小二乘法、任意相应法、升余弦法,其中最常用的是窗函数法。
1.3窗函数
窗函数法是设计FIR滤波器的最主要方法之一,实际中遇到的离散时间信号总是有限长的,因此不可避免的要遇到数据截短的问题,在信号处理中,对离散序列的截短是通过序列与窗函数相乘来实现的。
在MATLAB下,这些窗函数分别为:
1.矩形窗:
w=boxcar(n),产生一个n点的矩形窗函数。
2.三角窗:
w=triang(n),产生一个n点的三角窗函数。
3.汉明窗:
w=hamming(n),产生一个n点的汉明窗函数。
4.汉宁窗:
w=hanning(n),产生一个n点的汉宁窗函数。
4.布莱克曼窗:
w=Blackman(n),产生一个n点的布莱克曼窗函数。
6.凯泽窗:
w=Kaiser(n,beta),产生一个n点的凯泽窗数,其中beta为影响窗函数旁瓣的参数。
2数字滤波器设计
2.1滤波器设计标准
利用MATLAB仿真软件系统结合窗函数法设计数字带通FIR滤波器。
这次设计中计划达到的技术指标:
1.采样频率为20kHz;
2.通带边缘频率:
fp1=4.5kHz,fp2=6.5kHz;
3.通带峰值起伏:
αp<1dB;
4.阻带边缘频率:
fs1=3k,fs2=7.5k;
5.最小阻带衰减:
As>40dB
2.2设计函数的选取
MATLAB信号处理工具箱提供了基于加窗的线性相位FIR滤波器设计函数fir1和fir2,fir1函数的调用格式为:
b=fir1(n,Wn)
b=fir1(n,Wn,'ftype')
b=fir1(n,Wn,window)
b=fir1(n,Wn,'ftype',window)
b=fir1(…..,'normalization')
函数参数说明如下:
1.n表示滤波器的阶数
2.'ftype'表示所设计滤波器的类型:
3.'high'表示高通滤波器
4.'stop'表示带阻滤波器
5.'DC-1'表示多通带滤波器,第一频带为通带
6.'DC-0'表示多通带滤波器,第一频带为阻带;默认时为低通或带通滤波器;
2.3窗函数介绍
MATLAB工具箱已经提供了各种窗函数的构造函数,因而窗函数的构造十分方便,下面给出几种常用窗函数的构造方法:
1.矩形窗:
利用w=boxcar(n)的形式得到窗函数,其中n为窗函数的长度,而返回值w为一个n阶的向量,它的元素由窗函数的值组成。
‘w=boxcar(n)’等价于‘w=ones(1,n)’.
2.三角窗:
利用w=triang(n)的形式得到窗函数,其中n为窗函数的长度,而返回值w为一个n阶的向量,它的元素由窗函数的值组成。
w=triang(N-2)等价于bartlett(N)。
3.汉宁窗:
利用w=hanning(n)得到窗函数,其中n为窗函数的长度,而返回值w为一个n阶的向量,包含了窗函数的n个系数。
4.海明窗:
利用w=hamming(n)得到窗函数,其中n为窗函数的长度,而返回值w为一个n阶的向量,包含了窗函数的n个系数。
它和汉宁窗的主瓣宽度相同,但是它的旁瓣进一步被压低。
5.布拉克曼窗:
利用w=blackman(n)得到窗函数,其中n为窗函数的长度,而返回值w为一个n阶的向量,包含了窗函数的n个系数。
它的主瓣宽度是矩形窗主瓣宽度的3倍,为12*pi/N,但是它的最大旁瓣值比主瓣值低57dB。
6.凯泽窗:
利用w=kaiser(n,beta)的形式得到窗函数。
2.3.1窗函数设计要求
窗函数谱的两个最重要的指标是:
主瓣宽度和旁瓣峰值衰耗。
旁瓣峰值衰耗定义为:
旁瓣峰值衰耗=20lg(第一旁瓣峰值/主瓣峰值)(公式1-5)
为了改善滤波器的性能,需使窗函数谱尽量满足:
1.较低的旁瓣幅度,尤其是第一旁瓣;
2.旁瓣幅度要下降得快,以利于增加阻带衰减;
3.主瓣宽度要窄,这样滤波器过渡带较窄。
但这三点难以同时满足,当选用主瓣宽度较窄时,虽然得到的幅频特性较陡峭,但通带、阻带波动会明显增加;当选用较低的旁瓣幅度时,虽然得到的幅频特性较平缓匀滑,但过渡带变宽。
因此,实际的选择往往是取折衷。
2.3.2窗函数介绍
实际工程常用的窗函数有五种,即矩形窗、三角窗、汉宁窗、海明窗和凯泽窗。
这些窗函数之间的性能比较如表。
表2-15种窗函数性能比较
窗类型
旁瓣峰值
主瓣峰值
最小阻带衰减
矩形窗
13dB
4π/M
21dB
三角窗
25dB
8π/M
25dB
海明窗
31dB
8π/M
44dB
布莱克曼窗
41dB
8π/M
53dB
凯泽窗
57dB
12π/M
74dB
常用窗函数绘图比较:
在MATLAB中运行以下代码:
代码2-1:
n=50;
x=1:
50;
juxing=boxcar(n);%构造矩形窗
sanjiao=triang(n);%构造三角窗
hanming=hamming(n);%构造海明窗
bulaikeman=blackman(n);%构造布莱克曼窗
kaize=kaiser(n);%构造凯泽窗
plot(x,juxing,'b.',x,sanjiao,'gx',x,hanming,'r+',x,bulaikeman,'cd',x,kaize,'k*');
legend('矩形窗','三角窗','海明窗','布莱克曼窗','凯泽窗');
运行结果如图2-1所示:
图2-15种窗函数绘图比较
2.4设计步骤
实际利用窗函数法进行FIR滤波器设计时,依据所给的技术指标一般需要经过以下几个步骤进行设计:
1.给定理想的频率响应函数Hd(ejw)及技术指标;
2.求出理想的单位抽样响应hd(n);
3.根据阻带衰减选择窗函数w(n);
4.根据过渡带宽度确定N值;
5.求出所设计的FIR滤波器的单位抽样响应;
6.计算频率响应,验算指标是否满足要求。
2.5设计方法
MATLAB内置了丰富的函数,其中便有用于通信仿真的一系列函数,并且MATLAB中还集成了通信设计的工具箱,不管是内置的函数,还是通信工具箱,均有专用于滤波器设计的工具,常用的主要有用函数法设计和用通信工具箱设计,下面分别予以实现带通滤波器。
2.5.1依据设计步骤编写M文件设计
此种方法不依赖MATLAB中的滤波器设计函数,而是依据FIR滤波器的设计步骤自己求解理想滤波器的冲击响应,然后用窗函数对冲击响应进行截短,从而得到FIR滤波器,由于低通滤波器设计较为简单,因而可以通过两个低通的理想冲击响应函数相减得到理想带通的冲击响应,再通过窗函数对其截短,从而得到实际可行的FIR滤波器,这里以用汉宁窗进行截短实现带通FIR滤波器,使用Matlab运行结果如下(完整代码见附页):
程序运行结果:
图2-2汉宁窗带通滤波器
2.5.2利用MATLAB自带函数设计
这种设计方法只需要给出滤波器的阶数,截止频率,窗函数等参数,MATLAB即可自行完成设计,并可通过freqz函数查看滤波器的幅频响应和相频响应,已验证滤波器是否满足设计要求,下面给出不同窗函数的数字带通滤波器。
1.利用矩形窗进行设计
代码2-2:
fs=20000;%设定采样频率
fp1=4500;fp2=6500;%第一截止频率
fs1=3000;fs2=7500;%第二截止频率
As=40;%最小阻带衰减
Ws1=(fp1+fs1)/fs;Ws2=(fp2+fs2)/fs;%截止频率归一化处理
w=(fp1-fs1)/fs;%求归一化过渡带
M=ceil((As-7.95)/(14.36*w))%计算所需滤波器的阶数
juxing=boxcar(M+1);%生成长度为M+1的矩形窗
boxb=fir1(M,[Ws1,Ws2],juxing);%生成矩形窗设计的fir滤波器
freqz(boxb,1,fs,fs);%绘制幅频和相频响应曲线运行结果:
图2-3矩形窗fir滤波器幅频和相频响应曲线
从幅频响应上看,通带基本无波纹,阻带中波纹较大,因而阻带较不理想,相频响应曲线在通带内为直线,效果较好,信号失真小。
2.利用三角窗进行设计
利用三角窗进行设计时,原理与矩形窗基本相同,只不过生成窗函数时采用triang()函数生成三角窗,程序运行结果如下:
图2-4三角窗设计的fir滤波器幅频和相频响应曲线
从幅频响应上看,通带基本无波纹,阻带中波纹比矩形窗较小,因而阻带较理想,但是旁瓣幅度要下降较慢,不利于增加阻带衰减;相频响应曲线在通带内为直线,效果较好,信号失真小。
3.利用海明窗进行设计
利用海明窗进行设计时,原理与矩形窗基本相同,只不过生成窗函数时采用hamming()函数生成汉明窗,程序运行结果如下:
图2-5汉明窗设计的fir滤波器幅频和相频响应曲线
4.利用布莱克曼窗进行设计
利用布莱克曼窗进行设计时,原理与矩形窗基本相同,只不过生成窗函数时采用blackman()函数生成布莱克曼窗,程序运行结果如下:
图2-6布莱克曼窗设计的fir滤波器幅频和相频响应曲线
5.利用凯泽窗进行设计
利用凯泽窗进行设计时,滤波器的参数可以用以下函数求得:
调用函数[n,wn,bta,ftype]=kaiserord(f,a,dev,fs)
参数:
1)f为对应的归一化频率
2)a为由f指定的各个频带上的幅值向量,一般只有0和1,和f长度关系为(2*a的长度)—2=(f的长度)
3)devs用于指定各个频带输出滤波器的频率响应与其期望幅值之间的最大输出误差或偏差,长度与a相等。
4)fs为信号的采样频率。
利用该函数修改代码得到凯泽窗设计fir滤波器的代码如下:
代码2-3
fs=20000;%设定采样频率
fp1=4500;fp2=6500;%第一截止频率
fs1=3000;fs2=7500;%第二截止频率
[n,wn,bta,ftype]=kaiserord([fs1,fp1,fp2,fs2],...
[0,1,0],[0.010.10870.01],fs)%求滤波器参数
b=fir1(n,wn,ftype,kaiser(n+1,bta));%生成fir滤波器
freqz(b,1,fs,fs);%绘制幅频和相频响应曲线
程序运行结果:
图2-7凯泽窗设计的fir滤波器幅频和相频响应曲线
2.5.3利用MATLAB工具箱设计
MATLAB信号处理工具箱中已集成了用于滤波器设计和分析的工具:
FDATool,利用它可以实现数字滤波器的可视化设计与分析,操作简单方便,在MATLAB命令行中输入fdatool命令即可打开滤波器设计工具,
运行界面如图2-2所示:
图2-8FDATool运行界面
通过选择相应参数后,点击Design即可得到滤波器的幅频响应曲线,在analysis菜单中可以选择查看相频响应,群时延,相时延等曲线,并且利用该工具箱设计的滤波器可以直接在simulink仿真中应用进行信号仿真,十分方便。
这里以凯瑟窗fir带通滤波器为例。
利用FDATool设计的凯瑟窗fir滤波器幅频响应和相频响应如下:
图2-9FDATool设计的凯瑟窗fir滤波器幅频响应
图2-10FDATool设计的凯瑟窗fir滤波器相频响应
图2-11FDATool设计的凯瑟窗fir滤波器冲击响应
3滤波器测试
利用MATLAB中提供的filter函数可以选择不同的滤波器对数字信号进行滤波,这里主要对滤波器的滤波性能进行简单测试,这里主要针对滤波器的滤波性能和时延特性的测量。
3.1滤波器滤波性能测试
由MATLAB模拟生成含有不同频率的数字信号,然后利用设计的滤波器对数字信号进行滤波,为方便观察,模拟生成的信号只含有包含在阻带的两个频率(2000Hz,8000Hz)一个包含于通带的频率(5000Hz),这里用凯瑟窗fir带通滤波器处理所给函数,测试代码如下:
代码2-4:
fs=20000;
t=0:
1/fs:
2;
x=sin(2*pi*2000*t)+sin(2*pi*5000*t)...
+sin(2*pi*8000*t);%生成混合信号
xo=filter(b,2,x);%用滤波器对信号进行滤波
figure;
nn=5000:
5100;%取一段信号
subplot(211);
tt=nn/fs;
plot(tt,x(nn));%绘制原始信号
axis([0.25,0.255,-4,4]);
ylabel('原始信号');xlabel('时间');
subplot(212);
plot(tt,xo(nn));%绘制滤波后的信号
axis([0.25,0.255,-0.5,0.5]);
ylabel('滤波后的信号');xlabel('时间');
运行结果:
图3-1滤波器滤波性能测试波形
从原始型号和滤波后的信号对比可以看出,在用设计的滤波器进行滤波后信号基本成单一频率的正弦波,滤波结果令人满意。
3.3滤波器稳定性测量
FIR滤波器的一个突出优点便是它的稳定性,从信号与系统的理论可知,当一个系统的Z域的传递函数的极点都在单位圆内时系统是稳定的,FIR滤波器的传递函数的分母为1,即FIR滤波器一定是稳定的,MATLAB中也提供了专门用于绘制零极点图的函数:
zplane(),通过该函数可以轻松绘制系统的零极点图,以凯泽窗设计的FIR滤波器为例,绘制其零极点图如下:
图3-2凯泽窗FIR滤波器零极点图
从该零极点图可以看出,FIR设计的滤波器是属于无极点的系统,因而系统一定是稳定的。
3.2滤波器时延测量
滤波器的时延特性也是滤波器的性能指标之一,主要包括相位时延和群时延。
下面是利用fdatool命令运行中analysis查看的群时延,相时延等曲线。
图3-3滤波器群时延性能测试波形
图3-4滤波器相时延性能测试波形
从图上看,滤波器仍然有一定的时延,这也是fir滤波器的缺点之一,不过两种时延和频率变化时延与信号频率无关,这说明该滤波器不会产生失真。
时延与滤波器滤波性能相矛盾,滤波器的时延随滤波器阶数的升高而增加,实际设