主要内容

使用系统识别工具箱建立和估计过程模型

此示例展示如何使用System Identification Toolbox™构建简单的流程模型。描述了使用实验数据创建这些模型和估计其参数的技术。本例需要Simulink®。金宝app

简介

这个例子说明了如何构建流程工业中常用的简单流程模型。简单的低阶连续时间传递函数通常被用来描述过程行为。这些模型由IDPROC对象描述,IDPROC对象以极点零增益形式表示传递函数。

过程模型的基本类型是“静态增益+时间常数+时间延迟”。它们可以表示为:

$$P(s) = K.e^{-T_d*s}。\frac{1 + T_z*s}{(1 + T_{p1}*s)(1 + T_{p2}*s)} $$

或作为一个综合的过程:

$$P(s) = K.e^{-T_d*s}。\压裂{1 + T_z * s}{年代(1 + T_ {p1} * s识别)(1 + T_ {p2} * s)识别}$ $

其中用户可以确定实极的数量(0,1,2或3),以及分子中是否存在零,积分项(1 / s)和存在时间延迟(道明).此外,一个欠阻尼(复杂)极点对可以取代实极点。

使用IDPROC对象表示流程模型

IDPROC对象使用字母定义流程模型P(流程模型),D(对于时间延迟),Z(对于零)和(集成商)。一个整数将表示极点的数量。模型是通过调用生成的idproc用这些字母创建一个字符向量。

例如:

idproc (“P1”只有一个极点的%传递函数(无零或延迟)idproc (“P2DIZ”%模型与2极,延迟积分器和延迟idproc (“P0ID”%模型,没有极点,但积分器和延迟
ans =带传递函数的过程模型:Kp G(s) = ---------- 1+Tp1*s Kp = NaN Tp1 = NaN参数化:{'P1'}自由系数数:2使用"getpvec", "getcov"表示参数及其不确定性。现状:由直接构建或改造而产生。不估计。ans =带传递函数的过程模型:1+Tz*s G(s) = Kp * ------------------- * exp(-Td*s) s(1+Tp1*s)(1+Tp2*s) Kp = NaN Tp1 = NaN Tp2 = NaN Td = NaN Tz = NaN参数化:{'P2DIZ'}自由系数数:5参数及其不确定性用"getpvec"、"getcov"表示。现状:由直接构建或改造而产生。不估计。ans =带传递函数的过程模型:Kp G(s) =——* exp(-Td*s) s Kp = NaN Td = NaN参数化:{'P0DI'}自由系数数:2参数及其不确定性用"getpvec"、"getcov"表示。现状:由直接构建或改造而产生。不估计。

创建IDPROC对象(以Simulink模型为例)金宝app

考虑由以下Simulink模型描述的系统:金宝app

open_system (“iddempr1”) set_param (“iddempr1 /随机数”“种子”' 0 '

红色部分是系统,蓝色部分是控制器,参考信号是扫描正弦信号(啁啾信号)。数据采样时间设置为0.5秒。正如所观察到的,系统是一个连续时间传递函数,因此可以使用系统识别工具箱中的模型对象进行描述,例如中的难点idpolyidproc

让我们描述使用的系统idpoly而且idproc对象。使用idpoly对象时,系统可以描述为:

M0 = idpoly(1,0.1,1,1,[1 0.5],“t”0,“InputDelay”, 1.57,“NoiseVariance”, 0.01);

上面使用的IDPOLY形式对于描述任意阶的传递函数是有用的。由于我们在这里考虑的系统非常简单(一个极点,没有零),并且是连续时间的,我们可以使用更简单的IDPROC对象来捕获它的动态:

M0p = idproc(“p1d”“金伯利进程”, 0.2,“Tp1”2,“Td”, 1.57)%一极+延时,带初始值%为增益,极点和延迟指定。
m0p =带传递函数的过程模型:Kp G(s) = ---------- * exp(-Td*s) 1+Tp1*s Kp = 0.2 Tp1 = 2 Td = 1.57参数化:{'P1D'}自由系数数:3参数及其不确定性用"getpvec"、"getcov"表示。现状:由直接构建或改造而产生。不估计。

IDPROC模型参数估计

一旦系统被模型对象(如IDPROC)描述,就可以使用测量数据对其参数进行估计。作为一个例子,我们考虑了利用仿真数据估计Simulink模型系统(红色部分)参数的问题。金宝app我们首先获取用于估计的数据:

sim卡(“iddempr1”) dat1e = iddata(y,u,0.5);用于存储测量数据的IDDATA对象

让我们看看数据:

情节(dat1e)

我们可以使用过程命令,通过提供用于创建IDPROC模型的相同结构信息。例如,1极+延迟模型可以通过调用来估计过程如下:

M1 =进程(dat1e,“p1d”);% idproc模型使用数据“dat1e”的估计。检查估计结果:m1
m1 =带传递函数的过程模型:Kp G(s) = ---------- * exp(-Td*s) 1+Tp1*s Kp = 0.20045 Tp1 = 2.0431 Td = 1.499参数化:{'P1D'}自由系数数:3使用"getpvec", "getcov"表示参数及其不确定性。状态:在时域数据“dat1e”上使用PROCEST进行估计。拟合估计数据:87.34% FPE: 0.01069, MSE: 0.01062
要获得关于不确定性的信息,请使用
礼物(m1)
m1 =带传递函数的过程模型:Kp G(s) = ---------- * exp(-Td*s) 1+Tp1*s Kp = 0.20045 +/- 0.00077275 Tp1 = 2.0431 +/- 0.061216 Td = 1.499 +/- 0.040854参数化:{'P1D'}自由系数数:3使用"getpvec", "getcov"表示参数及其不确定性。状态:终止条件:接近(局部)最小值,(范数(g) < tol)..迭代次数:4,函数求值次数:9使用PROCEST对时域数据“dat1e”进行估计。拟合估计数据:87.34% FPE: 0.01069, MSE: 0.01062更多信息在模型的“报告”属性。

模型参数,KTp1而且道明现在显示的是一个标准偏差不确定范围。

IDPROC模型的时间响应和频率响应计算

该模型m1上面估计的是一个IDPROC模型对象,所有工具箱的模型命令都可以应用到它:

步骤(m1, m0)模型m1(估计)和m0(实际)的阶跃响应%传奇('m1(估计参数)''m0(已知参数)'“位置”“西北”

可通过如下方式计算置信区域为3个标准差的波德响应:

H = bodeploy (m1,m0);showConfidence (h, 3)

同样,测量数据可以与模型输出进行比较比较如下:

比较(dat1e、m0、m1)

其他操作,例如sim卡冲动汇集也是可用的,就像对其他模型对象一样。

bdclose (“iddempr1”

在估计中容纳样本间行为的影响

考虑输入数据的样本间行为可能很重要(至少对于慢采样而言)。为了说明这一点,让我们研究与以前相同的系统,但没有采样和保持电路:

open_system (“iddempr5”

用相同的采样时间对该系统进行模拟:

sim卡(“iddempr5”) dat1f = iddata(y,u,0.5);模拟数据的IDDATA对象

我们估计了一个IDPROC模型data1f同时还对允许的延迟值施加了上界。我们将使用'lm'作为搜索方法,也选择查看估计进度。

M2_init = idproc(“P1D”);m2_init.Structure.Td。最大值= 2;opt = procestOptions(“SearchMethod”“lm”“显示”“上”);M2 = procest(dat1f,m2_init,opt);平方米
m2 =带传递函数的过程模型:Kp G(s) = ---------- * exp(-Td*s) 1+Tp1*s Kp = 0.20038 Tp1 = 2.01 Td = 1.31参数化:{'P1D'}自由系数数:3参数及其不确定性用"getpvec"、"getcov"表示。状态:在时域数据“dat1f”上使用PROCEST进行估计。拟合估计数据:87.26% FPE: 0.01067, MSE: 0.01061

这个模型对延迟的估计比之前的m1稍微差一些:

[m0p。道明,m1.Td, m2。道明] step(m0,m1,m2) legend(“m0(实际)”'m1(用ZOH估计)''m2(不含ZOH的估算)'“位置”“东南”
Ans = 1.5700 1.4990 1.3100

然而,通过告诉估计过程样本间行为是一阶保持(对真正连续的近似)输入,我们做得更好:

dat1f。我nterSample =“呸”;M3 = procest(dat1f,m2_init,opt);

比较四个模型m0(正确)m1(从zoh输入获得)m2(连续输入获得,zoh假设)和m3(从相同输入获得,但采用foh假设)

[m0p。道明,m1.Td, m2。Td, m3。道明] compare(dat1e,m0,m1,m2,m3)
Ans = 1.5700 1.4990 1.3100 1.5570

步骤(m0、m1、m2、m3)传说(“m0”“m1”“平方米”“m3”) bdclose (“iddempr5”

闭环系统建模

现在让我们考虑一个更复杂的过程,有集成,在闭环中运行:

open_system (“iddempr2”

真实的系统可以表示为:

M0 = idproc(“P2ZDI”“金伯利进程”, 1“Tp1”, 1“Tp2”5,' Tz '3,“Td”, 2.2);

该过程由一个具有有限输入幅度的PD调节器和一个零级保持装置控制。采样时间为1秒。

set_param (“iddempr2 /随机数”“种子”' 0 ') sim卡(“iddempr2”) dat2 = iddata(y,u,1);用于估计的% IDDATA对象

进行了两个不同的模拟,第一个用于估计,第二个用于验证。

set_param (“iddempr2 /随机数”“种子”“13”) sim卡(“iddempr2”) dat2v = iddata(y,u,1);用于验证目的的IDDATA对象

让我们看看数据(估计和验证)。

情节(dat2 dat2v)传说(“dat2(估算)“dat2v(验证)”

现在让我们执行评估使用dat2

警告=警告(“关闭”鉴别:估计:underdampedIDPROC);M2_init = idproc(“P2ZDI”);m2_init.Structure.Td。最大值= 5;m2_init.Structure.Tp1。最大值= 2;opt = procestOptions(“SearchMethod”“lsqnonlin”“显示”“上”);opt.SearchOptions.MaxIterations = 100;M2 = procest(dat2, m2_init, opt)
m2 =带传递函数的过程模型:1+Tz*s G(s) = Kp * ------------------- * exp(-Td*s) s(1+Tp1*s)(1+Tp2*s) Kp = 0.98412 Tp1 = 2 Tp2 = 1.4838 Td = 1.713 Tz = 0.027244参数化:{'P2DIZ'}自由系数数:5参数及其不确定性用"getpvec"、"getcov"表示。状态:在时域数据“dat2”上使用PROCEST进行估计。拟合估计数据:91.51% FPE: 0.1128, MSE: 0.1092
比较(dat2v, m2, m0)%与数据有很好的一致性

波德(m2, m0)传说({“m2(美国东部时间)”“m0(实际)”},“位置”“西方”

冲动(m2, m0)传说({“m2(美国东部时间)”“m0(实际)”})

并与真实系统的参数进行比较:

Present (m2) [getpvec(m0), getpvec(m2)]
m2 =带传递函数的过程模型:1+Tz*s G(s) = Kp * ------------------- * exp(-Td*s) s(1+Tp1*s)(1+Tp2*s) Kp = 0.98412 +/- 0.013672 Tp1 = 2 +/- 8.2231 Tp2 = 1.4838 +/- 10.193 Td = 1.713 +/- 63.703 Tz = 0.027244 +/- 65.516参数化:{'P2DIZ'}自由系数数:5参数及其不确定性使用"getpvec"、"getcov"。状态:终止条件:成本变化小于规定的公差。迭代次数:3,函数求值次数:4在时域数据“dat2”上使用PROCEST估计。拟合估计数据:91.51% FPE: 0.1128, MSE: 0.1092更多信息在模型的“报告”属性。Ans = 1.0000 0.9841 1.0000 2.0000 5.0000 1.4838 2.2000 1.7130 3.0000 0.0272

提醒一句。多个实时常数的识别有时可能是一个病态问题,特别是当数据是在闭环中收集时。

为了说明这一点,让我们根据验证数据估计一个模型:

M2v = procest(dat2v, m2_init, opt) [getpvec(m0), getpvec(m2), getpvec(M2v)]
m2v =带传递函数的过程模型:1+Tz*s G(s) = Kp * ------------------- * exp(-Td*s) s(1+Tp1*s)(1+Tp2*s) Kp = 0.95747 Tp1 = 1.999 Tp2 = 0.60819 Td = 2.314 Tz = 0.0010561参数化:{'P2DIZ'}自由系数数:5参数及其不确定性用"getpvec"、"getcov"表示。状态:使用PROCEST对时域数据“dat2v”进行估计。拟合估计数据:90.65% FPE: 0.1397, MSE: 0.1353 ans = 1.0000 0.9841 0.9575 1.0000 2.0000 1.9990 5.0000 1.4838 0.6082 2.2000 1.7130 2.3140 3.0000 0.0272 0.0011

这个模型的参数值更差。另一方面,当在另一个数据集dat2上测试时,它的执行几乎与真实系统m0相同:

比较(dat2 m0, m2, m2v)

在估计过程中固定已知参数

假设我们从其他来源知道一个时间常数是1:

m2v.Structure.Tp1。Value = 1;m2v.Structure.Tp1。Free = false;

我们可以固定这个值,同时估计其他参数:

M2v = procest(dat2v, M2v)
m2v =带传递函数的过程模型:1+Tz*s G(s) = Kp * ------------------- * exp(-Td*s) s(1+Tp1*s)(1+Tp2*s) Kp = 1.0111 Tp1 = 1 Tp2 = 5.3014 Td = 2.195 Tz = 3.231参数化:{'P2DIZ'}自由系数数:4参数及其不确定性用"getpvec"、"getcov"表示。状态:使用PROCEST对时域数据“dat2v”进行估计。拟合估计数据:92.05% FPE: 0.09952, MSE: 0.09794

如前所述,固定Tp1对其已知值的估计极大地提高了模型中其余参数的估计m2v

这也表明,简单的近似应该在数据上表现良好:

M1x_init = idproc(“P2D”);%结构更简单(无零,无积分器)m1x_init.Structure.Td。最大值= 2;M1x = procest(dat2v, m1x_init) compare(dat2,m0,m2,m2v, M1x)
m1x =带传递函数的过程模型:Kp G(s) = ----------------- * exp(-Td*s) (1+Tp1*s)(1+Tp2*s) Kp = -1.2554 Tp1 = 1.0249e-06 Tp2 = 0.077945 Td = 1.958参数化:{'P2D'}自由系数数:4参数及其不确定性使用"getpvec", "getcov"。状态:使用PROCEST对时域数据“dat2v”进行估计。拟合估计数据:-23.87% FPE: 24.15, MSE: 23.77

因此,更简单的模型能够很好地估计系统输出。然而,m1x不包含任何积分,所以开环长时间范围内的行为会有很大的不同:

步骤(m0, m2, m2v m1x)传说(“m0”“平方米”“m2v”“m1x”) bdclose (“iddempr2”警告(警告)