Engee 文档
Notebook

动力系统的线性化

在本演示中,我们将从动态模型的输入输出中识别出一个 LTI 系统(线性和静态)。这样,我们就可以对模型的选定部分进行线性化,然后将其作为常规线性静态系统处理。

模型描述

我们的线性化对象是一个由两个 RC 滤波器组成的模型,周期为 0.01 秒的矩形脉冲将通过这两个滤波器。

image.png

每个滤波器由一个 10 欧姆的电阻和一个 1e-04 F 的电容器组成。输入信号u 来自块Pulse Generator ,输出信号y 是用电压表Voltage Sensor 测量的该级最后一个电容器两端的电压。

In [ ]:
Pkg.add(["ControlSystemIdentification", "ControlSystems"])
In [ ]:
gr()
modelName = "rc_circuit"
if !(modelName in [m.name for m in engee.get_all_models()]) engee.load( "$(@__DIR__)/$(modelName).engee"); end;
data = engee.run( modelName )
Out[0]:
SimulationResult(
    "u" => WorkspaceArray("rc_circuit/u"),
    "y" => WorkspaceArray("rc_circuit/y")
)

如果我们将uy 这两个变量绘制成图,就可以估算出滤波器链对输入信号的改变程度。我们将尝试使用线性模型来近似这种行为。

In [ ]:
t,u,y = collect(data["u"]).time, collect(data["u"]).value, collect(data["y"]).value
plot( t, [u y], label=["u" "y"] )
Out[0]:

可以预计,非周期性链路可能不足以准确近似系统的行为。

线性化过程

我们将使用ControlSystemIdentification 库中的函数subspaceid 进行线性化处理:

In [ ]:
using ControlSystems, ControlSystemIdentification

默认情况下,subspaceid 会以如下形式返回系统的状态空间:

$$\begin{aligned} x^+ &= Ax + Bu + Ke\\ y &= Cx + Du + e \end{aligned}$$

软件包中还有十多个用于系统线性化的函数,但如果系统是以开环形式定义的,建议首先使用这个函数。对于闭环系统,我们建议使用newpem

In [ ]:
# Получим частоту дискретизации системы из вектора времени
Ts = t[2] - t[1]

# Проведем линеаризацию системы
sys = subspaceid( iddata( y, u, Ts ));

通过阶跃响应图,我们可以评估线性化的质量(我们特意将脉冲发生器的振幅设置为 1,否则有必要对其进行归一化处理)。

In [ ]:
plot( t, y, label="Исходный сигнал" )
plot!( step( sys, 0.03 ), label="Реакция системы на ступеньку" )
Out[0]:

可以看出,对单步的响应非常准确地重复了模拟结果--原始系统对矩形脉冲的响应。如果需要,我们可以通过第二个参数subspaceid 来限制线性系统的度数,从而得到一个更简单、精度更低的近似值。

研究系统的稳定性

当然,观测到的系统是稳定的。但如果是更复杂的系统,我们可以在分析了响应、AFC 或霍德图之后再做出这样的判断。

我们可以用一个简短的函数来绘制一个系统的线性振幅-相位-频率响应的简单曲线图:

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

但下面的代码可以让您对图形显示的性质有更多的控制:

In [ ]:
mag, phase, w = bode( sys )

plot( [w./(2pi)],
      [20*log10.( mag[:]) phase[:]], xscale=:log10, xticks=exp10.(1:8),
      linecolor=[1 2], layout=(2,1))
vline!( [1/(2Ts)  1/(2Ts)] )
plot!( title=["ЛАФЧХ системы" ""], xlabel=["" "Частота (Гц)"] )
plot!( ylabel=["Амплитуда (дБ)" "Фаза (град)"], leg=:false )
Out[0]:

红色垂直线标记的频率等于采样频率的一半。相位图仅限于 360 度,但超过 360 度时,LAFCC 值会急剧下降。

结论

通过这种线性化方法,您可以从各种动力系统或简单的表格数据中建立 LTI 模型。简化后的动力系统可以放在一个块Transfer Function 中,并用作快速计算的替代模型,例如,可以对动力系统的稳定性进行第一近似研究。