跳转到内容

控制系统/MATLAB

来自维基教科书,开放世界中的开放书籍
此页面假设您事先了解 MATLAB 的基础知识。有关 MATLAB 的更多信息,请参阅 MATLAB 编程.

MATLAB 是一种专门为矩阵操作而设计的编程语言。由于其强大的计算能力,MATLAB 是许多控制工程师设计和模拟控制系统的首选工具。本页将讨论使用 MATLAB 进行控制系统设计和分析。MATLAB 有许多名为“工具箱”的插件模块。下面描述的几乎所有函数都位于 控制系统工具箱 中。如果您的系统安装了控制系统工具箱,您可以在 MATLAB 提示符下键入 help control 以获取有关该工具箱的更多信息。

此外,还有一个名为 Octave 的 MATLAB 开源竞争对手。Octave 与 MATLAB 类似,但也有一些区别。本页将重点介绍 MATLAB,但可以添加另一页来重点介绍 Octave。截至 2006 年 9 月 10 日,下面列出的所有 MATLAB 命令都已在 GNU octave 中实现。

本页将使用 {{MATLAB CMD}} 模板来显示可用于执行不同任务的 MATLAB 函数。

MATLAB 是 The Mathworks 生产的版权产品。有关 MATLAB 和 The Mathworks 的更多信息,请参阅 控制系统/资源.

输入-输出隔离

[编辑 | 编辑源代码]

在 MIMO 系统中,通常隔离单个输入-输出对以进行分析非常重要。每个输入对应于 B 矩阵中的一行,每个输出对应于 C 矩阵中的一列。例如,要隔离第二个输入和第三个输出,我们可以创建一个系统

sys = ss(A, B(:,2), C(3,:), D);

本页将把这种技术称为“输入-输出隔离”。

阶跃响应

[编辑 | 编辑源代码]
此操作可以使用此 MATLAB 命令执行
step

首先,让我们看一下经典方法,使用以下系统

此系统实际上可以建模为两个系数向量 NUM 和 DEN

NUM = [5, 10]
DEN = [1, 4, 5]

现在,我们可以使用 MATLAB step 命令来生成此系统的阶跃响应

step(NUM, DEN, t);

其中 t 是一个时间向量。如果您没有在左侧提供结果,阶跃函数将自动生成阶跃响应的图形图。但是,如果您使用以下格式

[y, x, t] = step(NUM, DEN, t);

那么 MATLAB 不会自动生成图,您将不得不自己生成一个。

这是一个示例屏幕截图

现在,让我们看一下现代状态空间方法。如果我们有矩阵 A、B、C 和 D,我们可以将它们代入阶跃函数,如下所示

step(A, B, C, D);

或者,我们可以选择包括时间向量 t

step(A, B, C, D, t);

同样,如果我们在等式的左侧提供结果,MATLAB 不会自动为我们生成图。

此操作可以使用此 MATLAB 命令执行
plot

如果我们没有得到自动生成的图,并且我们想要生成自己的图,我们键入

[y, x, t] = step(NUM, DEN, t);

然后我们可以使用 plot 命令创建图形

plot(t, y);

y 是阶跃响应的输出幅值,而 x 是来自状态空间方程的系统的内部状态

经典 ↔ 现代

[编辑 | 编辑源代码]
此操作可以使用此 MATLAB 命令执行
tf2ss

MATLAB 包含可用于从拉普拉斯表示自动转换为状态空间表示的功能。此函数 tf2ss 的使用方法如下

[A, B, C, D] = tf2ss(NUM, DEN);

其中 NUM 和 DEN 分别是传递函数的分子和分母的系数向量。

此操作可以使用此 MATLAB 命令执行
ss2tf

类似地,我们可以使用 ss2tf 函数从拉普拉斯域转换回状态空间表示,如下所示

[NUM, DEN] = ss2tf(A, B, C, D);

或者,如果我们有多个输入在一个向量 u 中,我们可以将其写成如下

[NUM, DEN] = ss2tf(A, B, C, D, u);

当我们的系统有多个输入时,必须提供 u 参数,但如果我们只有一个输入,则不需要提供 u 参数。这种形式的等式为每个单独的输入生成一个传递函数。NUM 和 DEN 成为二维矩阵,每行都是每个不同输入的系数。

z 域数字滤波器

[编辑 | 编辑源代码]
此操作可以使用此 MATLAB 命令执行
filter

现在让我们考虑一个具有以下在 Z 域中的一般传递函数的数字系统

其中 n(z) 和 d(z) 分别是传递函数的分子和分母多项式。filter 命令可用于将输入向量 x 应用于滤波器。输出 y 可以从以下代码获得

y = filter(n, d, x);

在这个例子中,单词“filter”可能有点用词不当,但事实仍然是,这是将输入应用于数字系统的​​方法。获得输出幅值向量后,我们可以使用 plot 命令绘制它

plot(y);
此操作可以使用此 MATLAB 命令执行
ones

要获得数字系统的阶跃响应,我们必须首先使用 ones 命令创建一个阶跃函数

u = ones(1, N);

其中 N 是我们想要在数字系统中采样的样本数量(不要与“n”混淆,我们的分子系数)。生成单位阶跃函数后,我们可以将此函数通过数字滤波器传递,如下所示

y = filter(n, d, u);

我们可以绘制 y

plot(y);

状态空间数字滤波器

[编辑 | 编辑源代码]

同样,我们也可以分析状态空间表示中的数字系统。如果我们有以下数字状态关系

我们可以使用上面用过的 ss2tf 函数自动转换为脉冲响应。

[NUM, DEN] = ss2tf(A, B, C, D);

然后,我们可以使用准备好的单位阶跃序列向量 u 对其进行滤波。

y = filter(num, den, u)

这将给出我们状态空间表示的数字系统的阶跃响应。

根轨迹图

[edit | edit source]
此操作可以使用此 MATLAB 命令执行
rlocus

MATLAB 提供了一个实用的自动工具,用于根据传递函数生成根轨迹图:rlocus 命令。在传递函数域或状态空间域中,我们有以下函数的使用方法。

rlocus(num, den);

rlocus(A, B, C, D);

这些函数将自动生成系统的根轨迹图。但是,如果我们提供左边的参数

[r, K] = rlocus(num, den);

或者

[r, K] = rlocus(A, B, C, D);

该函数不会自动生成图形,您需要自己生成图形。还可以提供一个可选的增益 K 参数。

rlocus(num, den, K);

或者

rlocus(A, B, C, D, K);

如果未提供 K,MATLAB 将为您提供自动增益值。

获得 [r, K] 值后,可以绘制根轨迹。

plot(r);

rlocus 命令不能用于 MIMO 系统,因此如果您的系统是 MIMO 系统,则必须将系数矩阵分开以隔离每个单独的输入输出对,并分别绘制每个对。

这是一个示例屏幕截图

数字根轨迹

[edit | edit source]

为数字系统创建根轨迹图与为连续系统创建根轨迹图完全相同。唯一的区别是结果的解释,因为数字系统的稳定区域与连续系统的稳定区域不同。可以使用相同的 rlocus 函数,使用方法与上面相同。

伯德图

[edit | edit source]
此操作可以使用此 MATLAB 命令执行
bode

MATLAB 还提供了一些工具来检查系统的频率响应特性,既可以使用伯德图,也可以使用奈奎斯特图。要根据传递函数构建伯德图,请使用以下命令

[mag, phase, omega] = bode(NUM, DEN, omega);

或者

[mag, phase, omega] = bode(A, B, C, D, u, omega);

其中“omega”是分析幅度和相位响应点的频率向量。如果要将幅度数据转换为分贝,可以使用以下转换

magdb = 20 * log10(mag);

现在应该足够了解这种转换,无需解释。

此操作可以使用此 MATLAB 命令执行
logspace

当讨论以分贝为单位的伯德图时,使用对数频率尺度是最有意义的(也是最常见的)。要创建 omega 中的对数序列,请使用 logspace 命令,如下所示

omega = logspace(a, b, n);

此命令生成 n 个点,从 对数间隔。

如果在没有左手参数的情况下使用 bode 命令,MATLAB 将自动生成伯德相位和幅度图的图形。

bode 命令如果与 MIMO 系统一起使用,将使用子图在单个绘图窗口中生成所有输入输出关系图。对于具有多个输入和多个输出的系统,这可能难以看清。在这种情况下,通常最好将系数矩阵分开以隔离每个单独的输入输出对。

这是一个示例屏幕截图

奈奎斯特图

[edit | edit source]
此操作可以使用此 MATLAB 命令执行
nyquist

除了伯德图外,我们还可以使用 nyquist 命令创建奈奎斯特图。nyquist 命令的操作方式类似于 bode 命令(以及我们迄今为止使用过的其他命令)

[real, imag, omega] = nyquist(NUM, DEN, omega);

或者

[real, imag, omega] = nyquist(A, B, C, D, u, omega);

这里,“real”和“imag”是包含奈奎斯特图每个点的实部和虚部的向量。如果我们不提供右手参数,nyquist 命令会自动为我们生成奈奎斯特图。

bode 命令一样,nyquist 命令将使用子图在一个绘图窗口中显示 MIMO 系统的输入输出关系。如果有多个输入输出对,可能难以看到各个图形。

这是一个示例屏幕截图

李雅普诺夫方程

[edit | edit source]

可控性

[edit | edit source]

可以使用 ctrb 命令构造可控性矩阵。可以使用 gram 命令构造可控性格拉姆矩阵。

可观测性

[edit | edit source]

可以使用 obsv 命令构造可观测性矩阵。

经验格拉姆矩阵

[edit | edit source]

可以为线性控制系统和非线性控制系统计算经验格拉姆矩阵。经验格拉姆矩阵框架 emgr 允许计算可控性、可观测性和交叉格拉姆矩阵;它与 MATLABOCTAVE 兼容,并且不需要控制系统工具箱

进一步阅读

[edit | edit source]
华夏公益教科书