主要内容

指定延时时间

这个例子展示了控制系统工具箱™如何让您表示、操作和分析具有有限延迟的任何LTI模型。延迟可以在系统输入或输出,特定I/O对之间,或模型内部(例如,在反馈循环内部)。

LTI模型中的时间延迟

传递函数(TF)、零极增益(ZPK)和频响数据(FRD)对象为建模延迟提供了三个属性:

  • InputDelay,用于指定输入端的延迟

  • OutputDelay,用于指定输出的延迟时间

  • IODelay,为每个I/O对指定独立的传输延迟。

状态空间(SS)对象还有三个与延迟相关的属性:

  • InputDelay,用于指定输入端的延迟

  • OutputDelay,用于指定输出的延迟时间

  • InternalDelay,在组合模型或关闭反馈循环时跟踪延迟。

跟踪内部延迟的能力使得状态空间表示法最适合建模和分析控制系统中的延迟效应。本教程演示如何构造和操作具有延迟的系统。有关如何分析延迟效果的详细信息,请参见时滞控制系统分析

一阶加死时间模型

一阶加死时间模型常用于过程控制应用。其中一个例子是:

$$P(s) = {5e ^{-3.4 s} \ / s+1} $$

要指定此传递函数,请使用

Num = 5;Den = [1 1];P = tf(num,den,“InputDelay”, 3.4)
P = 5 exp(-3.4*s) * ----- s + 1连续时间传递函数。

果然,阶跃响应P是无延迟响应的移位版本:

P0 = tf(num,den);步骤(P0,“b”、磷、“r”

如果流程模型有多个输出,例如:

左$ $ P (s) = \[\矩阵{{5 e ^ {-3.4} \ / s + 1} \ cr {2 e ^ {-2.7} \ / s + 3}} \正确),$ $

你可以使用OutputDelay属性为每个输出通道指定不同的延迟:

Num = {5;2};Den = {[1 1];3 [1]};P = tf(num,den,“OutputDelay”, (3.4;2.7])
P =从输入到输出…5 1: exp(-3.4*s) * ----- s + 1 -2 2: exp(-2.7*s) * ----- s + 3连续时间传输功能。

接下来考虑一个多输入、多输出模型,例如:

左$ $ P (s) = \[\矩阵{{5 e ^ {-3.4} \ / s + 1} & # 38;1 \cr {-2 e^{-2.7 s} \over s+3} &{e^{-0.7 s} \ / s}}\right]。$ $

这里每个I/O对的延迟是不同的,所以你必须使用IODelay属性:

Num = {5,1;2 1};Den = {[1 1], 1;[1 3], [1 0]};P = tf(num,den,“IODelay”,[3.4 0;2.7 0.7]);

更直接和文字的方式来指定这个模型是引入拉普拉斯变量“s”,并使用传递函数算术:

S = tf(“年代”);P = [5*exp(-3.4*s)/(s+1), 1;-2*exp(-2.7*s)/(s+3), exp(-0.7*s)/s]
P =从输入1到输出…5 1: exp (-3.4 * ) * ----- s + 1 2 2: exp (-2.7 * ) * ----- 从输入2输出s + 3…1: 1 1 2: exp(-0.7*s) * - s连续时间传递函数。

注意,在这种情况下,MATLAB®自动决定如何在InputDelay、OutputDelay和IODelay属性之间分配延迟。

P.InputDelay P.OutputDelay P.IODelay
Ans = 00 Ans = 0 0.7000 Ans = 3.4000 0 2.0000

这个函数totaldelay将输入、输出和I/O延迟值相加,以返回我们输入的值:

totaldelay (P)
Ans = 3.4000 0 2.7000 0.7000

具有输入和输出延迟的状态空间模型

考虑状态空间模型:

$$ {dx \ / dt} = - x(t) + u(t-2.5), \;\;Y (t) = 12 x(t)$ $

注意输入信号u(t)被延迟了2.5秒。要指定此模型,输入:

Sys = ss(-1,1,12,0,“InputDelay”, 2.5)
sys = A = x1 x1 -1 B = u1 x1 1 C = x1 y1 12 D = u1 y1 0输入延时(秒):2.5连续时间状态空间模型。

一个相关的模型是

$$ {dx_1 \ / dt} = - x_1(t) + u(t), \;\;Y (t) = 12 * _1(t-2.5)$ $

这里2.5秒的延迟是在输出端,通过重写这些状态方程可以看到:

$$ {dx_1 \ / dt} = - x_1(t) + u(t), \;\;y_1 (t) = 12 x_1 (t ) , \;\;&# xA; y (t) = y_1 (t - 2.5)。$ $

因此,您可以将此模型指定为:

Sys1 = ss(-1,1,12,0,“OutputDelay”, 2.5);

请注意,这两个模型都具有相同的I/O响应

步骤(sys,“b”sys1,“r——”

但是,它们的状态轨迹是不一样的因为状态x而且x1是由

$$ x(t) = x_1 (t-2.5) $$

结合模型和I/O延迟

到目前为止,我们只考虑了在特定I/O对之间具有传输延迟的LTI模型。虽然这足以对许多过程建模,但这类模型还不足以分析大多数具有延迟的控制系统,包括具有延迟的简单反馈循环。例如,考虑并行连接:

$ $ H (s) = H_1 (s) + H_2 (s) = {1 \ / s + 2} + {5 e ^ {-3.4} \ / s + 1} $ $

得到的传递函数

$ $ H (s) = {s + 1 + (5 s + 10) e ^ {-3.4} \ / (s + 1) (s + 2)} $ $

不能表示为在输入或输出处有延迟的普通传递函数。代表H (s)美元,我们必须切换到状态空间表示,并使用“内部延迟”的概念。状态空间(SS)模型能够跟踪系统连接在一起时的延迟。关于延迟位置及其与剩余动态耦合的结构信息以有效和完全通用的方式进行编码。加上传递函数H_1美元美元而且H_2美元美元的状态空间表示形式H (s)美元

H1 = 1/(s+2);H2 = 5*exp(-3.4*s)/(s+1);H = h1 + h2
H = A = x1 x2 x1 -2 0 x2 0 -1 B = u1 x1 1 x2 2 C = x1 x2 y1 1 2.5 D = u1 y1 0(所有内部延迟设置为零计算的值)内部延迟(秒):3.4连续时间状态空间模型。

请注意,

  • 延迟值3.4被列为“内部”

  • A,B,C,D数据对应于所有延迟设置为零时的动态(零阶Pade近似)

考虑具有内部延迟的模型的传递函数既不可能也不可取。相反,使用时间和频率图来比较和验证模型:

步骤(H1, H2, H)传说(“标题”“氢气”“H”“位置”“西北”)、网格

波德(H1,“b”H-H2,“r——”%验证H-H2 = H1网格

构建具有内部延迟的模型

通常,不能通过指定A、B、C、D数据和一组内部延迟来创建具有内部延迟的状态空间模型。相反,您可以通过串联、并行或反馈连接更简单的LTI模型(一些具有I/O延迟)来构建此类模型。对于涉及多少延迟以及LTI模型如何连接在一起没有限制。

例如,考虑下面所示的控制回路,其中的工厂被建模为一阶加死时间。

图1:有延迟的反馈回路。

使用状态空间表示,您可以派生一个模型T求r到y的闭环响应,用

P = 5*exp(-3.4*s)/(s+1);C = 0.1 * (1 + 1/(5*s));T =反馈(P*C,1);步长(T,100)网格,标题(“闭环阶跃响应”

对于更复杂的互连,您可以命名每个块的输入和输出信号并使用连接自动处理线路。例如,假设您想在图1的控制回路中添加前馈:

图2:前馈与反馈控制。

你可以推导出相应的闭环模型T通过

F = 0.3/(s+4);P.u =“u”;P.y =“y”;C.u =“e”;陈守惠=加州大学的;F.u =“r”;F.y =佛罗里达大学的;Sum1 = sumblk('e = r-y');Sum2 = sumblk('u = uf+uc');Tff = connect(P,C,F,Sum1,Sum2,“r”“y”);

并将其响应与仅反馈设计进行比较:

步骤(T)“b”Tff,“r”传说,100)(“没有前馈”“前馈”)网格,标题(带前馈和不带前馈的闭环阶跃响应

带延迟项的状态空间方程

一类特殊的具有延迟的LTI模型是具有延迟项的状态空间方程。一般形式是

$ $ {dx \ / dt} = x (t) + B u (t) + \ sum_j (A_j x (t - \ tau_j) + B_j u (t - \ tau_j)) $ $

$ $ y (t) = C x (t) + D u (t) + \ sum_j (C_j x (t - \ tau_j) + B_j u (t - \ tau_j)) $ $

这个函数延迟帮助您指定此类模型。例如,考虑

$ $ {dx \ / dt} = - x (t) - x (t - 1.2) + 2 u (t - 0.5) \ \;;Y (t) = x(t-0.5) + ut $$

要创建此模型,请指定Aj, Bj, Cj, Dj对于每次延迟和使用延迟组装模型:

delay (1) = struct(“延迟”, 0.5,“一个”,0,“b”2,“c”, 1' d ', 0);% tau1 = 0.5delay (2) = struct(“延迟”, 1.2,“一个”, 1“b”,0,“c”,0,' d ', 0);% tau2 = 1.2sys = delay (-1,0,0,1, delay)
sys = A = x1 x1 -2 B = u1 x1 2 C = x1 y1 1 D = u1 y1 1(所有内部延迟都设为0时计算的值)内部延迟(秒):0.5 0.5 1.2连续时间状态空间模型。

注意A, B, C, D值为所有延迟设置为零。这些值的响应不需要接近实际响应的延迟:

步骤(sys,“b”pade (sys, 0),“r”

带有延迟的离散时间模型

离散时间延迟以类似的方式处理,但有一些小的区别:

  • 离散时延总是采样周期的整数倍

  • 离散时间延迟相当于z=0处的极点,因此总是有可能将延迟吸收到模型动态中。但是,保持延迟分离对性能更好,特别是对于与采样周期相比具有较长延迟的系统。

指定一阶模型

$$ H(z) = z^{-25} {2 \ / z - 0.95} $$

当采样周期Ts=0.1时,使用

H = tf(2,[1 -0.95],0.1,“inputdelay”, 25)步骤(H)
H = 2 z^(-25) * -------- z - 0.95采样时间:0.1秒离散时间传递函数。

等效的状态空间表示为

H = ss
H = A = x1 x1 0.95 B = u1 x1 2 C = x1 y1 1 D = u1 y1 0输入延迟(采样周期):25采样时间:0.1秒离散时间状态空间模型。

注意,延迟与两极是分开的。接下来,考虑下面的反馈循环,其中g是纯增益。

图3:离散时间反馈回路。

计算的闭环响应g = 0.01、类型

G = .01;T =反馈(g*H,1)步长(T)
T = A = x1 x1 0.93 B = u1 x1 2 C = x1 y1 0.01 D = u1 y1 0(所有内部延迟设置为零计算的值)内部延迟(采样周期):25采样时间:0.1秒离散时间状态空间模型。

请注意,T仍然是一个内部延迟为25个样本的一阶模型。为了进行比较,将所有延迟映射到z=0的极点使用absorbDelay

T1 =吸收延时(T);订单(T1)
Ans = 26

得到的模型有26个状态,因此模拟效率较低。注意的阶跃响应T而且T1与预期完全匹配:

步骤(T)“b”T1,“r——”

一般情况下,建议将延迟分开,除非在分析具有内部延迟的模型的闭环动态时:

rlocus(H)轴([-1 2 -1 1])

具有内部延迟的内部状态空间模型

状态空间对象使用广义状态空间方程来跟踪内部延迟。从概念上讲,这样的模型由两个相互关联的部分组成:

  • 一个普通的状态空间模型H(年代)增加I/O集

  • 一连串的内部延误。

图4:具有内部延迟的状态空间模型的内部表示。

对应的状态空间方程为

$ ${\ \矩阵点{x} (t) = x (t) + B_1 u (t) + B_2 w (t ) \;\;\;\;\绘图xA;y (t) = c₁x (t) + D_ {11} u (t) + D_ {12} w \绘图xA (t);z (t) = c₂x (t) + D_ {21} u (t) + D_ {22} w \绘图xA (t);W_j (t) = z_j(t - \tau_j), \;\;J = 1,…,N } \;\;\;\; \;\;\;\; $$

为了使用这些工具,您不需要为这个内部表示费心。然而,如果出于某种原因你想要提取H或者矩阵A、B1、B2、…,你可以这样做getDelayModel.举个例子

P = 5*exp(-3.4*s)/(s+1);C = 0.1 * (1 + 1/(5*s));T =反馈(P*C,1);[H,tau] = getDelayModel(T,“融通”);大小(H)
具有2个输出、2个输入和2个状态的状态空间模型。

请注意,H双输入双输出模型是什么T是输出。逆运算(组合H而且τ构建T)由setDelayModel