Engee 文档
Notebook

系统识别的工作流程

识别是根据实验数据构建动态对象数学模型的过程。

In [ ]:
Pkg.add(["DataFrames", "CSV", "ControlSystemIdentification"])
using DataFrames, CSV, ControlSystemIdentification;

一个近似的识别工作流程看起来像这样:![图像。png](附件:图片。png)

首先,您需要进行实验以收集系统数据。 然后我们选择模型的结构,我们希望适合这些数据和识别算法。 接下来,将获得的数据"调整"到所选择的结构。 将根据验证数据集检查识别结果。 如果识别结果不能令人满意,则需要返回并更改模型的结构或识别算法。

收集实验数据

首先,必须获得实验数据以进行鉴定。 在本例中,实验数据从CSV文件上传到Engee。 我们将实验数据分为两部分:第一部分用于鉴定,第二部分用于验证。

In [ ]:
Import_data = "data.csv" 
table = CSV.read(Import_data, DataFrame);
inputdata = Float64.(table[:, 2]); 
outputdata = Float64.(table[:, 3]);

识别数据:

In [ ]:
Ts = 0.1;
identdata  = iddata(outputdata[1:Int32(end/2)], inputdata[1:Int32(end/2)], Ts);   
plot(identdata)     
Out[0]:

验证数据:

In [ ]:
valdata  = iddata(outputdata[Int32(end/2):end], inputdata[Int32(end/2):end], Ts);   
plot(valdata)   
Out[0]:

模型结构选择与识别

我们将在状态空间中识别线性静止系统。 首先,让我们选择系统等于1的顺序。

In [ ]:
nx = 1; # порядок системы
res = subspaceid(identdata, nx; verbose=true)
Out[0]:
N4SIDStateSpace{ControlSystemsBase.StateSpace{ControlSystemsBase.Discrete{Float64}, Float64}, LinearAlgebra.Hermitian{Float64, Matrix{Float64}}, LinearAlgebra.Hermitian{Float64, Matrix{Float64}}, Matrix{Float64}, Matrix{Float64}, Matrix{Float64}, Vector{Float64}, LinearAlgebra.SVD{Float64, Float64, Matrix{Float64}, Vector{Float64}}, Float64}
A = 
 0.8129112616785744
B = 
 -0.38362425489543245
C = 
 -4.560011287091462
D = 
 0.02359847501341137

Sample Time: 0.1 (seconds)
Discrete-time state-space model

模型的验证

In [ ]:
simplot(valdata, res) 
Out[0]:

正如我们所看到的,所识别的模型不能充分再现真实系统的动态。

模型结构修改与识别

让我们退后一步,改变模型的结构。 这次设系统的顺序为2。

In [ ]:
nx = 2; # порядок системы
res = subspaceid(identdata, nx; verbose=true)
Out[0]:
N4SIDStateSpace{ControlSystemsBase.StateSpace{ControlSystemsBase.Discrete{Float64}, Float64}, LinearAlgebra.Hermitian{Float64, Matrix{Float64}}, LinearAlgebra.Hermitian{Float64, Matrix{Float64}}, Matrix{Float64}, Matrix{Float64}, Matrix{Float64}, Vector{Float64}, LinearAlgebra.SVD{Float64, Float64, Matrix{Float64}, Vector{Float64}}, Float64}
A = 
  0.8165117145544952  0.3939768143396654
 -0.3883413482702869  0.6670669737460359
B = 
 -0.45785009806936194
 -0.31617858798326837
C = 
 -4.42362835383083  3.228268638993534
D = 
 0.03893922777217982

Sample Time: 0.1 (seconds)
Discrete-time state-space model

模型的验证

In [ ]:
simplot(valdata, res) 
Out[0]:

这一次,我们对识别的准确性感到满意。

结论

在这个例子中,我们熟悉了基于从CSV表中获得的实验数据的系统识别工作流程。