MATLAB仿真在通信与电子工程中的应用.ppt

上传人:wuy****n92 文档编号:70799743 上传时间:2023-01-28 格式:PPT 页数:207 大小:6.04MB
返回 下载 相关 举报
MATLAB仿真在通信与电子工程中的应用.ppt_第1页
第1页 / 共207页
MATLAB仿真在通信与电子工程中的应用.ppt_第2页
第2页 / 共207页
点击查看更多>>
资源描述

《MATLAB仿真在通信与电子工程中的应用.ppt》由会员分享,可在线阅读,更多相关《MATLAB仿真在通信与电子工程中的应用.ppt(207页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第第2章章 MATLAB仿真仿真 第第2章章 MATLAB仿真仿真 2.1 MATLAB介绍介绍2.2 MATLAB编程仿真编程仿真2.3 Simulink仿真仿真 第第2章章 MATLAB仿真仿真 2.1 MATLAB介绍介绍2.1.1MATLAB的特点MATLAB是MathWorks公司开发的一种跨平台的,用于矩阵数值计算的简单高效的数学语言,与其它计算机高级语言如C,C+,Fortran,Basic,Pascal等相比,MATLAB语言编程要简洁得多,编程语句更加接近数学描述,可读性好,其强大的图形功能和可视化数据处理能力也是其它高级语言望尘莫及的。对于具有任何一门高级语言基础的读者来说

2、,学习MATLAB十分容易。第第2章章 MATLAB仿真仿真 但是,要用好MATLAB却不是在短时间就可以达到的。这并不是因为MATLAB语言复杂难懂,而是实际问题的求解往往更多的是需要使用者具备数学知识和专业知识。MATLAB使得人们摆脱了常规计算机编程的繁琐,让人们能够将大部分精力投入到研究问题的数学建模上。可以说,应用MATLAB这一数学计算和系统仿真的强大工具,可以使科学研究的效率得以成百倍的提高。目前,MATLAB已经广泛用于理工科大学从高等数学到几乎各门专业课程之中,成为这些课程进行虚拟实验的有效工具。在科研部门,MATLAB更是极为广泛地得到应用,成为全球科学家和工程师进行学术交

3、流首选的共同语言。在国内外许多著名学术期刊上登载的论文,大部分的数值结果和图形都是借助MATLAB来完成的。第第2章章 MATLAB仿真仿真 与其它高级语言相比较,MATLAB具有独特的优势:(1)MATLAB是一种跨平台的数学语言。采用MATLAB编写的程序可以在目前所有的操作系统上运行(只要这些系统上安装了MATLAB平台)。MATLAB程序不依赖于计算机类型和操作系统类型。(2)MATLAB是一种超高级语言。MATLAB平台本身是用C语言写成的,其中汇集了当前最新的数学算法库,是许多 专 业 数 学 家 和 工 程 学 者 多 年 的 劳 动 结 晶。使 用MATLAB意味着站在巨人的肩

4、膀上观察和处理问题,所以在编程效率,程序的可读性、可靠性和可移植性上远远超过了常规的高级语言。这使得MATLAB成为了进行科学研究和数值计算的首选语言。第第2章章 MATLAB仿真仿真(3)MATLAB语法简单,编程风格接近数学语言描述,是数学算法开发和验证的最佳工具。MATLAB以复数矩阵运算为基础,其基本编程单位是矩阵,使得编程简单,而功能极为强大。对于常规语言中必须使用许多语句才能实现的功能,如矩阵分解、矩阵求逆、积分、快速傅立叶变换,甚至串口操作、声音的输入输出等,在MATLAB中均用一两句指令即可实现。而且,MATLAB中的数值算法是经过千锤百炼的,比用户自己编程实现的算法的可信度和

5、可靠性都大为提高。(4)MATLAB计算精度很高。MATLAB中数据是以双精度存储的,一个实数采用8字节存储,而一个复数则采用16字节存储。通常矩阵运算精度高达1015以上,完全能够满足一般工程和科学计算的需要。与其它语言相比,MATLAB对计算机内存、硬盘空间的要求也是比较高的。第第2章章 MATLAB仿真仿真(5)MATLAB具有强大的绘图功能。利用MATLAB的绘图功能,可以轻易地获得高质量的(印刷级)曲线图。具有多种形式来表达二维、三维图形,并具有强大的动画功能,可以非常直观地表现抽象的数值结果。这也是MATLAB广为流行的重要原因之一。(6)MATLAB具有串口操作、声音输入输出等硬

6、件操控能力。随着版本的提高,这种能力还会不断加强,使得人们利用计算机和实际硬件相连接的半实物仿真的梦想得以轻易实现。(7)MATLAB程序可以直接映射为DSP芯片可接受的代码,大大提高了现代电子通信设备的研发效率。第第2章章 MATLAB仿真仿真(8)MATLAB的 程 序 执 行 效 率 比 其 它 语 言 低。MATLAB程序通常是解释执行的,在执行效率和速度上低于其它高级语言,当然如果对执行效率有特别要求,可以采用C语言编制算法,然后通过MATLAB接口在MATLAB中执行。事实上,MATLAB自带的许多内部 函 数 均 是 用 C语 言 编 写 并 编 译 的,因 此 利 用MATLA

7、B内部函数的程序部分运行速度并不比其它语言中相应函数低。本书给出的程序和例子均在MATLABReleaseR13()(完全安装)版本下验证通过。第第2章章 MATLAB仿真仿真 2.1.2MATLAB快速入门1.MATLAB的启动和退出本书以Windows2000下的为例,在其它Windows版本下操作是类似的。假定已经正确安装了MATLAB的Windows版本,从Windows的“开始|程序”菜单中找到MATLAB图标,单击该图标即可进入MATLAB环境。进入MATLAB后操作环境通常显示的是MATLAB的命令窗口,在该窗口中可以输入各种MATLAB命令和语句,通过命令方式与MATLAB进行

8、交互。虽然MATLAB也像通常的Windows程序一样提供了菜单和快捷工具栏,通过它们可以很方便地对MATLAB进行操作,但是建议读者尽可能使用命令方式去操作MATLAB,虽然刚开始可能觉得不太方便,但是与菜单和快捷工具方式相比,命令方式的功能最为强大,也最能体现MATLAB的精髓,而且命令方式本身也是跨平台的。第第2章章 MATLAB仿真仿真 MATLAB命令窗口中,输入命令的提示符为“”。在MATLAB命令窗口中,键入命令“quit”或“exit”并按回车键(回车),即可退出MATLAB环境。2.在MATLAB中如何获取帮助MATLAB几乎涉及了所有工程领域的数学问题,没有一本书能够完全覆

9、盖读者所需要解决的问题。因为MATLAB帮助文档是惟一完全覆盖MATLAB功能函数的权威技术文件,所以,善于利用MATLAB的帮助文档将是非常重要的。第第2章章 MATLAB仿真仿真 在MATLAB命令窗口中,使用命令“intro”可以进入MATLAB简介演示。而使用命令“demo”可以打开MATLAB的演示窗口,其中包含了大量MATLAB程序的演示实例,对于初学者具有很高的参考价值。如果读者需要打开MATLAB的帮助文档,使用命令“helpwin”即可。如果要用浏览器打开html形式的帮助文档,可使用命令“doc”。若需要打开MATLAB某条命令或函数用法的html帮助文档,则只需输入命令d

10、oc命令或函数名回车即可。第第2章章 MATLAB仿真仿真 如果要在命令窗口中显示帮助信息,则只需输入命令“help”即可。若需要了解MATLAB某条命令或函数的用法,使用命令help命令或函数名回车即可。例如,要查询自然对数函数命令“log”的用法,应使用命令helplog回车另外,MATLAB帮助文档还以PDF电子文件格式提供,存放在MATLAB的安装目录中,读者可以用AcrobatReader等 软 件 阅 读。读 者 也 可 以 通 过 介 绍MATLAB的若干网站获取和交流应用MATLAB的心得体会。第第2章章 MATLAB仿真仿真 3.在MATLAB命令窗口中计算数学表达式MATL

11、AB语言是一种解释性语言,它提供了方便的演算纸式的数学计算方式。在MATLAB命令窗口中输入数学表达式,然后回车即可得出计算结果。MATLAB的数学表达式与数学公式表达极为相似,也非常类似于C语言的表达。例如,计算表达式2sin(0.3)/(1+KF(5KF)的值,在MATLAB命令窗口中输入以下语句并回车就能得到结果。2*sin(0.3*pi)/(1+sqrt(5)回车ans=0.5000第第2章章 MATLAB仿真仿真 以上语句中,“pi”是MATLAB已定义的常数,即圆周率;“ans”是表达式计算结果的默认存储变量。MATLAB定义的常数中,常用的有以下一些:ans最新表达式计算结果的默

12、认存储变量inf表示正无穷大+NaN非数,例如0/0将得到非数i或j虚数单位,即eps从1.0到下一个最大浮点数的距离,常用来作为浮点计算相对误差使用第第2章章 MATLAB仿真仿真 pi圆周率realminMATLAB所能表示的最小正实数realmaxMATLAB所能表示的最大正实数MATLAB中常用的算术运算符有+、-、*、/、等,含义如下:+数量加法,矩阵加法-数量减法,矩阵减法*数量乘法,矩阵乘法.*数组乘法/数量除法,矩阵右除第第2章章 MATLAB仿真仿真 数量除法(左除),矩阵左除./数组除法矩阵乘方.数组乘方矩阵的共轭转置,对于一个复数而言将得到其共轭复数.矩阵转置(不共轭)关

13、于这些算术运算符的详细用法以及示例,可以用docarithmeticoperators回车打开html格式的帮助文档查看。第第2章章 MATLAB仿真仿真 4.在MATLAB命令窗口中输入简单矩阵例如,输入矩阵时可以采用下面的方法:A=1,2,3;4,5,6;7,8,9回车A=123456789(2-1)第第2章章 MATLAB仿真仿真 MATLAB中可以采用逗号或空格来分隔矩阵中的列元素,而采用分号或回车符来分隔矩阵的行,整个矩阵包含在方括号“”内。采用命令“whos”可以查看用户在MATLAB工作空间(内存)中所存储的变量情况。使用命令“workspace”就可以打开工作空间浏览器窗口,双

14、击其中的变量可以对其值进行修改。命令“clear变量名”可以清除相应的变量,而命令“clear”则清除所有用户自定义的变量。系统的默认变量是不会被“clear”清除的。为了避免前面的程序对后续程序的影响,通常在程序的开始使用“clear”语句来复位MATLAB的内存空间。使用命令“clc”可以清除命令窗口中的显示字符。使用命令“home”可以使得命令窗口中提示符光标回到窗口的左上角。这两个命令仅仅影响屏幕的显示,不会清除内存中的变量。第第2章章 MATLAB仿真仿真 5.MATLAB的语句和变量MATLAB语句可以有两种形式:(1)表达式;(2)变量名表达式。在第一种形式中,表达式计算的值将存

15、放于默认变量“ans”中;而在第二种形式中,表达式的值将存放于变量名所指定的变量中。MATLAB中多条语句可以在一行内书写,以逗号“,”或分号“;”相互隔开。如果是以分号隔开的,则计算结果不显示在屏幕上,否 则 回 车 后 将 显 示 计 算 结 果。例 如,计 算1+2+3+100的值以及100的阶乘100!。第第2章章 MATLAB仿真仿真 s=1:100;sum(s),p=prod(s)回车ans=5050p=9.3326e+157MATLAB中的变量是区分大小写的,变量、函数名必须以字母开头,其后最多可接19个字母、数字或下划线。例如:a和A是不同的变量,p121-6,yinyue3是

16、合法的变量名,而3sd则是非法的变量。在变量或函数的命名时,应该养成良好的命名习惯,命名不要和MATLAB中的系统函数或变量相同。特别地,如果计算中存在复数运算,那么就应该避免采用“i”和“j”作为循环变量。第第2章章 MATLAB仿真仿真 MATLAB中可以方便地进行复数运算,例如计算,其中,a=15+j3,b=5ej2。可在命令窗口中输入:a=15+j*3,b=5*exp(j*2),(a.2+b).(1/5)回车6.绘制简单的函数曲线MATLAB提供了极为便利的数据可视化手段,可以作出任意函数的图像。作为快速入门,在此以一个二维作图为例,作出函数y=e-x/10sinx在x-1,10范围的

17、图像。第第2章章 MATLAB仿真仿真 x=-1:0.1:20;%定义x的范围和步进回车y=exp(-x./10).*sin(x);%计算函数值回车plot(x,y);grid;%作出函数图像,并在坐标上画出网格回车结果如图2-1所示。注意,在程序语句中,以百分号“%”开始的是注释部分。关于“plot”的详细用法和例子可以用“docplot”命令查看帮助文档。第第2章章 MATLAB仿真仿真 图2-1函数y=e-x/10sinx在x-1,10范围的图像第第2章章 MATLAB仿真仿真 7.编写简单的MATLAB程序MATLAB是解释性语言,输入一行语句后回车,就会立即执行得出结果。如果要实现比

18、较复杂的功能,单靠一条一条地在命令窗口中输入指令执行,效率是很低的。如何解决这个问题呢?为此MATLAB提供了扩展名为“.m”的文本文件,在文件中事先写入一行行的MATLAB命令,存盘后从MATLAB的命令窗口调入执行(类似于DOS下的批处理),这种文件称为底稿文件或MATLAB脚本文件。第第2章章 MATLAB仿真仿真 用前面作图的三条语句为例,在文本编辑器中输入这些语句,然后将文件存盘,例如命名文件名为“my1stprg.m”,保存于MATLAB的默认工作路径中。然后回到MATLAB命令窗口,在提示符“”下键入文件名(可以省略扩展名)后回车,即可运行程序得到结果,即my1stprg回车在任

19、何一种纯文本编辑器中均可以书写MATLAB程序,只要以“.m”为扩展名保存,即可在MATLAB中调用运行。MATLAB命令窗口中,在提示符“”后输入的命令语句要回车才能执行,本书以后的例子中,将省略回车字样,在此提醒读者注意。第第2章章 MATLAB仿真仿真 2.1.3MATLAB程序设计1.M文件简介MATLAB除了如前所述的在命令窗口进行的直接交互的指令操作方式外,另外一种更为重要的工作方式就是M文件的编程工作方式。M文件有两种形式,一种是脚本文件,另一种是函数文件。M文件的扩展名为“.m”。M文件可以通过任何纯文本编辑器进行编辑,MATLAB中 也 有 自 带 的 文 本 编 辑 器,使

20、 用“edit”命令即可开启。第第2章章 MATLAB仿真仿真 2.程序控制流语句任何计算机语言,只要利用顺序结构、循环结构以及分支结构,就可以完成任何程序功能。在MATLAB中也有这三种基本的程序结构。但值得注意的是,由于MATLAB语言矩阵计算功能十分强大,常常仅使用顺序结构借以矩阵的逻辑运算就可以完成计算任务。由于循环结构和分支结构在MATLAB语言中的运行速度相对较慢,因此在算法优化的编程中应当尽可能避免使用,而代之以矩阵运算,从而提高程序运行速度,简化程序代码,并使得程序代码更加接近于数学表达。当然,采用矩阵编程的编程方法需要读者具有更多的关于线性代数和矩阵数学的知识和思维方式。第第

21、2章章 MATLAB仿真仿真 顺序结构是MATLAB中最常用的程序结构,也是执行效率最高的程序结构。顺序结构的语句是按照书写的前后顺序来执行的。MATLAB用于循环结构的语句有两种:“forend”循环和“whileend”循环。1)forend语句利用“helpfor”或“docfor”可以获得关于该语句的使用手册。“forend”语句适用于循环次数确定的情况,将 循 环 变 量 的 初 值、判 别 和 变 化 放 在 循 环 开 头。“forend”语句的调用形式是:第第2章章 MATLAB仿真仿真 forv=表达式语句1;语句n;end例如,最简单的forend循环:fork=1:10

22、x(k)=k.2;end第第2章章 MATLAB仿真仿真 事实上,采用矩阵思想也可以获得相同的结果,但编程更加简单明了:k=1:10;x=k.2x=绝大部分循环都可以遵从这样的方法变成向量化(矩阵化)的算法,避免采用循环语句,从而大大提高程序的执行效率。第第2章章 MATLAB仿真仿真 2)whileend语句对于循环次数不能预先确定,而是由某个逻辑条件 来 控 制 循 环 次 数 的 情 况,MATLAB提 供 了“whileend”来实现。和“forend”语句类似,“whileend”语句也允许嵌套。“whileend”语句的一般形式是:whilev=表达式语句1;语句n;end第第2章

23、章 MATLAB仿真仿真 例如,求当整数n的阶乘值是一个50位数的第一个数时,n为多少?(程序jiechen50.m)n=1;%n的初值whileprod(1:n)1e50,break;end%满足条件,则跳出循环endn%显示结果n=42第第2章章 MATLAB仿真仿真“switch”语句来实现多重分支结构。其用法是:switch开关表达式case表达式1语句,语句case表达式1,表达式2,表达式3,语句,语句otherwise语句,语句end第第2章章 MATLAB仿真仿真 3.数据和文件的输入输出1)“input”指令“input”指令提示用户从键盘输入数据、字符串或表达式,并接受该输

24、入。“input”指令的调用格式有两种:user-entry=input(prompt)%输入数据或表达式user-entry=input(prompt,s)%输入字符串例如:a=input(请输入矩阵或表达式,赋值到a:)DW%输入数据的例子请输入矩阵或表达式,赋值到a:12;34a=1234第第2章章 MATLAB仿真仿真 a=input(请输入矩阵或表达式,赋值到a:)DW%输入表达式的例子请输入矩阵或表达式,赋值到a:sin(1)+8a=8.8415s=input(请输入一个字符串:,s)DW%输入字符串的例子请输入一个字符串:thisisastrings=thisisastring2

25、)“pause”指令“pause”指令可以使程序暂停运行,等待用户按任意键继续。“pause”指令主要用于程序调试或显示中间结果。“pause(n)”指令使得程序暂停执行n秒。第第2章章 MATLAB仿真仿真 3)利用文件输入输出数据指令“save”和“load”用于MATLAB与磁盘的数据交换。“save”指令将MATLAB工作空间的数据存入磁盘;“load”指令则将数据从磁盘送入到MATLAB工作空间。举例说明如下:clear;A=1,2;3,4;b=81;save(c:mymatlabdat.mat,A,b);%将变量A和b保存在文件C:mymatlabdat.m第第2章章 MATLAB

26、仿真仿真 at中clear%清除内存变量whos%查看,应该无变量显示load(c:mymatlabdat.mat);%调入数据文件c:mymatlabdat.matwhos%显示调入的变量NameSizeBytesClassA2x232doublearrayb1x18doublearrayGrandtotalis5elementsusing40bytes第第2章章 MATLAB仿真仿真 4.MATLAB编程特点MATLAB有两种工作方式:一种是在命令窗口进行的指令操作方式,前面我们所使用的大部分就是这种方式;另外一种是M文件编程方式,这种方式特别适合于复杂问题的求解,是MATLAB高级应用的

27、一种常用方式。MATLAB编程中,要特别注意程序的书写风格,一个好的程序,必须思路清晰,注释详细,而且是运行速度较快的。M文件编程中开头的注释行将作为该程序的帮助信息,可以在命令窗口中用“help”命令显示出来。例如,编程计算函数f(x)=x3+x+lnxsinx+当x=1,3,5时的值。第第2章章 MATLAB仿真仿真 编写脚本文件calcfx.m如下:程序2-1%这是开头的注释行,可以用help命令显示%程序calcfx.m的功能是计算表达式clear;%清除MATLAB内存空间,这一命令常用于脚本文件的首句%以避免前面命令在内存空间形成的变量的意外影响k=1;%数组下标变量,在MATLA

28、B编程中,注释要尽可能详尽!Int-F=inline(t,t);%用inline函数建立积分的被积函数forx=1,3,5第第2章章 MATLAB仿真仿真 f-x(k)=x3+x+log(x)*sin(x)+quad8(Int-F,0,x);%计算表达式值k=k+1;%数组下标加1endf-x%显示计算结果文件编辑存盘后,在MATLAB命令窗口执行:helpcalcfx这是开头的注释行,可以用help命令显示程序calcfx.m的功能是计算表达式calcfxf-x=2.500034.6550140.9567第第2章章 MATLAB仿真仿真 5.MATLAB函数编程如果M文件的第一行是以关键字“

29、function”开头的,则就是函数文件。函数文件是MATLAB程序设计的主流,MATLAB自身所带的许多函数(指令)都是由相应的函数文件来定义的。函数文件好像一个黑箱,将数据送进去,经过函数处理,然后将结果数据输出。函数文件和脚本文件在内存使用上存在重要的区别,函数文件内部所定义的变量仅仅在该函数文件内部有效,函数返回后这些内部变量将自动被清除,也就是说,函数内部所定义的变量仅在函数内部起作用,是局部变量。第第2章章 MATLAB仿真仿真 而脚本文件中所定义的变量,在使用“clear”命令清除之前,始终存在于工作空间当中,是全局变量。另外,函数文件的文件名必须和函数名相同,而且注意切记不要和

30、MATLAB已经定义的系统函数和其它自定义的函数同名。下面是函数编程的例子,函数的文件名与函数名相同,为stat.m。程序2-2functionmean,stdev=stat(x)n=length(x);%求输入向量x的长度mean=sum(x)/n;%求平均值stdev=sqrt(sum(x-mean).2/n);%求均方根值第第2章章 MATLAB仿真仿真 6.测定程序执行时间和时间分配利用“tic”和“toc”指令可以对程序段的执行时间进行测定,从而估计出程序执行效率,并找出改进程序、提高效率的方法。“tic”用于计时开始,而“toc”用于计时结束并显示计时结果。MATLAB还提供了对程

31、序执行的耗时剖析功能“profile”指令。用户通过调用该功能函数,可以轻松地观察程序中各条语句的执行耗时情况,从而为提高程序运行效率的改进思路提供参考依据。(详细情况请参见在线帮助。)第第2章章 MATLAB仿真仿真 7.提高程序执行速度的原则MATLAB是一种解释性语言,它与C语言等编译性语言有着相当大的区别,如果按照C语言的思路去编写MATLAB程序,那么执行效率肯定不是很理想。要提高编程的执行效率,则一定要根据MATLAB的特点来编写程序,具体有以下原则:首先,在编程中要尽量避免采用循环语句。利用向量化语句来代替循环语句可以大大提高程序运行速度。如果不得不采用多重循环,那么内循环的次数

32、应该尽可能多于外循环的次数。其次,在使用大型数组或矩阵之前对其进行初始化,即采用指令“zeros”或“ones”对 矩 阵 定 维,这 样 可 以 减 少MATLAB在内存分配过程中的耗时,大大提高速度。第第2章章 MATLAB仿真仿真 第三,应该优先考虑使用MATLAB的内在函数。MATLAB的内在函数是采用C语言优化构造的,并固化在MATLAB的内核中,其运行速度可以和C语言的速度等价,而用户自行编制的M文件则是在MATLAB中解释执行的。另外,采用更先进更有效的算法也可以提供计算效率。快速傅立叶变换就是一个典型的例子。第第2章章 MATLAB仿真仿真 2.2 MATLAB编程仿真编程仿真

33、 2.2.1时间连续信号与系统的计算机仿真问题时间连续的确定信号在物理上是一个随时间变化的(电压或电流)波形,在数学上表示为一个时间连续的函数f(t)。时间连续信号也称为模拟信号。而时间离散的确定信号在数学上可以表示为一个确定的序列fn。如果以满足取样定理的取样速率对时间连续函数f(t)进行取样,就可以得到对应的时间离散序列fn,而将时间离散序列fn通过取样定理所规定的理想低通滤波器后,就能够恢复连续信号f(t)。第第2章章 MATLAB仿真仿真 换句话说,在满足取样定理的前提下,f(t)与fn是一一对应的关系。对时间离散序列fn进行幅度值上的离散化(这个过程称为量化)就得到了数字信号。数字信

34、号通常以二进制编码的形式存储在计算机中。因此,利用计算机所表达的时间连续信号f(t)实质上是其所对应的数字信号。本质上,计算机不能直接处理模拟信号,计算机中的信号处理均是对数字信号的处理。而由取样定理保证了它与模拟信号处理之间的一一对应关系。第第2章章 MATLAB仿真仿真 连续系统可以用微分方程来描述,离散系统可以用差分方程来描述。当系统为无记忆系统时,微分方程或差分方程退化为代数方程。因此,对系统进行仿真的过程就数学意义而言,就是求解这些微分方程、差分方程或代数方程的过程。为了对连续系统进行仿真,首先需要建立其数学模型,然后利用计算机求解这些数学模型,从而得出数学模型的数值解。计算机对数学

35、模型的求解过程就是对系统的仿真过程。由于连续系统是通过微分方程来建模的,因此对此的计算机仿真本质上就是微分方程的数值求解问题。通常,对连续系统进行计算机仿真的过程是:第第2章章 MATLAB仿真仿真(1)建立数学模型:就是将物理模型转换为数学模型的过程。对于电子电路而言,就是利用电路的拓扑、元件的属性,列出网孔方程或节点方程,并简化为标准形式的计算机可求解的一阶微分方程组(即状态方程)的过程。对于线性时不变系统来说,就是建立其传递函数模型,并简化为计算机易于求解的线性一阶微分方程组(即状态方程)的过程。而对于一般的系统,通常可建模为一组非线性的微分方程组。(2)选择适合的计算机求解方法求解仿真

36、模型。不同的微分方程求解算法的精度和适用范围均有所不同。(3)编写MATLAB仿真程序或建立Simulink模块方框图,调试并运行程序。(4)得出数值解,即仿真结果,对仿真结果进行分析,以确定结果的可靠性和有效性。第第2章章 MATLAB仿真仿真 图2-2一个二阶电路系统第第2章章 MATLAB仿真仿真 下面我们举例说明。对于一个二阶系统,电路如图2-2所示,试利用MATLAB编程仿真求解:(1)零状态响应:系统在t=-1秒时刻的初状态为零,输入信号为阶跃信号f(t)=u(t),输出为电容电压,试对时间t=-1,10秒的输出信号波形进行仿真求解。(2)零输入响应:系统在t=-1秒时刻电容电压为

37、uC=1V,当t=-1秒时刻信号输入二端闭合,试对时间t=-1,10秒的输出信号波形进行仿真求解。(3)全响应:系统在t=-1秒时刻电容电压为uC=1V,输入信号为阶跃信号f(t)=u(t),试对时间t=-1,10秒的输出信号波形进行仿真求解。第第2章章 MATLAB仿真仿真 解(1)设电感电流为iL(t),电容电压为uC(t),根据电路,列出KVL方程:(2-2)改写为标准形式:第第2章章 MATLAB仿真仿真 令电路的状态变量iL(t)=x1(t),uC(t)=x2(t),输入信号为f(t),则微分方程简写为写出该微分方程的MATLAB函数。注意,这一组微分方程组就是该二阶电路的状态方程,

38、对于同一个物理系统,如果选取的状态变量不同,所得到的状态方程也就不同,但都表达了该物理系统的状态信息。(2-3)第第2章章 MATLAB仿真仿真 按照MATLAB的固定写法,编写出该微分方程组的MATLAB函数(函数文件名为funcforex123.m)如下:程序2-3functionxdot=funcforex123(t,x,flag,R,L,C)xdot=zeros(2,1);%矩阵初始化xdot(1)=-R/L*x(1)-1/L*x(2)+1/L*f(t);%方程1xdot(2)=1/C*x(1);%方程2functionin=f(t)%输入信号in=(t0)*1;%阶跃信号第第2章章

39、MATLAB仿真仿真 然后,利用MATLAB提供的求解微分方程的指令对该微分方程组求解。MATLAB提供的求解微分方程的算法有多个,如“ode45”、“ode23”、“ode15s”等,不同的算法适用的场合稍有不同。例如,通过“ode45”函数求解,MATLAB程序(程序名为ex123.m)如下:程序2-4%filenameex123.mL=1;%电感值C=0.1;%电容值forR=1.535%仿真电阻值分别为1.5,3,5欧姆的情况t,x=ode45(funcforex123,-1,10,0;0,R,L,C);第第2章章 MATLAB仿真仿真%也可采用ode23,ode15s等求解figur

40、e(1);plot(t,x(:,1);holdon;xlabel(timesec);text(0.9,0.17,leftarrowi-L(t);grid;figure(2);plot(t,x(:,2);holdon;xlabel(timesec);text(0.5,0.3,leftarrowu-C(t);grid;end运行程序后,得到的电感电流、电容电压波形仿真结果如图2-3(a)、(b)所示。第第2章章 MATLAB仿真仿真 图2-3电感电流、电容电压零状态响应波形仿真结果(a)电感电流单位阶跃响应(零状态响应)波形仿真结果;(b)电容电压单位阶跃响应(零状态响应)波形仿真结果第第2章章

41、MATLAB仿真仿真(2)当t=-1秒时刻信号输入二端闭合,相当于输入信号为零,因此修改MATLAB函数funcforex123.m如下:程序2-5functionxdot=funcforex123(t,x,flag,R,L,C)xdot=zeros(2,1);%矩阵初始化xdot(1)=-R/L*x(1)-1/L*x(2)+1/L*f(t);%方程1xdot(2)=1/C*x(1);%方程2functionin=f(t)%输入信号in=0;%信号始终为零第第2章章 MATLAB仿真仿真 并修改ex123.m的“ode45”语句,将系统状态改为0,1,程序如下:程序2-6%filenameex

42、123.mL=1;%电感值C=0.1;%电容值forR=1.535%仿真电阻值分别为1.5,3,5欧姆的情况t,x=ode45(funcforex123,-1,10,0;1,R,L,C);%也可采用ode23,ode15s等求解figure(1);plot(t,x(:,1);holdon;xlabel(timesec);第第2章章 MATLAB仿真仿真 text(0.9,0.07,leftarrowi-L(t);grid;figure(2);plot(t,x(:,2);holdon;xlabel(timesec);text(0.5,0.3,leftarrowu-C(t);grid;end然后运

43、行,得到的波形仿真结果如图2-4所示。第第2章章 MATLAB仿真仿真 图2-4电感电流、电容电压零输入响应波形仿真结果(a)电感电流零输入响应波形仿真结果;(b)电容电压零输入响应波形仿真结果第第2章章 MATLAB仿真仿真(3)对 于 全 响 应 情 况,可 相 应 修 改 MATLAB函 数funcforex123.m如下:程序2-7functionxdot=funcforex123(t,x,flag,R,L,C)xdot=zeros(2,1);%矩阵初始化xdot(1)=-R/L*x(1)-1/L*x(2)+1/L*f(t);%方程1xdot(2)=1/C*x(1);%方程2funct

44、ionin=f(t)%输入信号in=(t0)*1;%信号阶跃而ex123.m的“ode45”语句中仍然将系统状态改为0,1。运行后得到的波形仿真结果如图2-5所示。第第2章章 MATLAB仿真仿真 图2-5电感电流、电容电压全响应波形仿真结果(a)电感电流全响应波形仿真结果;(b)电容电压全响应波形仿真结果第第2章章 MATLAB仿真仿真 由此可见,一旦从物理系统中建立了其数学模型,也即得出系统的微分方程描述之后,给定其边界条件,就可得出其数值解,求解的过程就是仿真的过程。在MATLAB中,我们可以方便地修改微分方程函数以及求解指令的参数,从而得出系统的零输入响应、零状态响应以及全响应等各种状

45、态下的输出信号。读者可以将这个例子中的输入信号修改为一个宽度为0.3s的矩形脉冲,然后观察其响应波形。(提示:只需修改funcforex123.m中语句“in=(t0)*1;”为“in=(t0)*1-(t0.3)*1;”即可。)本例演示了对于一个动态电路瞬态响应的仿真过程。仿真的关键在于建立正确的数学模型。第第2章章 MATLAB仿真仿真 对于任何电子电路,都可以根据电路理论的知识得出其数学模型,即一阶微分方程组,也称为状态方程。接下来以MATLAB所规定的格式编写状态方程的描述函数,然后选择合适的求解方式求解,也就完成了对电路的仿真。最后,对所得出的仿真波形进行分析。需要强调的是,微分方程的

46、MATLAB函数格式是固定的,必须按MATLAB所规定的格式来编写。本例中,需要将方程参数“R;L;C”传入。传入参数前的标志变量“flag”是必需的,以符合求解函数“ode45”的要求。微分方程的MATLAB函数引导语句的格式为functionxdot=方程函数名(t,x,flag,附加参数)第第2章章 MATLAB仿真仿真 其中,“t”为时间变量矩阵,“x”为方程的状态变量矩阵,“xdot”为状态变量对时间的一阶导数矩阵。在MATLAB中,对微分方程的求解有多种算法可供利用。通常有“ode23”、“ode45”以及“ode15s”等等,这些函数的调用方式完全相同,但针对的方程类型有所不同。

47、其中,“ode23”和“ode45”分别采用二阶三级RKF算法和四阶五级RKF算法,适用于一般微分方程的求解;“ode15s”则适用于刚性微分方程的求解。所谓刚性方程,指的是方程的某些解(这些解是时间“t”的函数)变化缓慢,而另外一些解变化快速,两者形成明显对比的这样一类方程。“ode15s”同时也适合于一般微分方程的求解。关于其它解法和使用方法详见MTALAB的在线手册。第第2章章 MATLAB仿真仿真 以“ode45”为例,其用法是:t,x=ode45(方程函数名,仿真时间范围,状态变量初始值,算法选项,附加参数)例 如,以 默 认 算 法 选 项 计 算 微 分 方 程 组funcfor

48、ex123.m,仿真时间从-1s到10s,状态变量初始值为:电感电流x1(0)=0A,电容电压x2(0)=1V,附加参数为R=1.5,L=1H,C=0.1F,则解法写为t,x=ode45(funcforex123,-1,10,0;1,1.5,1,0.1);第第2章章 MATLAB仿真仿真 另外需要注意的是,为了达到算法快速有效,MATLAB中的状态方程的求解函数是自适应步长的,即其数值结果中时间自变量t的离散取值是非均匀的,在解变化剧烈的地方取值点密,而在解变化缓慢的曲线段相对取值会稀疏一些。在信号处理中,进一步对求解信号进行分析时,往往又需要在时间上均匀取样间隔点上的波形函数值。我们可以采用

49、一维插值的办法来解决。读者可以阅读插值命令“interp1”的在线帮助进一步了解这方面的信息。下面介绍求解系统的冲激响应的方法。由于输入冲激信号是超越函数,不适于作数值计算,因此首先求系统的阶跃响应,然后对其进行微分得到冲激响应。为了应用差分函数“diff”进行近似微分,首先需要通过插值将被微分的数据在时间上均匀化,然后再利用差分函数“diff”进行近似微分,从而得出系统的冲激响应波形。第第2章章 MATLAB仿真仿真 例如,对于电路如图2-2所示的一个二阶系统,输出信号从电容电压取出。现在通过仿真计算求系统的冲激响应,并与理论值相对比,分析仿真结果的正确性和仿真精度。为了分析仿真结果的正确性

50、和仿真精度,我们首先计算电路中电容电压的冲激响应的解析值。将状态方程写为二阶微分方程形式,有(2-4)第第2章章 MATLAB仿真仿真 进行拉氏变换,得出传递函数为将R=3,L=1H,C=0.1F代入,并将H(s)化简为利用拉氏变换对(2-5)(2-6)(2-7)第第2章章 MATLAB仿真仿真 得出冲激响应为(2-8)利用下面的程序求出上例电路中电容电压的均匀取样点的输出波形值(阶跃响应),然后对该波形进行微分得出冲激响应,并与理论值进行比较。程序运行结果如图2-6所示。第第2章章 MATLAB仿真仿真 图2-6冲激响应的仿真结果与理论结果的比较第第2章章 MATLAB仿真仿真(1)状态方程

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁