首页 > 其他分享 >基于IIR数字滤波器的设计matlab毕业设计

基于IIR数字滤波器的设计matlab毕业设计

时间:2024-11-01 12:17:03浏览次数:6  
标签:滤波器 函数 IIR 通带 阻带 MATLAB 毕业设计 设计 matlab

引言

MATLAB是矩阵实验室(Matrix Laboratory)的简称,是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。

MATLAB和Mathematica、Maple并称为三大数学软件。它在数学类科技应用软件中在数值计算方面首屈一指。MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。

MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完成相同的事情简捷得多,并且mathwork也吸收了像Maple等软件的优点,使MATLAB成为一个强大的数学软件。在新的版本中也加入了对C,FORTRAN,C++ ,JAVA的支持。可以直接调用,用户也可以将自己编写的实用程序导入到MATLAB函数库中方便自己以后调用,此外许多的MATLAB爱好者都编写了一些经典的程序,用户可以直接进行下载就可以用

MATLAB语言是一种面向科学与工程计算的高级语言,它集科学计算,自动控制,信号处理、神经网络和图象处理等于一体,具有极高的编程效率。它是一个高级的数学分析与运算软件,可用作动态系统的建模与仿真。

正文

一、MATLAB语言的简介

1、MATLAB的特点及优势

MATLAB作为一种使用广泛的数学软件,具有强大的编程能力,可以进行矩阵的运算、绘制函数和数据,实现算法、创建用户界面、连接其他编程语言的程序等。它具有以下几个显著特点:

●此高级语言可用于技术计算 

●此开发环境可对代码、文件和数据进行管理

●交互式工具可以按迭代的方式探查、设计及求解问题 

●数学函数可用于线性代数、统计、傅立叶分析、筛选、优化以及数值积分等 

●二维和三维图形函数可用于可视化数据 

●各种工具可用于构建自定义的图形用户界面 

●各种函数可将基于MATLAB的算法与外部应用程序和语言(如 C、C++、Fortran、Java、COM 以及 Microsoft Excel)集成

●不支持大写输入,内核仅仅支持小写 

同时MATLAB和Mathematica、Maple并称为三大数学软件,自然有它的显著优势,以下简单的介绍它的优势。

(1)友好的工作平台和编程环境

MATLAB由一系列工具组成。这些工具方便用户使用MATLAB的函数和文件,其中许多工具采用的是图形用户界面。包括MATLAB桌面和命令窗口、历史命令窗口、编辑器和调试器、路径搜索和用于用户浏览帮助、工作空间、文件的浏览器。随着MATLAB的商业化以及软件本身的不断升级,MATLAB的用户界面也越来越精致,更加接近Windows的标准界面,人机交互性更强,操作更简单。而且新版本的MATLAB提供了完整的联机查询、帮助系统,极大的方便了用户的使用。简单的编程环境提供了比较完备的调试系统,程序不必经过编译就可以直接运行,而且能够及时地报告出现的错误及进行出错原因分析。

(2)简单易用的程序语言

MATLAB一个高级的矩阵/阵列语言,它包含控制语句、函数、数据结构、输入和输出和面向对象编程特点。用户可以在命令窗口中将输入语句与执行命令同步,也可以先编写好一个较大的复杂的应用程序(M文件)后再一起运行。新版本的MATLAB语言是基于最为流行的C++语言基础上的,因此语法特征与C++语言极为相似,而且更加简单,更加符合科技人员对数学表达式的书写格式。使之更利于非计算机专业的科技人员使用。而且这种语言可移植性好、可拓展性极强,这也是MATLAB能够深入到科学研究及工程计算各个领域的重要原因。

(3)强大的科学计算机数据处理能力

MATLAB是一个包含大量计算算法的集合。其拥有600多个工程中要用到的数学运算函数,可以方便的实现用户所需的各种计算功能。函数中所使用的算法都是科研和工程计算中的最新研究成果,而前经过了各种优化和容错处理。在通常情况下,可以用它来代替底层编程语言,如C和C++ 。在计算要求相同的情况下,使用MATLAB的编程工作量会大大减少。MATLAB的这些函数集包括从最简单最基本的函数到诸如矩阵,特征向量、快速傅立叶变换的复杂函数。函数所能解决的问题其大致包括矩阵运算和线性方程组的求解、微分方程及偏微分方程的组的求解、符号运算、傅立叶变换和数据的统计分析、工程中的优化问题、稀疏矩阵运算、复数的各种运算、三角函数和其他初等数学运算、多维数组操作以及建模动态仿真等。

(4)出色的图形处理功能

MATLAB自产生之日起就具有方便的数据可视化功能,以将向量和矩阵用图形表现出来,并且可以对图形进行标注和打印。高层次的作图包括二维和三维的可视化、图象处理、动画和表达式作图。可用于科学计算和工程绘图。新版本的MATLAB对整个图形处理功能作了很大的改进和完善,使它不仅在一般数据可视化软件都具有的功能(例如二维曲线和三维曲面的绘制和处理等)方面更加完善,而且对于一些其他软件所没有的功能(例如图形的光照处理、色度处理以及四维数据的表现等),MATLAB同样表现了出色的处理能力。同时对一些特殊的可视化要求,例如图形对话等,MATLAB也有相应的功能函数,保证了用户不同层次的要求。另外新版本的MATLAB还着重在图形用户界面(GUI)的制作上作了很大的改善,对这方面有特殊要求的用户也可以得到满足。

(5)应用广泛的模块集合工具箱

MATLAB对许多专门的领域都开发了功能强大的模块集和工具箱。一般来说,它们都是由特定领域的专家开发的,用户可以直接使用工具箱学习、应用和评估不同的方法而不需要自己编写代码。目前,MATLAB已经把工具箱延伸到了科学研究和工程应用的诸多领域,诸如数据采集、数据库接口、概率统计、样条拟合、优化算法、偏微分方程求解、神经网络、小波分析、信号处理、图像处理、系统辨识、控制系统设计、LMI控制、鲁棒控制、模型预测、模糊逻辑、金融分析、地图工具、非线性控制设计、实时快速原型及半物理仿真、嵌入式系统开发、定点仿真、DSP与通讯、电力系统仿真等,都在工具箱(Toolbox)家族中有了自己的一席之地。

(6)实用的程序接口和发布平台

新版本的MATLAB可以利用MATLAB编译器和C/C++数学库和图形库,将自己的MATLAB程序自动转换为独立于MATLAB运行的C和C++代码。允许用户编写可以和MATLAB进行交互的C或C++语言程序。另外,MATLAB网页服务程序还容许在Web应用中使用自己的MATLAB数学和图形程序。MATLAB的一个重要特色就是具有一套程序扩展系统和一组称之为工具箱的特殊应用子程序。工具箱是MATLAB函数的子程序库,每一个工具箱都是为某一类学科专业和应用而定制的,主要包括信号处理、控制系统、神经网络、模糊逻辑、小波分析和系统仿真等方面的应用。

(7)应用软件开发(包括用户界面)

在开发环境中,使用户更方便地控制多个文件和图形窗口;在编程方面支持了函数嵌套,有条件中断等;在图形化方面,有了更强大的图形标注和处理功能,包括对性对起连接注释等;在输入输出方面,可以直接向Excel和HDF5进行连接。

2、MATLAB发展历程及应用

20世纪70年代,美国新墨西哥大学计算机科学系主任Cleve Moler为了减轻学生编程的负担,用FORTRAN编写了最早的MATLAB。1984年由Little、Moler、Steve Bangert合作成立了的MathWorks公司正式把MATLAB推向市场。到20世纪90年代,MATLAB已成为国际控制界的标准计算软件。

MATLAB 产品族可以用来进行以下各种工作:

● 数值分析 

● 数值和符号计算 

● 工程与科学绘图 

● 控制系统的设计与仿真 

● 数字图像处理 技术

● 数字信号处理 技术

● 通讯系统设计与仿真 

● 财务与金融工程 

MATLAB 的应用范围非常广,包括信号和图像处理、通讯、控制系统设计、测试和测量、财务建模和分析以及计算生物学等众多应用领域。附加的工具箱(单独提供的专用 MATLAB 函数集)扩展了 MATLAB 环境,以解决这些应用领域内特定类型的问题。

3、Matlab语言程序设计

MATLAB语言程序设计的关键是M文件的建立和编写。所有程序文件、函数、SIMULINK文件以及Toolbox文件均可用M文件建立。M文件的建立和编写一般在专门的编辑器内完成。MATLAB5.0版本是一个高度集成的语言环境,在它的命令窗口界面下可以编写程序、运行程序并跟踪调试程序,也可在线取得帮助。在这个命令窗口下还可完成文件管理等其它功能。 MATLAB语言的典型结构为:

MATLAB语言=窗口命令+M文件

MATLAB以复数矩阵为最基本的运算单元,既可以对它整体地进行处理,也可以对它的某个或某些元素进行单独处理,所以操作起来比较方便。需要指出一点的是,MATLAB具有很强的图形功能,非常适用于科学研究与工程实际中的应用。
4、SIMULINK仿真软件

SIMULINK仿真软件最大的特点是非常直观,直接面向“方框图”。它可完成控制系统模型输入与仿真分析,这当然也可用M文件来实现,不过相当繁琐。在SIMULINK界面下,可以直接用鼠标“画”出所需要的控制系统模型,然后利用SIMULINK提供的功能来对系统进行仿真或线性化分析。这样无论多么复杂的系统,相当容易且直观地就可完成模型的输入和仿真计算。仿真过程中和结束后都有示波器供查看、分析。所有数据都在内存,可存贮在磁盘中。

SIMULINK仿真软件工具带有相应的系统模型库,当进行模型输入时可方便地调用这些模块。各种实用工具箱(Toolbox)同时也提供大量模块,可直接调用,例如:通讯工具箱就提供150多个SIMULINK模块。而MATLAB的工具箱,为不同领域内使用MATLAB的研究开发者提供了一条捷径。

SIMULINK仿真软件的核心是S函数。用户建立起SIMULINK系统模型就会建立一个相应的S函数,这样建立的S函数除了用来对原始模型进行描述以外,还可以绘制出系统的框图结构,所以程序会显得很繁琐。用户一般不想再绘制系统的结构图,而只想对系统进行仿真分析,则可用如下S函数,其引导语句格式为:

function[sys,x0]=model(t,x,u,flag)

model为模型函数的函数名,t,x,u为对应于状态方程模型的时间、状态向量和输入向量,flag为选项位,用于标识该函数的返回结果。

二、数字滤波器设计

数字滤波器就是由数字乘法器、加法器和延时单位组成的一种装置。它的作用是对输入离散信号的数字代码进行运算处理,从而达到改变信号频谱的目的。数字滤波器可以用计算机软件实现或者大规模集成数字硬件实时实现。在数字滤波器处理模拟信号的时候,先要对输入的模拟信号进行限带、抽样和模数转换。数字滤波器输入信号的抽样率要大于信号带宽的两倍,它的频率响应还要具有以抽样频率为间隔的周期重复特性,并且它还要以1/2抽样频率点呈镜像对称。数字滤波器具有高精度、高可靠性、可控制改变特性、便于集成等优点。现在数字滤波器的使用范围比较广,例如,在语言信号处理、图像信号处理、医学生物信号处理以及其他应用领域。

数字滤波器有低通、高通、带通、带阻和全通等类型。函数butter可用于设计Butterworth滤波器,butter函数可以设计低通、高通、带通和带阻的数字和模拟滤波器,用butter函数设计的滤波器通带内的幅度响应最大限度的平滑,但损失了截止频率处的下降斜度。

函数chebyl可用于设计Chebyshev I型滤波器,chebyl函数可以设计低通、高通、带通和带阻的数字和模拟Chebyshev I型滤波器,用chebyl函数设计的Chebyshev I型滤波器的通带内为等波纹,它的阻带内为单调。Chebyshev I型滤波器的下降斜度比Chebyshev II型的要大,但是Chebyshev II的代价是通带内波纹比较大。

除了典型设计以外,MATLAB信号处理工具箱提供了几个直接设计IIR数字滤波器的函数,直接调用就可以设计滤波器,这为设计通用滤波器提供了方便。

在MATLAB中设计IIR滤波器时要设计出巴特沃斯滤波器可以使用Butterworth函数,要设计契比雪夫I型滤波器时可以使用Cheby1函数,设计契比雪夫II型滤波器要使用Cheby2,而椭圆滤波器则需要ellipord函数。下面主要介绍的是前两个函数的使用情况。

IIR滤波器在设计上与FIR滤波器的不同点在于前者在设计时的阶数不是由设计者指定的,而是根据设计者输入的各个滤波器参数(截止频率、通带滤纹、阻带衰减等),由软件设计出满足这些参数的最低滤波器阶数。在MATLAB下设计不同类型IIR滤波器的时候都会有与之对应的函数用于阶数的选择。

IIR单位响应与FIR单位响应也是有区别的,前者为无线脉冲序列而后者为有限的。幅频特性精度方面,IIR幅频特性精度很高,不是线性相位的,可以应用于对相位信息不敏感的音频信号上;而FIR的幅频特性精度较之于IIR低,但是线性相位,就是不同频率分量的信号经过FIR滤波器后他们的时间差不变。这是很好的性质。

    设计Chebyshev II型滤波器用函数cheby2。可以设计低通、高通、带通和带阻的数字和模拟Chebyshev II型滤波器,其通带内为单调,阻带内等波纹。Chebyshev II型滤波器的下降斜度比I型小,但其阻带内波纹较大。

函数ellip则可以用来设计椭圆形滤波器,和chebyl, cheby2差不多,也是可以设计出低通、高通、带通和带阻的数字和模拟滤波器这么几种,但是和Butterworth和chebyshev滤波器比较而言,ellip函数可以得到下降斜度更大的滤波器,得通带和阻带均为等波纹。一般来说,椭圆滤波器能以最低的阶实现指定的性能指标。

各类滤波器都有自己的特点。在使用中,都需要按照一定的使用要求,应当注意以下几点:

(1)要得到符合要求性质的滤波器的最小阶数N以及数字Butterworth滤波器的固有频率Wn(即3dB )可以使用阶数和固有频率的选择:[N,Wn]=buttord(Wp,Ws,Rp,Rs)。设计的要求是在通带内的衰减不超过Rp,在阻带内的衰减不小于Rs,通带和阻带有截止频率分别是Wp, Ws,它们是归一化的频率,范围是[0, 1],对应π弧度。

(2)设计一个N阶的低通Butterworth滤波器使用函数[B,A]=butter(N, Wn),返回滤波器系数矩阵[B,A]。其中固有频率Wn必须是归一化频率。它的最大值是采样频率的一半。Fs缺省时默认为2Hz。如果Wn=[Wl,W2]是一个两元素的向量,则函数将设计出一个2N阶的带通滤波器,通带为[W1,W2]。

(3)信号处理工具箱中经常使用的频率是Nyquist频率,它被定义为采样频率的一半,在滤波器的阶数选择和设计中的截止频率均使用Nyquist频率进行归一化处理。例如对于一个采样频率为1000 Hz的系统,400Hz的归一化即为400/500=0.8。归一化频率的范围在[0, 1]之间。如果要将归一化频率转换为角频率,则将归一化频率乘以π;如果要将归一化频率转换为Hz,则将归一化频率乘以采样频率的一半。这就是所谓的滤波器设计当中的频率归一化问题

一般在设计Chebyshev I型和Chebyshev II型数字低通滤波器时,会要求通带边界频率fp=2.1kHZ,通带最大衰减Rp=0.5dB;阻带边界频率fs=8kHZ,阻带最小衰减Rs=30dB,采样频率为Fs=20kHZ。

Chebyshev I型的M程序如下:

Fs=20000;                  %抽样频率20KHz

Flp=2100;      

Fls=8000;

Wp=2*Flp/Fs;                 %归一化的通带截止频率

Ws=2*Fls/Fs;                 %归一化的阻带截止频率

Rp=0.5;                 %通带最大衰减(单位:dB)

Rs=30;                     %阻带最小衰减(单位:dB)

[N,Wn]=cheb1ord(Wp,Ws,Rp,Rs);   %返回最小阶数和截止频率

[b,a]=cheby1(N,Rp,Wn);           %返回H(z)的分子分母系数

[hw,w]=freqz(b,a);

subplot(2,1,1);

plot(w/pi,20*log10(abs(hw)));grid on;

xlabel('ω/π');ylabel('幅度(dB)')

title('切比雪夫I型幅频响应');

subplot(2,1,2);plot(w/pi,abs(hw));

grid on;

xlabel('ω/π');ylabel('幅度(H)');

运行以上程序,得到的波形如图1所示,

图1  切比雪夫Ι型幅频响应

运行结果:

N=2

b= 0.1007    0.2014    0.1007

a= 1.0000   -0.9872    0.4140

Chebyshev II型M程序如下:

Fs=20000;                 %抽样频率20KHz

Flp=2100;      

Fls=8000;

Wp=2*Flp/Fs;                 %归一化的通带截止频率

Ws=2*Fls/Fs;                 %归一化的阻带截止频率

Rp=0.5;              %通带最大衰减(单位:dB)

Rs=30;                     %阻带最小衰减(单位:dB)

[N,Wn]=cheb2ord(Wp,Ws,Rp,Rs);  %返回最小阶数和截止频率

[b,a]=cheby2(N,Rs,Wn);          %返回H(z)的分子分母系数

[hw,w]=freqz(b,a);

subplot(2,1,1);

plot(w/pi,20*log10(abs(hw)));grid on;

xlabel('ω/π');ylabel('幅度(dB)')

title('切比雪夫II型幅频响应');

subplot(2,1,2);plot(w/pi,abs(hw));

grid on;

xlabel('ω/π');ylabel('幅度(H)');

运行以上程序,得到的波形如图2所示,

图1  切比雪夫Ⅱ型幅频响应

运行结果:

N=2

b= 0.2357    0.4241    0.2357

a= 1.0000   -0.2996    0.1950

三、 结果分析

从频率响应图中可以看出:巴特沃斯滤波器具有单调下降的幅频特性,通带内平滑;切比雪I型滤波器的幅频特性在通带内有波动,阻带内单调;chebyshev II型滤波器的幅频特性在阻带内有波动,通带内单调;椭圆滤波器的选择性相对前三种是最好的,下降斜度比较大,通带和阻带内均为等波纹,同样的性能指标,椭圆滤波器可以最低的阶数来实现。这样就可以根据不同的要求选用不同类型的滤波器。

结论

MATLAB是以复数矩阵作为基本编程单元的一种程序设计语言,它提供了各种矩阵的运算与操作,并有较强的绘图及其它强大的功能,成为当今国际控制界应用最广,也是最受人们喜爱的一种软件环境。MATLAB是一个高度的集成系统,随着它的版本不断更新,软件功能也不断扩充与完善,在科学和工程计算中将会有更广阔的应用前景。
  用MATLAB语言编制了稳态和动态仿真程序,说明MATLAB语言非常适合数字滤波领域内的仿真及研究,在某些问题的研究中MATLAB及SIMULINK能带来极大的方便并使效率极大提高。

参考文献

[1] 韩利竹,王华.MATLAB电子仿真与应用.北京:国防工业出版社,2022.

[2] 董长虹.MATLAB信号处理与应用. 北京:国防工业出版社,2015.

[3] 赵树杰.数字信号处理.西安:西安电子科技大学出版社,2019.

[4] 陈怀琛.MATLAB及在电子信息课程中的应用.北京:电子工业出版社出版,2022.

标签:滤波器,函数,IIR,通带,阻带,MATLAB,毕业设计,设计,matlab
From: https://blog.csdn.net/2401_84149290/article/details/143428888

相关文章