主要内容

构建和评估过程模型使用系统辨识工具箱™

这个例子展示了如何使用系统辨识工具箱™构建简单的流程模型。技术来创建这些模型和估计其参数使用实验数据。这个例子需要仿真软件®。金宝app

介绍

这个例子演示了如何构建简单的流程模型常用于工业过程。简单,低阶连续时间转移函数通常用来描述过程的行为。这样的模型被IDPROC对象代表pole-zero-gain形式的传递函数。

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

$ $ P (s) = K.e ^ {-T_d * s}。\压裂{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 =南Tp1 =南参数化:{“P1”}很多免费的系数:2使用“getpvec”、“getcov”参数及其不确定性。状态:由直接建设或转换。不估计。ans =流程模型传递函数:1 + Tz * s G (s) = Kp * - - - - - - - - - - - - - - - - - - - * exp (Td *)年代(1 + Tp1 * s) (1 + Tp2 * s) Kp =南Tp1 Td =南Tz = =南Tp2 =南南参数化:{“P2DIZ”}很多免费的系数:5使用“getpvec”、“getcov”参数及其不确定性。状态:由直接建设或转换。不估计。ans =流程模型传递函数:Kp G (s) = - - - - - - * exp (Td *)年代Kp Td = =南南参数化:{“P0DI”}很多免费的系数:2使用“getpvec”、“getcov”参数及其不确定性。状态:由直接建设或转换。不估计。

使用仿真软件创建一个IDPROC对象(®模型为例)金宝app

考虑下面的模型描述的系统模型:金宝app

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

红色部分是系统,蓝色部分是控制器和参考信号是正弦信号(线性调频信号)。数据采样时间设置为0.5秒。观察,系统是一个连续时间的传递函数,并能因此被描述在系统辨识工具箱使用模型对象,如中的难点,idpolyidproc

让我们描述系统使用idpolyidproc对象。使用idpoly对象,系统可能被描述为:

m0 = idpoly (1、0.1、1、1、0.5 [1],“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,它可以用于估计参数使用测量数据。作为一个例子,我们考虑的问题仿真软件模型的参数估计的系统使用模拟数据(红色部分)。金宝app我们开始通过收购数据估算:

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

让我们看一下数据:

情节(dat1e)

我们可以确定一个流程模型使用过程指定命令,通过提供相同的结构信息来创建IDPROC模型。例如,1-pole +延迟模型可以估计通过调用过程如下:

m1 = proc (dat1e,“p1d”);%使用数据的dat1e idproc估计模型。%检查评估的结果:m1
m1 =流程模型传递函数:Kp G (s) = - - - - - - - - - - - * exp (Td * s) 1 + Tp1 * s Kp Td = 1.499 = 0.20045 Tp1 = 2.0431参数化:{“P1D”}很多免费的系数:3使用“getpvec”、“getcov”参数及其不确定性。状态:估计使用proc时域数据“dat1e”。适合估算数据:87.34%消防工程: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估计使用proc时域数据“dat1e”。适合估算数据:87.34%消防工程:0.01069,MSE: 0.01062在模型的“报告”属性的更多信息。

模型参数,K,Tp1道明现在有一个标准差范围的不确定性。

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

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

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

预示反应与信心地区对应3个标准差可能通过计算:

h = bodeplot (m1, m0);showConfidence (h, 3)

同样,测量数据可能与模型输出使用比较如下:

比较(dat1e、m0、m1)

其他操作如sim卡,冲动,汇集也可以,就像他们对其他模型对象。

bdclose (“iddempr1”)

适应Intersample行为估计的影响

它可能是重要的(至少在慢速采样)考虑intersample输入数据的行为。为了说明这一点,让我们研究相同的系统,但没有取样保持的电路:

open_system (“iddempr5”)

模拟该系统使用相同的样品时间:

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

我们估计一个IDPROC模型使用data1f同时对允许值延迟上界。我们将使用“lm”也搜索方法和选择查看评估进展。

m2_init = idproc (“P1D”);m2_init.Structure.Td。最大= 2;选择= procestOptions (“SearchMethod”,“lm”,“显示”,“上”);m2 = proc (dat1f m2_init,选择);平方米
m2 =流程模型传递函数:Kp G (s) = - - - - - - - - - - - * exp (Td * s) 1 + Tp1 * s Kp Td = 1.31 = 0.20038 Tp1 = 2.01参数化:{“P1D”}很多免费的系数:3使用“getpvec”、“getcov”参数及其不确定性。状态:估计使用proc时域数据“dat1f”。适合估算数据:87.26%消防工程: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

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

dat1f。我nterSample =“呸”;m3 = proc (dat1f m2_init,选择);

比较四种模式m0(真正的)m1(从zoh获得输入)m2 (zoh假设连续输入,获得)和m3(获得相同的输入,但呸的假设)

[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;选择= procestOptions (“SearchMethod”,“lsqnonlin”,“显示”,“上”);opt.SearchOptions。MaxIterations = 100;m2 = proc (dat2 m2_init选择)
m2 =流程模型传递函数:1 + Tz * s G (s) = Kp * - - - - - - - - - - - - - - - - - - - * exp (Td *)年代(1 + Tp1 * s) (1 + Tp2 * s) Kp = 0.98412 Tp1 = 2 Td = 1.713 Tz Tp2 = 1.4838 = 0.027244参数化:{“P2DIZ”}很多免费的系数:5使用“getpvec”、“getcov”参数及其不确定性。状态:估计使用proc时域数据“dat2”。适合估算数据:91.51%消防工程:0.1128,MSE: 0.1092
比较(dat2v, m2, m0)%与数据给了很好的协议

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

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

比较也与真实系统的参数:

礼物(m2) [getpvec (m0) getpvec (m2)]
m2 =流程模型传递函数:1 + Tz * s G (s) = Kp * - - - - - - - - - - - - - - - - - - - * exp (Td *)年代(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估计使用proc时域数据“dat2”。适合估算数据:91.51%消防工程: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 = proc (dat2v m2_init选择)(getpvec (m0) getpvec (m2), getpvec (m2v)]
m2v =流程模型传递函数:1 + Tz * s G (s) = Kp * - - - - - - - - - - - - - - - - - - - * exp (Td *)年代(1 + Tp1 * s) (1 + Tp2 * s) Kp = 0.95747 Tp1 = 1.999 Tp2 Td = 2.314 Tz = 0.0010561 = 0.60819参数化:{“P2DIZ”}很多免费的系数:5使用“getpvec”、“getcov”参数及其不确定性。状态:估计使用proc时域数据“dat2v”。适合估算数据:90.65%消防工程: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。值= 1;m2v.Structure.Tp1。自由= false;

我们可以修复这个值,估计其他参数:

m2v = proc (dat2v m2v)%
m2v =流程模型传递函数:1 + Tz * s G (s) = Kp * - - - - - - - - - - - - - - - - - - - * exp (Td *)年代(1 + Tp1 * s) (1 + Tp2 * s) Kp = 1.0111 Tp1 = 1道明= 2.195 Tz Tp2 = 5.3014 = 3.231参数化:{“P2DIZ”}很多免费的系数:4使用“getpvec”、“getcov”参数及其不确定性。状态:估计使用proc时域数据“dat2v”。适合估算数据:92.05%消防工程:0.09952,MSE: 0.09794

观察,修复Tp1其已知值显著提高了其余的参数的估计模型m2v

这也表明,简单的近似应该做好数据:

m1x_init = idproc (“P2D”);%更简单的结构(不为零,不积分器)m1x_init.Structure.Td。最大= 2;m1x = proc (dat2v m1x_init)比较(dat2 m0, m2, m2v m1x)
m1x =流程模型传递函数:Kp G (s) = - - - - - - - - - - - - - - - - - - * exp (Td * s) (1 + Tp1 * s) (1 + Tp2 * s) Kp = -1.2553 Tp1 = 1.0249 e-06 Tp2 Td = 1.958 = 0.07813参数化:{“P2D”}很多免费的系数:4使用“getpvec”、“getcov”参数及其不确定性。状态:估计使用proc时域数据“dat2v”。适合估算数据:-23.87%消防工程:24.15,MSE: 23.77

因此,简单的模型可以估计系统输出很好。然而,m1x不包含任何集成,所以开环长时间范围的行为将是完全不同的:

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