MATLAB结合窗函数法数字带通FIR滤波器的设计.docx
《MATLAB结合窗函数法数字带通FIR滤波器的设计.docx》由会员分享,可在线阅读,更多相关《MATLAB结合窗函数法数字带通FIR滤波器的设计.docx(22页珍藏版)》请在冰豆网上搜索。
MATLAB结合窗函数法数字带通FIR滤波器的设计
课程设计任务书
学生姓名:
专业班级:
通信zy1101班
指导教师:
工作单位:
信息工程学院
题目:
MATLAB仿真软件系统结合窗函数法设计一个数字带通FIR滤波器
初始条件:
1MATLAB编程的基础知识
2《信号与系统》滤波器的相关知识
3《数字信号处理》的相关知识
要求完成的主要任务:
①利用MATLAB仿真软件系统结合窗函数法设计一个数字带通FIR滤波器。
②分别使用矩形窗、三角形窗、汉明窗、布莱克曼窗、凯泽窗进行设计,并输出滤波器的频率特性
参考书目:
VinayK.Ingle《数字信号处理及其MATLAB实现》
SanjitK.Miltra《DigitalSignalProcessingLaboratoryUsingMATLAB》
刘泉阙大顺郭志强《数字信号处理》
时间安排:
(1)第1-3周:
选题及任务安排
(2)第4-10周:
方案选择及设计
(3)第11-16周:
设计及MATLAB仿真
(4)第17-18周:
撰写报告及答辩
指导教师签名:
年月日
系主任(或责任教师)签名:
年月日
摘要
数字滤波器是一种用来过滤时间离散信号的数字系统,通过对抽样数据进行数学处理来达到频域滤波的目的。
根据其单位冲激响应函数的时域特性可分为两类:
无限冲激响应(IIR)滤波器和有限冲激响应(FIR)滤波器。
与IIR滤波器相比,FIR的实现是非递归的,总是稳定的;更重要的是,FIR滤波器在满足幅频响应要求的同时,可以获得严格的线性相位特性。
因此,它在高保真的信号处理,如数字音频、图像处理、数据传输、生物医学等领域得到广泛应用。
滤波器的设计是信号处理的核心问题之一。
根据FIR滤波器的原理,提出了FIR滤波器的窗函数设计法,给出了在MATLAB环境下,用窗函数法设计FIR滤波器的过程和设计实例。
通过利用不同的窗函数方法设计FIR滤波器,对所设计的滤波器进行分析比较,得出各种方法设计的滤波器的优缺点及其不同的使用场合,从而可以在设计滤波器时能够正确的选择FIR数字滤波器的窗函数的选取及设计方法。
【关键字】:
MATLAB;窗函数;FIR滤波器
Abstract
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;Windowfunction;FIRfilter
1原理说明
随着信息时代的到来,数字信号处理已经成为一门极其重要的学科和技术,并且在通信、语音、图像、自动控制等众多领域得到了广泛的应用。
在数字信号处理中,数字滤波器占有极其重要的地位,它具有精度高、可靠性好、灵活性大等特点。
现代数字滤波器可以用软件或硬件两种方式来实现。
软件方式实现的优点是可以通过滤波器参数的改变去调整滤波器的性能。
MATLAB是一种面向科学和工程计算的语言,它集数值分析、矩阵运算、信号处理和图形显示于一体,具有编程效率高、调试手段丰富、扩充能力强等特点。
MATLAB的信号处理工具箱具有强大的函数功能,它不仅可以用来设计数字滤波器,还可以使设计达到最优化,是数字滤波器设计的强有力工具。
1.1数字滤波技术
数字滤波,就是通过一定的计算或判断程序减少干扰在有用信号中的比重,故实质上是一种程序滤波。
与此对应的就是模拟滤波,由于模拟滤波牵扯到的其他知识太多在此不详细介绍了,模拟滤波主要无源滤波(直接用电阻、电容、电感等不外接电源的元件组成的)与有源滤波(如运算放大器等需要外接电源组成的),其目的是将信号中的噪音和干扰滤去或者将希望得到的频率信号滤出为我所用。
数字滤波的出现克服了模拟滤波的很多不足,具有以下优点:
A.是用程序实现的,不需要增加硬设备,所以可靠性高,稳定性好。
B.可以对频率很低的信号实现滤波,克服了模拟滤波的缺陷。
C.可以根据信号的不同,采用不同的滤波方法或参数,具有灵活、方便、功能强的特点。
几种常用的滤波方法:
1.算术平均值法
2.中值滤波法
3.滑动平均值法
4.限幅滤波法
5.惯性滤波法
数字滤波技术通过数字滤波器实现,从实现方法上可以分为FIR数字滤波器和IIR数字滤波器,按功能可分为低通滤波器(LPF)、高通滤波器(HPF)、带通滤波器(BPF)和带阻滤波器(BSF)。
本文主要对FIR滤波器加以介绍。
1.2FIR滤波器
FIR(FiniteImpulseResponse)滤波器,即有限长单位冲激响应滤波器,是数字信号处理系统中最基本的元件,它可以在保证任意幅频特性的同时具有严格的线性相频特性,同时其单位冲激响应是有限的,没有输入到输出的反馈,是稳定的系统。
因此,FIR滤波器在通信、图像处理、模式识别等领域都有着广泛的应用,FIR滤波器具有以下主要优点:
1.FIR滤波器具有准确的线性相位;
2.FIR滤波器永远稳定;
3.FIR滤波器设计方法一般是线性的;
4.FIR滤波器在硬件上具有更高的运行效率;
5.FIR滤波器启动传输时间只需要有限时间。
FIR滤波器的主要缺点有:
1.FIR滤波器为达到同样的性能要求需要比IIR滤波器高得多的阶数;
2.相应的FIR滤波器的时延比同等性能的IIR滤波器高很多。
FIR滤波器的硬件实现主要有数字集成芯片,DSP芯片FIR滤波器,可编程FIR滤波器,后两者的实际方法主要通过MATLAB软件进行设计,其设计方法多样,形式灵活,能够满足各种要求,并且不受数字集成芯片规格的限制。
FIR滤波器的设计方法主要有窗函数法、多带和过渡带、约束最小二乘法、任意相应法、升余弦法,其中最常用的是窗函数法。
1.3窗函数
窗函数法是设计FIR滤波器的最主要方法之一,实际中遇到的离散时间信号总是有限长的,因此不可避免的要遇到数据截短的问题,在信号处理中,对离散序列的截短是通过序列与窗函数相乘来实现的。
在信号处理中,窗函数是一种除在给定区间之外取值均为0的实函数。
譬如:
在给定区间内为常数而在区间外为0的窗函数被形象地称为矩形窗。
任何函数与窗函数之积仍为窗函数,所以相乘的结果就像透过窗口“看”其他函数一样。
窗函数在光谱分析、滤波器设计以及音频数据压缩等方面有广泛的应用。
常用的窗函数有矩形窗、巴特利特(Bartlett)窗、三角窗、海明(Hamming)窗、汉宁(Hanning)窗、布莱克曼(Blackman)窗、切比雪夫(Chebyshev)窗、凯泽(Kaiser)窗。
1.4MATLAB结合窗函数设计法原理
数字滤波器可以理解为是一个计算程序或算法,将代表输入信号的数字时间序列转化为代表输出信号的数字时间序列,并在转化过程中,使信号按预定的形式变化。
数字滤波器有多种分类,根据数字滤波器冲激响应的时域特征,可将数字滤波器分为两种,即无限长冲激响应(IIR)滤波器和有限长冲激响应(FIR)滤波器。
IIR数字滤波器具有无限宽的冲激响应,与模拟滤波器相匹配。
所以IIR滤波器的设计可以采取在模拟滤波器设计的基础上进一步变换的方法。
FIR数字滤波器的单位脉冲响应是有限长序列。
它的设计问题实质上是确定能满足所要求的转移序列或脉冲响应的常数问题,设计方法主要有窗函数法、频率采样法和等波纹最佳逼近法等。
FIR滤波器具有严格的相位特性,这对于语音信号处理和数据传输是和重要的。
目前FIR滤波器的设计方法主要有三种:
窗函数法、频率取样法和切比雪夫等波纹逼近的最优化设计方法。
常用的是窗函数法和切比雪夫等波纹逼近的最优化设计方法。
因此设计FIR滤波器的方法之一可以从时域出发,截取有限长的一段冲击响应作为H(z)的系数,冲击响应长度N就是系统函数H(z)的阶数。
只要N足够长,截取的方法合理,总能满足频域的要求。
一般这种时域设计、频域检验的方法要反复几个回合才能成功。
要设计一个线性相位的FIR数字滤波器,首先要求理想频率响应
。
是w的周期函数,周期为
,可以展开成傅氏级数:
(公式1-1)
使用上述的传递函数去逼近
,一个理想的频率响应
的傅立叶反变换:
(公式1-2)
其中
是与理想频响对应的理想单位抽样响应序列。
但不能用来作为设计FIRDF用的h(n),因为
一般都是无限长、非因果的,物理上无法实现。
为了设计出频响类似于理想频响的滤波器,可以考虑用
来近似
。
窗函数的基本思想:
先选取一个理想滤波器(它的单位抽样响应是非因果、无限长的),再截取(或加窗)它的单位抽样响应得到线性相位因果FIR滤波器。
这种方法的重点是选择一个合适的窗函数和理想滤波器。
设
是一个长序列,
是长度为N的窗函数,用
截断
,得到N点序列
,即
(公式1-3)
在频域上则有
(公式1-4)
由此可见,窗函数
不仅仅会影响原信号
在时域上的波形,而且也会影响到频域内的形状。
MATLAB信号工具箱主要提供了以下几种窗函数,如表1所示:
表
(1)MATLAB窗函数
窗
窗函数
矩形窗
Boxcar
三角窗
Triang
海明窗
Hamming
汉宁窗
Hanning
布莱克曼
Blackman
切比雪夫窗
Chebyshev
凯塞窗
Kaiser
加矩形窗后的频谱和理想频谱可得到以下结论:
加窗使过渡带变宽,过渡带的带宽取决于窗谱的主瓣宽度。
矩形窗情况下的过渡带宽是
。
N越大,过渡带越窄、越陡;
过渡带两旁产生肩峰,肩峰的两侧形成起伏振荡。
肩峰幅度取决于窗谱主瓣和旁瓣面积之比。
矩形窗情况下是8.95%,与N无关。
工程上习惯用相对衰耗来描述滤波器,相对衰耗定义为:
(公式1-5)
这样两个肩峰点的相对衰耗分别是0.74dB和-21dB。
其中(-0.0895)对应的点的值定义为阻带最小衰耗。
以上的分析可见,滤波器的各种重要指标都是由窗函数决定,因此改进滤波器的关键在于改进窗函数。
窗函数谱的两个最重要的指标是:
主瓣宽度和旁瓣峰值衰耗。
旁瓣峰值衰耗定义为:
旁瓣峰值衰耗=20lg(第一旁瓣峰值/主瓣峰值)(公式1-6)
为了改善滤波器的性能,需使窗函数谱满足:
(1)主瓣尽可能窄,以使设计出来的滤波器有较陡的过渡带。
(2)尽量减少最大旁瓣的相对幅度,也就是能量集中于主瓣,以减小带内、带外波动的最大幅度,增大阻带衰减。
一般来说,以上两点很难同时满足。
当选取主瓣宽度很窄时,旁瓣的分量势必增加,从而带内、带外的波动也增加了;当选取最小的旁瓣幅度时,降低了带内、带外的波动,但是过渡带的陡度减小了。
所以实际采用的窗函数其特性往往是它们的折中,在保证主瓣宽度达到一定要求的前提下,适当牺牲主瓣宽度来换取旁瓣波动的减小。
2各类窗函数简介
数字信号处理领域中所用到的窗函数主要分为两大类,分别是:
基本窗函数与广义窗函数。
2.1基本窗函数
基本窗函数包括以下三类,主要有:
矩形窗函数、三角窗函数窗函数。
下面就对这些窗函数展开介绍。
2.1.1矩形窗函数
矩形窗(RectangularWindow)函数的时域形式可以表示为:
(公式2-1)
它的频域特性为
(公式2-2)
利用w=boxcar(n)的形式得到窗函数,其中n为窗函数的长度,而返回值w为一个n阶的向量,它的元素由窗函数的值组成。
‘w=boxcar(n)’等价于‘w=ones(1,n)’.
2.1.2三角窗
三角窗(BartlettWindow)函数时域形式可表示为:
(公式2-3)
窗谱为:
(公式2-4)
式中,当N远大于1时,此时,窗谱主瓣宽度为8
/N。
利用w=triang(n)的形式得到窗函数,其中n为窗函数的长度,而返回值w为一个n阶的向量,它的元素由窗函数的值组成。
w=triang(N-2)等价于bartlett(N)。
2.2广义余弦窗
汉宁窗、海明窗和布莱克曼窗,都可以用一种通用的形式表示,这就是广义余弦窗。
这些窗都是广义余弦窗的特例,汉宁窗又被称为余弦平方窗或升余弦窗,海明窗又被称为改进的升余弦窗,而布莱克曼窗又被称为二阶升余弦窗。
采用这些窗可以有效地降低旁瓣的高度,但是同时会增加主瓣的宽度。
这些窗都是频率为0、2π/(N–1)和4π/(N–1)的余弦曲线的合成,其中N为窗的长度。
通常采用下面的命令来生成这些窗:
(公式2-5)
(公式2-6)
其中,A、B、C适用于自己定义的常数。
根据它们取值的不同,可以形成不同的窗函数,分别是:
汉宁窗A=0.5,B=0.5,C=0;
海明窗A=0.54,B=0.54,C=0;
布莱克曼窗A=0.5,B=0.5,C=0.08;
2.2.1汉宁窗
汉宁窗(Hanning)函数时域形式可表示为:
(公式2-7)
利用傅利叶变换的调制特性,由上式可得汉宁窗的频谱函数为:
(公式2-8)
式中,
(公式2-9)
当N远大于1时,上式可近似表示为:
(公式2-10)
这三部分之和使旁瓣互相抵消,能量更集中在主瓣,汉宁窗函数的最大旁瓣值比主瓣值低31dB,但是主瓣宽度比矩形窗函数的主瓣宽度增加了1倍,为8π/N。
hanning函数:
生成汉宁窗
调用方式:
(1)w=hanning(n):
输入参数n是窗函数的长度;输出参数w是由窗函数的值组成的n阶向量。
注意:
此函数不返回是零点的窗函数的首尾两个元素。
(2)w=hanning(n,'symmetric'):
与上面相类似。
(3)w=hanning(n,'periodic'):
此函数返回包括为零点的窗函数的首尾两个元素。
2.2.2布莱克曼窗
布莱克曼窗(Hanning)函数时域形式可表示为:
(公式2-11)
其频谱函数为:
(公式2-12)
它的主瓣宽度是矩形窗主瓣宽度的3倍,为12*pi/N,但是它的最大旁瓣值比主瓣值低57dB。
利用w=blackman(n)得到窗函数,其中n为窗函数的长度,而返回值w为一个n阶的向量,包含了窗函数的n个系数。
2.3凯泽窗
凯泽窗是一种适应性较强的窗,其函数表达式为
(公式2-13)
其中
是第一类变形修正零阶贝塞尔函数,它可以用以下的级数来计算
(公式2-14)
在实际使用中,级数取15—25项就可达到足够的精度。
是一个可调参数,它可以同时调整主瓣宽度和旁瓣电平,
越大,则
窗越窄,而频谱的旁瓣越小,但主瓣宽度也相应增加。
因而改变
值就可对主瓣宽度与旁瓣衰减进行选择。
一般选择
这相当于旁瓣幅度与主瓣幅度的比值由3.1%变到0.047%(-30~-67dB)。
利用w=kaiser(n,beta)的形式得到窗函数。
2.4窗函数性能比较
实际工程常用的窗函数有五种,即矩形窗、三角窗、汉宁窗、海明窗和凯塞窗。
这些窗函数之间的性能比较如下表所示。
表
(2)5种窗函数性能比较
窗类型
旁瓣峰值
主瓣峰值
最小阻带衰减
矩形窗
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所示:
图15种窗函数绘图比较
2.5设计步骤
实际利用窗函数法进行FIR滤波器设计时,依据所给的技术指标一般需要经过以下几个步骤进行设计:
1.给定理想的频率响应函数Hd(ejw)及技术指标;
2.根据阻带衰减选择窗函数w(n),根据过渡带宽度确定N值;
3.求出理想的单位抽样响应hd(n);
(公式2-12)
4.求出所设计的FIR滤波器的单位抽样响应
;
(公式2-13)
5.计算频率响应,验算指标是否满足要求。
3设计题目及程序的代码
3.1设计题目
用窗函数法设计一个FIR带通滤波器。
指示如下:
采样频率为20kHz;
通带边缘频率:
fp1=4.5kHz,fp2=6.5kHz;
通带峰值起伏:
αp<1dB;
阻带边缘频率:
fs1=3k,fs2=7.5k;
最小阻带衰减:
As>40dB
3.2设计题目的程序及结果
利用原理说明介绍的fir1函数进行设计,这种设计方法只需要给出滤波器的阶数,截止频率,窗函数等参数,MATLAB即可自行完成设计,并可通过freqz函数查看滤波器的幅频响应和相频响应,已验证滤波器是否满足设计要求,下面给出利用fir1函数设计的不同窗函数的数字带通滤波器。
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矩形窗fir滤波器幅频和相频响应曲线
从幅频响应上看,通带基本无波纹,阻带中波纹较大,因而阻带较不理想,相频响应曲线在通带内为直线,效果较好,信号失真小。
2.利用三角窗进行设计
利用三角窗进行设计时,原理与矩形窗基本相同,只不过生成窗函数时采用triang()函数生成三角窗,程序运行结果如下:
图3三角窗设计的fir滤波器幅频和相频响应曲线
3.利用汉宁窗进行设计
利用汉宁窗进行设计时,原理与矩形窗基本相同,只不过生成窗函数时采用hamming()函数生成汉宁窗,程序运行结果如下:
图4汉宁窗设计的fir滤波器幅频和相频响应曲线
4.利用布莱克曼窗进行设计
利用布莱克曼窗进行设计时,原理与矩形窗基本相同,只不过生成窗函数时采用blackman()函数生成布莱克曼窗,程序运行结果如下:
图5布莱克曼窗设计的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.