主要内容

lsim

绘制动态系统对任意输入的模拟时间响应图;模拟响应数据

描述

响应图

例子

lsim (sysut的模拟时间响应动态系统模型sys输入历史记录(tu).向量t指定模拟的时间样本。对于单输入系统,输入信号u向量的长度和t.对于多输入系统,u是一个数组,其行数与时间样本数相同(长度(t))和有输入的列数sys

例子

lsim (sysutx0进一步指定一个向量x0初始状态值,当sys是状态空间模型。

例子

lsim (sysutx0p指定参数轨迹pLPV模型。

lsim (sysutx0方法指定如何lsim在样本之间插入输入值,当sys是一个连续时间模型。

例子

lsim (sys1,sys2……sysN,ut___模拟几个动态系统模型对相同输入历史的响应,并在单个图形上绘制这些响应。所有系统必须有相同数量的输入和输出。你也可以使用x0而且方法计算多个模型的响应时输入参数。

例子

lsim (sys1,LineSpec1、……sysN,LineSpecN,___为绘图中的每个系统指定颜色、线条样式和标记。当您需要额外的情节定制选项时,请使用lsimplot代替。

响应数据

例子

y= lsim (sysut返回系统响应y,在同一时间采样t作为输入。对于单输出系统,y向量的长度和t.对于多输出系统,y是一个具有与时间样本数量相同的行数的数组(长度(t))和输出的列数sys.此语法不会生成图形。

y= lsim (sysutx0进一步指定一个向量x0初始状态值,当sys是状态空间模型。

例子

y= lsim (sysutx0p指定参数轨迹pLPV模型。

y= lsim (sysutx0方法指定如何lsim在样本之间插入输入值,当sys是一个连续时间模型。

例子

y吹捧x= lsim(___返回状态轨迹x,当sys是状态空间模型。x一个数组的行数和时间样本数一样多,列数和状态数一样多吗sys.该语法还返回用于模拟的时间样本吹捧

y吹捧x撅嘴= lsim(sysutx0p还返回参数轨迹撅嘴,当sys为LPV模型。

线性仿真工具

lsim (sys打开线性模拟工具。有关使用此工具进行线性分析的更多信息,请参见使用线性仿真工具

例子

全部折叠

考虑下面的传递函数。

Sys = tf(3,[1 2 3])
sys = 3 ------------- s^2 + 2s + 3连续时间传递函数。

为计算该系统对任意输入信号的响应,提供lsim用时代的矢量t你想要计算响应和一个向量u包含相应的信号值。例如,绘制从0时刻开始的渐变步长信号的系统响应T = 0,从0开始T = 1到1点T = 2,然后稳定在1。定义t计算的值u

T = 0:0.04:8;% 201分U = max(0,min(t-1,1));

使用lsim没有输出参数来绘制系统对信号的响应。

lsim (sys, u, t)网格

图中包含一个轴对象。axis对象包含2个line类型的对象。这些对象表示驱动输入,sys。"width=

该图显示了应用的输入(u, t)灰色是系统响应,蓝色是系统响应。

使用lsim使用输出参数获取模拟响应数据。

Y = lsim(sys,u,t);大小(y)
ans =1×2201年1

向量y包含在相应时间内的模拟响应t

使用gensig创建周期输入信号,如正弦波和方波使用lsim.模拟以下SISO状态空间模型对方波的响应。

A = [-3 -1.5;5 0];B = [1;0);C = [0.5 1.5];D = 0;sys = ss(A,B,C,D);

在本例中,创建一个周期为10秒,持续时间为20秒的方波。

[u,t] = gensig(“广场”10、20);

gensig返回向量t时间步长和向量u包含输入信号的相应值。(如果您没有指定采样时间t,然后gensig每周期生成64个样本。)使用这些lsim然后画出系统响应。

lsim (sys, u, t)网格

图中包含一个轴对象。axis对象包含2个line类型的对象。这些对象表示驱动输入,sys。"width=

图中应用的方波为灰色,系统响应为蓝色。调用lsim中每个点的响应值t

[y,~] = lsim(sys,u,t);

当你模拟离散时间系统的响应时,时间向量t必须是这种形式吗Ti: dT: Tf,在那里dT为模型的采样时间。模拟下列离散时间传递函数对斜坡阶跃输入的响应。

Sys = tf([0.06 0.05],[1 -1.56 0.67],0.05);

该传递函数的采样时间为0.05 s。使用相同的采样时间生成时间向量t还有一个斜坡台阶信号u

T = 0:05:4;U = max(0,min(t-1,1));

绘制系统响应图。

lsim (sys, u, t)

图中包含一个轴对象。axis对象包含2个line类型的对象。这些对象表示驱动输入,sys。"width=

为了模拟离散时间系统对周期性输入信号的响应,使用相同的采样时间gensig生成输入。例如,模拟系统对周期为1秒、持续时间为4秒的正弦波的响应。

[u,t] = gensig(“正弦”, 1, 4, 0.05);

绘制系统响应图。

lsim (sys, u, t)

图中包含一个轴对象。axis对象包含2个line类型的对象。这些对象表示驱动输入,sys。"width=

lsim允许您在同一轴上绘制多个动态系统的模拟响应。例如,比较PI控制器和PID控制器系统的闭环响应。创建系统的传递函数并调优控制器。

H = tf(4,[1 10 25]);C1 = pidtune(H,“π”);C2 = pidtune(H,“PID”);

形成闭环系统。

sys1 = feedback(H*C1,1);sys2 = feedback(H*C2,1);

画出两个系统对周期为4秒的方波的响应。

[u,t] = gensig(“广场”4、12);lsim (sys1 sys2, u, t)网格传奇(“π”“PID”

图中包含一个轴对象。axis对象包含3个line类型的对象。这些对象代表驱动输入,PI, PID。"width=

默认情况下,lsim为您绘制的每个系统选择不同的颜色。属性指定颜色和线条样式LineSpec输入参数。

lsim (sys1“r——”sys2,“b”u, t)网格传奇(“π”“PID”

图中包含一个轴对象。axis对象包含3个line类型的对象。这些对象代表驱动输入,PI, PID。"width=

第一个LineSpecr——”为PI控制器的响应指定一条红色虚线。第二个LineSpecb”为PID控制器的响应指定一条蓝色实线。图例反映了指定的颜色和线条样式。有关更多情节定制选项,请使用lsimplot

在MIMO系统中,在每个时间步t,输入u (t)是一个向量,其长度为输入的数量。使用lsim,你指定u作为一个有维的矩阵Nt——- - - - - -ν,在那里ν系统输入的数量和Nt的长度t.也就是说,的每一列u是将输入信号应用到相应的系统输入上。例如,要模拟一个有四个输入201个时间步长的系统,请提供u作为四列201行的矩阵,其中每一行u(我,:)输入向量的值是Th时间步长;每一列u (:, j)信号是否应用于j输入。

类似地,输出y (t)计算lsim是一个矩阵,其列表示每个系统输出的信号。当你使用lsim为了绘制模拟响应图,lsim为每个输出提供单独的轴,表示每个输出通道对输入的系统响应u (t)应用于所有输入。

考虑带有以下状态空间矩阵的两个输入、三个输出状态空间模型。

A = [-1.5 -0.2 1.0;0.6;1.0 0.6 -1.4];B = [1.5 0.6;-1.8 - 1.0;0 0];C = [0 -0.5 -0.1;0.35 -0.1 -0.15 0.65 0 0.6];D = [0.5 0;0.05 0.75 0 0]; sys = ss(A,B,C,D);

绘制sys到周期为4秒的方波,作用于第一个输入sys每3秒对第二个输入施加一个脉冲。要做到这一点,创建列向量表示方波和脉冲信号使用gensig.然后将这些列堆叠成一个输入矩阵。为了保证两个信号具有相同的采样数,请指定相同的结束时间和采样时间。

Tf = 10;Ts = 0.1;[uSq,t] = gensig(“广场”4 Tf Ts);[uP,~] = gensig(“脉搏”3 Tf Ts);u = [uSq uP];lsim (sys, u, t)

图中包含3个轴对象。带有ylabel To: Out(1)的坐标轴对象1包含3个类型为line的对象。这些对象表示驱动输入,sys。带有ylabel To: Out(2)的Axes对象2包含3个类型为line的对象。这些对象表示驱动输入,sys。轴对象3与ylabel To: Out(3)包含3个类型为line的对象。这些对象表示驱动输入,sys。"width=

每个轴显示三个系统输出中的一个对信号的响应u应用于所有输入。每个图还以灰色显示所有输入信号。

默认情况下,lsim模拟模型,假设在模拟开始时所有状态都为零。在模拟状态空间模型的响应时,使用optionalx0输入参数指定非零初始状态值。考虑下面的双状态SISO状态空间模型。

A = [-1.5 -3;3 1];B = [1.3;0);C = [1.15 2.3];D = 0;sys = ss(A,B,C,D);

假设你想让系统从一个已知的初始状态集进化,在2秒内没有输入,然后应用一个单位阶跃变化。指定向量x0初始状态值,并创建输入向量。

X0 = [-0.2 0.3];T = 0:05:8;U = 0(长度(t),1);U (t>=2) = 1;lsim (sys, u, t, x0)网格

图中包含一个轴对象。axis对象包含2个line类型的对象。这些对象表示驱动输入,sys。"width=

图的前半部分显示了系统从初始状态值的自由演化(-0.2 - 0.3).在T = 2输入有一个阶跃变化,该图显示了从当时的状态值开始的系统对这个新信号的响应。

当你使用lsim使用输出参数,它以数组形式返回模拟的响应数据。对于SISO系统,响应数据以相同长度的列向量返回t.例如,提取SISO系统对方波的响应。创建方波使用gensig

Sys = tf([2 5 1],[1 2 3]);[u,t] = gensig(“广场”、4、10、0.05);[y,t] = lsim(sys,u,t);大小(y)
ans =1×2201年1

向量y包含每个时间步骤的模拟响应t.(lsim返回时间向量t为了方便。)

对于MIMO系统,响应数据以维数组的形式返回N——- - - - - -纽约——- - - - - -ν,在那里纽约而且ν是动态系统的输出和输入的数量。例如,考虑下面的状态空间模型,它表示具有两个输入和三个输出的三状态系统。

A = [-1.5 -0.2 1.0;0.6;1.0 0.6 -1.4];B = [1.5 0.6;-1.8 - 1.0;0 0];C = [0 -0.1 -0.2;0.7 -0.2 -0.3 -0.65 0 -0.6];D = [0.1 0;0.1 1.5 0 0]; sys = ss(A,B,C,D);

提取三个输出通道对施加在两个输入端的方波的响应。

uM = [u u];[y,t] = lsim(sys,uM,t);大小(y)
ans =1×2201年3

y (:, j)列向量是否包含点的响应j方波的输出作用于两个输入。也就是说,y(我,:)是一个矢量的三个值,输出的值是多少时间步长。

因为sys是一个状态空间模型,可以提取响应输入信号的状态值的时间演化。

[y,t,x] = lsim(sys,uM,t);大小(x)
ans =1×2201年3

每行x包含状态值(x1, x2, x3)在相应的时间内t.换句话说,x(我,:)状态向量在时间步长。画出状态值。

情节(t, x)

图中包含一个轴对象。axis对象包含3个line类型的对象。"width=

多个系统对相同输入的响应图示例展示了如何在单个轴上绘制多个独立系统的响应图。当你有多个动态系统排列在一个模型数组中,lsim同时画出他们所有的反应。

创建一个模型数组。对于这个例子,使用具有不同固有频率的二阶传递函数的一维数组。首先,为模型数组预分配内存。下面的命令创建一个1 × 5的零增益SISO传递函数行。前两个维度表示模型输出和输入。剩下的维度是数组维度。(有关模型数组和如何创建它们的更多信息,请参见模型阵列.)

Sys = tf(0 (1,1,1,5));

填充数组。

W0 = 1.5:1:5.5;%固有频率Zeta = 0.5;%阻尼常数i = 1:长度(w0)系统(:,:,1,我)=特遣部队(w0 (i) ^ 2,[1 2 *ζ* w0 (i) w0 (i) ^ 2]);结束

绘制阵列中所有模型对方波输入的响应。

[u,t] = gensig(“广场”、5、15);lsim (sys, u, t)

图中包含一个轴对象。axis对象包含6个line类型的对象。这些对象表示驱动输入,sys。"width=

lsim对数组中所有条目的响应使用相同的行样式。项之间的区分方法之一是使用SamplingGrid属性将数组中的每个项与相应的项关联w0价值。

sys。SamplingGrid = struct(“频率”, w0);

现在,当您在MATLAB图形窗口中绘制响应时,您可以单击一条跟踪来查看它对应的频率值。

负荷估计数据估计模型。

负载(fullfile (matlabroot“工具箱”“识别”“iddemos”“数据”“dcmotordata”));Z = iddata(y,u,0.1,“名字”直流电机的);

z是一个iddata对象,该对象存储采样时间为0.1秒的一输入二输出估计数据。

使用估计数据估计一个阶4的状态空间模型z

[sys,x0] = n4sid(z,4);

sys估计的模型和x0是估计的初始状态。

模拟sys使用与用于估计的输入数据相同的输入数据以及估计命令返回的初始状态。

[y,t,x] = lsim(sys,z.InputData,[],x0);

在这里,y是系统响应,t时间向量用于模拟,和x是状态轨迹。

比较模拟响应y对于测量的响应z.OutputData对于两个输出。

次要情节(211),情节(t, z.OutputData (: 1),“k”、t、y (: 1),“r”)传说(“测量”“模拟”) subplot(212), plot(t,z.OutputData(:,2),“k”、t、y (:, 2),“r”)传说(“测量”“模拟”

图中包含2个轴对象。坐标轴对象1包含2个line类型的对象。这些对象代表测量的、模拟的。坐标轴对象2包含2个line类型的对象。这些对象代表测量的、模拟的。"width=

对于这个例子,fcnMaglev.m定义磁悬浮系统的矩阵和偏移量。磁悬浮通过线圈电流在球上产生磁力来控制悬浮球的高度。这个例子模拟了开环中的模型。

创建一个LPV模型。

lpvSys = lpvss(“h”@fcnMaglev)
具有1输出、1输入、2状态和1参数的连续时间状态空间LPV模型。模型属性

您可以使用点表示法设置其他属性。

lpvSys。StateName = {“h”“hdot”};lpvSys。InputName =“当前”;lpvSys。InputName =“高度”

模拟该模型对任意正弦输入电流的响应。

H0 = 1;[~,~,~,~,~,~,x0,u0,~] = fcnMaglev([],h0);T = 0:1e-2:1;U = u0*(1+0.1*sin(10*t));y = lsim(lpvSys,u,t,x0,@(t,x,u) x(1));
**iter = 20,残差:3.32e-01 **iter = 7,残差:4.33e-10

画出反应。

情节(t, y, t, u /情况)传说(“高度”“当前”

当电流第一次增加时,球被磁铁吸引(h减少)。随后的电流减少并不足以使它恢复。

h= 0是这个模型的奇点,即球碰到磁铁。LPV模型在这一点上不再有效。

采样时间的选择会极大地影响模拟结果。为了说明原因,考虑下面的二阶模型。

年代 y 年代 年代 ω 2 年代 2 + 2 年代 + ω 2 ω 62.83

用0.1 s的采样时间模拟该模型对周期为1 s的方波的响应。

W2 = 62.83^2;Sys = tf(w2,[1 2 w2]);Tau = 1;Tf = 5;Ts = 0.1;[u,t] = gensig(“广场”τ,Tf, Ts);lsim (sys, u, t)

lsim警告信息:输入信号采样不足。"height=

lsim使用指定的输入信号模拟模型,但会发出输入信号采样不足的警告。lsim建议每个输入周期至少生成64个样本的采样时间u.要了解为什么这个建议很重要,请进行模拟sys再次使用小于建议最大值的采样时间。

图Ts2 = 0.01;[u2,t2] = gensig(“广场”τ,Tf, Ts2);lsim (sys, u2, t2)

这种响应表现出强烈的振荡行为,隐藏在欠采样版本中。

输入参数

全部折叠

动态系统,指定为SISO或MIMO动态系统模型或动态系统模型数组。可以模拟响应的动态系统包括:

  • 连续时间或离散时间数值LTI模型,例如特遣部队zpk,或党卫军模型。

  • 广义的或不确定的LTI模型,如一族号航空母舰模型。(使用不确定模型需要鲁棒控制工具箱™软件。)

    • 对于可调控制设计块,该函数在绘制和返回响应数据时对模型的当前值进行评估。

    • 对于不确定的控制设计块,该函数绘制模型的标称值和随机样本。当使用输出参数时,该函数仅为标称模型返回响应数据。

  • 稀疏状态空间模型,如桅杆而且mechss模型。

  • 确定的LTI模型,例如idtf中的难点,或idproc模型。对于已识别的模型,还可以使用sim卡(系统识别工具箱)命令,它可以计算模拟响应和状态轨迹的标准偏差。sim卡还可以模拟具有非零初始条件的所有类型模型,并可以模拟非线性识别模型。(使用识别的模型需要系统识别工具箱™软件。)

  • 线性时变(ltvss)和线性参数变化(lpvss)模型。

lsim不支持频率响应数据模型,如的朋友genfrd,或idfrd模型。

如果sys是一个模型数组,函数将数组中所有模型的响应绘制在同一轴上。看到模型阵列中系统的响应

用于模拟的输入信号,为单输入系统指定为矢量,为多输入系统指定为数组。

  • 对于单输入系统,u向量的长度和t

  • 对于多输入系统,u是一个数组,其行数与时间样本数相同(长度(t))和有输入的列数sys.换句话说,就是每一行u(我,:)的输入处应用的值sys在时间t(我).每一列u (:, j)信号是否应用于j的Th输入sys

计算响应的时间样本,指定为形式的向量T0: dT: Tf.的lsim命令解释t作为有单位指定的TimeUnit模型属性sys

对连续时间sys,lsim命令使用时间步长dT使模型离散化。如果dT相对于系统动力学(欠采样)太大,lsim发出建议加快采样时间的警告。有关采样时间对模拟的影响的进一步讨论,请参见采样时间对模拟的影响

对于离散时间sys,时间步长dT必须等于采样时间的sys.或者,你可以省略t或者设置为[].这样的话,lsimt到一个相同长度的向量u它从0开始,时间步长等于sys。Ts

用于模拟状态空间模型的初始状态值,指定为中每个状态都有一个条目的向量sys.如果省略此参数,则lsim将所有状态设置为0T = 0

LPV模型的参数轨迹,指定为矩阵或函数句柄。

  • 对于外生或显式轨迹,请指定p作为一个有维的矩阵N——- - - - - -Np,在那里N是多少次采样和Np是参数的个数。

    因此,行向量p(我,:)控件上的参数值时间步长。

  • 对于内生或隐式轨迹,请指定p作为窗体的函数句柄pFtxu在连续时间下pFkxu在离散时间中,参数是时间的函数t或者时间样本k,国家x,和输入u

    当您希望模拟准lpv模型时,此选项非常有用。

连续时间模型抽样的离散化方法,指定为下列之一。

  • “zoh”-零订单货仓

  • “呸”-一级货舱

sys是一个连续时间模型,lsim通过使用等于时间步长的采样时间离散模型来计算时间响应dT = t(2)-t(1)t.如果没有指定离散化方法,则lsim根据信号的平滑度自动选择方法u.有关这两种离散化方法的更多信息,请参见连续-离散转换方法

线条样式、标记和颜色,指定为一个、两个或三个字符的字符串或向量。字符可以以任何顺序出现。您不需要指定所有三个特征(线条样式、标记和颜色)。例如,如果省略了线条样式并指定了标记,那么绘图将只显示标记而不显示线条。有关配置此参数的详细信息,请参见LineSpec的输入参数。情节函数。

例子:“r——”指定一个红色虚线

例子:‘* b”指定蓝色星号标记

例子:“y”指定黄线

输出参数

全部折叠

模拟响应数据,作为数组返回。

  • 对于单输入系统,y列向量的长度和t

  • 对于多输出系统,y是一个数组,其行数与时间样本数相同(长度(t))和输出的列数sys.因此,j的第Th列y,或y (:, j)的响应jTh输出到u应用于所有输入。

用于模拟的时间向量,作为列向量返回。当你指定一个输入时间向量时t形式的0: dT: Tf,然后tOut = t.如果t几乎是等分的,lsim调整模拟的采样次数,并返回结果吹捧.对于离散时间sys,你可以省略t或者设置为[].这样的话,lsimt到一个相同长度的向量u它从0开始,时间步长等于sys。Ts,返回结果吹捧

状态轨迹,作为数组返回。当sys是一个状态空间模型,x包含了状态的演化sys响应输入。x一个数组的行数和时间样本的行数一样多吗(长度(t))有多少列就有多少列sys

参数轨迹,作为数组返回。当sys是线性参数变化(lpvss)模型,撅嘴包含了参数的演化sys撅嘴一个数组的行数和时间样本的行数一样多吗(长度(t))有多少列就有多少列sys

提示

  • 当您需要额外的情节定制选项时,请使用lsimplot代替。

算法

对于离散时间传递函数,

年代 y 年代 z 1 一个 0 + 一个 1 z 1 + ... + 一个 n z n 1 + b 1 z 1 + ... + b n z n

lsim根据与此传递函数相关的递归过滤输入:

y k 一个 0 u k + ... + 一个 n u k n b 1 y k 1 ... b n k n

对于离散时间zpk模型,lsim通过一系列一阶或二阶部分对输入进行过滤。这种方法避免了分子和分母多项式的形成,这可能导致高阶模型的数值不稳定。

对于离散时间状态空间模型,lsim传播离散时间状态空间方程,

x n + 1 一个 x n + B u n y n C x n + D u n

对于连续时间系统,lsim首先离散系统使用汇集,然后传播得到的离散时间状态空间方程。类另有指定,否则方法输入参数,lsim输入信号平滑时采用一阶保持器离散化方法,输入信号不连续时采用零阶保持器离散化方法,如脉冲或方波。离散化的采样时间就是间隔dT在你提供样品的时间之间t

版本历史

R2006a之前介绍

Baidu
map