主要内容

recursiveLS

创建系统对象采用递归最小二乘算法进行在线参数估计

语法

obj =递归
obj = recursiveLS(Np)
obj =递归(Np,theta0)
obj =递归(___、名称、值)

描述

使用recursiveLS命令用于实时数据的参数估计。如果估计所需的所有数据都是一次性可用的,并且您正在估计一个时不变模型,则使用mldivide, \

obj= recursiveLS创建一个System对象™,用于默认单个输出系统的在线参数估计,该输出系统的估计参数是线性的。这样的系统可以表示为:

yt) =Htθt) +et

在这里,y是输出,θ是参数,H回归量,和e就是白噪声干扰。默认系统有一个初始参数值的参数1

创建对象后,使用一步命令更新模型参数估计使用递归最小二乘算法和实时数据。或者,您也可以直接调用该对象。有关更多信息,请参见提示

obj= recursiveLS (Np还指定要估计的参数的数目。

obj= recursiveLS (Nptheta0还指定参数的数目和参数的初始值。

obj= recursiveLS (___名称,值使用一个或多个递归估计算法指定系统的其他属性名称,值对参数。

对象描述

recursiveLS创建一个System对象用于单个输出系统的在线参数估计,该输出系统的参数是线性的。

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

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

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

命令 描述
一步

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

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

释放

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

重置

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

克隆

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

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

isLocked

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

使用recursiveLS命令,创建在线评估系统对象。然后估计系统参数(θ),并使用一步命令与回归器和输入输出数据,H而且y

[theta,EstimatedOutput] = step(obj,y,H)

recursiveLS对象属性,请参见属性

例子

全部折叠

obj =递归
obj =递归与属性:NumberOfParameters: 1 Parameters: [] InitialParameters: 1 parameterco方差:[]initialparameterco方差:10000 EstimationMethod: '健忘因子'健忘因子:1 EnableAdaptation: true历史:'无限' InputProcessing: '基于样本的' DataType: 'double'

系统有两个参数,表示为:

y t 一个 1 u t + 一个 2 u t - 1

在这里,

  • u 而且 y 分别为实时输入和输出数据。

  • u t 而且 u t - 1 是回归量,H,系统的。

  • 一个 1 而且 一个 2 是参数,θ,系统的。

使用递归最小二乘算法创建一个用于在线估计的System对象。

obj = recursiveLS(2);

加载估计数据,在本例中,这是一个静态数据集。

负载iddata3Input = z3.u;输出= z3.y;

创建一个要存储的变量u (t - 1).这个变量在每个时间步骤中都会更新。

oldInput = 0;

估计参数和输出一步和输入输出数据,保持当前回归对在H.调用一步函数隐式地调用obj带有输入参数的系统对象。

i = 1:数字(输入)H =[输入(i) oldInput];[theta, EstimatedOutput] = obj(output(i),H);estimatedOut (i) = EstimatedOutput;Theta_est (i,:) =;oldInput =输入(i);结束

绘制测量和估计输出数据。

numSample = 1:数字(输入);情节(numSample、输出“b”numSample estimatedOut,“r——”);传奇(测量输出的“估计输出”);

图中包含一个轴对象。axis对象包含2个line类型的对象。这些对象表示测量输出、估计输出。

画出参数。

情节(numSample theta_est (: 1), numSample, theta_est(:, 2)标题(递归最小二乘估计的参数估计)传说(“θ₁“θ”

图中包含一个轴对象。标题为“递归最小二乘估计的参数估计”的axis对象包含2个类型为line的对象。这些向量表示1和2。

查看最终预算。

Theta_final = theta
theta_final =2×1-1.5322 - -0.0235

函数使用基于帧的信号recursiveLS命令。机器接口通常以包含多个样本的帧提供传感器数据,而不是以单个样本提供数据。的recursiveLS对象在设置时直接接受这些帧InputProcessing框架

对象对基于样本和基于帧的输入处理使用相同的估计算法。估计结果一致。但是,在使用基于框架的输入时,有一些特殊的注意事项。

这个例子是基于框架的基于样本的版本recursiveLS的例子用递归最小二乘算法估计系统参数

系统有两个参数,表示为:

y t 一个 1 u t + 一个 2 u t - 1

在这里,

  • u 而且 y 分别为实时输入和输出数据。

  • u t 而且 u t - 1 是回归量,H,系统的。

  • 一个 1 而且 一个 2 是参数, θ ,系统的。

使用递归最小二乘算法创建一个用于在线估计的System对象。

obj_f = recursiveLS(2,“InputProcessing”“框架”);

加载数据,其中包含输入和输出时间序列信号。每个信号由30帧组成,每帧包含10个单独的时间样本。

负载iddata3_framesinput_sig_frameoutput_sig_frameInput = input_sig_frame.data;Output = output_sig_frame.data;Numframes = size(input,3)
Numframes = 30
Mframe = size(input,1)
Mframe = 10

初始化回归器框架,对于给定的框架,其形式如下

H f u 1 u 0 u 2 u 1 u 1 0 u 9

坐标系中最近的点在哪里 u 10

Hframe = 0 (10,2);

对于这个一阶例子,回归框架包含前一个框架中的一个点。初始化这个点。

oldInput = 0;

估计参数和输出一步和输入输出数据,保持当前回归框架在Hframe

  • 输入和输出数组有三个维度。第三个维度是帧索引,前两个维度表示单个帧的内容。

  • 使用circshift函数填充的第二列Hframe与过去输入值,通过将输入向量移动一个位置,为每个回归函数对。

  • 填充Hframe包含最古老值的元素,Hframe(1、2),使用从前一帧存储的回归值。

  • 调用一步函数隐式地调用obj带有输入参数的系统对象。的一步函数与框架兼容,因此框架内不需要循环函数。

  • 保存最近的输入值以用于下一帧计算。

EstimatedOutput = 0 (10,1,30);= 0 (2,30);i = 1: numframes Hframe =[输入(:,:,i) circshift(输入(:,:我),1)];Hframe(1,2) = oldInput;[θ(:,i), EstimatedOutput(:,:我)]= obj_f(输出(:,:,i), Hframe);oldInput = input(10,:,i);结束

画出参数。

theta1 = theta(1,:);theta2 = theta(2,:);Iframe = 1:numframes;情节(iframe,θ₁,iframe,θ)标题(基于帧的递归最小二乘估计)传说(“θ₁”“θ”“位置”“最佳”

图中包含一个轴对象。标题为基于帧的递归最小二乘估计的坐标轴对象包含2个类型为line的对象。这些向量表示1和2。

查看最终预算。

Theta_final = theta(:,numframes)
theta_final =2×1-1.5322 - -0.0235

最终估计与基于样本的估计相同。

在有两个参数且初始参数值已知的情况下,使用递归最小二乘算法创建系统对象进行在线参数估计。

obj = recursiveLS(2,[0.8 1],“InitialParameterCovariance”, 0.1);

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

输入参数

全部折叠

系统中的参数数目,指定为正整数。

参数的初始值,指定为下列之一:

  • 标量—所有参数的初始值相同。

  • 长度的实值向量Np- - -参数有初始值theta0(我)

所有参数的默认初始值为1

请注意

如果初始参数值远小于InitialParameterCovariance时,这些初始值在估计时不太重要。如果对初始参数值有较高的置信度,则指定较小的初始参数协方差。这种说法只适用于无限历史估计。有限历史估计不使用InitialParameterCovariance

名称-值参数

指定可选参数对为Name1 = Value1,…,以=家,在那里的名字参数名称和价值对应的值。名称-值参数必须出现在其他参数之后,但对的顺序无关紧要。

在R2021a之前,使用逗号分隔每个名称和值,并将其括起来的名字在报价。

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

属性

recursiveLS系统对象属性由只读和可写属性组成。可写属性分为可调属性和不可调属性。方法锁定对象后,不可调属性不能更改一步命令。

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

obj =递归;obj。为gettingFactor = 0.99;

NumberOfParameters

要估计的参数数目,以正整数形式返回。

NumberOfParameters是只读属性。如果Np在对象构造过程中指定,NumberOfParameters获取赋给的值Np

默认值:1

参数

估计的参数,作为实值的列向量返回。

参数是只读属性,在创建对象后初始为空。属性后填充一步命令进行在线参数估计。

InitialParameters

参数的初始值,指定为下列之一:

  • 标量—所有参数的初始值相同。

  • 长度的实值向量Np- - -参数有初始值InitialParameters(我)

如果初始参数值远小于InitialParameterCovariance时,这些初始值在估计时不太重要。如果对初始参数值有较高的置信度,则指定较小的初始参数协方差。这种说法只适用于无限历史估计。有限历史估计不使用InitialParameterCovariance

InitialParameters是一个可调属性。你可以改变InitialParameters当对象处于锁定状态时。

默认值:1

InitialOutputs

有限历史估计中输出缓冲区的初始值,指定为0或者作为W-by-1向量,其中W是窗口长度。

InitialOutputs属性提供了一种控制算法初始行为的方法。

InitialOutputs设置为0,对象用0填充缓冲区。

如果初始缓冲区设置为0或者没有包含足够的信息,您将在评估的初始阶段看到一条警告消息。几个周期后,警告应该会消失。缓冲足够信息所需的周期数取决于多项式的顺序和输入延迟。如果警告仍然存在,您应该评估信号的内容。

指定InitialOutputs只有当历史有限的

InitialOutputs是一个可调属性。你可以改变InitialOutputs当对象处于锁定状态时。

默认值:0

InitialRegressors

有限历史估计中回归量缓冲的初始值,指定为0或者作为W——- - - - - -Np矩阵,W窗长和Np是参数的个数。

InitialRegressors属性提供了一种控制算法初始行为的方法。

InitialRegressors设置为0,对象用0填充缓冲区。

如果初始缓冲区设置为0或者没有包含足够的信息,您将在评估的初始阶段看到一条警告消息。几个周期后,警告应该会消失。缓冲足够信息所需的周期数取决于多项式的顺序和输入延迟。如果警告仍然存在,您应该评估信号的内容。

指定InitialRegressors只有当历史有限的

InitialRegressors是一个可调属性。你可以改变InitialRegressors当对象处于锁定状态时。

默认值:0

ParameterCovariance

估计的协方差P的参数,返回为N——- - - - - -N对称正定矩阵。N是要估计的参数的数目。软件计算P假设残差(估计输出与测量输出之间的差值)为白噪声,这些残差的方差为1。

ParameterCovariance仅适用于EstimationMethod“ForgettingFactor”“KalmanFilter”或者当历史有限的

的解释P的设置历史而且EstimationMethod属性。

  • 如果历史无限,那么你的EstimationMethod选择的结果如下:

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

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

  • 如果历史有限的(滑动窗口估计)-R2P是估计参数的协方差。滑动窗口算法在参数估计过程中没有使用这种协方差。但是,该算法确实计算输出的协方差,以便您可以将其用于统计评估。

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是不可调属性。方法锁定对象后,不能在执行期间更改它一步命令。

默认值:遗忘因子

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是一个可调属性。您可以在对象处于锁定状态时更改它。

默认值:每股收益

历史

定义使用哪种递归算法的数据历史类型,指定为:

  • “无限”-使用一种算法,目的是从模拟开始的所有时间步骤中最小化观察到的输出和预测输出之间的误差。

  • “有限”-使用一种算法,目的是在有限数量的过去时间步骤中最小化观察和预测输出之间的误差。

具有无限历史记录的算法旨在产生参数估计,以解释自模拟开始以来的所有数据。这些算法仍然使用固定数量的内存,不会随着时间的推移而增长。对象的多种算法“无限”历史类型。指定此选项将激活EstimationMethod属性,使用该属性指定算法。

具有有限历史的算法旨在产生只能解释有限数量的过去数据样本的参数估计。这个方法也被称为滑动窗口估计。对象提供了一种算法“有限”类型。指定此选项将激活WindowLength属性设置窗口的大小。

有关递归估计方法的更多信息,请参见在线参数估计的递归算法

历史是不可调属性。它只能在对象构造使用期间设置名称,值参数,之后不能更改。

默认值:“无限”

WindowLength

窗口大小决定用于滑动窗口估计方法的时间样本数量,指定为正整数。指定WindowLength只有当历史有限的

选择一个能够平衡估计性能与计算和内存负担的窗口大小。规模因素包括模型中参数的数量和时间方差。总是指定窗口长度在示例中,即使使用基于帧的输入处理。

WindowLength必须大于或等于估计参数的数目。

合适的窗口长度与您使用的是基于样本的输入处理还是基于帧的输入处理无关InputProcessing).但是,当使用基于帧的处理时,窗口长度必须大于或等于帧中包含的样本(时间步长)的数量。

WindowLength是不可调属性。它只能在对象构造使用期间设置名称,值参数,之后不能更改。

默认值:200

InputProcessing

选项,用于基于样本或基于帧的输入处理,指定为字符向量或字符串。

  • 纸浆包处理是对每次一个样本的信号流进行处理。

  • 框架处理是在包含多个时间步长的样本的信号上进行的。许多机器传感器接口封装多个样品,并将这些样品一起传输到帧中。框架处理允许您直接输入该数据,而不必首先解压缩它。

你的InputProcessing规格会影响输入和输出信号的尺寸一步命令:

[theta,EstimatedOutput] = step(obj,y,H)

  • 纸浆包

    • y而且EstimatedOutput是标量。

    • H是1 × -吗Np向量,Np是参数的个数。

    • 框架每帧样本

      • y而且EstimatedOutput1的向量。

      • H是一个——- - - - - -Np矩阵。

InputProcessing是不可调属性。它只能在对象构造使用期间设置名称,值参数,之后不能更改。

默认值:“纸浆包”

输出参数

全部折叠

用于在线参数估计的系统对象,返回为recursiveLS系统对象。使用一步命令来估计系统的参数。然后,您可以使用点表示法访问估计的参数和参数协方差。例如,键入obj。P一个rameters查看预估的参数。

提示

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

扩展功能

版本历史

在R2015b中引入