文档

recursiveARMAX

创建系统对象用于ARMAX模型的在线参数估计

使用recursiveARMAX命令用于实时数据的参数估计。如果需要进行估计的所有数据都是一次性可用的,并且您正在估计一个时不变模型,请使用脱机估计命令,armax

语法

obj = recursiveARMAX
obj = recursiveARMAX(订单)
obj = recursiveARMAX(订单、A0 B0, C0)
obj = recursiveARMAX (___、名称、值)

描述

obj= recursiveARMAX创建一个系统对象™,用于默认单输入单输出(SISO)的在线参数估计ARMAX模型结构.默认的模型结构具有1阶多项式和初始多项式系数值每股收益

创建对象后,使用一步命令使用递归估计算法和实时数据更新模型参数估计。

obj= recursiveARMAX (订单指定要估计的ARMAX模型的多项式阶数。

obj= recursiveARMAX (订单A0, C0指定多项式阶数和多项式系数的初值。指定初始值以避免估计过程中的局部极小值。如果初始值比默认值小InitialParameterCovariance属性值,并且您对您的初始值有信心,还指定一个较小的值InitialParameterCovariance

obj= recursiveARMAX (___名称,值指定ARMAX模型结构的附加属性和使用一个或多个递归估计算法名称,值对参数。

对象描述

recursiveARMAX创建一个System对象,用于使用递归估计算法对SISO ARMAX模型进行在线参数估计。

一个系统对象是一个专门的MATLAB®专门为实现和模拟输入随时间变化的动态系统而设计的对象。系统对象使用内部状态来存储过去的行为,这些行为将在下一个计算步骤中使用。

创建System对象后,可以使用命令处理数据或从对象获取有关该对象的信息。系统对象使用至少两个命令来处理数据—构造函数用于创建对象和一步命令,使用实时数据更新对象参数。这种声明与执行的分离使您可以创建多个持久的可重用对象,每个对象具有不同的设置。

您可以对系统识别工具箱™中的在线估计系统对象使用以下命令:

命令 描述
一步

使用递归估计算法和实时数据更新模型参数估计。

一步将对象置于锁定状态。在锁定状态下,您不能更改任何不可调优的属性或输入规范,例如模型顺序、数据类型或估计算法。在执行期间,您只能更改可调属性。

释放

解锁System对象。使用此命令开启不可调参数的设置。

重置

将锁定的System对象的内部状态重置为初始值,并保持锁定状态。

克隆

创建另一个具有相同对象属性值的System对象。

不使用语法创建额外的对象methoda = obj.对以这种方式创建的新对象的属性所做的任何更改(methoda)也会改变原始对象的属性(obj).

isLocked

查询System对象的输入属性和不可调属性的锁定状态。

使用recursiveARMAX命令,创建在线评估系统对象。然后估计ARMAX模型参数(一个B,C)并使用一步命令的输入和输出数据,u,y

[A, B, C, EstimatedOutput] = (obj, y, u)步

recursiveARMAX对象属性,看属性

例子

全部折叠

为ARMAX模型的在线参数估计创建一个System对象。

obj = recursiveARMAX;

ARMAX模型有一个默认结构,多项式的阶数为1,初始多项式系数为1,每股收益

加载估计数据。在本例中,使用静态数据集进行说明。

负载iddata1z1;输出= z1.y;输入= z1.u;

在线估计ARMAX模型参数一步

i = 1:numel(input) [A,B,C,EstimatedOutput] = step(obj,output(i),input(i));结束

查看多项式的当前估值一个系数。

obj。一个
ans =1×21.0000 - -0.8298

查看当前参数的协方差估计。

obj。P一个rameterCovariance
ans =3×30.0001 0.0001 0.0001 0.0032 0.000 0.0001 0.000 0.000 0.0001

查看当前估计输出。

EstimatedOutput
EstimatedOutput = -4.5595

指定ARMAX型号订单和延迟。

na = 1;nb = 2;数控= 1;nk = 1;

创建一个System对象,用于对具有指定订单和延迟的ARMAX模型进行在线估计。

obj = recursiveARMAX([na nb nc nk]);

指定ARMAX型号订单和延迟。

na = 1;nb = 2;数控= 1;nk = 1;

创建一个系统对象,用于初始多项式系数已知的ARMAX模型的在线估计。

A0 = [1 0.5];B0 = [0 1 1];C0 = [1 0.5];obj = recursiveARMAX([na nb nc nk],A0,B0,C0);

指定初始参数协方差。

obj。InitialParameterCovariance = 0.1;

InitialParameterCovariance表示您对初始参数的猜测的不确定度。通常情况下,默认的InitialParameterCovariance(10000)相对于参数值太大。这导致在估计过程中初始猜测的重要性降低。如果您对初始参数的猜测有信心,请指定一个较小的初始参数协方差。

创建一个System对象,使用卡尔曼滤波算法对ARMAX模型进行在线参数估计。

obj = recursiveARMAX([1 2 1 1],“EstimationMethod”“KalmanFilter”);obj。ProcessNoiseCovariance = 0.01;

的ProcessNoiseCovariance的属性obj仅适用于使用卡尔曼滤波算法进行估计。

输入参数

全部折叠

模型的订单和延迟ARMAX模型,指定为1 × 4的整数向量,[na nb nc nk]

  • na-多项式的阶一个),指定为一个非负整数。na表示系统中的极点数。

  • -多项式的阶B) + 1,指定为正整数。表示系统中0的个数加1。

  • 数控-多项式的阶C),指定为一个非负整数。

  • nk—输入输出延迟,指定为非负整数。nk是在输入影响输出之前发生的输入样本数。nk表示为固定的前导零B多项式。

多项式系数的初值,指定为实值的行向量,元素的幂级数为-1

  • A0-多项式系数的初始猜测一个),指定为1 × -(na + 1)以1为第一个元素的向量。

  • B0-多项式系数的初始猜测B),指定为1 × -(nb + nk)向量nk前导零。

  • C0-多项式系数的初始猜测C),指定为1 × -(数控+ 1)以1为第一个元素的向量。

    的系数C0必须定义一个稳定的离散时间多项式,它的根在一个单位圆盘内。例如,

    C0 = [1 0.5 0.5];所有(abs(根(C0)) < 1)
    ans = 1

指定为[],使用默认值每股收益对于多项式系数。

请注意

如果最初的猜测远远小于默认值InitialParameterCovariance时,初始猜测在估计过程中不那么重要。在这种情况下,指定一个较小的初始参数协方差。

名称-值对的观点

指定逗号分隔的可选对名称,值参数。的名字参数名称和价值对应的值。的名字必须出现在单引号内(' ').可以以任意顺序指定多个名称和值对参数Name1, Value1,…,的家

使用名称,值参数来指定可写属性recursiveARMAX创建对象时的系统对象。例如,obj = recursiveARMAX([2 2 1 1],'EstimationMethod','Gradient')方法创建一个System对象来估计ARMAX模型“梯度”递归估计算法。

属性

recursiveARMAX系统对象属性由只读和可写属性组成。可写属性分为可调属性和不可调属性。对象锁定时无法更改不可调优属性,即在使用一步命令。

使用名称,值的可写属性recursiveARMAX对象创建过程中的对象。在创建对象之后,使用点表示法修改可调属性。

obj = recursiveARMAX;obj。为gettingFactor = 0.99;

一个

估计多项式系数一个),作为实值的行向量返回,实值按升幂的顺序指定-1

一个是只读属性,在创建对象后最初为空。方法之后填充一步在线参数估计命令。

B

估计多项式系数B),作为实值的向量返回,实值按的升幂顺序指定-1

B是只读属性,在创建对象后最初为空。方法之后填充一步在线参数估计命令。

C

估计多项式系数C),作为实值的向量返回,实值按的升幂顺序指定-1

C是只读属性,在创建对象后最初为空。方法之后填充一步在线参数估计命令。

InitialA

多项式系数的初值一个)的顺序na,指定为长度的行向量na + 1,以1为第一个元素。的升幂顺序指定系数-1

如果最初的猜测远远小于默认值InitialParameterCovariance时,初始猜测在估计过程中不那么重要。在这种情况下,指定一个较小的初始参数协方差。

InitialA是一个可调属性。您可以在对象处于锁定状态时更改它。

默认值:[1 eps]

InitialB

多项式系数的初值B)的顺序nb-1,指定为长度的行向量nb + nk,nk前导零。nk是输入输出延迟。的升幂顺序指定系数-1

如果最初的猜测远远小于默认值InitialParameterCovariance时,初始猜测在估计过程中不那么重要。在这种情况下,指定一个较小的初始参数协方差。

InitialB是一个可调属性。您可以在对象处于锁定状态时更改它。

默认值:[0 eps]

InitialC

多项式系数的初值C)的顺序数控,指定为长度的行向量数控+ 1,以1为第一个元素。的升幂顺序指定系数-1

的系数InitialC必须定义一个稳定的离散时间多项式,其根在单位圆内。例如,

InitialC = [1 0.5 0.5];所有(abs(根(InitialC)) < 1)
ans = 1

如果最初的猜测远远小于默认值InitialParameterCovariance时,初始猜测在估计过程中不那么重要。在这种情况下,指定一个较小的初始参数协方差。

InitialC是一个可调属性。您可以在对象处于锁定状态时更改它。

默认值:[1 eps]

ParameterCovariance

估计的协方差P参数的N——- - - - - -N对称正定矩阵。N要估计的参数的数目。软件计算P假设残差(估计输出与测量输出的差)为白噪声,且残差的方差为1。ParameterCovariance仅适用于EstimationMethod“ForgettingFactor”“KalmanFilter”

的解释P取决于估算方法:

  • “ForgettingFactor”- - - - - -R2/ 2P近似等于估计参数的协方差矩阵,在哪里R2是残差的真实方差。

  • “KalmanFilter”- - - - - -R2P是估计参数的协方差矩阵,和R1/R2为参数变化的协方差矩阵。在那里,R1是你指定的协方差矩阵吗ProcessNoiseCovariance

ParameterCovariance是只读属性,在创建对象后最初为空。方法之后填充一步在线参数估计命令。

InitialParameterCovariance

初始参数估计的协方差,指定为以下之一:

  • 真正积极的标量,α-协方差矩阵是N——- - - - - -N对角矩阵,α作为对角线元素。N要估计的参数的数目。

  • 实正标量的向量,[α1、……αN协方差矩阵是一个N——- - - - - -N对角矩阵,其中[α1、……αN]作为对角线元素。

  • N——- - - - - -N对称正定矩阵。

InitialParameterCovariance表示初始参数估计中的不确定性。的大值InitialParameterCovariance在估计使用初期,对初始参数值的重视程度较低,而对实测数据的重视程度较高一步

只使用当EstimationMethod“ForgettingFactor”“KalmanFilter”

InitialParameterCovariance是一个可调属性。您可以在对象处于锁定状态时更改它。

默认值:10000

EstimationMethod

用于模型参数在线估计的递归估计算法,指定为以下值之一:

  • “ForgettingFactor”—参数估计算法

  • “KalmanFilter”—参数估计算法

  • “NormalizedGradient”—参数估计算法

  • “梯度”-非归一化梯度算法用于参数估计

遗忘因子和卡尔曼滤波算法比梯度法和非归一化梯度法计算量更大。然而,它们具有更好的收敛性。有关这些算法的信息,请参见在线参数估计的递归算法

EstimationMethod是一个不可调的属性。方法锁定对象后,也就是在执行期间不能更改它一步命令。如果您想使用MATLAB编码器™EstimationMethod只能分配一次。

默认值:“ForgettingFactor”

ForgettingFactor

遗忘因子,λ,与参数估计相关,指定为(0,1]范围内的标量。

假设系统保持恒定T0样本。你可以选择λ这样:

T 0 1 1 λ

  • 设置λ= 1对应“不忘”和估计常系数。

  • 设置λ< 1暗示过去的测量对参数估计不太重要,可以“忘记”。集λ< 1估计时变系数。

典型的选择λ都在这个范围内(0.98 - 0.995)

只使用当EstimationMethod“ForgettingFactor”

ForgettingFactor是一个可调属性。您可以在对象处于锁定状态时更改它。

默认值:1

EnableAdapation

启用或禁用参数估计,指定为以下之一:

  • 真正的1- - -一步命令估计该时间步的参数值并更新参数值。

  • 0- - -一步命令不更新该时间步的参数,而是输出最后的估计值。当系统进入参数值不随时间变化的模式时,可以使用此选项。

    请注意

    如果你设置EnableAdapation,您仍然必须执行一步命令。不要跳过一步保持参数值不变,因为参数估计依赖于当前和过去的I/O测量。一步确保保存过去的I/O数据,即使它没有更新参数。

EnableAdapation是一个可调属性。您可以在对象处于锁定状态时更改它。

默认值:真正的

数据类型

参数的浮点精度,指定为以下值之一:

  • “双”-双精度浮点

  • “单一”-单精度浮点

设置数据类型“单一”节省内存,但导致丢失精度。指定数据类型根据部署生成代码的目标处理器所需的精度。

数据类型是一个不可调的属性。它只能在使用对象构造时设置名称,值参数,之后不能更改。

默认值:“双”

ProcessNoiseCovariance

参数变化的协方差矩阵,具体为以下之一:

  • 真正的负的标量,α-协方差矩阵是N——- - - - - -N对角矩阵,α作为对角线元素。

  • 实非负标量的向量,[α1、……αN协方差矩阵是一个N——- - - - - -N对角矩阵,其中[α1、……αN]作为对角线元素。

  • N——- - - - - -N对称正半定矩阵。

N要估计的参数的数目。

ProcessNoiseCovariance适用时,EstimationMethod“KalmanFilter”

卡尔曼滤波算法将参数视为动态系统的状态,利用卡尔曼滤波对这些参数进行估计。ProcessNoiseCovariance是作用于这些参数的过程噪声的协方差。噪声协方差矩阵中的零值对应于估计常系数。大于0的值对应时变参数。对于快速变化的参数,使用较大的值。然而,较大的值导致噪音较大的参数估计。

ProcessNoiseCovariance是一个可调属性。您可以在对象处于锁定状态时更改它。

默认值:0.1

AdaptationGain

适应增益,γ,在梯度递归估计算法中使用,指定为正标量。

AdaptationGain适用时,EstimationMethod“梯度”“NormalizedGradient”

为指定一个大值AdaptationGain当你的测量有很高的信噪比。

AdaptationGain是一个可调属性。您可以在对象处于锁定状态时更改它。

默认值:1

NormalizationBias

在适应增益缩放中使用的偏置“NormalizedGradient”方法,指定为非负标量。

NormalizationBias适用时,EstimationMethod“NormalizedGradient”

归一化梯度算法将每一步的自适应增益除以梯度向量的双范数的平方。如果梯度接近于零,这可能会导致估计参数的跳跃。NormalizationBias是在分母中引入的术语,以防止这些跳跃。增加NormalizationBias如果你观察到估计参数的跳跃。

NormalizationBias是一个可调属性。您可以在对象处于锁定状态时更改它。

默认值:每股收益

输出参数

全部折叠

系统对象用于ARMAX模型的在线参数估计,返回为recursiveARMAX系统对象。此对象是使用指定的模型顺序和属性创建的。使用一步命令来估计ARMAX模型多项式的系数。然后,您可以使用点表示法访问估计的系数和参数协方差。例如,类型obj。一个要查看估计的一个多项式系数。

更多关于

全部折叠

ARMAX模型结构

ARMAX模型结构为:

y t + 一个 1 y t 1 + ... + 一个 n 一个 y t n 一个 b 1 u t n k + ... + b n b u t n k n b + 1 + c 1 e t 1 + ... + c n c e t n c + e t

差分方程的一种更简洁的写法是

一个 y t B u t n k + C e t

在那里,

  • y t -按时间输出 t

  • n 一个 -极数。

  • n b - 0的个数加1。

  • n c ——的数量C系数。

  • n k -在输入影响输出之前发生的输入样本的数量,也称为死时间在系统中。

  • y t 1 ... y t n 一个 —当前输出所依赖的以前的输出。

  • u t n k ... u t n k n b + 1 -当前输出所依赖的先前和延迟的输入。

  • e t 1 ... e t n c -白噪声干扰值。

的参数na,数控是ARMAX型号的订单,和nk是延迟。是延迟运算符。具体地说,

一个 1 + 一个 1 1 + ... + 一个 n 一个 n 一个

B b 1 + b 2 1 + ... + b n b n b + 1

C 1 + c 1 1 + ... + c n c n c

提示

  • 从R2016b开始,而不是使用一步命令来更新模型参数估计,您可以调用带有输入参数的System对象,就像它是一个函数一样。例如,[A, B, C, EstimatedOutput] = (obj, y, u)步而且[A, B, C, EstimatedOutput] = obj (y, u)执行相同操作。

扩展功能

介绍了R2015b

这个话题有帮助吗?