基于MTLAB的FIR滤波器设计.docx
《基于MTLAB的FIR滤波器设计.docx》由会员分享,可在线阅读,更多相关《基于MTLAB的FIR滤波器设计.docx(12页珍藏版)》请在冰豆网上搜索。
基于MTLAB的FIR滤波器设计
《MATLAB仿真及其应用》
专业论文
题目:
基于MTLAB的FIR滤波器设计
专业:
班级:
姓名:
学号:
指导教师:
目录
1绪论2
1.1课题研究的背景2
1.2课题研究现状2
1.3本课题研究的实施方案3
2FIR滤波器4
2.1FIR滤波器的概念4
2.2FIR滤波器的原理和结构4
2.3FIR滤波器的特点5
2.4FIR滤波器的设计5
3仿真软件MATLAB简介6
3.1MATLAB的概况6
3.2MATLAB的产生历史背景7
3.3MATLAB的语言特色8
4FIR滤波器的MATLAB实现10
4.1程序设计法10
4.2FDATool设计法11
4.2.1带通滤波器设计11
4.2.2Simulink仿真12
5总结12
参考文献:
13
1绪论
1.1课题研究的背景
数字滤波器是一种用来过滤时间离散信号的数字系统,通过对抽样数据进行数学处理来达到频域滤波的目的。
根据其单位冲激响应函数的时域特性可分为两类:
无限冲激响应(IIR)滤波器和有限冲激响应(FIR)滤波器。
与IIR滤波器相比,FIR的实现是非递归的,总是稳定的;更重要的是,FIR滤波器在满足幅频响应要求的同时,可以获得严格的线性相位特性。
因此,它在高保真的信号处理,如数字音频、图像处理、数据传输、生物医学等领域得到广泛应用。
1.2课题研究现状
早在20世纪40年代末期,就有人讨论过数字滤波器的可能性问题,在50年代也有人在研究讨论过数字滤波的问题。
但直到60年代中期,才开始形成关于数字滤波器的一整套完整的正规理论。
在这一时期,提出了各种各样的数字滤波器结构,有的以运算误差最小为特点,有的则以运算速度高见长,而有的则二者兼而有之;出现了数字滤波器的各种逼近方法和实现方法,对递归和非递归两类滤波器作了全面的比较,统一了数字滤波器的基本概念和理论。
数字滤波器领域的一个重要发展是对有限冲激响应(FIR)和无限冲激响应(IIR)关系的认识的转化。
在初期,一般认为IIR滤波器比FIR滤波器具有更高的运算效率,因而明显地倾向于前者,但当人们提出用快速傅立叶变换(FFT)实现卷积运算的概念之后,发现高阶FIR滤波器也可以用很高的运算效率来实现,这就促使人们对高性能FIR滤波器的设计方法和数字滤波器的频域设计方法进行了大量的研究,从而出现了此后数字滤波器设计中频域方法和时域方法并驾齐驱的局面。
70年代科学技术蓬勃发展,数字信号处理开始与大规模和超大规模集成电路技术,微处理器技术、高速数字算术单元、双极型高密度半导体存储器、电荷转移器件等新技术、新工艺结合了起来,并且引进了计算机辅助设计方法,它使数字滤波器的设计仅仅是对相应模拟滤波器的逼近。
现在,数字信号处理技术,包括数字滤波在内,正以惊人的速度向纵深和高级的方向发展,估计这种趋势还要连续一个较长的时期,未来的发展可能会比过去的进程更为激动人心,必将引起某些领域的飞跃性转折。
1.3本课题研究的实施方案
MATLAB是一个功能强大的软件,是由MATHWORKS公司于1984年推出的一种面向科学于工程的计算软件。
Matlab语言是一种简单、高效的高级语言,是一种内容丰富、功能强大的分析工具,包含了600多个用于数学计算、统计和工程处理的函数。
它的应用范围非常广,包括信号和图像处理、通讯、控制系统设计、测试和测量、财务建模和分析一级计算生物学等总舵应用领域。
在信号处理的工具箱中,Matlab包含了滤波器分析、滤波器设计、IIR数字滤波器设计、FIR滤波器设计、IIR数字滤波器阶次设计等函数命令。
Simulink是用来动态系统和嵌入式系统的多领域仿真于基于模型的设计工具,对各种师太系统,提供了交互式图形化环境和可定制模块库来对其进行设计、仿真、执行和测试。
利用Matlab/Simulink设计一个FIR滤波器。
2FIR滤波器
2.1FIR滤波器的概念
FIR(FiniteImpulseResponse)滤波器:
有限长单位冲激响应滤波器,是数字信号处理系统中最基本的元件,它可以在保证任意幅频特性的同时具有严格的线性相频特性,同时其单位抽样响应是有限长的,因而滤波器是稳定的系统。
因此,FIR滤波器在通信、图像处理、模式识别等领域都有着广泛的应用。
2.2FIR滤波器的原理和结构
一个截止频率为ωc(rad/s)的理想数字低通滤波器,其传递函数表达式是:
(1-1)
相应的单位取样响应hd(n)为:
Hd(n)=
(1-2)
由式2-1和2-2可以看出,这个滤波器在物理上是不可实现的,因为冲激响应具有无限性和因果性。
为了产生有限长度的冲激响应函数,我们取样响应为h(n),长度为N,其系数函数为H(z):
(1-3)
用h(n)表示截取hd(n)后冲激响应,即:
式子中W(n)为窗函数,长度为N。
当τ=(N-1)/2时,截取的一段h(n)对(N-1)/2对称,可保证所设计的滤波器具有线性相位。
一般来说,FIR数字滤波器输出y(n)的Z变换形式Y(z)与输入x(n)的Z变换形式之间的关系如下:
(1-4)
实现结构如图1所示。
图1FIR滤波器结构图
从上面的Z变换和结构图可以很容易得出FIR滤波器的差分方程表示形式。
对式1-4进行反Z变换,可得:
(1-5)
式1-5为FIR数字滤波器的时域表示方法,其中x(n)是在时间n的滤波器的输入抽样值。
根据式1-5即可对滤波器进行设计。
2.3FIR滤波器的特点
有限长单位冲激响应(FIR)滤波器有以下特点:
(1)系统的单位冲激响应h(n)在有限个n值处不为零
(2)系统函数H(z)在|z|>0处收敛,极点全部在z=0处(因果系统)
(3)结构上主要是非递归结构,没有输出到输入的反馈,但有些结构中(例如频率抽样结构)也包含有反馈的递归部分。
设FIR滤波器的单位冲激响应h(n)为一个N点序列,0≤n≤N—1,则滤波器的系统函数为
H(z)=∑h(n)*z^-n
就是说,它有(N—1)阶极点在z=0处,有(N—1)个零点位于有限z平面的任何位置。
2.4FIR滤波器的设计
FIR滤波器的设计方法有许多种,如窗函数设计法、频率采样设计法和最优化设计法等。
窗函数设计法的基本原理是用一定宽度窗函数截取无限脉冲响应序列获得有限长的脉冲响应序列,主要设计步骤为:
(1)通过傅里叶逆变换获得理想滤波器的单位脉冲响应hd(n)。
(2)由性能指标确定窗函数W(n)和窗口长度N。
(3)求得实际滤波器的单位脉冲响应h(n),h(n)即为所设计FIR滤波器系数向量b(n)。
(4)检验滤波器性能。
本文将针对一个含有5Hz、15Hz和30Hz的混和正弦波信号,设计一个FIR带通滤波器,给出利用MATLAB实现的三种方法:
程序设计法、FDATool设计法设计法。
参数要求:
采样频率fs=100Hz,通带下限截止频率fc1=10Hz,通带上限截止频率fc2=20Hz,过渡带宽6Hz,通阻带波动0.01,采用凯塞窗设计。
3仿真软件MATLAB简介
3.1MATLAB的概况
MATLAB是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。
它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平。
MATLAB和Mathematica、Maple并称为三大数学软件。
它在数学类科技应用软件中在数值计算方面首屈一指。
MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。
MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完成相同的事情简捷得多,并且MATLAB也吸收了像Maple等软件的优点,使MATLAB成为一个强大的数学软件。
在新的版本中也加入了对C,FORTRAN,C++,JAVA的支持。
可以直接调用,用户也可以将自己编写的实用程序导入到MATLAB函数库中方便自己以后调用,此外许多的MATLAB爱好者都编写了一些经典的程序,用户可以直接进行下载就可以用。
3.2MATLAB的产生历史背景
在70年代中期,CleveMoler博士和其同事在美国国家科学基金的资助下开发了调用EISPACK和LINPACK的FORTRAN子程序库.EISPACK是特征值求解的FOETRAN程序库,LINPACK是解线性方程的程序库.在当时,这两个程序库代表矩阵运算的最高水平.
到70年代后期,身为美国NewMexico大学计算机系系主任的CleveMoler,在给学生讲授线性代数课程时,想教学生使用EISPACK和LINPACK程序库,但他发现学生用FORTRAN编写接口程序很费时间,于是他开始自己动手,利用业余时间为学生编写EISPACK和LINPACK的接口程序.CleveMoler给这个接口程序取名为MATLAB,该名为矩阵(matrix)和实验室(labotatory)两个英文单词的前三个字母的组合.在以后的数年里,MATLAB在多所大学里作为教学辅助软件使用,并作为面向大众的免费软件广为流传.
1983年春天,CleveMoler到Standford大学讲学,MATLAB深深地吸引了工程师JohnLittle.JohnLittle敏锐地觉察到MATLAB在工程领域的广阔前景.同年,他和CleveMoler,SteveBangert一起,用C语言开发了第二代专业版.这一代的MATLAB语言同时具备了数值计算和数据图示化的功能.
1984年,CleveMoler和JohnLittle成立了MathWorks公司,正式把MATLAB推向市场,并继续进行MATLAB的研究和开发.
在当今30多个数学类科技应用软件中,就软件数学处理的原始内核而言,可分为两大类.一类是数值计算型软件,如MATLAB,Xmath,Gauss等,这类软件长于数值计算,对处理大批数据效率高;另一类是数学分析型软件,Mathematica,Maple等,这类软件以符号计算见长,能给出解析解和任意精确解,其缺点是处理大量数据时效率较低.MathWorks公司顺应多功能需求之潮流,在其卓越数值计算和图示能力的基础上,又率先在专业水平上开拓了其符号计算,文字处理,可视化建模和实时控制能力,开发了适合多学科,多部门要求的新一代科技应用软件MATLAB.经过多年的国际竞争,MATLAB以经占据了数值软件市场的主导地位.
在MATLAB进入市场前,国际上的许多软件包都是直接以FORTRANC语言等编程语言开发的。
这种软件的缺点是使用面窄,接口简陋,程序结构不开放以及没有标准的基库,很难适应各学科的最新发展,因而很难推广。
MATLAB的出现,为各国科学家开发学科软件提供了新的基础。
在MATLAB问世不久的80年代中期,原先控制领域里的一些软件包纷纷被淘汰或在MATLAB上重建。
MathWorks公司1993年推出了MATLAB4。
0版,1995年推出4。
2C版(forwin3。
X)1997年推出5。
0版。
1999年推出5。
3版。
MATLAB5。
X较MATLAB4。
X无论是界面还是内容都有长足的进展,其帮助信息采用超文本格式和PDF格式,在Netscape3。
0或IE4。
0及以上版本,AcrobatReader中可以方便地浏览。
时至今日,经过MathWorks公司的不断完善,MATLAB已经发展成为适合多学科,多种工作平台的功能强大大大型软件。
在国外,MATLAB已经经受了多年考验。
在欧美等高校,MATLAB已经成为线性代数,自动控制理论,数理统计,数字信号处理,时间序列分析,动态系统仿真等高级课程的基本教学工具;成为攻读学位的大学生,硕士生,博士生必须掌握的基本技能。
在设计研究单位和工业部门,MATLAB被广泛用于科学研究和解决各种具体问题。
在国内,特别是工程界,MATLAB一定会盛行起来。
可以说,无论你从事工程方面的哪个学科,都能在MATLAB里找到合适的功能。
3.3MATLAB的语言特色
一种语言之所以能如此迅速地普及,显示出如此旺盛的生命力,是由于它有着不同于其他语言的特点,正如同FORTRAN和C等高级语言使人们摆脱了需要直接对计算机硬件资源进行操作一样,被称作为第四代计算机语言的MATLAB,利用其丰富的函数资源,使编程人员从繁琐的程序代码中解放出来。
MATLAB最突出的特点就是简洁。
MATLAB用更直观的,符合人们思维习惯的代码,代替了C和FORTRAN语言的冗长代码。
MATLAB给用户带来的是最直观,最简洁的程序开发环境。
以下简单介绍一下MATLAB的主要特点。
1)语言简洁紧凑,使用方便灵活,库函数极其丰富。
MATLAB程序书写形式自由,利用起丰富的库函数避开繁杂的子程序编程任务,压缩了一切不必要的编程工作。
由于库函数都由本领域的专家编写,用户不必担心函数的可靠性。
可以说,用MATLAB进行科技开发是站在专家的肩膀上。
具有FORTRAN和C等高级语言知识的读者可能已经注意到,如果用FORTRAN或C语言去编写程序,尤其当涉及矩阵运算和画图时,编程会很麻烦。
例如,如果用户想求解一个线性代数方程,就得编写一个程序块读入数据,然后再使用一种求解线性方程的算法(例如追赶法)编写一个程序块来求解方程,最后再输出计算结果。
在求解过程中,最麻烦的要算第二部分。
解线性方程的麻烦在于要对矩阵的元素作循环,选择稳定的算法以及代码的调试动不容易。
即使有部分源代码,用户也会感到麻烦,且不能保证运算的稳定性。
解线性方程的程序用FORTRAN和C这样的高级语言编写,至少需要四百多行,调试这种几百行的计算程序可以说很困难。
以下用MATLAB编写以上两个小程序的具体过程。
MATLAB求解下列方程,并求解矩阵A的特征值。
Ax=b,其中:
A=32 13 45 67
23 79 85 12
43 23 54 65
98 34 71 35
b= 1
2
3
4
解为:
x=A\b;设A的特征值组成的向量e,e=eig(A)。
可见,MATLAB的程序极其简短。
更为难能可贵的是,MATLAB甚至具有一定的智能水平,比如上面的解方程,MATLAB会根据矩阵的特性选择方程的求解方法,所以用户根本不用怀疑MATLAB的准确性。
2)运算符丰富。
由于MATLAB是用C语言编写的,MATLAB提供了和C语言几乎一样多的运算符,灵活使用MATLAB的运算符将使程序变得极为简短。
3)MATLAB既具有结构化的控制语句(如for循环,while循环,break语句和if语句),又有面向对象编程的特性。
4)程序限制不严格,程序设计自由度大。
例如,在MATLAB里,用户无需对矩阵预定义就可使用。
5)程序的可移植性很好,基本上不做修改就可以在各种型号的计算机和操作系统上运行。
6)MATLAB的图形功能强大。
在FORTRAN和C语言里,绘图都很不容易,但在MATLAB里,数据的可视化非常简单。
MATLAB还具有较强的编辑图形界面的能力。
7)MATLAB的缺点是,它和其他高级程序相比,程序的执行速度较慢。
由于MATLAB的程序不用编译等预处理,也不生成可执行文件,程序为解释执行,所以速度较慢。
8)功能强大的工具箱是MATLAB的另一特色。
MATLAB包含两个部分:
核心部分和各种可选的工具箱。
核心部分中有数百个核心内部函数。
其工具箱又分为两类:
功能性工具箱和学科性工具箱。
功能性工具箱主要用来扩充其符号计算功能,图示建模仿真功能,文字处理功能以及与硬件实时交互功能。
功能性工具箱用于多种学科。
而学科性工具箱是专业性比较强的,如control,toolbox,signlproceessingtoolbox,commumnicationtoolbox等。
这些工具箱都是由该领域内学术水平很高的专家编写的,所以用户无需编写自己学科范围内的基础程序,而直接进行高,精,尖的研究。
9)源程序的开放性。
开放性也许是MATLAB最受人们欢迎的特点。
除内部函数以外,所有MATLAB的核心文件和工具箱文件都是可读可改的源文件,用户可通过对源文件的修改以及加入自己的文件构成新的工具箱
4FIR滤波器的MATLAB实现
4.1程序设计法
MATLAB信号处理工具箱提供了各种窗函数、滤波器设计函数和滤波器实现函数。
本文的带通滤波器设计及滤波程序如下:
fc1=10;fc2=20;fs=100;
[n,Wn,beta,ftype]=kaiserord([7131723],[010],[0.010.010.01],100);
%得出滤波器的阶数n=38,beta=3.4
w1=2*fc1/fs;w2=2*fc2/fs;%将模拟滤波器的技术指标转换为数字滤波器的技术指标
window=kaiser(n+1,beta);%使用kaiser窗函数
b=fir1(n,[w1,w2],window);%使用标准频率响应的加窗设计函数fir1
freqz(b,1,512);%数字滤波器频率响应
figure
(1)
t=(0:
100)/fs;
s=sin(2*pi*t*5)+sin(2*pi*t*15)+sin(2*pi*t*30);%混和正弦波信号
plot(t,s)%显示滤波前波形
title('滤波前波形')
figure
(2)
sf=filter(b,1,s);%对信号s进行滤波
plot(t,sf)%显示滤波后波形
title('滤波后波形')
程序执行的结果如图2和图3所示:
图2滤波器幅频特性和相频特性
图3滤波前后的波形
4.2FDATool设计法
FDATool(FilterDesign&AnalysisTool)是MATLAB信号处理工具箱专用的滤波器设计分析工具,操作简单、灵活,可以采用多种方法设计FIR和IIR滤波器。
在MATLAB命令窗口输入FDATool后回车就会弹出FDATool界面。
4.2.1带通滤波器设计
已知滤波器的阶数n=38,beta=3.4。
本例中,首先在FilterType中选择Bandpass;在DesignMethod选项中选择FIRWindow,接着在Window选项中选取Kaiser,Beta值为3.4;指定FilterOrder项中的Specifyorder为38;采样频率Fs=100Hz,截止频率Fc1=10Hz,Fc2=20Hz。
设置完以后点击窗口下方的DesignFilter,在窗口上方就会看到所设计滤波器的幅频响应,通过菜单选项Analysis还可以看到滤波器的相频响应、组延迟、脉冲响应、阶跃响应、零极点配置等。
设计完成后将结果保存为kaiser.fda文件。
4.2.2Simulink仿真
在Simulink环境下,将滤波器文件kaiser.fda导入DigitalFilterDesign模块,输入信号为s(t)=sin(10πt)+sin(30πt)+sin(60πt),生成的仿真图和滤波效果如图4所示。
(1)Simulink仿真图
(2)滤波前后的离散波形
图4Simulink仿真图和滤波效果图
5总结
与其他高级语言的程序设计相比,在MATLAB环境下利用程序法调用窗函数,可以更方便、快捷地设计出具有严格线性相位的FIR滤波器,节省时间,提高编程效率,且参数的修改方便,还可以进一步进行优化设计。
随着信息技术的不断发展,利用MATLAB进行数字滤波器设计将发挥更大的作用。
同时,用MATLAB设计有关数字滤波器的参数,将会为硬件实现(比如说在DSP器件上的实现)提供一条简单而准确的途径和依据。
参考文献:
1董长虹等.MATLAB信号处理与应用.北京:
国防工业出版社,2005
2[美]M.H.海因斯著,张建华等译.数字信号处理.北京:
科学出版社,2002
3张葛祥,李娜.MATLAB仿真技术与应用.北京:
清华大学出版社,2003
4楼顺天,李博菡.基于MATLAB的系统分析与设计.西安:
西安电子科技大学出版社,1998
5丁玉美,高西全.数字信号处理[M].西安:
西安电子科技大学出版社,2005.
6黄文梅.信号分析与处理[M].长沙:
国防科技大学出版社,2000.
7楼顺天,李伯菡.基于MATLAB的系统分析与设计[M].西安:
西安电子科技大学出版社,1999.
8罗军辉,罗勇江.MATLAB在数字信号处理中的应用[M].北京:
机械工业出版社,2005.