MATLAB信号处理工具箱的数字滤波器设计.doc_第1页
MATLAB信号处理工具箱的数字滤波器设计.doc_第2页
MATLAB信号处理工具箱的数字滤波器设计.doc_第3页
MATLAB信号处理工具箱的数字滤波器设计.doc_第4页
MATLAB信号处理工具箱的数字滤波器设计.doc_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于MATLAB信号处理工具箱的数字滤波器设计与仿真第1章 绪论数字滤波器滤波器设计IIR数字滤波器和FIR数字滤波器的设计方法不同,对于IIR数字滤波器,设计方法大体有两类,常用的方法是借助模拟滤波器的设计方法进行的。其设计思路是先设计出模拟滤波器,得到传递函数,然后将传递函数按一定的方法转换成数字滤波器的系统函数。这种方法相对简单,因为模拟滤波器的设计方法已经很成熟,有公式和图表可供查询,另外,还有一些典型的模拟滤波器可供选择。IIR数字滤波器的另一种设计方法是直接在时域或频域上进行设计,这种方法一般要解联立方程,计算时要借助计算机实现。IIR数字滤波器的设计在MATLAB中有三类方法:模拟滤波器变换法(经典设计法)、直接设计法和最大平滑法。在经典设计法中,根据实现途径的不同,又可分为离散化设计法和完全化设计法。IIR数字滤波器设计时借鉴了许多模拟滤波器的设计方法,保留了模拟滤波器的一些特性,因此得到了广泛的应用。但缺点是其只在幅频特性上给予逼近,而忽视了相频特性上的逼近。信号进过系统后,不产生失真的相位条件使相位特性保持线性,这一点在FIR数字滤波器设计中给予了充分的考虑。有限长冲激响应(FIR)滤波器的传递函数具有以下的形式:(1.1)有限长冲激响应(FIR)滤波器的设计方法较多,主要有窗函数法、频率抽样法、最优化方法、最小二乘法设计法等。MATLAB的实现主要有三种途径:程序设计法、FDATool设计法和SPTool设计法。1.2数字滤波技术的现状及发展数字滤波技术是数字信号处理的一个重要组成部分,滤波器的设计是信号处理的核心问题之一。数字滤波是数字信号处理的一部分。数字信号处理主要是研究用数字或符号的序列来表示信号波形,并用数字的方式去处理这些序列,把它们改变成在某种意义上更为有希望的形式,以便估计信号的特征参量,或削弱信号中的多余分量和增强信号中的有用分量。具体来说,凡是用数字方式对信号进行滤波、变换、调制、解调、均衡、增强、压缩、估值、识别、产生等加工处理,都可纳入数字信号处理领域。数字信号处理学科的一项重大进展是关于数字滤波器设计方向的研究。关于数字滤波器,早在40年代末期,就有人讨论过他的可能性问题,在50年代也有人在研究生班讨论过数字滤波的问题。直到60年代中期,才开始形成关于数字滤波器的一整套完整的正规理论。在这一时期,提出了各种各样的数字滤波器结构,有的以运算误差最小为特点,有的则以运算速度高见长,而有的则二者兼而有之:出现了数字滤波器的各种逼近方法和实现方法,对递归和非递归两类滤波器作了全面的比较,统一了数字滤波器的基本概念和理论。数字滤波器的一个重要发展是对有限冲激响应(FIR)和无限冲激响应(IIR)关系的认识转化。在初期,一般认为IIR滤波器比FIR滤波器具有更高的运算效率,因而明显地趋向于前者,但当人们提出用快速傅利叶变换(FFT)实现卷积运算的概念之后,发现高阶FIR滤波器也可以用很高的运算效率来实现,这就促使人们对高性能FIR滤波器的设计方法和数字滤波器的频域设计方法进行了大量的研究,从而出现了此后数字滤波器设计中频域方法与时域方法并驾齐驱的局面。然而,这些均属数字滤波器的早期研究,早期的数字滤波器尽管在语音、声纳、地震和医学的信号处理中曾经发挥过作用,但由于当时计算机主机的价格很昂贵,严重阻碍了专用数字滤波器的发展。70年代科学技术蓬勃发展,数字信号处理开始与大规模和超大规模集成电路技术、微处理器技术、高速数字算术单元、双极性高密度半导体存储器、电荷转移器件等新技术、新工艺结合了起来,并且引进了计算机辅助设计方法,它是数字滤波器的设计仅仅是对相应模拟滤波器的逼近。一般说来,通过对模拟滤波器函数的变换来设计数字滤波器,很难达到逼近任意频率响应或冲击响应,而采用计算机辅助设计则有可能实现频域与时域的最佳逼近,或频域时域联合最佳逼近。这样,数字滤波器的分析与设计其内容也更加丰富起来:各种新的数字处理系统,也都能用专用数字硬件加以实现。数字信号处理理论与技术的发展,主要是由于电子计算机与大规模集成电路的大量生产和广泛应用,替代了原来的模拟信号处理中的线性滤波和频谱分析所应用的模拟计算机和分离元件L、C、R线性网络,高度发挥了计算技术和数字技术相结合的特色和优越性。特别是微处理器和微型计算机技术日新月异的发展,将更有利于电子仪器与电子技术应用系统朝着数字化、小型化、自动化以及多功能化等方向发展,促使他们成为富有智能化的电子系统。现在,包括数字滤波在内的数字信号处理技术正以惊人的速度向纵深和高级的方向发展,据估计这种趋势还要持续一个较长的时期,未来的发展可能会比过去的进程更为激动人心,必将引起某些领域的飞跃性转折。1.1.1数字滤波器的基本概念数字滤波器一次出现在60年代中期,数字滤波器由数字乘法器、加法器和延时单元组成的一种算法或装置。数字滤波器的功能是对输入的离散信号的数字代码进行运算处理,以达到改变信号频谱的目的,获得所需要的信号。数字滤波器已可用计算机软件实现,也可用大规模集成数字硬件实现。数字滤波器是一个离散时间系统(按预定的算法,将输入的离散时间信号转换为所要求的输出离散时间信号的特定功能装置)。应用数字滤波器处理模拟信号时,首先必须对输入的模拟信号进行限带、抽样和模数转换。数字滤波器输入的信号的抽样率应大于被处理信号带宽的两倍,其频率响应应具有以抽样频率为间隔的周期重复特性,且以折叠频率1/2抽样频率点呈镜像对称。为得到模拟信号,数字滤波器处理的输出数字信号须经过模数转换、平滑。数字滤波器具有高精度、高可靠性、可程控改变特性或复用,便于集成等优点。数字滤波器在语言信号处理、图像信号处理、医学生物信号处理以及其他应用领域得到了广泛的应用。由于现代计算机技术的发展,离散数字信号已成为信号处理的关键技术之一,因此数字滤波器也被广泛应用以滤除信号中的无用或干扰部分。数字滤波器按频率分布特性来分有低通、高通、带通、带阻等类型,按实现方式可以分为非递归型数字滤波器和递归型数字滤波器,按对冲激响应特性分为有限冲激响应(Finite Impulse Responses,FIR)数字滤波器和无限冲激响应(Infinite Impulse Responses,IIR)数字滤波器。1.1.21.3数字滤波器的传统设计方法数字滤波器可以理解为是一个计算程序或算法,将代表输入信号的数字时间序列转化为代表输出信号的数字时间序列,并在转化过程中,使信号按预定的形式变化。数字滤波器有多种分类,根据数字滤波器冲激响应的时域特征,可将数字滤波器分为两种,即无限长冲激响应(IIR)滤波器和有限长冲激响应(FIR)滤波器。IIR数字滤波器具有无限宽的冲激响应,与模拟滤波器相匹配。所以IIR滤波器的设计可以采取在模拟滤波器设计的基础上进一步变换的方法。FIR数字滤波器的单位脉冲响应是有限长序列。它的设计问题实质上是确定能满足所要求的转移序列或脉冲响应的常数问题,设计方法主要有窗函数法、频率采样法和等波纹最佳逼近法等。在对滤波器实际设计时,整个过程的运算量是很大的。例如利用窗函数法设计M阶FIR低通滤波器时,首先要根据(1)式计算出理想低通滤波器的单位冲激响应序列,然后根据(2)式计算出M个滤波器系数。当滤波器阶数比较高时,计算量比较大,设计过程中改变参数或滤波器类型时都要重新计算。(1.2)(1.3) 设计完成后对已设计的滤波器的频率响应要进行校核,要得到幅频相频响应特性,运算量也是很大的。我们平时所要设计的数字滤波器,阶数和类型并不一定是完全给定的,很多时候都是要根据设计要求和滤波效果不断的调整,以达到设计的最优化。在这种情况下,滤波器的设计就要进行大量复杂的运算,单纯的靠公式计算和编制简单的程序很难在短时间内完成设计。利用MATLAB强大的计算功能进行计算机辅助设计,可以快速有效的设计数字滤波器,大大的简化了计算量,直观简便。由此可见传统的数字滤波器的设计过程复杂,计算工作量大,滤波特性调整困难,影响了它的应用。而利用MATLAB信号处理工具箱(Signal Processing Toolbox)设计常规数字滤波器,可以随时对比设计要求和滤波器特性调整参数,直观简便,极大的减轻了工作量,有利于滤波器设计的最优化。第2章基于MATLAB的数字滤波器设计2.1 MATLAB的概况MATLAB为准确、可靠的科学计算机标准软件。MATLAB是矩阵实验室(Matrix Laboratory)之意,MATLAB名字由Matrix和 Laboratory两次前三个字母组合而成。1984年美国的Patchwork公司推出MATLAB,迄今为止,它已发展成为国际上最优秀的科技应用软件之一。MATLAB是高层次的矩阵/数组语言,具有条件控制、函数调用、数据结构、输入输出、面向对象等程序语言特性。利用它既可以进行小规模编程,完成算法设计和算法实验的基本任务,也可以进行大规模编程,开发复杂的应用程序,从而使得MATLAB在许多科学领域中成为计算机辅助设计与分析、算法研究和应用开发的基本工具和首选平台。MATLAB的基本数据单位是矩阵。开放性使MATLAB广受用户欢迎,除内部函数外,所有MATLAB主要工具包文件和各种工具包都是可读可修改文件,用户通过对源程序的修改或加入自己编写程序构造新的专用工具包。MATLAB大家庭有许多成员,包括应用程序开发工具、工具箱、数据存取工具、学生产品、状态流程图、模块集、代码生成工具等。2.2 MATLAB的特点 编程效率高用MATLAB编写程序犹如在演算纸上排列出公式与求解问题,MATLAB语言也可通俗地称为演算纸式科学算法或语言。由于编写简单,所以编程效率高,易学易懂。用户使用方便MATLAB语言把编辑、编译、连接和执行融为一体,其调试程序手段丰富,调试速度快,需要学习时间少。它能在同一画面上进行灵活操作快速排除输入程序中的书写错误、语法错误以致语义错误,从而加快了用户编写、修改和调试程序的速度,可以说在编程和调试过程中它是一种比VB还简单的语言。扩充能力强高版本的MATLAB语言有丰富的库函数,在进行复杂的数学运算时可以直接调用,而其,MATLAB的库函数同用户文件在形成上一样,所以用户文件也可作为,MATLAB的库函数来调用。因而,用户可以根据自己的需要方便地建立和扩充新的库函数,以便提高,MATLAB使用效率和扩充它的功能。语言简单,内容丰富MATLAB语言最基本最重要的成分是函数,其一般形式为(a,6,c)=fun(d,e,f,),即一个函数由函数名,输入变量a,b,c.组成,同一函数名F,不同数目的输入变量(包括无输入变量)及不同数目的输出变量,代表着不同的的含义(有点像面向对象中的多态性。)这不仅使MATLAB的库函数功能更丰富,而大大减少了需要的磁盘空间,使得MATLAB编写的M文件简单、短小而高效。高效方便的矩阵和数组运算MATLAB语言像C语言和其他语言一样规定了矩阵的一系列运算符,它不需定义数组的维数,并给出矩阵函数、特殊矩阵专门的库函数,使之在求解诸如信号处理、建模、系统识别、控制、优化等领域的问题时,显得大为简洁、高效、方便,这是其他高级语言所不能比拟的。方便的绘图功能MATLAB的绘图是十分方便的,它有一系列绘图函数(命令),使用时只需调用不同的绘图函数(命令),在图上标出图题、XY轴标注,格(栅)绘制也只需调用相应的命令,简单易行。另外,在调用绘图函数时调整自变量可绘制出不变颜色的点、线、复线或多重线。2.3 MATLAB的应用经过Math Works公司的不断完善,MATLAB已经发展成为适合多学科,多种工作平台的功能强大的大型软件。在欧美等高校,MATLAB已经成为线性代数、自动控制理论、数理统计、数字信号处理、时间序列分析、动态系统仿真等高级课程的基本教学工具。成为攻读学位的大学生、硕士生、博士生必须掌握的基本技能。在国内,MATLAB正逐渐受到工程技术人员的欢迎。在不远的将来,无论从事工程方面的哪个学科,都能在MATLAB里找到合适的功能。MATLAB特点使它获得了应用学科(特别是边缘科学)的极强适应力,并很快成为应用学科、计算机辅助分析、设计、教学,乃至科技文字处理不可缺少的基础软件,尤其在图像处理中。图像处理工具包是由一系列支持图像处理操作的函数组成的,所支持的图像处理操作有:几何操作、区域操作和块操作;线性滤波器和滤波器设计;变换(DCT变换);图像分析和增强;二值图像操作等。目前,MATLAB已经成为国际上最流行的科学与工程计算的软件工具,它已经成为了一种具有广泛应用前景的全新的计算机高级编程语言,有人称它为“第四代”计算机语言,其语言的功能也越来越强大。可以预见,在科学运算、自动控制与科学绘图领域,MATLAB语言将长期保持其独一无二的地位。2.4 用MATLAB设计滤波器在对滤波器进行实际设计时,整个过程的运算量是很大的,设计阶数较高的IIR滤波器时,计算量更大,设计过程中改变参数或改变滤波类型时都要重新计算。设计完成后对已设计的滤波器的频率响应要进行校核,要得到幅频、相频响应特性,运算量也是很大的,平时所要设计的数字滤波器阶数和类型并不一定是完全给定的,很多时候要根据设计要求和滤波效果不断的进行调整,一达到设计的最优化。在这种情况下,滤波器设计就要进行大量复杂的运算,单纯的靠公式计算和编制简单的程序很难再短时间内完成。利用MATLAB强大的计算功能进行计算机辅助设计,可以快速有效地设计数字滤波器,大大地简化计算量。用MATLAB实现数字滤波器的设计主要有三种途径:FDATool设计法、程序设计法和Spool设计法。本文主要介绍利用FDATool信号处理工具箱进行数字滤波器的设计,并在simulink环境下进行仿真。第3章基于FDATool的数字滤波器设计3.1 界面介绍FDATool(Filter Design Analysis Tool)是MATLAB信号处理工具箱里专用的滤波器设计分析工具,MATLAB6.0以上的版本还专门增加了滤波器设计工具箱(Filter Design Toolbox)。FDATool可以设计几乎所有的基本的常规滤波器,包括FIR和IIR的各种设计方法。它操作简单,方便灵活。如图3.1所示。图3.1 FDATool界面FDATool界面总共分两大部分,一部分是Design Filter,在界面的下半部,用来设置滤波器的设计参数,另一部分则是特性区,在界面的上半部分,用来显示滤波器的各种特性。Design Filter部分主要分为:Response Type(滤波器类型)选项,包括Lowland(低通)、Highland(高通)、Bandpass(带通)、Backstop(带阻)和特殊的FIR滤波器。Design Method(设计方法)选项,包括IIR滤波器的Butterworth(巴特沃思)法、Chebyshev Type I(切比雪夫I型)法、 Chebyshev Type II(切比雪夫II型) 法、Elliptic(椭圆滤波器)法和FIR滤波器的Equiripple法、Least-Squares(最小乘方)法、Window(窗函数)法。Filter Order(滤波器阶数)选项,定义滤波器的阶数,包括Specify Order(指定阶数)和Minimum Order(最小阶数)。在Specify Order中填入所要设计的滤波器的阶数(N阶滤波器,Specify OrderN-1),如果选择Minimum Order则MATLAB根据所选择的滤波器类型自动使用最小阶数。Frenquency Specifications选项,可以详细定义频带的各参数,包括采样频率Fs和频带的截止频率。它的具体选项由Filter Type选项和Design Method选项决定,例如Bandpass(带通)滤波器需要定义Fstop1(下阻带截止频率)、Fpass1(通带下限截止频率)、Fpass2(通带上限截止频率)、Fstop2(上阻带截止频率),而Lowpass(低通)滤波器只需要定义Fstop1、Fpass1。采用窗函数设计滤波器时,由于过渡带是由窗函数的类型和阶数所决定的,所以只需要定义通带截止频率,而不必定义阻带参数。Magnitude Specifications选项,可以定义幅值衰减的情况。例如设计带通滤波器时,可以定义Wstop1(频率Fstop1处的幅值衰减)、Wpass(通带范围内的幅值衰减)、Wstop2(频率Fstop2处的幅值衰减)。当采用窗函数设计时,通带截止频率处的幅值衰减固定为6db,所以不必定义。Window Specifications选项,当选取采用窗函数设计时,该选项可定义,它包含了各种窗函数。3.2 FIR数字滤波器的设计本设计要实现对一个在小电流接地系统中注入83.3Hz的正弦信号,对其进行跟踪分析,设计一带通数字滤波器,滤除工频及整次谐波,以便在非常复杂的信号中分离出该注入信号。参数要求:96阶FIR数字滤波器,采样频率1000Hz,采用Hamming窗函数进行设计。本设计中,首先在Response Type中选择Bandpass(带通滤波器);在Design Method选项中选择FIR Window(FIR滤波器窗函数法),接着在Option里的Window选项中选取Hamming;指定Filter Order项中的Specify Order95;由于采用窗函数法设计,只要给出通带下限截止频率Fc1和通带上限截止频率Fc2,选取Fc170Hz,Fc284Hz。设置完以后点击Design Filter即可得到所设计的FIR滤波器。通过菜单选项Analysis可以在特性区看到所设计滤波器的幅频响应、相频响应、零极点配置和滤波器系数等各种特性。设计完成后将结果保存为1.fda文件。设计的界面如下图:图3.2 FIR滤波器界面在设计过程中,可以对比滤波器幅频相频特性和设计要求,随时调整参数和滤波器类型,以便得到最佳效果。其它类型的FIR滤波器和IIR滤波器也都可以使用FDATool来设计。通过菜单选项Analysis在特性区看到所设计滤波器的幅频响应、相频响应如图3.3和图3.4所示。图3.3幅频特性图3.4 相频特性利用信号处理工具箱的FDATool工具进行界面设计可以随时调整参数和滤波类型,例如,改变上面设计中的阶数和带通下限截止频率Fc1和通带上限截止频率Fc2,如图:图3.5 改变参数后的界面改变参数后得到的滤波器幅频和相频响应如图3.6和3.7所示。图3.6 幅频特性图3.7相频特性3.3 IIR数字滤波器的设计本设计将实现一个10阶的带通Chebyshev 滤波器,其带通范围是100到200Hz,采样频率为1000Hz,Rp=0.5。本设计中,首先在Response Type中选择Bandpass(带通滤波器);在Design Method选项中选择IIR,接着在相邻的右则选项中选择Chebyshev (切比雪夫型);指定Filter Order项中的Specify Order=10;由于采用的是切比雪夫设计,不必在Options中选择;然后在Frequency Specifications 中选择Unit 为Hz,给出采样频率Fs=1000,通带Fpass1=100和Fpass2=200;最后在Magnitude Specifications 中选择Unit 为dB,Apass=0.5。设置完成后点击Design Filter即可得到所设计的IIR滤波器。通过菜单选项Anaiysis 可以在特性区看到所设计的幅频响应、相频响应、冲激响应和零极点配置等特性,如下图所示:图3.8 幅频特性图3.9相频特性图3.10冲激特性设计完成后保存为2.fda文件。与FIR滤波器的设计一样,用MATLAB设计IIR滤波器同样可以随时改变参数,在此不再举例。第4章 程序法设计数字滤波器4.1 FIR数字滤波器的基本概念(Finite Imupulse Respones,FIR)数字滤波器:有限长单位冲激响应滤波器,是数字信号处理系统中最基本的元件,它可以在保证任意幅频特性的同时具有严格的线性相频特性,同时其单位抽样响应是有限长的,因而滤波器时稳定的系统。因此FIR滤波器在通信、图像处理、模式识别等领域都有着广泛的应用。有限长冲激响应(FIR)滤波器的传递函数具有以下的形式: (4.1) 有限长冲激响应(FIR)滤波器的设计方法较多,主要有窗函数法、频率抽样法、最优化方法、任意响应设计法等。MATLAB的实现主要有三种途径:程序设计法、FDATool设计法和SPTool设计法。在MATLAB中,对各种滤波器的设计都有相应的计算振幅响应的函数,可以用来做滤波器的程序设计。第三章中的FDATOOl界面设计的带通滤波器可以用程序设计:c=95; 定义滤波阶数96阶w1=2*pi*fc1/fs; w2=2*pi*fc2/fs; 参数转换,将模拟滤波器的技术指标转换为数字滤波器的技术指标window=hamming(c+1); 使用hamming窗函数h=firl(c,w1/pi w2/pi,window); 使用标准响应的加窗设计函数firlfreqz(h,1,512);c=95; w1=2*pi*fc1/fs; c=95; w1=2*pi*fc1/fs; w2=2*pi*fc2/fs; window=hamming(c+1);h=firl(c,w1/pi w2/pi,window); freqz(h,1,512);在MATLAB环境下运行该程序即可得到滤波器幅频相频响应曲线和滤波器系数h。篇幅所限,这里不再将源程序详细列出。4.2FIR数字滤波器的设计4.2.1 FIR滤波器的窗函数设计法 FIR滤波器的设计方法有许多种,如窗函数设计法、频率采样设计法和最优化设计法等。窗函数设计法的基本原理是用一定宽度窗函数截取无限脉冲响应序列获得有限长的脉冲响应序列,主要设计步骤为: (1) 通过傅里叶逆变换获得理想滤波器的单位脉冲响应hd(n)。(4.2)(2) 由性能指标确定窗函数W(n)和窗口长度N。 (3) 求得实际滤波器的单位脉冲响应h(n), h(n)即为所设计FIR滤波器系数向量b(n)。(4.3) (4) 检验滤波器性能。 本文将针对一个含有5Hz、15Hz和30Hz的混和正弦波信号,设计一个FIR带通滤波器,给出利用MATLAB实现的三种方法:程序设计法、 FDATool设计法。参数要求:采样频率fs=100Hz,通带下限截止频率fc1=10 Hz,通带上限截止频率fc2=20 Hz,过渡带宽6 Hz,通阻带波动0.01,采用凯塞窗设计。由于信号处理中可采用不同的窗函数对信号加以截断,窗函数的引入不仅可以看改变信号的时域形状,同时也会改变频域分布,因此,采用不同的窗函数可以设计不同特性的数字滤波器,主要窗函数有矩形窗(boxcar),海明窗(hamming),汉宁窗(hann),三角窗(triang),凯瑟窗(kaiser)。使用窗函数设计时要满足以下条件:1窗谱主瓣尽可能的窄,以获得较陡的过渡带。2尽量减少窗谱的最大旁瓣的相对幅度,也就是使能量尽量集中于主瓣,减小峰肩和波,进而增加阻带的衰减。在MATLAB中,主要窗函数可用下面的方法产生:矩形窗:w=(n),或w=rectwin(n),产生一个n点的矩形窗函数。三角窗:w=triang(n),产生一个n点的三角窗函数。海明窗:w=hamming(n),产生一个n点的海明窗函数。汉宁窗:w=hann(n),产生一个(n)点的汉宁窗函数。凯瑟窗:w=Kaiser(n,batea),产生一个n点的凯瑟窗函数,其中bate为影响窗函数旁瓣的B参数,增加B可使主瓣变宽,旁瓣的幅度降低,MATLAB中缺省时取0.5。在利用窗函数法设计FIR数字滤波器时,确定窗函数的类型和滤波阶数是设计的关键,同时过程也比较复杂,有不同的方法,这些方法的实质是试探法,如果选择的窗函数和宽度不能满足滤波性能指标,还要重新选择。一般情况下,可根据阻带的最小衰减选择窗函数类型,根据过渡带选择滤波阶数。窗函数法又称傅里叶级数法或窗口法,窗函数设计法的基本原理是用一定宽度窗函数截取无限脉冲响应序列从而获得有限长的脉冲响应序列。本设计将用窗函数设计一个低通滤波器:程序如下:fp=1000;fc=1200;as=100;ap=1;fs=22000;wp=2*fp/fs;wc=2*fc/fs;N=ceil(as-7.95)/(14.36*(wc-wp)/2)+1;beta=0.1102*(as-8.7);window=Kaiser(N+1,beta);b=fir1(N,wc,window);freqz(b,1,512,fs);运行结果如下图:图4.14.2.2频率采样法设计FIR数字滤波器窗函数法设计FIR数字滤波器时,是对理想频率响应对应的时域信号进行时域等间隔采样,而频率采样法设计fir数字滤波器时是对理想频率响应在频域进行等间隔采样。二者都是对理想滤波器频率响应进行近似或逼你。所不同的是一个是在时域进行近似,一个是在频域进行近似,当然,逼近的方法不同,所设计的滤波器在性能上具有一定的差异。频率采样法的设计思路是从频域出发,对给出的理想频域行取样。再通过离散傅里叶反变换从频域样点直接求得系统的单位脉冲响应。利用频率采样法设计fir数字滤波器的关键是根据线性约束条件,正确确定H(k)的值,具体操作如下:1对设计指标进行归一化处理;2.确定滤波器的类型和阶数。3.根据约束条件确定H(k)的值;4.将H(k)进行IDFT变换,求单位脉冲响应h(n);5.用frezk函数验算技术指标是否满足要求。由于理想滤波器的频率响应存在突变点,即过渡带很窄,在采样时必然会引起采样点处的起伏震荡,所设计的滤波器不一定能满足阻带衰减要求,改善的方法是增加过渡点。过渡点的增加,会明显提高阻带衰减,但增加太多会造成增加计算量,延时和误差等缺陷。频率采样法可以设计出满足性能要求的低通、高通、带通和带阻滤波器,也可以设计出多频带滤波器,并且保证线性相位,但缺点是没有程式化的设计标准,对设计者设计理论的熟悉程度和设计经验依赖性大,比如,滤波阶数的确定、采样矩阵的选择、过渡带的速度、过渡点的个数确定及过渡点取值的确定等,都具有主观性。另外,在MATLAB中没有提供专门的设计函数,设计者需根据设计理论方法编程实现。本设计利用采样法设计一个FIR型低通数字滤波器,通带截止频率为300Hz,阻带截止频率为400Hz通带最大衰减为3dB,阻带最小衰减为40dB。选择滤波器阶数为奇数39。程序如下:%频率采样法设计FIR数字滤波器,滤波阶数位偶数%不加过渡点clcclearfc=300;fs=1000;nn=512;wn=2*fc/fs;n=40;a1=(n-1)/2;m=ceil(wn*n/2);absh=ones(1,m),zeros(1,n-2*m+1),ones(1,m-1);k1=0:ceil(n-1)/2);k2=ceil(n-1)/2+1:n-1);angleh=-a1*(2*pi)/n*k1,a1*(2*pi)/n*(n-k2);h=absh*exp(i*angleh);b=real(ifft(h);freqz(b,1,nn,fs)4.2.3最小二乘法设计FIR数字滤波器该方法可以设计出具有线性相位的fir数字滤波器,在指定的频率范围内理想的分段线性响应与滤波器幅度响应之间的误差平方和最小。在MATLAB中,提供了firls()函数,用以实现该款数字滤波器。格式如下:b=firls(n,f,m,w,ftype)其中,n为滤波阶数,当n为奇数时,称为I型,当n为偶数时,称为II型。F和m的取值可参见yulewalk函数,f可以指定频段,m可以指定频段内的幅度响应,但有一点不同,即滤波器的幅频指定区域介于f(k)和f(k+1)之间,其中,k是奇数,而在区间f(k+1)和f(k+2)之间,幅频特性没有指定,称为无关区,k=1,2,n+1。在这里f和m的取值个数只能是偶数。W的含义是权重矢量,可以利用权值矢量对各频段进行加权拟合,w的长度为f和m长度的一半。W可以缺省。ftype可以指定滤波器的类型,当ftype=Hilbert时,设计出的滤波器为奇数对称线性相位,称为III和IV型。这类滤波器包括Hilbert(希尔伯特)变换器;当ftype=differentiator时,也可以设计出III和IV形滤波器,但采用了特殊的加权技术,可使低频段误差大小高于高频段误差。Ftype也可以省略。本设计将实现一个40阶线性相位FIR带通滤波器,指定频段和指定响应:f=0,0.12,0.265,0.3,0.4,0.6,0.7,1m=0,0,1,1,0,0,0.5,0.5程序如下:n=40;nn=512;fs=1000;f=0,0.12,0.265,0.3,0.4,0.6,0.7,1;m=0,0,1,1,0,0,0.5,0.5;b=firls(n,f,m);freqz(b,1,nn,fs)运行结果如下图:图4.24.2.4最优化法设计FIR数字滤波器采用Parks-McClellan算法设计具有线性相位的FIR数字滤波器。Parks-McClellan算法使用了Remez交换算法和Chebyshev逼近理论,以设计出期望频率响应和实际频率响应之间最优拟合的滤波器,所谓最优就是通过算法使期望频率响应与实际频率响应之间的最大误差最小。由于这种方式设计出的滤波器在频率响应上是等波纹的,所以又称等波纹滤波器。在MATLAB中,提供了用于这种滤波器设计的阶数估计函数remezord()函数和用于滤波器设计的remez()函数。当给定滤波阶数时,可以用remez()函数直接进行设计;当给定滤波器性能指标时,可以用remezord()函数估计满足性能的滤波器最小阶数。1.阶数估计格式:n,fo,mo,w=remezord(f,m,dev)其中,f与m分别用来指出频段和响应的幅值,dev用于指定各频段允许的偏差。n为估计出的滤波器最小阶数,fo为归一化频带边界,mo为频带内幅值,w为权重矢量。有时,可能会造成阶数估计不足的现象,所以应检查所设计的滤波器是否满足性能指标,否则应加大阶数。2.滤波器设计格式:b=remez(n,fo,mo,w)其中,n为估计得到的滤波器阶数,如果滤波器性能不能满足设计要求,可考虑增加滤波器阶数。利用remez()函数进行滤波器设计时,n,fo,mo,w这四个参数除可用remezord()函数估计外,还可以认为指定,通过变换参数来达到设计的目的,但要注意,fo与mo矢量的长度应相等,而w的长度为fo的一半。本设计将实现一个FIR数字滤波器滤,滤波器的通带截止频率为300Hz,阻带截止频率为400Hz,采样频率为1000Hz,通带波纹小于1dB,阻带低于40dB。程序如下:fs=1000;nn=512;fp=300;fstop=400;rp=1;rs=60;f=2*fp,fstop/fs;m=1,0;dev=(10(rp/20)-1)/(10(rp/20)+1),10(-rs/20)n,fo,mo,w=remezord(f,m,dev)b=remez(n,fo,mo,w);freqz(b,1,nn,fs)运行结果如下图: 图4.3最优化法也可以用来设计高通、带通、带阻及多频带滤波器,只要改变f和m矢量就可以实现,但要注意dev矢量的长度与f和m的长度相等。关于其他 滤波器的设计方法这里不再一一介绍。一般情况下,最优化法可以用较小的阶数来达到设计要求。4.3 IIR数字滤波器的设计4.3.1 IIR数字滤波器简介无限冲激响应(Infinite Impulse Responses,IIR)数字滤波器的优点在于它可以用较低的阶数获得很高的选择性,所用的储存单元少,运算次数少,但是这些优点是以其非线性为代价的。IIR数字滤波器具有无限宽的冲激响应,与模拟滤波器相匹配。所以IIR滤波器的设计可以采取在模拟滤波器设计的基础上进一步变换的方法。本设计利用双线性变换法,设计了一个0.4dB截止频率为10kHz且在30kHz处有最小阻带衰减为50dB的数字巴特沃兹低通滤波器,其抽样率为100kHz。求解原型模拟滤波器的阶数,并利用Matlab的M文件buttap设计模拟原型滤波器。用M文件bilinear将模拟滤波器传输函数变换成期望的数字传输函数。请用Matlab画出其增益和相位响应,并给出设计的具体步骤。fp=100;fst=300;Fs=1000;rp=3;rs=20;wp=2*pi*fp/Fs;ws=2*pi*fst/Fs;Fs=Fs/Fs; wap=tan(wp/2);was=tan(ws/2); n,wn=buttord(wap,was,rp,rs,s);z,p,k=buttap(n); bp,ap=zp2tf(z,p,k) %设计模拟低通原型滤波器bs,as=lp2lp(bp,ap,wap) %将模拟低通原型滤波器转换为低通滤波器bz,az=bilinear(bs,as,Fs/2) %实现双线性变换,即由模拟滤波器 得到数字滤波器h,w=freqz(bz,az,256,Fs*1000);plot(w,abs(h);xlabel(Frequency);ylabel(Magnitude);title(Lowpass filter);grid on;pause;figure; freqz(bz,az);运行结果如下图:图4.4频率特性图4.5归一化频率IIR滤波器的设计在MATLAB中有三中实现方法:模拟滤波器变换法(经典设计法)、直接设计法和最大平滑法。经典设计法中,根据实现的途径不同,又可分为离散化设计法和完全化设计法。4.3.2经典法设计IIR数字滤波器下面以实例形式介绍各种IIR数字滤波器的设计方法。设计一低通数字滤波器,性能参数为:wp=300Hz,ws=400Hz,ap=3dB,as=30dB。采用离散化设计法程序如下:fs=1000;nn=128;wp=2*pi*300;ws=2*pi*400;ap=3;as=30;n,wn=buttord(wp,ws,ap,as,s);z,p,k=buttap(n);bap,aap=zp2tf(z,p,k);b,a=lp2lp(bap,aap,wn);bz,az=impinvar(b,a,fs);%冲激响应不变法freqz(bz,az,nn,fs)%实际频率表示hold onbz,az=bilinear(b,a,fs);%双线性法freqz(bz,az,nn,fs)%freqz(bz,az)%归一化频率表示legend(impinvar,bilinear)运行结果如下图:图4.6采用完全化设计方法。程序如下:fs=1000;nn=128;wp=300*2/fs;ws=400*2/fs;ap=3;as=30;n,wn=buttord(wp,ws,ap,as);b,a=butter(n,wn);freqz(b,nn,fs)%实际频率表示%freqz(b,a)%归一化频率表示运行结果如图:图4.7切比雪夫I型法设计带通滤波器程序如下:fs=1000;nn=128;wp=50,300*2/fs;ws=10,340*2/fs;ap=3;as=30;n,wn=cheblord(wp,ws,ap,as);b,a=cheby1(n,ap,wn);freqz(b,a,nn.fs)%实际频率表示%freqz(b,a)%归一化频率表示4.3.3直接法设计IIR数字滤波器如果所设计的IIR滤波器频率特性比较复杂,经典设计法无法实现,这时可寻找其他方法。直接设计法就是采用最小二乘法拟合给定的幅频响应,从而设计出与要求的滤波器幅频特性相近的滤波器、与经典设计法不同,它不受低通、高通、带通及带阻的限制,可以任意可能多的频率响应来设计滤波器。MATLAB提供了yulewalk()函数来直接设计IIR数字滤波器。格式:b,a= yulewalk(n,f,m)其中,n为滤波阶数;f为给定滤波器的点向量,归一化频率取值范围是0,1,f的第一个取值点必须是0,最后一个取值点必须是1,f向量的频率点必须是递增取值;m为与频率f对应的理想幅频响应值,m和f必须是相同维数的向量。yulewalk()直接设计IIR滤波器的思路是:计算与分子多项式对应的幅值平方响应的辅助分子和分母多项式;由辅助多项式计算完全的频率响应;计算滤波器冲激响应;采用最小二乘法拟合冲激响应,最终得到所要设计的滤波器。本设计将用直接设计法设计一带

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论