基于MATLAB的数字滤波器设计 lunwen.docx
《基于MATLAB的数字滤波器设计 lunwen.docx》由会员分享,可在线阅读,更多相关《基于MATLAB的数字滤波器设计 lunwen.docx(38页珍藏版)》请在冰豆网上搜索。
基于MATLAB的数字滤波器设计lunwen
青岛农业大学
本科生毕业论文(设计)
题目:
基于MATLAB的数字滤波器设计
姓名:
潘西金
学院:
机电工程学院
专业:
电气工程及其自动化
班级:
2004.4
学号:
0320040631
指导教师:
杨丽丽
完成时间:
2008.6.8
2008年6月8日
基于MATLAB的数字滤波器设计
摘要
数字滤波器是数字信号处理中最重要的组成部分之一。
在许多科学技术领域中,广泛使用滤波器对信号进行处理。
数字滤波器可以分为两类,即有限冲激响应数字滤波器(FIR)和无限冲激响应数字滤波器(IIR)。
本文就分别对这两类数字滤波器的设计和实现来进行分析研究。
在FIR滤波器的设计过程中主要探讨了用窗函数法设计FIR滤波器。
在IIR滤波器的设计过程中,将设计步骤分为三步,即模拟低通滤波器原型设计,模拟-数字滤波器变换,滤波器频带变换。
在这两类滤波器的整个设计过程都是按照理论分析、编程设计、具体实现的步骤来进行的。
相对于模拟滤波器来说,数字滤波器稳定、没有漂移、精度高、参数容易控制,这些优势决定了数字滤波器的使用越来越广泛。
关键词:
数字滤波器,有限冲激响应,无限冲激响应
Abstract
Digitalfilterisoneofthemostimportantpartsofdigitalsignalprocessing.Inmanyfieldsofscienceandtechnology,itiswidelyusedforsignalprocessing.DigitalfiltercanbedividedastheFiniteImpulseResponsedigitalfilter(FIR)andtheInfiniteImpulseResponsedigitalfilter(IIR).Thepaperaimsatrespectivestudyinthedesignandrealizationofthesetwokindsofdigitalfilters.
DuringthedesignofFIRfilters,wemainlydiscussthedesignoftheFIRfiltersbymeansofwindowfunctions.ThedesignofIIRfilterscanbeachievedthroughthreesteps:
thedesignofprototypeofanaloglow-passfilter,analog-to-digitalfilterconversionandtheconversionoffilterfrequencyband.ThedesignofFIRandIIRfollowstheproceduresoftheoreticalanalysis,programmingdesignandconcreterealization.
Relativetoana1ogfi1ter,thedigitalfilterwithoutexcursion,beabletoprocesslowfrequencysignal,thecharacteristicoffrequencyresponseclosetoidealva1ue,withhighprecision,andeasytointegrated.Theseadvantagesdecidetheapplicationofdigita1filterbecomemoreandmoreextensively.
Keywords:
DigitalFilter,FIR,IIR
第一章绪论
1.1数字滤波技术的发展概况
数字滤波是数字信号处理理论的一部分。
数字信号处理主要是研究用数字或符号的序列来表示信号波形,并用数字的方式去处理这些序列,把它们改变成在某种意义上更为有希望的形式,以便估计信号的特征参量,或削弱信号中的多余分量和增强信号中的有用分量。
具体来说,凡是用数字方式对信号进行滤波、变换、调制、解调、均衡、增强、压缩、估值、识别、产生等加工处理,都可纳入数字信号处理领域。
数字信号处理学科的一项重大进展是关于数字滤波器设计方法的研究。
关于数字滤波器,早在40年代末期,就有人讨论过它的可能性问题.但直到60年代中期,才开始形成关于数字滤波器的一套完整的正规理论。
在这一时期,提出了各种各样的数字滤波器结构,有的以运算误差最小为特点,有的则以运算速度高见长,而有的则二者兼而有之:
出现了数字滤波器的各种逼近方法和实现方法,对递归和非递归两类滤波器作了全面的比较,统一了数字滤波器的基本概念和理论.数字滤波器领域的一个重要发展是对有限冲激响应(FIR)和无限冲激响应(IIR)关系的认识的转化。
[2]在初期,一般认为IIR滤波器比FIR滤波器具有更高的运算效率,因而明显地倾向于前者,但当人们提出用快速傅立叶变换(FFT)实现卷积运算的概念之后,发现高阶FIR滤波器也可以用很高的运算效率来实现,这就促使人们对高性能FIR滤波器的设计方法和数字滤波器的频域设计方法进行了大里的研究,从而出现了此后数字滤波路设计中频域方法和时域方法并驾齐驱的局面。
然而,这些均属数字滤波器的早期研究。
早期的数字滤波器尽管在语音、声纳、地震和医学的信号处理中曾经发挥过作用,但由于当时计算机主机的价格很昂贵,严重阻碍了专用数字滤波器的发展。
70年代科学技术蓬勃发展,数字信号处理开始和大规模和超大规模集成电路技术,徽处理器技术、高速数字算术单元、双极型高密度半导体存储器、电荷转移器件等新技术、新工艺结合了起来,并且引进了计算机辅助设计方法,它使数字滤波器的设计仅仅是对相应模拟滤波器的通近。
一般说来,通过对模拟滤波器函数的变换来设计数字滤波器,很难达到逼近任意频率响应或冲激响应,而采用计算机辅助设计则有可能实现频域或时域的最佳逼近,或频域时域联合最佳逼近。
这样,数字滤波器的分析和设计其内容也更加丰富起来:
各种新的数字信号处理系统,也都能用专用数字硬件实时加以实现,恩格斯曾经指出:
“科学的发生和发展一开始就是由生产决定的”。
[10]数字信号处理理论和技术的发展,主要是由于电子计算机和大规模集成电路的大量生产和广泛使用,替代了原来的模拟信号处理中的线性滤波和颇谱分析所使用的模拟计算机和分立元件L.C.R线性网络,高度发挥了计算技术和数字技术相结合的特色和优越性。
特别是微处理器和微型计算机技术日新月异的发展,将更有利于电子仪器和电子技术使用系统朝着数字化、小型化、自动化以及多功能化等方向发展,促使它们成为富有智能性的电子系统。
现在,包括数字滤波在内的数字信号处理技术正以惊人的速度向纵深和高级的方向发展,据估计这种趋势还要持续一个较长的时期,未来的发展可能会比过去的进程更为激动人心,必将引起某些领域的飞跃性转析。
[9]
1.2MATLAB软件简介
MATLAB是英文MatrixLaboratory(矩阵实验室)的缩写。
它是由美国MathWorks公司推出的用于数值计算和图形处理的数学计算环境。
在MATLAB环境下,用户可以集成地进行程序设计、数值计算、图形绘制、输入输出、文件管理等各项操作。
其优秀的数值计算能力和卓越的数据可视化能力使其很快在同类软件中脱颖而出MATLAB系统最初是由CleveMoler用FORTRAN语言设计的,现在的MATLAB程序是MathWorks公司用C语言开发的。
它的第一版(DOS版本1.0)发行于1984年,经过10余年的不断改进,MATLAB的版本不断升级,其所含的“工具箱”功能也越来越丰富,工具越来越多,因此使用范围也越来越广泛。
MATLAB语言之所以能如此迅速地普及,显示出如此旺盛的生命力,是由于它有着不同于其它语言的特点
1、语言简洁紧凑,使用方便灵活,库函数极其丰富。
MATLAB程序书写形式自由,利用其丰富的库函数避开了繁杂的子程序编程任务,压缩了一切不必要的编程工作。
由于库函数都是由本领域的专家编写,所以用户不必担心函数的可靠性。
2、运算符丰富。
由于MATLAB是用C语言编写的,所以MATLAB提供了和C语言几乎一样多的运算符,灵活使用MATLAB的运算符将使程序变得极为简短。
3.MATLAB既具有结构化的控制语句,又有面向对象编程的特性。
4.语法限制不严格,程序设计自由度大
5.程序的可移植性很好,基本上不做修改就可以在各种型号的计算机和操作系统上运行。
6.MATLAB的图形功能强大。
在C和FORTRAN语言里,绘图都很不容易,但在MATLAB里,数据的可视化非常简单。
此外,MATLAB还具有较强的编辑图形界面的能力.
7.MATLAB具有的一项重要特色是拥有功能强大的工具箱。
MATIAB包含两个部分:
核心部分和各种可选的工具箱。
核心部分有数百个核心内部函数。
其工具箱又可分为两类:
功能性工具箱和学科性工具箱。
功能性工具箱主要用来扩充其符号计算功能、图示建模仿真功能、文字处理功能以及和硬件实时交互功能。
功能性工具箱能用于多种学科。
而学科性工具箱是专业性比较强的,如controltoolbox、signalprocessingtoolbox,communicationtoolbox等。
这些工具箱都是由该领域内的学术水平很高的专家编写的,所以用户无需编写自己学科范围内的基础程序,而直接进行高、精、尖的研究。
8.源程序的开放性。
除内部函数以外,所有MATLAB的核心文件和工具箱文件都是可读可改的源文件,用户可通过对源文件的修改以及加入自己的文件构成新的工具箱。
MATLAB软件自1984年推向市场以来,历经十几年的发展和竞争,现已成为(IEEE评述)国际公认的最优秀的科技使用软件。
[7]它功能强大、界面友善、语言自然、开放性强的特点使它获得了对使用学科(特别是边缘学科和交叉学科)的极强适应力,并很快成为使用学科计算机辅助分析、设计、仿真、教学乃至科技文字处理不可缺少的基础软件.在欧美等高校,MATLAB己成为理工科高级课程的基本教学工具,成为攻读学位的大学生、硕士生、博士生必须掌握的技能。
在设计研究单位和工业部门,MATLAB己经成为研究和解决各种具体工程问题的一种标准软件.近年来该软件系统开始在国内流行,受到理工科大专院校师生及科研人员的重视,这也是本文选择用它来设计实现数字滤波器的原因所在。
1.3数字滤波器及其MATLAB实现
数字滤波器是数字信号处理中最重要的组成部分之一。
在许多科学技术领城中,广泛使用滤波器对信号进行处理。
滤波器是一种选频装置,它对某一个或几个频率范围(频带)内的电信号给以很小的衰减,使这部分信号能够顺利通过;对其它频带内的电信号则给以很大的衰减,从而尽可能地阻止这部分信号的通过。
通过滤波器时不经受衰减或经受很小的衰减的频带称为通带,经受的衰减超过某一规定值的频带称为阻带,位于通带和阻带之间的频带称为过渡带。
于是根据通带的不同,滤波器可分为低通滤波器、高通滤波器、带通滤波器、带阻滤波器等。
此外,根据它所处理的信号类型,滤波器又可分为模拟滤波器和数字滤波器,模拟滤波器用来处理连续信号,而数字滤波器用来处理离散信号,后者是在前者的基础上发展起来的。
数字滤波器和模拟滤波器比较,其主要优点是:
精度和稳定性高;系统函数容易改变,因而灵活性高:
不存在阻抗匹配问题;便于大规模集成:
可以实现多维滤波。
因此,目前在诸如通信、雷达、遥感、声纳、卫星通信、宇宙航行、测量、语音和生物医学等科学领域的信号处理中,已经运用了数字滤波技术,而且随着大规模集成技术和数字计算技术的发展,它的使用会越来越广泛
数字滤波器实际上就是一种数字信号处理系统的算法或设备。
数字滤波实际上是一种运算过程,数字滤波器的功能是将一组输入的数字序列通过一定的运算后转变为另一组输出的数字序列,因此它本身就是一台数字式的处理设备。
数字滤波器的基本原理是:
首先利用取样开关和模拟/数字转换器将一个连续性的信号转换成数字信号。
在--数字计算器中完成所要求的传输函数运算之后,再通过数字/模拟转换器和保持电路,使信号形成最后要求的波形。
数字滤波器一般可用两种方法实现:
一种是根据描述数字滤波器的数学模型或信号流图,用数字硬件装配成一台专门的设备,构成专用的信号处理机,这就是硬件实现方式;另一种方法就是直接利用通用计算机,将所需要的运算编成程序来让计算机执行,这也就是软件实现方式。
在硬件实现方式中,是以数字组件如延迟器、加法器和乘法器作为基本部件构成专用的数字信号处理系统,不像模拟滤波器需要用电感和电容元件,因此、数字信号处理机很容易用数字集成电路来制成,而且它的转移函数可变,各回路之间不存在阻抗匹配问题,因此可以很容易做成最佳冲激响应和恒定延迟的线性相移网络。
在软件实现方式中,它是借助于通用计算机机器语言、汇编语言或高级语言程序来做数字滤波的运算过程。
数字滤波器的设计和实现,通常按下述步骤进行:
首先,根据不同用途提出数字滤波器的技术指标;然后,设计一个稳定的、因果的数学模型H(z)来逼近所要求的技术指标:
最后,设计专用的数字硬件来实现这个数字模型,或者用通用电子计算机运行程序软件予以实现。
[11]本文侧重于软件实现并将重点放在第二步。
如同模拟滤波器的性能可由h(t)和H(s)来表征一样,数字滤波器的性能完全取决于h(n)和H(z)。
因此,数字滤波器可以按照单位取样响应(或称脉冲响应冲激响应等)h(n)的性质分为两类:
1.有限冲激响应(FiniteImpulseResponse)数字滤波器,简称FIR数字滤波器,它的h(n)序列长度是有限的。
2.无限冲激响应(InfiniteImpulseResponse)数字滤波器,简称IIR数字滤波器,它的h(n)序列长度是无限的,即当n→∞时,h(n)仍有值。
下面将分别对FIR数字滤波器和IIR数字滤波器的设计实现进行分析讨论。
在具体设计过程中,将充分发挥MATLAB软件在数值计算、图像处理中的优势,并充分利用其强大的信号处理工具箱(signalprocessingtoolbox)。
[8]
第二章FIR滤波器设计及其MATLAB实现
通常,计算机解决一个具体问题的步骤是这样的:
首先,分析这个待处理的问题,从中找出数学模型(包括计算机要处理的对象、对象的特点及对象之间的关系等),然后寻求解此数学模型的算法,最后进行编程设计。
[4]其中最为关键的步骤就是寻求合适的数学模型,这个数学模型必须能被计算机所识别,并使程序设计人员能够很容易、很方便的根据这些模型进行程序设计。
为了能用计算机进行滤波器的设计。
我们有必要在经典的数字滤波器理论的基础上,进行进一步的数学推导,得出一些有意义的公式,以使计算机程序设计更加容易,这实质是一个化抽象为具体、化复杂为简单的过程。
因此,在设计FIR滤波器之前,先讨论一下FIR线性相位滤波器的特性,推导出它的振幅响应的公式,然后根据这些公式进行程序设计。
2.1FIR线性相位滤波器的特点
设h(n)(0≤n≤M-1)是长度为M的线性相位滤波器的脉冲响应,它的系统函数为:
H(z)=
它的频率响应函数为:
它具有一个线性相位约束:
其中,
=0或
,
为一个常数。
则h(n)有下面的特性:
h(n)=h(M-1-n)
=0,0≤n≤M-1
称之为对称脉冲响应:
或者
h(n)=-h(M-1-n)
=
0≤n≤M-1
称之为反对称脉冲响应
于是,根据
值的不同和M的奇偶性,就产生了四种类型的线性FIR相位滤波器。
它们分别是:
1型线性相位FIR滤波器:
,M为奇数,h(n)以中心点(M-1)/2对称;
2型线性相位FIR滤波器:
,M为偶数,h(n)以点(M/2)-1和点(M/2)之间的中心对称
3型线性相位FIR滤波器:
M为奇数,h(n)以点(M-1)/2为中心反对称:
4型线性相位FIR滤波器:
M为偶数,h(n)以点(M/2)-1和点(M/2)之间的中心反对称。
根据这4类FIR滤波器,可得到相应的频率响应的特点:
其中
为振幅响应,它和幅值特性
不同,前者可正可负,而后者只能为非负值。
2.2窗函数法设计FIR滤波器的MATLAB实现
2.21基本步骤
基于窗函数的FIR数字滤波器设计其主要步骤如下:
[3]
(1)由数字滤波器理想特性
进行傅立叶逆变换,获得理想滤波器的单位脉冲响应
。
一般假设理想低通滤波器的截止频率为
,其幅频特性为:
或
(2)由性能指标确定窗函数
和窗口长度N,由过度带近似于窗函数主瓣宽度求得窗口长度N。
(3)求滤波器的单位脉冲响应
即为所设计的FIR滤波器系数向量
。
(4)检验滤波器的性能指标
用窗函数设计一个线性相位FIR低通滤波器,并满足性能指标:
通带边界频率
,阻带边界频率
,阻带衰减不小于40dB,通带波纹不大于3dB.
程序如下:
%programp211
wp=0.5*pi;
ws=0.66*pi;
width=ws-wp;%widthoftransitionband
N=ceil(8*pi/width);%thelengthofthefilter
if(rem(N,2))==0
N=N+1;
end
Nw=N;%thelengthofthefilter
wc=(wp+ws)/2;%cutofffreq.ofthefilter
n=0:
N-1;
alpha=(N-1)/2;
m=n-alpha+0.00001;
hd=sin(wc*m)./(pi*m);
win=hanning(Nw);
h=hd.*win';
b=h;
freqz(b,1,512);
程序运行结果如下:
图2-1
2.22工具箱函数
MATLAB信号处理工具箱还提供了基于窗函数的工具函数fir1和fir2。
(1)fir1函数。
其调用格式为:
b=fir1(n,Wn)
b=fir1(n,Wn,’ftype’)
b=fir1(n,Wn,window)
b=fir1(n,Wn,’ftype’window)
格式中:
n为FIR滤波器的阶数,对于高通、带阻滤波器,n取偶数。
Wn为滤波器的截止频率,0~1;对于带通、带阻滤波器,Wn=[W1,W2],且W1‘ftype’为滤波器类型,默认为低通滤波器或带通滤波器。
其他选择如下:
‘high’为高通滤波器;
‘stop’为阻带滤波器;
‘DC-1’使多带的第一频带为通带;
‘Dc-0’使多带的第一频带为阻带。
window为窗函数,列向量,其长度为n+1
用FIR1设计一个48阶的FIR带通滤波器,通带
。
程序如下:
%programp212
b=fir1(48,[0.350.65]);
freqz(b,1,512)
程序运行结果如下:
图2-2
设计一个34阶的高通滤波器在fs/4衰减,截止频率为0.48,用30dB波纹的Chebyshev窗函数。
程序如下:
%programp213
loadchirp%Loadyandfs.
b=fir1(34,0.48,'high',chebwin(35,30));
freqz(b,1,512)
程序运行结果如下:
图2-3
(2)fir2函数,其调用格式为:
b=fir2(n,f,m)
b=fir2(n,f,m,window)
b=fir2(n,f,m,npt)
b=fir2(n,f,m,npt,window)
b=fir2(n,f,m,npt,lap)
b=fir2(n,f,m,npt,lap,window)
格式中,n为滤波器阶数;f和m分别为滤波器期望幅频响应的频率向量和幅值向量,取值在0~1间,m和f长度相同;window为窗函数,列向量,长度必须是(n+1);默认时自动取hamming;npt为对频率响应进行内插点数,默认时为512;lap定义一个区域尺寸,默认为25;b为FIR滤波器系数向量,长度为n+1。
设计一个30阶低通滤波器并绘出期望频率响应和实际频率响应。
程序如下:
%programp214
f=[00.60.61];
m=[1100];
b=fir2(30,f,m);
[h,w]=freqz(b,1,128);
plot(f,m,w/pi,abs(h))
legend(‘Ideal’,’fir2’Designed’)
title(‘ComparisonofFrequencyResponseMagnitudes’)
程序运行结果如下:
图2-4
设计一个24阶的反对称分段线性带通滤波器,并绘出期望的实际频率响应。
其中理想幅频响应对为:
F=[00.30.40.60.70.9]
A=[01000.50.5]
用firls函数设计,其程序如下:
%programp215
F=[00.30.40.60.70.9]
A=[01000.50.5]
b=firls(24,F,A,'hilbert');
fori=1:
2:
6,
plot([F(i)F(i+1)],[A(i)A(i+1)],'*'),holdon
end
[H,f]=freqz(b,1,512,2);
plot(f,abs(H)),gridon,holdoff
legend('Ideal','firlsDesign')
程序运行结果如下:
图2-5
用remez函数设计,其程序如下:
%programp216
F=[00.30.40.60.70.9];
A=[01000.50.5];
b=remez(24,F,A);
fori=1:
2:
6,
plot([F(i)F(i+1)],[A(i)A(i+1)],'-'),holdon
end
[H,f]=freqz(b,1,512,2);
plot(f,abs(H)),gridon,holdoff
axis([0101]);
legend('Ideal','firlsDesign')
程序运行结果如下:
图2-6
通过上面这几个例子,充分说明了用软件来设计实现数字滤波器,具有快速、方便、效率离、易调节等特点。
2.3小结
这一章主要探讨了两个问题:
其一是FIR线性相位滤波器的特点,其二是用窗函数法设计FIR滤波器及其MATLAB实现.
在第一个问题中,分析了FIR线性相位滤波器的四种类型及其各自的特点,
在第二个问题中,讨论了用窗函数法设计FIR滤波器的原理,并通过对几种窗函
数性质的对比分析,说明了利用窗函数来设计FIR数字滤波器的优势所在,最后用MATLAB语言来编程设计FIR数字低通、高通、带通及带阻滤波器,并用具体的滤波器指标来实现滤波器设计.
第三章IIR滤波器设计
3.1设计方法
IIR滤波器的系