348 数字信号处理MATLAB编程与SIMULINK仿真简介A.1 MATLAB编程基础MATLAB6.5提供了丰富的编程语句结构和实用函数,MATLAB产品组是支持你从概念设计、算法开发、建模仿真到实时实现的理想的集成环境。
无论是进行科学研究还是产品开发,MATLAB产品族都是必不可少的工具。
这里介绍一些常用的编程技巧和方法,以便同学们能尽快地启动起来,更好地应用MATLAB。
1. MATLAB文件的编写与调试环境M文件的编写与调试在MATLAB Editor/Debugger下进行(图B1-1),这个集成环境可以方便地进行新建、修改、存储,选择Debug菜单中的Run命令就可以运行程序,运行结果显示在MATLAB Command Window 中。
程序的调试应用Debug菜单就可以进行调试,其他高级语言中的Set/Clear Breakpoint、Single Step、Stop if error等选项都有,可以方便的调试程序。
图B1-1 M文件的编写与调试窗口在MATLAB Editror/Debugger下按照MATLAB编程的规则键入相关的语句并存盘,就可以得到一个后缀为.m的文本文件。
2. MATLAB脚本文件和函数文件在MATLAB中,无论是问题的提出还是结果的表达都采用你习惯的数学描述方法,而不需要用传统的编程语言进行处理。
应用MATLAB编写出来的程序可以是M脚本文件(Script。
file),也可以是M函数文件(Function file),这些文件都由纯ASCII字符构成,其后缀m MATLAB下 M脚本文件是一串按用户意图排列而成的(包括控制流向指令在内)MATLAB 指令集合,可以直接执行,用户只需在Command Window中MATLAB提示符>>后键入文件名即可执行。
脚本文件运行后所产生的所有变量都驻留在MATLAB的基本工作空间(Base workspace)中,只要用户不加以清除且MATLAB指令窗不关闭,则这些变量将一直保存在基本工作空间。
与脚本文件不同,函数文件犹如一个“黑箱”,从外界只看到传给它的输入量和送出来的计算结果,内部运作是看不见的,并且函数文件的第一行总是以“function”引导的“函数申明行”。
M函数文件必须由其它的语句来调用,在一般情况下用户不能单独键入其文件名来运行一个M函数。
MATLAB下的大多数的应用程序由M函数文件形式给出,例如求取系统特征方程的根的root ()函数和绘制零极点图的pzmap ()函数等。
除了M函数文件之外,MATLAB还提供了大量的底层函数(内部),这类文件是不可读的,与M函数一起统称为函数。
3. M文件的一般结构从结构上看脚本文件只是比函数文件少一个“函数申明行”,所以脚本文件和函数文件除第一行不同外,其余的结构都是一样的。
典型M函数文件的基本结构可由以下几部分构成:(1)函数申明行(Function declaration line),位于函数文件的首行,以MATLAB 关键字function 开头,函数名以及函数的输入输出宗量都在这一行中定义;(2)H1行(The first help text line):紧随函数申明行之后以%开头的第一行注释行。
H1行包括大写体的函数名和运用关键词简要描述的函数功能,该行供lookfor关键词查询和help在线帮助查询使用;(3)在线帮助文本(Help text)区:H1行及其之后的连续以%开头的第一行的所有注释行构成在线帮助文本;(4)编写和修改记录:标志编写及修改该M文件的作者、日期,便于档案管理;(5)函数体(Function body):该部分由实现M函数功能的MATLAB指令组成。
它接收输入宗量,进行程序流程控制,得到输出宗量。
从运算角度看“函数申明行”和“函数体”两部分是构成M函数文件所必不可少的。
函数文件(Function file)由function()语句引导,其基本格式为:function 返回变量名=函数名(输入变量列表)注释说明语句段函数体语句在编制程序的过程中输入和返回的变量分别由nargin和nargout两个MATLAB的保留参数给出,返回变量要多于1个,应该用方括号括起来,输入变量用逗号隔开。
注释语句段的内容如果用户采用help命令则可以显示出来,其功能和MATLAB提供的函数是一致的。
下面以MATLAB6.5 control toolbox内的Bode()函数来说明M函数文件结构示例如下:[exm001.m]function [magout,phase,w] = bode(a,b,c,d,iu,w) 函数申明行%BODE Bode frequency response of LTI models. 描述该函数命令能够完成的% 功能% Revised A.C.W.Grace 8-15-89, 2-4-91, 6-21-92 注明该函数文件的修改时% Revised Clay M. Thompson 7-9-90 间、版权及其版本等内容% Revised A.Potvin 10-1-94% Copyright 1986-2002 The MathWorks, Inc.% $Revision: 1.23 $ $Date: 2002/04/04 15:16:04 $ni = nargin; 函数体语句no = nargout;% Check for demo and quick exitif ni==0,eval('exresp(''bode'')')returnenderror(nargchk(2,6,ni));% Determine which syntax is being usedswitch nicase 2……end% end bode在函数体内应用的除返回和输入变量这些在function语句中直接应用的变量以外的所有变量都是全局变量,也就是在函数返回后,这些变量会自动在MATLAB的空间中自动清除掉。
如果想使得这样的中间变量程为在整个程序中起作用的变量则将应用MATLAB提供的global命令将它们设置为全局变量。
4. MATLAB程序流程控制计算机编程语言允许编程人员根据某些判决结构来控制程序流的执行次序。
MATLAB6.5提供了5种控制程序流的结构,即for循环结构,while循环结构,if-else-end分支结构,以及switch-case结构,try-catch结构。
MATLAB的这5种流控制指令的用法与其它语言十分相似,简单介绍如下:1)for循环结构for循环结构的语法形式为:for xx=array(commmands)end其中for之后的变量xx称为循环变量,而for和end之间的commands称为循环体。
循环体被重复执行的次数由for之后的数组array的列数来确定。
2)while循环结构while循环结构的语法形式为:while expression(commands)end在while和end之间的commands被称为循环体。
当MATLAB遇到while命令时,首先检测expression的值,如果其值为逻辑真(非0),则执行该组命令。
当组命令commands 执行完后,继续监测expression表达式的值,如果表达式的值仍旧为真,循环执行组命令;一旦表达式expression的值为假时,结束循环。
3)if-else-end分支结构if-else-end指令为程序流提供了一种分支机构,它有多种形式,最简单一种为:if expression(commands)end如果表达式expression为真,则执行组命令commands,,否则跳过该组命令。
4)switch-case结构switch-case指令的一般语句结构形式如下:switch ex ex为一个标量或字符串case test1(commands1) 当ex等于test1时,执行组命令commands1,然后挑出该结构case test2……case testi(commandsi) 当ex等于testi时,执行该组命令i,然后跳出该结构。
otherwise(commands) 当ex不等于前面的所有检测值时,执行该组命令。
end5)try-catch 结构try-catch的指令的语法结构形式为:try(commands1) 组命令commands1总被执行,若正确,则跳出此结构。
catch(commands2) 当组命令commands1出现执行错误时,commands2才被执行。
End控制程序流程的其他常用指令还有:(1)return 指令在被调函数中应用了return指令,可以强制MATLAB结束执行该函数并把控制转出。
(2)input和keyboard指令 input指令将MATLAB的控制权暂时交给用户,用户通过键盘键入数值、字符串或者表达式,经回车键把键入内容输入工作空间,同时把控制权交还给MATLAB。
常用的格式为:v=input(‘message’) 将用户键入的内容赋值给变量v。
v=input(‘message’,‘s’)将用户键入的内容作为字符串赋值给变量v。
Keyboard指令使得MATLAB把控制权交给键盘,用户可以从键盘输入各种合法的指令,只有当用户使用return指令时,控制权才交回给程序。
(3)yesinput指令该指令是一个智能输入指令,它提供了一个缺省输入值,并可以对输入范围进行检查。
其调用格式为V=yesinput(‘Prompt’,Default,Possible)其中Prompt为文字提示,Default为缺省设置“值”,Possible为可选值的范围。
(4)pause指令暂停执行文件,等待用户按任意键继续。
(5)break指令使用break指令可不必等待循环的自然结束,而是根据循环内部另设的某种条件是否满足,去决定是否退出循环。
(6)error和warning指令警示和出错指令。
在编写M文件时,常用的出错和警示指令有:error(‘message’) 显示出错信息,终止程序。
warning(‘message’) 显示警告信息,程序继续运行。
lasterr 显示MATLAB自动判断的最新出错原因并终止程序。
A.2 SIMULINK仿真方法简介SIMULINK是一个进行动态系统的建模、仿真和综合分析的集成软件包。
它可以处理的系统包括:线性、非线性系统;离散、连续及混合系统;单任务、多任务离散事件系统。
在SIMULINK提供的图形用户界面GUI上,只要进行鼠标的简单拖拉操作就可以构造出复杂的仿真模型。