490 likes | 652 Views
多媒体信息处理系统设计. MATLAB/Simulink 设计 http://www2.nbu.edu.cn/jiangzhidi/mediasystem http://bighand.zxq.net/mediasystem. 主讲:蒋志迪 宁波大学信息科学与工程学院 办公室:曹光彪信息楼 424 电话: 665929 email : bighandjzd@126.com. 1 Simulink 简介.
E N D
多媒体信息处理系统设计 MATLAB/Simulink设计http://www2.nbu.edu.cn/jiangzhidi/mediasystem http://bighand.zxq.net/mediasystem 主讲:蒋志迪 宁波大学信息科学与工程学院 办公室:曹光彪信息楼424 电话:665929 email:bighandjzd@126.com
1 Simulink简介 • Simulink是一个用来对动态系统进行建模、仿真和分析的软件包。使用Simulink来建模、分析和仿真各种动态系统(包括连续系统、离散系统和混合系统),将是一件非常轻松的事情。它提供了一种图形化的交互环境,只需用鼠标拖动的方法便能迅速地建立起系统框图模型,甚至不需要编写一行代码。 • 利用Simulink进行系统的建模仿真,其最大的优点是易学、易用,并能依托MATLAB提供的丰富的仿真资源。
提供了仿真库的扩充和定制机制 • Simulink的开放式结构允许用户扩展仿真环境的功能:采用MATLAB、FORTRAN和C代码生成自定义模块库,并拥有自己的图标和界面。 • 与MATLAB工具箱的集成 • 由于Simulink可以直接利用MATLAB的诸多资源与功能,因而用户可以直接在 Simulink下完成诸如数据分析、过程自动化、优化参数等工作。
2 Simulink启动及模型建立 Simulink的启动主要有以下两种方法: • 在MATLAB的命令窗口中输入simulink,结果是在桌面上出现一个Simulink Library Browser的窗口。 • 单击MATLAB主窗口的快捷按钮 ,打开Simulink Library Browser窗口 。
Simulink模型窗口的建立 在Simulink中打开一个空白的模型窗口的方法: • 选中Simulink菜单系统中的File | New | Model菜单项后,会生成一个Simulink窗口; • 单击Simulink工具栏中的“新建模型”图标; • 在MATLAB的命令窗口中选择File | New | New Model菜单项;
依次表示新建、打开 系统模型文件 依次表示新建、打开与 保存系统模型文件 启动Simulink,建立系统模型的基本操作
模块搜索 模块描述 系统模块 系统模块库 Simulink的模块库 • Simulink的模块库能够对系统模块进行有效的管理与组织可以直接将模块库中的模块拖动或者拷贝到用户的系统模型中以构建动态系统模型。
Simulink公共模块库 • Simulink中最为基础、最为通用的模块库,它可以被应用到不同的专业领域中。 • 连续模块continuous、非连续模块discontinuous • 离散模块discrete、查找表模块Look-up Table • 数学运算Math Operations • 模型验证模块Model Verification • 模型扩充工具Model-Wide Utilities • 端口和子系统模块Ports & Subsystems、 • 信号属性模块Signal Attributes • 信号路由模块Signal Routing、接收模块Sinks • 输入模块Sources • 用户自定义函数模块User-Defined Functions
DSP Blockset 数字信号处理工具包 Fixed-Point Blockset 定点运算控制系统仿真工具包 Power System Blockset 电力电动系统工具包 Dials & Gauges Blockset 交互图形和控制面板设计工具包 Communications Blockset 通讯系统工具包 CDMA Reference Blockset CDMA CDMA通讯系统设计和分析工具包 Nonlinear Control Design Blockset 非线性控制设计工具箱 Motorola DSP Developer’s Kit Motorola DSP开发工具箱 TI DSP Developer’s Kit TI DSP开发工具箱 Simulink的部分专业模块库
对Simulink库浏览器的基本操作有: (1) 使用鼠标左键单击系统模块库,如果模块库为多层结构,则单击“+”号载入库。 (2) 使用鼠标右键单击系统模块库,可在单独的窗口打开库。 (3) 使用鼠标左键单击系统模块,在模块描述栏中显示此模块的描述。 (4) 使用鼠标右键单击系统模块,可以得到:系统模块的帮助信息; 将系统模块插入到系统模型中; 查看系统模块的参数设置; 以及回到系统模块的上一层库。 此外还可以进行以下操作: (1) 使用鼠标左键选择并拖动系统模块,并将其拷贝到系统模型中。 (2) 在模块搜索栏中搜索所需的系统模块。
例:简单系统的输入为一个正弦波信号,输出为此正弦波信号与一个常数的乘积。要求建立系统模型,并以图形方式输出系统运算结果。例:简单系统的输入为一个正弦波信号,输出为此正弦波信号与一个常数的乘积。要求建立系统模型,并以图形方式输出系统运算结果。 • 已知系统的数学描述为 系统输入: u(t)=sin t , t≥0 系统输出: y(t)=au(t), a≠0
相关操作: • 模块库 • Sine Wave来自sources; Gain来自Math Operations;Scope来自Sinks • 连接方法 (1)拖动对应端口进行连接 (2)单击起始模块后,按Ctrl键再单击目标模块 • 模块复制 • 传统方式Ctrl+C/Ctrl+V、或Ctrl键再拖动模块 • 模块插入 • 对于单输入单输出模块,只需将这个模块移到线上就可以自动连接。
连线操作 • 连线分支 • 使用鼠标右键单击需要分支的信号连线(光标变成“+”),然后拖动到目标模块。 • 使用鼠标左键单击并拖动以改变信号连线的路径。 • 按下Shift键的同时,在信号连线上单击鼠标左键并拖动,可以生成新的节点。 • 在节点上使用鼠标左键单击并拖动,可以改变信号连线路径。
信号组合 在利用Simulink进行系统仿真时,在很多情况下,需要将系统中某些模块的输出信号(一般为标量)组合成一个向量信号,并将得到的信号作为另外一个模块的输入。 来自Signal Routing的Bus Creator
3 Simulink模型仿真 • 系统模块参数设置与系统仿真参数设置 • 双击系统模块,打开系统模块的参数设置对话框。 • 在参数设置对话框中设置合适的模块参数。 • 设置合适的系统仿真参数以进行动态系统的仿真 • 在Simulation菜单的Simulation parameters...子菜单中进行设置,如仿真时间等 • 运行仿真 • 单击系统模型编辑器上的Play图标(黑色三角)或选择Simulation菜单下的Start便可以对系统进行仿真分析。 • 仿真结束后双击Scope模块以显示系统仿真的输出结果
4 Simulink子系统介绍 • Simulink提供的子系统功能可以大大地增强Simulink系统模型框图的可读性。 • 子系统可以理解为一种“容器”,此容器能够将一组相关的模块封装到一个单独的模块中,并且与原来系统模块组的功能一致。
子系统建立方法(2种) • 在已有的系统模型中建立子系统: • 首先框选待封装的区域,即在模型编辑器背景中单击鼠标左键并拖动,选中需要放置到子系统中的模块与信号(或在按下Shift键的同时,用鼠标左键单击所需模块);然后选择Edit菜单下的Create Subsystem,即可建立子系统。 • 建立空的子系统: • Subsystems模块库中的模块建立子系统。这样建立的子系统内容为空,然后双击子系统对其进行编辑。
子系统操作 在生成子系统之后,用户可以对子系统进行各种与系统模块相类似的操作,这时子系统相当于具有一定功能的系统模块。例如,子系统的命名、子系统视图的修改、子系统的显示颜色等等。当然子系统也有其特有的操作,如子系统的显示(用鼠标左键双击子系统模块即可打开子系统)、子系统的封装等等。
Inport输入模块与Outport输出模块 在系统模型中建立子系统时,Simulink会自动生成Inport模块(Sources模块库中的In1模块)与Outport模块(Sinks模块库中的Out1模块)。Inport模块作为子系统的输入端口,Outport作为子系统的输出端口,它们被用来完成子系统和主系统之间的通讯。 Inport和Outport用来对信号进行传递,不改变信号的任何属性;另外,信号标签可以越过它们进行传递。如果需要建立多输入多输出的子系统,则需要使用多个Inport模块与Outport模块,而且最好使用合适的名称对Inport模块与Outport模块进行命名。
5 Simulink与Matlab的接口设计 • 由MATLAB工作空间变量设置系统模块参数 • 模块参数可以是常量也可以工作空间变量 • 直接使用MATLAB工作空间中的变量设置模块参数。 • 使用变量的表达式设置模块参数。 • 例如,如果a是定义在MATLAB中的变量,则表达式a、a^2+5、exp(–a)等均可以作为系统模块的参数
将信号输出到MATLAB工作空间中 使用示波器模块Scope的输出信号,可以使用户对输出的信号进行简单的定性分析。 使用Sinks模块库中的To Workspace 模块,可以轻易地将信号输出到MATLAB工作空间中。信号输出的名称在To Workspace模块的对话框中设置,此对话框还可以设置输出数据的点数、输出的间隔,以及输出数据的类型等。其中输出类型有三种形式:数组、结构以及带有时间变量的结构。仿真结束或暂停时信号被输出到工作空间中。
使用工作空间变量作为系统输入信号 Simulink与MATLAB的数据交互是相互的,除了可以将信号输出到MATLAB工作空间中之外,用户还可以使用MATLAB工作空间中的变量作为系统模型的输入信号。使用Sources模块库中的From Workspace模块可以将MATLAB工作空间中的变量作为系统模型的输入信号。此变量的格式如下所示: >> t=0:0.1:10; >> x=sin(t); >> input=[t',x']; 系统输入信号input的作用相当于Sources模块中的Sine Wave模块
向量与矩阵 • Simulink所使用的信号可以是标量也能够传递和使用向量信号。例如,向量增益可以作用在一个标量信号上,产生一个向量输出。 • Simulink 最重要的特性就是支持矩阵形式的信号,它可以区分行和列向量并传递矩阵。通过对模块做适当的配置,可以使模块能够接受矩阵作为模块参数。
MATLAB Function与Function模块 除了使用上述的方式进行Simulink与MATLAB之间的数据交互,用户还可以使用Functions and Tables 模块库中的 Function模块(简称为Fcn模块)或Functions and Tables 模块库中的MATLAB Function模块(简称为MATLAB Fcn模块)进行彼此间的数据交互。 Fcn模块一般用来实现简单的函数关系,在Fcn模块中: (1) 输入总是表示成u,u可以是一个向量。 (2)可以使用 C 语言表达式,例如sin(u[1])+cos(u[2])。 (3) 输出永远为一个标量。
(2) 可以使用 C 语言表达式,例如sin(u[1])+cos(u[2])。 (3) 输出永远为一个标量。 MATLAB Fcn一般用来调用MATLAB函数来实现一定的功能,在MATLAB Fcn模块中: (1) 所要调用的函数只能有一个输出(可以是一个向量)。 (2) 单输入函数只需使用函数名,多输入函数输入需要引用相应的元素,如mean、sqrt、myfunc(u(1),u(2))。 (3) 在每个仿真步长内都需要调用MATLAB解释器。 使用Fcn模块与MATLAB Fcn模块进行Simulink与MATLAB之间的数据交互。
函数表达式 Matlab 函数 MATLAB 函数 使用Fcn与MATLAB Fcn模块进行数据交互
视图整体缩放 参数设置 打印输出 X 轴缩放 Y 轴缩放 视图自动缩放 悬浮时信号选择 保存当前坐标轴设置 去除坐标轴选择 Scope 恢复坐标轴设置 悬浮 开关 6 Scope高级使用技术
1) Scope的参数设置 使用Scope模块的参数设置选项卡能够对系统仿真输出结果显示进行更多的控制,而不仅仅是上述的简单控制。图36、图37所示分别为Scope模块参数设置选项卡中的General选项卡与Data History选项卡。
坐标系数目 Scope 悬浮 开关 显示时间范围 坐标系标签 Scope模块的General选项卡
信号显示点数限制 保存信号至工作空 间变量 Scope模块的Data history选项卡
下面简单介绍一下各选项卡的功能与使用。 1) 坐标系数目(Number of axes) 功能描述:在一个Scope输出模块中使用多个坐标系窗口同时输出多个信号。在默认设置下,Scope模块仅显示一个坐标系窗口。 2) 悬浮Scope开关(Floating scope) 功能描述:将Scope模块切换为悬浮Scope模块。
3) 显示时间范围(Time range) 功能描述:设置信号显示的时间范围。注意:信号显示的时间范围与系统仿真时间范围并不等同,并且坐标系所示的时间范围并非为绝对时间,而是指相对时间范围,坐标系的左下角的时间偏移(Time offset)给出了时间的起始偏移量(即显示时间范围的起始时刻)。 4) 坐标系标签(Tick labels) 功能描述:确定Scope模块中各坐标系是否带有坐标轴标签。 下方坐标系使用标签(bottom axis only)以及都不使用标签(none)。用户最好使用标签,这有利于对信号的观察理解.
5) 信号显示点数限制(Limit data points to last) 功能描述:限制信号显示的数据点的数目,Scope模块会自动对信号进行截取以显示信号的最后n个点(这里n为设置的数值)。 6) 保存信号至工作空间变量(Save data to workspace) 功能描述:将由Scope模块显示的信号保存到Matlab工作空间变量中,以便于对信号进行更多的定量分析。数据保存类型有三种:带时间变量的结构体(structure with time)、结构体(structure)以及数组变量(Array)。这与前面所介绍的Sinks模块库中的To workspace模块类似。
此外,在Scope模块中的坐标系中单击鼠标右键,选择弹出菜单中坐标系属性设置命令(axes properties),将弹出下图所示的坐标系属性设置对话框。用户可以对Scope模块的坐标系标题与显示信号范围进行合适的设置,以满足仿真输出结果显示的需要。
设置信号显 示幅值范围 坐标系标题:一 般采用信号名称 坐标系属性设置对话框
7 S函数的设计和调用 • S函数是扩展Simulink功能的强有力工具,它使用户可以利用MATLAB、C语言、C++语言等程序创建自己定义的Simulink模块。C,C++,Ada,and Fortan S-Functions需要编译为Mex文件,就和其它MEX文件一样,Simulink可以随时动态的调用这些文件。 • S函数使用的是一种比较特殊的调用格式,可以和Simulink求解器交互式操作。S-Functions功能非常全面,适用于连续、离散以及混合系统。 • S函数允许用户向模型中添加自己编写的模块,只要按照一些简单的规则,就可以在S-Functions添加设计算法。在编写好S-Functions之后就可以在S-Functions模块中添加相应得函数名,也可以通过封装技术来订制自己的交互界面。
S函数的调用 • 在Simulink使用S-Functions的方法就是从Simulink中的User-Defined Functions模块库中向Simulink模型文件窗口中拖放S-Function模块。然后在S-Functions模块的对话框中的S-Functions Name框中输入S函数的文件名,在S-Functions Parameters框中输入S函数的参数值。 • 在点击edit的选项后可以编辑S函数的代码部分,利用S函数实现需要的功能主要是代码部分的修改。
对于代码部分的修改,可以使用MATLAB语言按照S-Functions的格式来编写代码。MATLAB提供了一个模板文件,方便S-Function的编写,该模板文件位于MATLAB根目录toolbox/Simulink/blocks下对于代码部分的修改,可以使用MATLAB语言按照S-Functions的格式来编写代码。MATLAB提供了一个模板文件,方便S-Function的编写,该模板文件位于MATLAB根目录toolbox/Simulink/blocks下 模板函数的代码如下: function [sys,x0,str,ts] = sfuntmpl(t,x,u,flag) switch flag, case 0, [sys,x0,str,ts]=mdlInitializeSizes; case 1, sys=mdlDerivatives(t,x,u); case 2, sys=mdlUpdate(t,x,u); case 3, sys=mdlOutputs(t,x,u); case 4, sys=mdlGetTimeOfNextVarHit(t,x,u); case 9, sys=mdlTerminate(t,x,u); otherwise error(['Unhandled flag = ',num2str(flag)]); end
function sys=mdlDerivatives(t,x,u) sys = []; function sys=mdlUpdate(t,x,u) sys = []; function sys=mdlOutputs(t,x,u) sys = []; function sys=mdlGetTimeOfNextVarHit(t,x,u) sampleTime = 1; sys = t + sampleTime; function sys=mdlTerminate(t,x,u) sys = []; function [sys,x0,str,ts]=mdlInitializeSizes sizes = simsizes; sizes.NumContStates = 0; sizes.NumDiscStates = 0; sizes.NumOutputs = 0; sizes.NumInputs = 0; sizes.DirFeedthrough = 1; sizes.NumSampleTimes = 1; sys = simsizes(sizes); x0 = []; str = []; ts = [0 0];
M文件S-Functions可用的子函数说明如下: (1)mdlInitializeSizes:定义S-Function模块的基本特性,包括采样时间、连续或者离散状态的初始条件和sizes数组。 (2)mdlDerivatives:计算连续状态变量的微分方程。 (3)mdlUpdate:更新离散状态、采样时间和主时间同步的要求。 (4)mdlOutputs:计算S-Function的输出。 (5)mdlGetTimeOfNextVarHit: 计算下一个采样时间点的绝对时间。 (6)mdlTerminate:结束仿真任务。
S-function默认的4个输入参数t、x、u和flag,他们的次序不能变动,各自代表的意义是:S-function默认的4个输入参数t、x、u和flag,他们的次序不能变动,各自代表的意义是: t:表示当前仿真时刻,是采用绝对计量的时间值,是从仿真开始模型运行时间的计量值。 x:模块的状态向量,包括连续状态向量和离散状态向量。 u:模块的输入向量。 flag:执行不同操作的标记变量。
S-Function默认的4个返回参数为sys、x0、str和ts,他们的次序也不能改变,代表的意义为:S-Function默认的4个返回参数为sys、x0、str和ts,他们的次序也不能改变,代表的意义为: sys:通用返回函数; x0:初始状态值,当flag的值为0时才有效; str:没有明确定义,是Math Works为将来应用所作的保留。 ts:一个m×2矩阵,它的两列分别表示采样时间间隔和偏移。
8 使用命令操作对系统进行仿真 • 支持命令窗口运行仿真的函数有4个,即sim、simset、simget和set_param。 (1)sim函数 sim函数的作用是运行一个由Simulink建立的模型, 其调用格式为: [t, x, y ] =sim(modname,timespan,options,ut);
其中, • t为返回的仿真时间向量; • x为返回的状态矩阵; • y为返回的输出矩阵; • modname为系统Simulink模型文件名; • timespan为仿真时间; • options为仿真参数选择项,由simset设置; • ut为选择外部产生输入,ut=[T,u1,u2,…,un]。 [说明] 上述参数中,若省略timespan,options,ut则由框图模型的对话框Simulation Parameters设置仿真参数。
(2)simset函数 simset 函数用来为sim函数建立或编辑仿真参数或规定算法,并把设置结果保存在一个结构变量中。它有如下4种用法: (a) options=simset(property,value,…):把property代表的参数赋值为value,结果保存在结构options中。 (b) options=simset(old_opstruct,property,value,…):把已有的结构old_opstruct(由simset产生)中的参数property重新赋值为value,结果保存在新结构options中。 (c) options=simset(old_opstruct,new_opstruct):用结构new_opstruct的值替代已经存在的结构old_opstruct的值。 (d) simset:显示所有的参数名和它们可能的值。
(3) simget函数 simget函数用来获得模型的参数设置值。如果参数值是用一个变量名定义的,simget返回的也是该变量的值而不是变量名。如果该变量在工作空间中不存在(即变量未被赋值),则Simulink给出一个出错信息。该函数有如下3种用法: (a) struct=simget(modname):返回指定模型model的参数设置的options结构。 (b) value=simget(modname,property):返回指定模型model的参数property的值。 (c) value=simget(options,property):获取options结构中的参数property的值。如果在该结构中未指定该参数,则返回一个空阵。 用户只需输入能够唯一识别它的那个参数名称的前几个字符即可,对参数名称中字母的大小写不作区别。
(4) set_param函数 set_param函数的功能很多,这里只介绍如何用set_param函数设置Simulink仿真参数以及如何开始、暂停、终止仿真进程或者更新显示一个仿真模型。 (a) 设置仿真参数 调用格式为: set_param(modname,property,value,…) 其中modname为设置的模型名,property为要设置的参数,value是设置值。这里设置的参数可以有很多种,而且和用simset设置的内容不尽相同,相关参数的设置可以参考有关资料。 (b) 控制仿真进程 调用格式为: set_param(modname,'SimulationCommand','cmd') 其中mode为仿真模型名称,而cmd是控制仿真进程的各个命令,包括start、stop、pause、comtinue或update。 在使用这两个函数的时候,需要注意必须先把模型打开。
End of This Lecture Thank!