Engee 文档
Notebook

绘制系统反应图

本例演示如何绘制 SISO 和 MIMO 线性系统的时间和频率响应图。

绘制时间特性图

让我们创建三阶传递函数。

In [ ]:
Pkg.add(["RobustAndOptimalControl", "ControlSystems"])
In [ ]:
using ControlSystems
sys = tf([8, 18, 32],[1, 6, 14, 24])
Out[0]:
TransferFunction{Continuous, ControlSystemsBase.SisoRational{Int64}}
   8s^2 + 18s + 32
---------------------
s^3 + 6s^2 + 14s + 24

Continuous-time transfer function model

您可以使用step()impulse()ControlSystems.jl 绘制系统的瞬态函数和脉冲函数。

In [ ]:
plot(
    plot(step(sys,10),title="Реакция на ступенчатое воздействие"),
    plot(impulse(sys,10),title="Реакция на импульс"),
    layout=(2,1)
)
Out[0]:

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

In [ ]:
t = collect(0:0.001:4);
u = sin.(10*t);

plot(lsim(sys,u',t))
plot!(t,u)
Out[0]:

频率和时间响应命令可用于连续和离散信号或模型。对于状态空间模型,还可以绘制从给定初始状态开始的系统响应。

In [ ]:
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)

t1 = collect(0:0.001:18);
u1 = fill(0,(1, 18001))
x_0 = [-1.0; 0.0; 2.0]  # initial state
plot(lsim(G, u1, t1, x0 = x_0))
Out[0]:

频率响应

频域分析是了解控制系统稳定性和性能特征的关键。Bode 图、Nyquist 图和 Nichols 图是绘制和分析线性系统频率响应的三种标准方法。您可以使用ControlSystemsBase.bodeplotControlSystemsBase.nicholsplotControlSystemsBase.nyquistplot 命令创建这些图。

In [ ]:
bodeplot(sys, label="sys",title="Диаграмма Боде")
Out[0]:
In [ ]:
nyquistplot(
    sys, 
    unit_circle = true,
    Mt_circles = true,
    hz = true,
    label="sys",
    title="Диаграмма Найквиста"
)
Out[0]:
In [ ]:
ws = exp10.(range(-2,stop=2,length=200))
nicholsplot(sys,ws)
Out[0]:

极点和零点图、根节点图

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

respdemo_07.png

给你 $$ G=\frac{-(2s+1)}{s^2+3s+2} $$

极点和零点图可以用来确定闭环系统的稳定性。

In [ ]:
s = tf('s');
G = -(2*s+1)/(s^2+3*s+2);
k = 0.7;
T = feedback(G*k,1);

pzmap(T; hz = true)
Out[0]:

闭环的极点(用十字标记)位于左半平面内,因此在此增益选择下,闭环系统是稳定的。

为了更好地理解闭环增益如何影响稳定性。您可以使用rlocus() 命令绘制极点位置图,即冠状霍多图。

In [ ]:
plot(rlocus(G,3))
Out[0]:

如果将光标移到霍多图与 Oy 轴的交点上,就会看到系统变得不稳定时的系数值。因此,闭环增益必须小于 1.5 才能保持稳定。

系统响应的特点

响应图中可以显示各种特征。让我们以阶跃响应图为例进行说明。

In [ ]:
result = step(T);
plot(result)
Out[0]:

要确定图形的特征,请使用函数stepinfo 。它会返回瞬态的所有特征,如稳态时间、过冲等。这些信息可以写入变量,也可以使用plot 绘制。

In [ ]:
res1 = stepinfo(result)
Out[0]:
StepInfo:
Initial value:     0.000
Final value:      -0.538
Step size:         0.538
Peak:             -0.820
Peak time:         1.533 s
Overshoot:         52.21 %
Undershoot:        -0.00 %
Settling time:     5.986 s
Rise time:         0.438 s
In [ ]:
plot(stepinfo(result))
Out[0]:

分析多输入多输出系统

上述所有命令都完全支持多输入多输出(MIMO)系统。

让我们创建一个有两个输入和两个输出的系统。为此,请连接RobustAndOptimalControl.jl.

In [ ]:
import Pkg
Pkg.add("RobustAndOptimalControl")
   Resolving package versions...
  No Changes to `~/.project/Project.toml`
  No Changes to `~/.project/Manifest.toml`
In [ ]:
using RobustAndOptimalControl

使用ssrand 在状态空间中随机定义系统。使用named_ss 命名系统的输入、输出和状态。

In [ ]:
sys = named_ss(ssrand(2,2,3), x=:x, u=:u, y=:y) 
Out[0]:
NamedStateSpace{Continuous, Float64}
A = 
 -0.6935858467597371  -0.032817470930895265  -0.3016581326344437
  0.5058765400071297  -1.6615260469669768     0.10945949288601392
 -1.247932807541346    0.7137077690752949    -0.5819319866343858
B = 
 -1.237448751523171   -0.3036661565073825
 -1.0848540704260157   1.6705711712602642
  1.2314535524207553   1.373228442496533
C = 
 -0.21514307560050283  1.4187348362176657  0.133664233314064
  0.7819036714282767   1.329056006320937   0.48281519607043166
D = 
 0.39388861160244376  0.003475472871380889
 2.133431314048057    2.2733658279516127

Continuous-time state-space model
With state  names: x1 x2 x3
     input  names: u1 u2
     output names: y1 y2
In [ ]:
sys.A .= [-0.5 -0.3 -0.2 ; 0 -1.3 -1.7; 0.4 1.7 -1.3]
sys
Out[0]:
NamedStateSpace{Continuous, Float64}
A = 
 -0.5  -0.3  -0.2
  0.0  -1.3  -1.7
  0.4   1.7  -1.3
B = 
 -1.237448751523171   -0.3036661565073825
 -1.0848540704260157   1.6705711712602642
  1.2314535524207553   1.373228442496533
C = 
 -0.21514307560050283  1.4187348362176657  0.133664233314064
  0.7819036714282767   1.329056006320937   0.48281519607043166
D = 
 0.39388861160244376  0.003475472871380889
 2.133431314048057    2.2733658279516127

Continuous-time state-space model
With state  names: x1 x2 x3
     input  names: u1 u2
     output names: y1 y2
In [ ]:
plot(step(sys,8))
Out[0]:

用于构建多输入多输出系统的其他有用图表。

  • 奇异值图(sigma)。对于多输入多输出(MIMO)系统,西格玛图显示频率响应矩阵每个奇异值对应的最小图线。
  • 每个输入/输出对的极点/零点显示。

例如,绘制 sys 的峰值增益与频率的函数关系图:

In [ ]:
sigmaplot(sys)
Out[0]:

系统比较

要比较不同系统的性能,可以将它们显示在一张图表上。为每个系统指定特定的颜色、标记或线条样式,便于比较。使用上述反馈示例,用三种不同颜色绘制环路增益 k 的三个值时闭环的阶跃响应:

In [ ]:
k1 = 0.4;
T1 = feedback(G*k1,1);
k2 = 1;
T2 = feedback(G*k2,1);
plot(step([T T1 T2]), line=[:green :red :black])
Out[0]:

输出

在本例中,我们了解了控制系统各种特征的构造。更多控制系统分析功能可参阅 分析