绘制系统响应

本示例展示如何绘制单输入单输出(SISO)和多输入多输出(MIMO)线性系统的时间响应和频率响应。

时间响应

创建一个线性系统。在本示例中,创建一个三阶传递函数。

sys = tf([8 18 32],[1 6 14 24])

sys =

 8 s^2 + 18 s + 32

s^3 + 6 s^2 + 14 s + 24

连续时间传递函数。

您可以使用 stepimpulse 命令绘制该系统的阶跃响应和脉冲响应。

subplot(2,1,1)
step(sys)
subplot(2,1,2)
impulse(sys)

Figure contains 2 axes objects. Axes object 1 contains an object of type line. This object represents sys. Axes object 2 contains an object of type line. This object represents sys.

您也可以使用 lsim 命令模拟系统对任意信号(例如正弦波)的响应。输入信号显示为灰色,系统响应显示为蓝色。

clf
t = 0:0.01:4;
u = sin(10*t);
lsim(sys,u,t) % u,t 定义输入信号

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent Driving inputs, sys.

您可以将这些绘图命令用于连续或离散的 tfsszpk 模型。对于状态空间模型,您还可以绘制系统从某个给定初始状态开始的零输入响应。例如:

A = [-0.8 3.6 -2.1;-3 -1.2 4.8;3 -4.3 -1.1];
B = [0; -1.1; -0.2];
C = [1.2 0 0.6];
D = -0.6;
G = ss(A,B,C,D);
x0 = [-1;0;2]; % 初始状态
initial(G,x0)
grid

Figure contains an axes object. The axes object contains an object of type line. These objects represent Driving inputs, G.

频率响应

频域分析是理解控制系统稳定性和性能属性的关键。伯德图、奈奎斯特图和尼科尔斯图是绘制和分析线性系统频率响应的三种标准方法。您可以使用 bodenicholsnyquist 命令创建这些图。

创建一个线性系统。

sys = tf([8 18 32],[1 6 14 24])

sys =

 8 s^2 + 18 s + 32

s^3 + 6 s^2 + 14 s + 24

连续时间传递函数。

为此系统创建伯德图。

bode(sys)
grid

Figure contains 2 axes objects. Axes object 1 with ylabel Magnitude (dB) contains an object of type line. This object represents sys. Axes object 2 with ylabel Phase (deg) contains an object of type line. This object represents sys.

为此系统创建奈奎斯特图。

nyquist(sys)
grid

Figure contains an axes object. The axes object contains an object of type line. This object represents sys.

为此系统创建尼科尔斯图。

nichols(sys)
grid

Figure contains an axes object. The axes object contains an object of type line. This object represents sys.

零极点图与根轨迹

系统的极点和零点包含了关于其动态特性、稳定性和性能极限的宝贵信息。例如,考虑以下 SISO 控制回路中的反馈环路。

反馈环路图

其中:

G=−(2s+1)s2+3s+2G = \frac{-(2s+1)}{s^2+3s+2}G=s2+3s+2(2s+1)

对于增益值 k = 0.7,您可以使用 pzmap 绘制闭环极点和零点。

s = tf(‘s’);
G = -(2s+1)/(s^2+3s+2);
k = 0.7;
T = feedback(G*k,1);
pzmap(T)
grid, axis([-2 0 -1 1])

Figure contains an axes object. The axes object contains 2 objects of type line. One or more of the lines displays its values using only markers This object represents T.

闭环极点(由蓝色 x 标记)位于左半平面,因此对于此增益 k 的选择,反馈环路是稳定的。您可以从该图中读取闭环极点的阻尼比(参见径向线上的标签)。此处阻尼比约为 0.7,表明闭环响应具有良好的阻尼,这由以下命令确认:

clf
step(T)

Figure contains an axes object. The axes object contains an object of type line. This object represents T.

为了进一步理解环路增益 k 如何影响闭环稳定性,您可以绘制闭环极点随 k 变化的轨迹。

rlocus(G)
grid

Figure contains an axes object. The axes object contains 4 objects of type line. One or more of the lines displays its values using only markers This object represents G.

点击轨迹与 y 轴相交处显示,当 k = 1.51 时,闭环极点变得不稳定。因此,为了保持闭环稳定性,环路增益应小于 1.5。

根轨迹图,光标显示稳定边界处的增益

响应特性

在响应图上右键单击可访问各种选项和标注。特别是,特性菜单允许您显示标准指标,例如阶跃响应的上升时间和稳定时间,或频率响应图的峰值增益和稳定裕度。

使用上一节中的示例,绘制闭环阶跃响应:

step(T)

Figure contains an axes object. The axes object contains an object of type line. This object represents T.

现在,右键单击绘图以显示峰值响应和稳定时间特性,然后单击蓝色圆点以读取相应的超调量和稳定时间值:

带有特性标注的阶跃响应图

分析 MIMO 系统

到目前为止提到的所有命令都完全支持多输入多输出(MIMO)系统。在 MIMO 情况下,这些命令会生成绘图数组。例如,考虑以下双输入双输出系统。

sys = rss(3,2,2);
sys.A = [-0.5 -0.3 -0.2 ; 0 -1.3 -1.7; 0.4 1.7 -1.3];

阶跃响应是一个 2×2 的绘图数组,其中每列显示特定输入通道的阶跃响应。

step(sys)

Figure contains 4 axes objects. Axes object 1 with title From: In(1), ylabel To: Out(1) contains an object of type line. This object represents sys. Axes object 2 with ylabel To: Out(2) contains an object of type line. This object represents sys. Axes object 3 with title From: In(2) contains an object of type line. This object represents sys. Axes object 4 contains an object of type line. This object represents sys.

您可以通过右键单击绘图并选择 I/O 分组 -> 全部 子菜单,将所有四个响应分组到单个图上。

带有分组菜单的 MIMO 阶跃响应图

以下附加图对于分析 MIMO 系统很有用:

  • 奇异值图 (sigma),显示频率响应的主增益
  • 每个 I/O 对的零极点图 (iopzplot)

例如,绘制 sys 的峰值增益随频率变化的曲线:

sigma(sys)
grid

Figure contains an axes object. The axes object contains 2 objects of type line. This object represents sys.

比较系统

您可以使用任何响应绘图命令同时绘制多个系统。您可以为每个系统分配特定的颜色、标记或线型以便于比较。使用上面的反馈示例,以三种不同颜色绘制环路增益 k 取三个不同值时的闭环阶跃响应:

k1 = 0.4;
T1 = feedback(Gk1,1);
k2 = 1;
T2 = feedback(G
k2,1);
step(T,‘b’,T1,‘r’,T2,‘g’)
legend(‘k = 0.7’,‘k = 0.4’,‘k = 1’)

Figure contains an axes object. The axes object contains 3 objects of type line. These objects represent k = 0.7, k = 0.4, k = 1.

修改时间或频率轴值

您可以修改现有线性分析图的时间向量和频率向量。

对于阶跃和脉冲图,您可以通过右键单击绘图区域并选择 指定时间 来指定时间向量。

指定时间对话框

在“指定时间”对话框中,您可以使用以下方法之一定义时间值和单位。

  • 自动生成 — 根据系统动态特性自动生成时间向量。此选项不支持稀疏系统。
  • 定义停止时间 — 指定停止时间,这将创建一个从时间 0 开始的时间向量。时间向量的步长根据系统动态特性确定。
  • 定义向量 — 将要绘制的时间指定为单调递增、均匀间隔的时间值向量。

对于伯德图、奈奎斯特图、尼科尔斯图和奇异值图,您可以通过右键单击绘图区域并选择 指定频率 来指定频率向量。

指定频率对话框

在“指定频率”对话框中,您可以使用以下方法之一定义频率值和单位。

  • 自动生成 — 根据系统动态特性自动生成频率向量。此方法不支持稀疏系统。
  • 定义范围 — 指定频率范围。此方法不支持稀疏系统。
  • 定义向量 — 将要绘制的频率指定为向量。

如果您的系统是 frd 对象,则绘图会在频率值之间对响应进行插值。

更改时间和频率单位会指定输入的单位,但不会更改绘图中的单位。

另请参阅

bode | step

相关主题

  • 时域响应
  • 频域响应

版权标注与来源说明

本文译文对应的原文内容,均来源于 MathWorks 官方网站(https://www.mathworks.com/)及官方帮助中心,原文版权均独家归属MathWorks 公司所有。

译文系基于原文进行的非官方翻译,仅为方便个人学习、理解MathWorks相关产品(含MATLAB等)的功能、操作及技术细节而制作,不代表MathWorks公司官方立场,也不构成官方翻译版本。

建议使用者优先查阅官方原文。

Logo

小龙虾开发者社区是 CSDN 旗下专注 OpenClaw 生态的官方阵地,聚焦技能开发、插件实践与部署教程,为开发者提供可直接落地的方案、工具与交流平台,助力高效构建与落地 AI 应用

更多推荐