主要内容

本页采用了机器翻译。点击此处可查看最新英文版本。

step

动态系统的阶跃响应

说明

step 计算经过 td 个时间单位后,系统对于输入值从 U 阶跃变化到 U + dU 的阶跃响应。

Step response plot characterized by start time, final time, baseline input, step amplitude, and time delay.

其中,

  • t0 是仿真开始时间。

  • td 是阶跃延迟。

  • U 是基线输入值或偏置。

  • dU 是阶跃振幅。

默认情况下,该函数对 t0 = 0、U = 0、dU = 1 和 td = 0 应用阶跃。但是,您可以使用 RespConfig 配置这些值。您还可以指定初始状态 x(t0)。如果您未指定初始状态,step 会假定系统最初处于静止状态,输入电平为 U

[y,tOut] = step(sys) 计算动态系统 sys 的阶跃响应 ystep 根据系统动态特性自动确定仿真的时间步和持续时间。

[y,tOut] = step(sys,t)t 指定的时间步的响应进行仿真。要定义时间步,您可以:

  • 使用标量值指定最终仿真时间。

  • 使用二元素向量指定初始仿真时间和最终仿真时间。 (自 R2023b 起)

  • 使用向量指定所有时间步。

[y,tOut] = step(sys,t,p) 指定线性参数变化 (LPV) 模型的参数轨迹 p (自 R2023a 起)

sys 是状态空间模型(如 ssidss 模型)时,[y,tOut,x] = step(___) 还返回状态轨迹 x

[y,tOut,x,ysd] = step(___) 返回辨识模型的阶跃响应的标准差。

[y,tOut,x,~,pOut] = step(sys,t,p) 返回 LPV 模型的参数轨迹。 (自 R2023a 起)

[y,tOut] = step(___,config) 指定用于计算阶跃响应的其他选项,例如阶跃振幅或输入偏移量。使用 RespConfig 创建 config

示例

step(___) 使用所有先前输入参量组合的默认绘图选项绘制 sys 的阶跃响应。如需更多绘图自定义选项,请使用 stepplot

  • 要在同一图上绘制多个动态系统的响应,您可以将 sys 指定为以逗号分隔的模型列表。例如,step(sys1,sys2,sys3) 在同一图上绘制三个模型的响应。

  • 要为图中的每个系统分别指定一种颜色、线型和标记,请为每个系统指定 LineSpec 值。例如,step(sys1,LineSpec1,sys2,LineSpec2) 绘制两个模型并指定它们的绘图样式。有关指定 LineSpec 值的详细信息,请参阅 stepplot

示例

全部折叠

绘制由以下传递函数表示的连续时间系统的阶跃响应。

sys(s)=4s2+2s+10.

对于此示例,请创建一个表示传递函数的 tf 模型。同样,您可以绘制其他动态系统模型类型的阶跃响应,例如零极点增益 (zpk) 模型或状态空间 (ss) 模型。

sys = tf(4,[1 2 10]);

绘制阶跃响应。

step(sys)

MATLAB figure

step 图自动包含一条水平点线,指示稳态响应。在 MATLAB® 图窗窗口中,您可以右键点击绘图以查看其他阶跃响应特征,例如峰值响应和稳定时间。有关这些特性的详细信息,请参阅 stepinfo (Control System Toolbox)

绘制一个离散时间系统的阶跃响应。该系统的采样时间为 0.2 秒,由以下状态空间矩阵表示。

A = [1.6 -0.7;
      1  0];
B = [0.5; 0];
C = [0.1 0.1];
D = 0;

创建状态空间模型并绘制其阶跃响应。

sys = ss(A,B,C,D,0.2);
step(sys)

MATLAB figure

阶跃响应反映了模型的离散化,显示每 0.2 秒计算一次的响应。

检查以下传递函数的阶跃响应。

sys = zpk(-1,[-0.2+3j,-0.2-3j],1) * tf([1 1],[1 0.05]) 
sys =
 
            (s+1)^2
  ----------------------------
  (s+0.05) (s^2 + 0.4s + 9.04)
 
Continuous-time zero/pole/gain model.
Model Properties
step(sys)

MATLAB figure

默认情况下,step 会选择一个结束时间,该时间显示响应趋向的稳定状态。然而,该系统具有快速瞬态响应,基于这个时间尺度,该响应被掩盖了。为了更仔细地观察瞬态响应,请将阶跃图限制为 t = 15 秒。

step(sys,15)

MATLAB figure

您也可以指定要检查阶跃响应的确切时间,前提是这些时间之间有恒定的区间。例如,检查从瞬态结束到系统达到稳定状态的响应。

t = 20:0.2:120;
step(sys,t)

MATLAB figure

尽管此图从 t = 20 开始,但 step 始终在 t = 0 处应用阶跃输入。

假设有以下二阶状态空间模型:

[x˙1x˙2]=[-0.5572-0.78140.78140][x1x2]+[1-102][u1u2]y=[1.96916.4493][x1x2]

A = [-0.5572,-0.7814;0.7814,0];
B = [1,-1;0,2];
C = [1.9691,6.4493];
sys = ss(A,B,C,0);

此模型有两个输入和一个输出,因此它有两个通道:从第一个输入到输出的通道,以及从第二个输入到输出的通道。每个通道都有自己的阶跃响应。

当您使用 step 时,它会计算所有通道的响应。

step(sys)

MATLAB figure

左图显示了第一个输入通道的阶跃响应,右图显示了第二个输入通道的阶跃响应。每当您使用 step 绘制 MIMO 模型的响应时,它都会生成一个绘图数组,表示该模型的所有 I/O 通道。例如,创建一个具有五个状态、三个输入和两个输出的随机状态空间模型,并绘制其阶跃响应。

sys = rss(5,2,3);
step(sys)

MATLAB figure

在 MATLAB 图窗窗口中,您可以右键点击绘图并选择 I/O Selector,将绘图限制为通道的子集。

使用 step,您可以在同一轴上绘制多个动态系统的响应。例如,将系统的闭环响应与 PI 控制器和 PID 控制器的闭环响应进行比较。创建系统的传递函数并调节控制器。

H = tf(4,[1 2 10]);
C1 = pidtune(H,'PI');
C2 = pidtune(H,'PID');

形成闭环系统并绘制其阶跃响应。

sys1 = feedback(H*C1,1);
sys2 = feedback(H*C2,1);
step(sys1,sys2)
legend('PI','PID','Location','SouthEast')

MATLAB figure

默认情况下,step 会为您绘制的每个系统选择不同的颜色。您可以使用 LineSpec 输入参量指定颜色和线型。

 step(sys1,'r--',sys2,'b')
 legend('PI','PID','Location','SouthEast')

MATLAB figure

第一个 LineSpec 'r--' 为 PI 控制器的响应指定红色虚线。第二个 LineSpec 'b' 为 PID 控制器的响应指定蓝色实线。图例反映了所指定的颜色和线型。如需更多绘图自定义选项,请使用 stepplot

“比较多个系统的响应”示例说明了如何在一个轴上绘制多个单独系统的响应。当有多个动态系统排列在模型数组中时,step 会同时绘制所有这些系统的响应。

创建模型数组。对于此示例,请使用具有不同固有频率的二阶传递函数的一维数组。首先,为模型数组预分配内存。以下命令会创建一个行向量,其中包含 5 个零增益 SISO 传递函数。前两个维度表示模型输出和输入。其余维度是数组维度。

 sys = tf(zeros(1,1,1,5));

填充该数组。

w0 = 1.5:1:5.5;    % natural frequencies
zeta = 0.5;        % damping constant
for i = 1:length(w0)
   sys(:,:,1,i) = tf(w0(i)^2,[1 2*zeta*w0(i) w0(i)^2]);
end

(有关模型数组以及如何创建模型数组的详细信息,请参阅Model Arrays (Control System Toolbox)。)绘制数组中所有模型的阶跃响应。

step(sys)

MATLAB figure

step 对数组中所有条目的响应使用相同的线型。区分各条目的一种方法是使用动态系统模型的 SamplingGrid 属性将数组中的每个条目与对应的 w0 值相关联。

sys.SamplingGrid = struct('frequency',w0);

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

当您为 step 提供输出参量时,该函数会返回响应数据数组。对于 SISO 系统,响应数据以列向量形式返回,其长度等于对响应进行采样的时间点的数量。您可以提供时间点的向量 t,也可以允许 step 根据系统动态特性为您选择时间点。例如,提取 SISO 系统在 t = 0 和 t = 5 秒之间的 101 个时间点的阶跃响应。

sys = tf(4,[1 2 10]);
t = 0:0.05:5;
y = step(sys,t);
size(y)
ans = 1×2

   101     1

对于 MIMO 系统,响应数据以 N×Ny×Nu 维度的数组形式返回,其中 NyNu 是动态系统的输出数量和输入数量。例如,假设有以下状态空间模型,它表示具有两个输入、一个输出的系统。

A = [-0.5572,-0.7814;0.7814,0];
B = [1,-1;0,2];
C = [1.9691,6.4493];
sys = ss(A,B,C,0);

提取该系统在 t = 0 和 t = 20 秒之间的 200 个时间点的阶跃响应。

t = linspace(0,20,200);
y = step(sys,t);
size(y)
ans = 1×3

   200     1     2

y(:,i,j) 是包含在时间 t 处从第 j 个输入到第 i 个输出的阶跃响应的列向量。例如,提取从第二个输入到输出的阶跃响应。

y12 = y(:,1,2);
plot(t,y12)

Figure contains an axes object. The axes object contains an object of type line.

创建一个具有延迟的反馈环,并绘制其阶跃响应。

s = tf('s');
G = exp(-s) * (0.8*s^2+s+2)/(s^2+s);
sys = feedback(ss(G),1);
step(sys)

MATLAB figure

显示的系统阶跃响应是混沌的。具有内部延迟的系统的阶跃响应可能会表现出异常行为,例如反复跳变。此类行为是系统的一项特征,而不是软件异常。

默认情况下,step 会应用在 t = 0 时从 0 变为 1 的输入信号。要自定义振幅和偏置,请使用 RespConfig。例如,计算 SISO 状态空间模型对从 1 到 –1 再到 t = 0 时的信号的响应。

A = [1.6 -0.7;
      1  0];
B = [0.5; 0];
C = [0.1 0.1];
D = 0;
sys = ss(A,B,C,D,0.2);

opt = RespConfig;
opt.Bias = 1;
opt.Amplitude = -2;

step(sys,opt)

MATLAB figure

要获得对任意输入信号的响应,请使用 lsim (Control System Toolbox)

将参数化辨识模型的阶跃响应与非参数化(经验)模型的阶跃响应进行比较。另请查看它们的 3 σ 置信域。

加载数据。

load iddata1 z1

估计参数化模型。

sys1 = ssest(z1,4);

估计非参数化模型。

sys2 = impulseest(z1);

绘制阶跃响应以进行比较。

t = (0:0.1:10)';
[y1, ~, ~, ysd1] = step(sys1,t);
[y2, ~, ~, ysd2] = step(sys2,t);
plot(t, y1, 'b', t, y1+3*ysd1, 'b:', t, y1-3*ysd1, 'b:')
hold on
plot(t, y2, 'g', t, y2+3*ysd2, 'g:', t, y2-3*ysd2, 'g:')

Figure contains an axes object. The axes object contains 6 objects of type line.

计算辨识时间序列模型的阶跃响应。

时间序列模型,也称为信号模型,是一种没有测量输入信号的模型。这种模型的阶跃图使用其(未经测量的)噪声通道作为应用阶跃信号的输入通道。

加载数据。

load iddata9;

估计时间序列模型。

sys = ar(z9, 4);

sysA y(t) = e(t) 形式的模型,其中 e(t) 表示噪声通道。对于阶跃响应的计算,e(t) 被视为输入通道,并被命名为 e@y1

绘制阶跃响应。

step(sys)

MATLAB figure

通过比较线性模型和非线性模型的小振幅阶跃响应来验证非线性 ARX 模型的线性化。

加载数据。

load iddata2 z2;

估计非线性 ARX 模型。

nlsys = nlarx(z2,[4 3 10],idTreePartition,'custom',...
    {'sin(y1(t-2)*u1(t))+y1(t-2)*u1(t)+u1(t).*u1(t-13)',...
    'y1(t-5)*y1(t-5)*y1(t-1)'},'nlr',[1:5, 7 9]);

确定 nlsys 对应于稳态输入值 1 的均衡工作点。

u0 = 1;
[X,~,r] = findop(nlsys, 'steady', 1);
y0 = r.SignalLevels.Output;

获得 nlsys 在此工作点处的线性逼近。

sys = linearize(nlsys,u0,X);

通过将 sys 的小振幅阶跃响应与 nlsys 的小振幅阶跃响应进行比较来验证其有效性。

非线性系统 nlsys 在由 (u0,y0) 决定的均衡水平下工作。围绕此稳态引入大小为 0.1 的阶跃扰动,并计算对应的响应。

opt = RespConfig;
opt.InputOffset = u0;
opt.Amplitude = 0.1;
t = (0:0.1:10)';
ynl = step(nlsys, t, opt);

线性系统 sys 表示输入中的扰动与输出中的对应扰动之间的关系。它不知道非线性系统的均衡值。

绘制线性系统的阶跃响应。

opt = RespConfig;
opt.Amplitude = 0.1;
yl = step(sys, t, opt);

将稳态偏移量 y0 添加到线性系统的响应中,并绘制响应。

plot(t, ynl, t, yl+y0)
legend('Nonlinear', 'Linear with offset')

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent Nonlinear, Linear with offset.

计算并绘制 LPV (lpvss (Control System Toolbox)) 模型的阶跃响应。此示例对 fcnMaglev.m 中定义的悬浮球模型对扰动 du 的闭环阶跃响应进行仿真。

maglev-feedback.png

创建模型并将其离散化。

hmin = 0.05; 
hmax = 0.25;
h0 = (hmin+hmax)/2;
Ts = 0.01;
Glpv = lpvss("h",@fcnMaglev,0,0,h0);
Glpvd = c2d(Glpv,Ts,"tustin"); 

对 LPV 模型的三个高度值进行采样,并调节 PID 控制器。

hpid = linspace(hmin,hmax,3);
[Ga,Goffset] = sample(Glpvd,[],hpid);
wc = 50;
Ka = pidtune(Ga,"pidf",wc);
Ka.Tf = 0.01;

创建增益调度 PID 控制器。

Ka.SamplingGrid = struct("h",hpid);
Koffset = struct("y",{Goffset.u});
Clpv = ssInterpolant(ss(Ka),Koffset);

创建闭环模型。

CL = feedback(Glpvd*[1,Clpv],1,2,1);
CL.InputName = {'du';'href'};
CL.OutputName = "h";

获取 h = h0 的稳态电流,以计算被控对象输入处的阶跃扰动的适当大小。

[~,~,~,~,~,~,~,u0] = Glpv.DataFunction(0,h0);

计算并绘制对输入扰动和参考阶跃变化的响应。设置基线输入信号 du = 0 和 h = h0 以指定起始稳态条件。

t = 0:Ts:2;
pFcn = @(k,x,u) x(1);
Config = RespConfig( ...
    Bias=[0;h0], ...
    Amplitude=0.2*[u0;h0]*Ts, ...
    Delay=0.5, ...
    InitialParameter=h0);
step(CL,t,pFcn,Config)
title("Current Step Disturbance and Height Step Change")

MATLAB figure

创建一个具有复系数的状态空间模型。

A = [-2-2i -2;1 0];
B = [2;0];
C = [0 0.5+2.5i];
D = 0;
sys = ss(A,B,C,D);

计算系统的阶跃响应。

[y,t] = step(sys);

得到的响应数据包含复数输出值。

y
y = 369×1 complex

   0.0000 + 0.0000i
   0.0018 + 0.0075i
   0.0079 + 0.0286i
   0.0191 + 0.0612i
   0.0360 + 0.1033i
   0.0588 + 0.1531i
   0.0874 + 0.2089i
   0.1215 + 0.2690i
   0.1609 + 0.3320i
   0.2048 + 0.3969i
   0.2528 + 0.4624i
   0.3041 + 0.5279i
   0.3580 + 0.5925i
   0.4138 + 0.6558i
   0.4708 + 0.7173i
      ⋮

输入参数

全部折叠

动态系统,指定为 SISO 或 MIMO 动态系统模型或动态系统模型数组。您可以使用以下类型的动态系统:

  • 连续时间或离散时间数值 LTI 模型,如 tfzpkss 模型。

  • 广义或不确定的 LTI 模型,如 genssuss 模型。(使用不确定模型需要 Robust Control Toolbox™ 软件。)

    • 对于可调控制设计模块,该函数在绘图和返回响应数据时,都会根据其当前值评估模型。

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

  • 稀疏状态空间模型,如 sparssmechss 模型。

  • 辨识的 LTI 模型,如 idtfidssidproc 模型。对于此类模型,该函数还可以绘制置信区间并返回频率响应的标准差。请参阅具有置信域的辨识模型的阶跃响应

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

该函数不支持频率响应数据模型,如 frdgenfrdidfrd 模型。

如果 sys 是模型数组,该函数会在同一坐标区中绘制数组中所有模型的响应。请参阅模型数组中系统的阶跃响应

要计算响应的时间步,指定为以下值之一:

  • 正标量 tFinal - 计算从 t = 0t = tFinal 的响应。

  • 二元素向量 [t0 tFinal] - 计算从 t = t0t = tFinal 的响应。 (自 R2023b 起)

  • 向量 Ti:dt:Tf - 计算 t 中指定的时间点的响应。

    • 对于连续时间系统,dt 是连续系统的离散逼近的采样时间。

    • 对于具有指定采样时间的离散时间系统,dt 必须与 sys 的采样时间属性 Ts 匹配。

    • 对于未指定采样时间 (Ts = -1) 的离散时间系统,dt 必须为 1

  • [] - 根据系统动态特性自动选择时间值。

当您使用 tFinal[t0 tFinal] 指定时间范围时:

  • 对于连续时间系统,该函数根据系统动态特性自动确定时间步的大小和点数。

  • 对于具有指定采样时间的离散时间系统,该函数使用 sys 的采样时间作为步长。

  • 对于未指定采样时间 (Ts = -1) 的离散时间系统,该函数将 tFinal 解释为采样时间为 1 秒时要仿真的采样周期数。

使用 sysTimeUnit 属性中指定的时间单位表示 t

如果您使用 config 指定一个步延迟 td,则该函数会在 t = t0+td 时应用该步。

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

  • 对于外生轨迹或显式轨迹,将 p 指定为维度为 N×Np 的矩阵,其中 N 是时间采样的数量,Np 是参数的数量。

    因此,行向量 p(i,:) 包含第 i 个时间步处的参数值。

  • 对于内生轨迹或隐式轨迹,在连续时间内将 p 指定为 p = F(t,x,u) 形式的函数句柄,在离散时间内将其指定为 p = F(k,x,u) 形式的函数句柄,从而将参数作为时间 t 或时间采样 k、状态 x 和输入 u 的函数提供。

    当您想要对准 LPV 模型进行仿真时,此选项非常有用。有关示例,请参阅 LPV 模型的阶跃响应

应用信号的配置,指定为 RespConfig 对象。默认情况下,step 在时间 t = 0 时应用从 0 到 1 的输入。使用此输入参量可更改阶跃输入的配置。有关示例,请参阅对自定义阶跃输入的响应

对于偏移量为 (x0(t),u0(t)) 的 lpvss (Control System Toolbox)ltvss (Control System Toolbox) 模型,您可以使用 RespConfig 定义相对于 u0(t,p) 的输入,并使用状态 x0(t,p) 初始化仿真。

输出参量

全部折叠

阶跃响应数据,以数组形式返回。

  • 对于 SISO 系统,y 是与 t(如果提供)或 tOut(如果未提供 t)长度相同的列向量。

  • 对于单输入、多输出系统,y 是行数与时间采样数相同、列数与输出数相同的矩阵。因此,y 的第 j 列或 y(:,j) 包含从输入到第 j 个输出的阶跃响应。

  • 对于 MIMO 系统,每个输入通道的阶跃响应沿 y 的第三维度堆叠。因此 y 的维度为 N×Ny×Nu,其中:

    • N 是时间采样的数量。

    • Ny 是系统输出的数量。

    • Nu 是系统输入的数量。

    因此,y(:,i,j) 是包含在 ttOut 中指定的时间处从第 j 个输入到第 i 个输出的阶跃响应的列向量。

  • 对于具有复系数的系统,y 是复数值数组。 (自 R2025a 起)

计算阶跃响应的时间,以向量形式返回。如果您未提供特定的时间向量 tstep 会根据系统动态特性选择此时间向量。时间以 sys 的时间单位表示。

状态轨迹,以数组形式返回。当 sys 是状态空间模型时,x 包含 ttOut 中每次 sys 状态的演化。x 的维度为 N×Nx×Nu,其中:

  • N 是时间采样的数量。

  • Nx 是状态的数量。

  • Nu 是系统输入的数量。

因此,如果在第 k 个输入处注入阶跃,则状态演化由数组 x(:,:,k) 表示。行向量 x(i,:,k) 包含第 i 个时间步处的状态值。

对于具有复系数的系统,x 是复数值数组。 (自 R2025a 起)

辨识模型的阶跃响应的标准差,以与 y 具有相同维度的数组形式返回。如果 sys 不包含参数协方差信息,则 ysd 为空。

参数轨迹,以数组形式返回。当 sys 是线性参数变化模型时,pOut 包含 ttOut 中每次 sys 参数的演化。pOut 的维度为 N×Np×Nu,其中:

  • N 是时间采样的数量。

  • Np 是参数的数量。

  • Nu 是系统输入的数量。

因此,如果在第 k 个输入处注入阶跃,则参数演化由数组 pOut(:,:,k) 表示。行向量 pOut(i,:,k) 包含第 i 个时间步处的参数值。

提示

  • 要对任意输入信号的系统响应进行仿真,请使用 lsim

  • 当您需要额外的绘图自定义选项时,请改用 stepplot

  • 使用 step 创建的绘图不支持以字符串数组或字符向量元胞数组形式指定的多行标题或标签。要指定多行标题和标签,请使用包含 newline 字符的单个字符串。

    step(sys,u,t)
    title("first line" + newline + "second line");

算法

为了获得没有内部延迟的连续时间模型的样本,step 将此类模型转换为状态空间模型,并通过对输入使用零阶保持使这些模型离散化。step 根据系统动态特性自动选择此离散化的采样时间,除非您以 t = T0:dt:Tf 形式提供输入时间向量 t。在这种情况下,step 使用 dt 作为采样时间。生成的仿真时间步 tOut 是以间隔 dt 等间隔采样的。

对于具有内部延迟的系统,Control System Toolbox™ 软件使用变步长求解器。因此,时间步 tOut 不是等间隔采样的。

参考

[1] L.F. Shampine and P. Gahinet, "Delay-differential-algebraic equations in control theory," Applied Numerical Mathematics, Vol. 56, Issues 3–4, pp. 574–588.

版本历史记录

在 R2006a 之前推出

全部展开

另请参阅

函数

App