第2章信号与系统的建模与仿真教学目标通过本章的学习,了解Simulink的基本功能,熟练掌握Simulink模块的基本操作、Simulink仿真参数的设置;掌握连续系统和离散系统的数学模型以及建模与仿真的方法。Simulink是MATLAB的重要组成部分,提供建立系统模型、选择仿真参数和数值算法、启动仿真程序对该系统进行仿真、设置不同的输出方式来观察仿真结果等功能。Simulink既适用于线性系统,也适用于非线性系统;既适用于连续系统,也适用于离散系统和连续与离散混合系统;既适用于定常系统,也适用于时变系统。Simulink提供图形用户界面,用户可以用鼠标操作,从模块库中调用标准模块,将它们适当地连接起来以构成动态系统模型,并且用各模块的参数对话框为系统中各模块设置参数。当各模块的参数设置完成后,即建立起该系统的模型。如果对某一模块没有设置参数,那就意味着使用Simulink预先为该模块设置的默认参数值作为该模块的参数。Simulink模块库内容十分丰富,除包括输入信号源模块库(Sources)、输出接收模块库(Sinks)、连续系统模块库(Continuous)、离散系统模块库(Discrete)数学运算模块库(MathOperations)等许多标准模块外,用户还可以自定义和创建模块。系统的模型建立后,选择仿真参数和数值算法,便可以启动仿真程序对该系统进行仿真,这种操作可以用Simulink菜单,也可以用MATLAB命令实现。菜单方式对于交互式运行特别方便,而命令方式对于运行一批仿真时很有用。在仿真过程中,用户可以设置不同的输出方式来观察仿真结果。例如,使用Sinks模块库中的Scope模块或其他显示模块来观察有关信号的变化曲线,也可以将结果存放在MATLAB工作空间中,供以后处理和使用。根据仿真结果,用户可以调整系统参数,观察分析仿真结果的变化,从而获得更加理想的仿真结果。2.1Simulink模块库简介2.1.1常用模块库常用模块库(CommonlyUsedBlocks)是为了加快建模速度、节省建模过程中寻找模块的时间而将最常用的基本模块集中放在一起形成的。在SimulinkLibraryBrowser(Simulink模块库浏览器)窗口中,单击Libraries列表框中的CommonlyUsedBlocks选项,即可在窗口右侧展开CommonlyUsedBlocks(常用模块库)标签,如图2.1所示。也可以右击Libraries列表框中的CommonlyUsedBlocks选项,在弹出的快捷菜单中选择OpenCommonlyUsedBlockLibrary命令,这时系统将弹出独立的Library:Simulink/CommonlyUsedBlocks窗口,如图2.2所示。图2.1SimulinkLibraryBrowser窗口图2.2Library:Simulink/CommonlyUsedBlocks窗口常用模块库包括以下内容。1.总线信号生成器与总线信号选择器模块BusCreator(总线信号生成器)模块用于将多个信号合成一个总线信号,常用于子系统接口信号传递;BusSelector(总线信号选择器)模块用来选择总线信号中的一个或多个。2.信号合成器与信号分离器模块Mux(信号合成器)模块和Demux(信号分离器)模块的功能看似与总线信号生成模块和总线信号选择模块的功能相似,但是信号合成器与信号分离器模块是对所有信号进行合成与分离的,而总线信号选择模块可以任意选择总线上的信号进行输出。3.数据类型转换模块DataTypeConversion(数据类型转换)可将输入数据转换为指定输出类型,具体选择有Inherit(与输入数据保持一致)、Double(双精度类型)、Single(单精度)、int8(8位整数数据)、uint8(无符号8位整数数据)等。在输入/输出数据上可选择RealWorldValue(实数值相等)或者StoredInteger(存储整数相等)。同时可以选择取整的方向,如选择RoundIntegerCalculationstoward为Zero时,表示向零取整;选择Nearest时,表示向最接近的整数取整;选择Floor时,表示向负无穷取整;选择Ceiling时,表示向正无穷取整。4.积分模块Integrator(积分)模块为连续时间积分单元。5.离散时间积分模块Discrete-TimeIntegrator(离散时间积分)模块可完成离散系统积分作用。6.乘法与加法模块Product(乘法器)模块可用来求输入信号的乘积,双击Product模块可修改输入信号的端口数。Sum(加法器)模块可用来求输入信号的加法、减法操作。双击Sum模块打开参数设置对话框,在Listofsigns符号列表框可修改加、减法符号,改变符号列表栏“|”位置,可改变加、减法符号的位置,在Iconshape列表框中可选择加法器模块的外部形状为圆形或方形。7.关系操作与逻辑操作模块RelationalOpetator(关系操作)模块可用来比较两个输入信号的大小关系,双击RelationalOpetator模块,可设置输入信号的比较关系。关系操作可选择大于等于(=)、小于等于(=)、不等于(~=)、等于(==)、大于()、小于()。Logicoperator(逻辑操作)模块可用来求取两输入变量的逻辑操作关系,双击Logicoperator模块,打开Logicoperator模块参数对话框,逻辑操作具体有AND(与)、OR(或)、NOT(非)、XOR(异或)、NAND(与非)、NOR(或非)操作。8.增益模块Gain(增益)模块可用来设置信号放大倍数,在Simulink动态仿真中使用频繁。双击Gain模块打开参数设置对话框,在Gain文本框中可设置具体信号放大倍数。9.输入/输出接口及子系统模块In1(输入)模块在建立子系统时作为输入信号的接口。Out1(输出)模块在建立子系统时作为输出信号的接口。Subsystem(子系统)模块可用来将复杂系统的全部或局部生成为一个子系统,这样便于简化Simulink模型结构。10.终端模块Terminator(终端)模块可用来连接没有与其他模块相连的输出端口,在Simulink模型中,如果有输出端口没有连接,运行仿真时,在MATLAB窗口将显示警告信息,使用终端模块可以避免这类警告信息的出现。2.1.2连续系统模块库Continuous(连续系统)模块库提供了连续系统Simulink建模与仿真的基本模块。在Simulink模块库浏览器中,单击Libraries列表框中的Continuous选项选项,可打开连续系统模块库;也可以用右击Continuous选项,在弹出的快捷菜单中选择OpenContinuousLibrary选项,系统弹出独立的Library:simulink/Continuous窗口,如图2.3所示。图2.3Library:simulink/Continuous窗口连续系统模块库包括以下内容。1.微积分模块使用Derivative(微分)模块、Integrator(积分)模块可建立各种各样的控制器及控制系统动态仿真模型。微分模块的作用是将输入端的信号经过一阶数值微分,在输出端输出。双击Derivative模块,打开微分环节线性化设置对话框。系统默认的微分环节线性化时间常数为inf(无穷大),用户可根据需要自行设定。积分模块的作用是将输入信号经过数值积分,在输出端直接反映出来。在将常微分方程转换为图形表示时也必须使用该模块。2.状态空间模型使用Simulink动态仿真模型,可使用State-Space(状态空间)模块,双击State-Space模块,系统弹出参数设置对话框,在这里可设定状态空间模型的系数矩阵及初始状态。3.传输延迟及可变传输延迟如果控制系统模型里含有纯延迟环节,用户可使用Simulink连续系统模块库提供的TransportDelay(传输延迟)模块来建立仿真模型。双击TransportDelay模块,系统弹出参数设置对话框,在TimeDelay文本框中输入需要延迟的时间数值。同时,在PadeOrder文本框中输入纯延迟环节线性化处理的近似多项式阶数。==VariableTimeDelay(可变时间延迟)模块与VariableTransportDelay(可变传输延迟)模块在Simulink连续系统模块库里以两个模块的形式出现,但它们可以通过选择模型属性的SelectDelayType属性值来相互转换。传输延迟模块应用在传输的延迟时间与被控对象传输速度有关的系统建模中。4.传递函数模块与零极点增益模型传递函数是频域中常用的描述线性微分方程的一种方法,通过引入Laplace变换可以将原来的线性微分方程在初始条件下变换为代数的形式,从而以多项式的比值形式描述系统。传递函数的一般形式为:G(s)num(s)den(s)b1sm+b2sm1++bm+1(2-1)a1sn+a2sn1++an+1TransferFcn(传递函数)模块可以用来建立连续系统传递函数的Simulink仿真模型,双击TransferFcn模块,打开参数设置对话框。在Numeratorcoefficient文本框中定义分子多项式系数向量,在Denominatorcoefficient文本框中定义分母多项式系数向量,从而建立传递函数的Simulink仿真模型。将传递函数模型的分子和分母分别进行因式分解,则可以将其变换为(sz1)(sz2)(szm)(2-2)(sp1)(sp2)(spn)式(2-2)中,k为系统增益,zi(i=1,2,,m)为系统的零点,pi(i=1,2,,n)为G(s)=k系统的极点。如果已知系统的零点、极点和增益,可以使用连续系统的Zero-Pole(零极点)增益模型来建立Simulink仿真模型。双击Zero-Pole模块,打开零极点增益模型的参数设置对话框,在指定的零点、极点、增益文本框中输入相应的数据,然后单击OK按钮即可完成零极点增益模型的Simulink建模。2.1.3非连续系统模块库Discontinuities(非连续系统)模块库在以前版本中也称为非线性模块库。在SimulinkLibraryBrowser窗口中,单击Libraries列表框中的Discontinuities选项,可打开非连续系统模块库;也可以用右击Discontinuities选项,在弹出的快捷菜单中选择OpenDiscontinuitiesLibrary选项,系统弹出独立的Library:simulink/Discontinuities窗口,如图2.4所示。非连续系统模块库包括以下内容。图2.4Library:simulink/Discontinuities窗口1.饱和度模块Saturtion(饱和度)模块是对一个信号限定上下限。当输入在由Lowerlimit和Upperlimit参数指定的范围内时,输入信号无变化输出。若输入信号超出范围,则信号就会被限幅(值为上限或下限)。若这两个参数的设置值相等时,模块就输出该值。模块只接受和输出双精度实型信号。SaturationDynamic(动态饱和)模块可以根据输入端口Up和Lo的设定值动态设置输出的上限和下限。2.死区模块DeadZone(死区)模块提供了一个死区特性,即产生在指定范围内的零输出。模块用Startofdeadzone和Endofdeadzone参数指定截止区的下限值和上限值。模块的输出取决于输入和截止区的大小。⑴若输入落在截止区内(大于下限值且小于上限值),则输出为0。⑵若输入大于或等于上限值,则输出等于输入减去上限值。⑶若输入小于或等于下限值,则输出等于输入减去下限值。3.速率限制模块RateLimiter(速度限制)模块静态限制信号的变化速率,用于限定模块的输入信号的一阶导数,以使输出的变化不超过指定界限。导数根据方程rate=u(i)y(i1)计算得出。t(i)t(i)其中,u(i)和t(i)为当前模块的输入和时间