主要内容

本页采用了机器翻译。点击此处可查看英文原文。

Recursive Least Squares Estimator

使用递归最小二乘法 (RLS) 算法估计模型系数

  • Recursive Least Squares Estimator block

库:
System Identification Toolbox / Estimators

描述

Recursive Least Squares Estimator 通过一个在这些参数上呈线性关系的模型来估计系统的参数。该系统具有以下形式:

y(t)=H(t)θ(t).

yH 是您提供给该模块的已知量,用于估计 θ。该模块既可以提供[1](无限历史)和[2](有限历史,也称为滑动窗)的估计值,也可以提供 θ 的估计值。有关这些方法的信息,请参阅用于在线参数估计的递归算法

该模块支持多种估计方法和数据输入格式。该模块中可配置的选项包括:

  • 基于样本或基于帧的数据格式 - 请参阅 Input Processing 参数。

  • 无限历史或有限历史估计 - 请参阅 History 参数。

  • 多种无限历史估计方法 - 请参阅 Estimation Method 参数。

  • 初始条件、启用标志和复位触发条件 - 请参阅 Initial EstimateAdd enable portExternal Reset 参数。

对于给定的时间步长 ty(t) 和 H(t) 分别对应于 Recursive Least Squares Estimator 模块的 Output Regressors 输入端口。θ(t) 对应于 Parameters 输出端口。

例如,假设您想估计系统 y = h2θ 中的标量增益 θ。在此,y 对于 θ 而言是线性的。您可以使用 Recursive Least Squares Estimator 模块来估计 θ。将 yh2 指定为 OutputRegressor 输入端口的输入。

示例

端口

输入

全部展开

回归变量的输入信号为 H(t)。Input ProcessingNumber of Parameters 参数定义了信号的维度:

  • 基于样本的输入处理和 N 估计参数 - 1×N 向量

  • 基于帧的输入处理,每帧包含 M 个样本和 N 个估计参数 - M×N 矩阵

数据类型: single | double

测得的输出信号 y(t)。Input Processing 参数定义了信号的维度:

  • 基于采样的输入处理 - 标量

  • 基于帧的输入处理,每帧包含 M 个样本 - M×1 向量

数据类型: single | double

用于启用和禁用估计值更新的外部信号。如果信号值是:

  • true - 估计并输出该时间步长的参数值。

  • false - 不要估计参数值,而是输出之前估计的最新值。

依赖关系

要启用此端口,请选择 Add enable port 参数。

数据类型: single | double | Boolean | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32

将参数估计重置为初始状态。External reset 参数的值决定了触发器类型。触发类型决定了复位是在信号上升沿、下降沿、上升沿或下降沿、电平状态,还是在电平保持状态下发生。

依赖关系

要启用此端口,请在 External reset 下拉菜单中选择除 None 以外的任何选项。

数据类型: single | double | Boolean | int8 | int16 | int32 | uint8 | uint16 | uint32

来自该模块外部的初始参数估计值。该模块会在仿真开始时,或者当您使用 Reset 信号触发算法重置时,使用此输入端口。

Number of Parameters 参数定义了信号的维度。如果存在 N 个参数,则信号为 N-1。

依赖关系

要启用此端口,请将 History 设置为 Infinite,并将 Initial Estimate 设置为 External

数据类型: single | double

初始参数协方差,由该模块外部的来源提供。有关详细信息,请参阅 Parameter Covariance Matrix 参数。该模块会在仿真开始时,或者当您使用 Reset 信号触发算法重置时,使用此输入端口。

依赖关系

要启用此端口,请设置以下参数:

  • HistoryInfinite

  • Estimation MethodForgetting FactorKalman Filter

  • Initial EstimateExternal

数据类型: single | double

在使用有限历史(滑动窗口)估计时,初始数据窗口中自变量的初始值,这些值来自外部来源。参数 Window length (W) 和参数 Number of Parameters (N) 定义了该信号的维度,其维度为 W×N

InitialRegressors 信号控制算法的初始行为。该模块在仿真开始时或在 Reset 信号触发时使用此输入端口。

如果初始缓冲区设置为 0 或其中包含的信息不足,则在估计的初始阶段会显示一条警告消息。经过几个循环后,该警告应会消失。缓冲足够信息所需的时钟周期数取决于多项式的阶数和输入延迟。如果警告仍然存在,您应评估信号的内容。

依赖关系

要启用此端口,请将 History 设置为 Finite,并将 Initial Estimate 设置为 External

数据类型: single | double

使用有限历史(滑动窗)估计法时,由外部来源提供的初始输出测量数据集。发送到该端口的信号必须是一个 W×1 向量,其中 W 是窗长。

InitialOutputs 信号控制算法的初始行为。该模块在仿真开始时或在 Reset 信号触发时使用此输入端口。

如果初始缓冲区设置为 0 或其中包含的信息不足,则在估计的初始阶段会显示一条警告消息。经过几个循环后,该警告应会消失。缓冲足够信息所需的时钟周期数取决于多项式的阶数和输入延迟。如果警告仍然存在,您应评估信号的内容。

依赖关系

要启用此端口,请将 History 设置为 Finite,并将 Initial Estimate 设置为 External

数据类型: single | double

输出

全部展开

估计参数 θ(t),以 N-1 向量的形式返回,其中 N 表示参数个数。

数据类型: single | double

估计误差,返回结果为:

  • Scalar - 基于采样的输入处理

  • M×1 向量 - 基于帧的输入处理,每帧包含 M 个采样点

依赖关系

要启用此端口,请选择 Output estimation error 参数。

数据类型: single | double

参数估计误差协方差 P,以 NN 列的矩阵形式返回,其中 N 表示参数个数。有关详细信息,请参阅 Output Parameter Covariance Matrix 参数。

依赖关系

要启用此端口:

  • 如果 History 等于 Infinite,则将 Estimation Method 设为 Forgetting FactorKalman Filter

  • 无论 HistoryInfinite 还是 Finite,请选择 Output parameter covariance matrix 参数。

数据类型: single | double

参数

全部展开

模型参数

指定如何向该模块提供初始参数估计值:

  • None - 请勿指定初步估计值。

    • 如果 History 等于 Infinite,则该模块将 1 作为初始参数估计值。

    • 如果 History 等于 Finite,则该模块会根据初始信号 RegressorsOutputs 计算初始参数估计值。

    指定 Number of Parameters,此外,如果 HistoryInfinite,则 Parameter Covariance Matrix 也是。

  • Internal - 在模块内部指定初始参数估计值

    • 如果 History 等于 Infinite,请指定 Initial Parameter ValuesParameter Covariance Matrix 参数。

    • 如果 History 等于 Finite,请指定 Number of ParametersInitial RegressorsInitial Outputs 参数。

  • External - 将初始参数估计值指定为该模块的输入信号。

    请指定 Number of Parameters 参数。您对 History 参数的设置将决定应将哪些附加信号连接到相关端口:

    • 如果 HistoryInfinite - InitialParametersInitialCovariance

    • 如果 HistoryFinite - InitialRegressorsInitialOutputs

编程用法

模块参数:InitialEstimateSource
类型:字符向量、字符串
值:'None''Internal''External'
默认值:'None'

指定模型中要估计的参数个数,该数值应等于参数向量 θ(t) 中的元素个数。

依赖关系

要启用此参数,请设置以下任一选项:

  • HistoryInfinite,以及 Initial EstimateNoneExternal 中的任意一个

  • HistoryFinite

指定要估计的参数 N 数量的另一种方法是使用 Initial Parameter Values 参数,此时需定义一个包含 N 个元素的初始估计向量。这种方法涵盖了唯一剩下的组合,即 History 等于 Infinite,而 Initial Estimate 等于 Internal。有关详细信息,请参阅 Initial Parameter Values

编程用法

模块参数:InitialParameterData
类型:正整数
默认值:2

Parameter Covariance Matrix 指定为:

  • 实正标量 α - 协方差矩阵是一个 N×N 的对角矩阵,其对角元素为 α

  • 实正标量向量,[α1,...,αN] - 协方差矩阵是一个 NN 列的对角矩阵,其对角元为 [α1,...,αN] 为对角元素。

  • N×N 对称正定矩阵。

这里,N 是要估计的参数个数。

依赖关系

要启用此参数,请设置以下参数:

  • HistoryInfinite

  • Initial EstimateNoneInternal

  • Estimation MethodForgetting FactorKalman Filter

编程用法

模块参数:P0
类型:标量、向量或矩阵
默认值:1e4

请将初始参数值指定为长度为 N 的向量,其中 N 是要估计的参数个数。

依赖关系

要启用此参数,请将 History 设置为 Infinite,并将 Initial Estimate 设置为 Internal

编程用法

模块参数:InitialParameterData
类型:实数向量
默认值:[1 1]

在使用有限历史(滑动窗)估计时,指定回归变量缓冲区的初始值。参数 Window length (W) 和参数 Number of Parameters (N) 定义了自变量缓冲区的维度,该缓冲区为 W×N

Initial Regressors 参数控制算法的初始行为。该模块在仿真开始时或在 Reset 信号触发时使用此参数。

当初始值设置为 0 时,该模块会将缓冲区填充为全零。

如果初始缓冲区设置为 0 或其中包含的信息不足,则在估计的初始阶段会显示一条警告消息。经过几个循环后,该警告应会消失。缓冲足够信息所需的时钟周期数取决于多项式的阶数和输入延迟。如果警告仍然存在,您应评估信号的内容。

依赖关系

要启用此参数,请将 History 设置为 Finite,并将 Initial Estimate 设置为 Internal

编程用法

模块参数:InitialRegressors
类型:实数矩阵
默认值:0

在使用有限历史(滑动窗)估计时,请指定被测输出缓冲区的初始值。该参数是一个 W×1 向量,其中 W 是窗长。

当初始值设置为 0 时,该模块会将缓冲区填充为全零。

如果初始缓冲区设置为 0 或其中包含的信息不足,则在估计的初始阶段会显示一条警告消息。经过几个循环后,该警告应会消失。缓冲足够信息所需的时钟周期数取决于多项式的阶数和输入延迟。如果警告仍然存在,您应评估信号的内容。

Initial Outputs 参数控制算法的初始行为。该模块在仿真开始时或在 Reset 信号触发时使用此参数。

依赖关系

要启用此参数,请将 History 设置为 Finite,并将 Initial Estimate 设置为 Internal

编程用法

模块参数:InitialOutputs
类型:实数向量
默认值:0

输入处理与采样时间

  • Sample-based 处理是针对以单个采样为单位流式传输的信号进行的。

  • Frame-based 处理操作针对包含多个时间步长采样值的信号进行。许多机器传感器接口会将多个采样数据打包,并以帧的形式将这些采样数据一起传输。Frame-based 处理功能允许您直接输入这些数据,无需先进行解包。

指定基于帧的数据会为某些数据输入端口和输出端口添加一个额外的 M 维度,其中 M 表示一帧中的时间步数。这些端口是:

  • Regressors

  • Output

  • Error

有关详细信息,请参阅端口中的端口说明。

编程用法

模块参数:InputProcessing
类型:字符向量、字符串
值:'Sample-based''Frame-based'
默认值:'Sample-based'

指定数据采样时间,无论是基于单个采样点的处理 (ts),还是基于帧的处理 ((tf = Mts)),其中 M 为帧长度。当将 Sample Time 设置为默认值 -1 时,该模块会根据信号继承其 tstf 的值。

Sample Time 指定为正标量,以覆盖继承。

编程用法

模块参数:Ts
类型:实数标量
默认值:-1

算法和模块选项

算法选项

History 参数用于确定使用何种类型的递归算法:

  • Infinite - 该类别中的算法旨在生成能够解释自仿真开始以来所有数据的参数估计值。这些算法会将历史数据保存在数据摘要中。该模块将此摘要保存在固定大小的内存中,该内存随时间推移不会扩大。

    该模块提供了多种 Infinite 类型的算法。选择此选项将启用 Estimation Method 参数,您可通过该参数指定算法。

  • Finite - 该类别中的算法旨在生成仅能解释有限数量的历史数据样本的参数估计值。该模块会使用有限窗内的所有数据,一旦数据超出窗范围,便将其丢弃。该方法也被称为滑动窗估计法。

    选择此选项将启用用于调整滑动窗大小的 Window Length 参数。

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

编程用法

模块参数:History
类型:字符向量、字符串
值:'Infinite''Finite'
默认值:'Infinite'

Window Length 参数用于确定滑动窗估计法所采用的时间采样点数。选择一个能在估计性能与计算和内存开销之间取得平衡的窗大小。规模因素包括模型中参数的数量及其随时间的变化情况。在 samples 中务必指定 Window Length,即使您使用的是基于帧的输入处理。

Window Length 必须大于或等于估计参数的个数。

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

依赖关系

要启用此参数,请将 History 设置为 Finite

编程用法

模块参数:WindowLength
类型:正整数
默认值:200

在执行无限历史估计时,请指定估计算法。当您选择其中任何一种方法时,该模块会启用其他相关的参数。

遗忘因子和卡尔曼滤波算法的计算量比梯度法和归一化梯度法更大。然而,这些更密集的方法比梯度法具有更好的收敛属性。有关这些算法的更多信息,请参阅用于在线参数估计的递归算法

编程用法

模块参数:EstimationMethod
类型:字符向量、字符串
值:'Forgetting Factor''Kalman Filter''Normalized Gradient''Gradient'
默认值:'Forgetting Factor'

遗忘因子 λ 用于指定在估计过程中是否以及在多大程度上对旧数据进行折减。假设该系统在 T0 个样本期间大致保持恒定。您可以选择 λ,使其满足以下条件:

T0=11λ

  • λ = 1 设为 1 相当于“无遗忘”并估计常数系数。

  • λ < 1 设为 1 意味着,在参数估计中,过去的测量值的重要性较低,可以被“忽略”。将 λ < 1 设为估计随时间变化的系数。

λ 的典型取值通常在 [0.98 0.995] 范围内。

依赖关系

要启用此参数,请将 History 设置为 Infinite,并将 Estimation Method 设置为 Forgetting Factor

编程用法

模块参数:AdaptationParameter
类型:标量
值:(0 1] 区间
默认值:1

Process Noise Covariance 规定了卡尔曼滤波器估计中噪声协方差矩阵的元素和结构。将 N 作为待估计的参数个数,并将 Process Noise Covariance 指定为以下选项之一:

  • 实非负标量 α - 协方差矩阵是一个 N×N 的对角矩阵,其对角元素为 α

  • 实非负标量向量,[α1,...,αN] - 协方差矩阵是一个 NN 列的对角矩阵,其对角元为 [α1,...,αN] 为对角元素。

  • N×N 对称半正定矩阵。

卡尔曼滤波算法将参数视为动态系统的状态,并利用卡尔曼滤波器对这些参数进行估计。Process Noise Covariance 是作用于这些参数的过程噪声的协方差。噪声协方差矩阵中的零值对应于常数系数或参数。大于 0 的值对应于随时间变化的参数。对于变化迅速的参数,应采用较大的值。不过,请注意,较大的值会导致参数估计的噪声增大。默认值为 1。

依赖关系

要启用此参数,请将 History 设置为 Infinite,并将 Estimation Method 设置为 Kalman Filter

编程用法

模块参数:AdaptationParameter
类型:标量、向量、矩阵
默认值:1

对于梯度法和归一化梯度法,适应增益 γ 会调整新测量数据对估计结果的影响程度。当测量结果可靠时,或者说信噪比较高时,请为 γ 指定一个较大的值。然而,如果将 γ 设得过高,可能会导致参数估计值发散。即使测量结果中不存在噪声,这种偏差也是可能出现的。

Estimation Method 等于 NormalizedGradient 时,Adaptation Gain 应小于 2。无论采用哪种梯度法,如果误差随时间增长(换言之,估计值发散),或者参数估计值频繁波动,则应考虑减小 Adaptation Gain 的值。

依赖关系

要启用此参数,请将 History 设置为 Infinite,并将 Estimation Method 设置为 Normalized GradientGradient

编程用法

模块参数:AdaptationParameter
类型:标量
默认值:1

归一化梯度算法在每一步中,将适应增益乘以梯度向量二范数的平方。如果梯度接近零,接近零的分母可能会导致估计参数出现跳变。Normalization Bias 是为防止这些跳转而在分母中引入的项。如果发现估计参数出现突变,请增大 Normalization Bias 的值。

依赖关系

要启用此参数,请将 History 设置为 Infinite,并将 Estimation Method 设置为 Normalized Gradient

编程用法

模块参数:NormalizationBias
类型:标量
默认值:eps

模块选项

使用 Error 输出端口信号来验证估计结果。对于给定的时间步长 t,估计误差 e(t) 的计算方式如下:

e(t)=y(t)yest(t),

其中 y(t) 是您提供的观测输出值,而 yest(t) 是利用回归变量 H(t) 和参数估计值 θ(t-1) 估计得到的输出值。

编程用法

模块参数:OutputError
类型:字符向量、字符串
值:'off''on'
默认值:'off'

使用 Covariance 输出端口信号来分析参数估计的不确定性。该软件在假设残差 e(t) 为白噪声且这些残差的方差为 1 的条件下,计算参数协方差 P

P 的解释取决于您在 HistoryEstimation Method 中指定的估计方法,具体如下:

  • 如果 History 等于 Infinite,那么您的 Estimation Method 选择将导致:

    • Forgetting Factor - (R2/2)P 约等于估计参数的协方差矩阵,其中 R2 是残差的真实方差。该模块通过 Error 端口输出残差。

    • Kalman Filter - R2P 是估计参数的协方差矩阵,而 R1 /R2 是参数变化的协方差矩阵。这里,R1 是您在 Parameter Covariance Matrix 中指定的协方差矩阵。

    • Normalized GradientGradient - 协方差 P 不可用。

  • 如果 History 等于 Finite(滑动窗估计)- 则 R2 P 是估计参数的协方差。滑动窗算法在参数估计过程中并未使用该协方差。不过,该算法确实会计算输出的协方差,因此您可以将其用于统计评估。

编程用法

模块参数:OutputP
类型:字符向量、字符串
值:'off''on'
默认值:'off'

使用 Enable 信号提供一个控制信号,用于启用或禁用参数估计。该模块会在启用参数估计的每个时间步长中,对参数值进行估计。如果在某个时间步长 (t) 处禁用参数估计,则软件不会更新该时间步长的参数。相反,该模块输出最后估计的参数值。

  • 例如,在以下情况下,您可以使用此选项:

    • 您的回归变量或输出信号在某些时间步长上噪声过大,或者不包含信息

    • 您的系统进入了一种参数值随时间不变的模式

编程用法

模块参数:AddEnablePort
类型:字符向量、字符串
值:'off''on'
默认值:'off'

设置 External reset 参数,既可添加一个 Reset 输入端口,又可指定触发算法状态重置为指定初始值的输入端口信号条件。重置估计,例如,当由于激励不足或测量信号中的信息不足导致参数协方差过大时。

假设您在某个时间步长处重置了该模块,t。如果该模块在 t 处被启用,软件将使用 Initial Estimate 中指定的初始参数值来估计参数值。换句话说,在 t 处,该模块利用初始估计值和输入端口的当前值执行参数更新。

如果该模块在 t 处被禁用,且您重置了该模块,则该模块将输出 Initial Estimate 中指定的值。

请将此选项设置为以下选项之一:

  • None - 算法状态和估计参数未被重置。

  • Rising - 当控制信号从负值或零值上升至正值时,触发复位。如果初始值是负数,则当值上升至零时会触发重置。

  • Falling - 当控制信号从正值或零值降至负值时,触发复位。如果初始值是正的,则降至零时将触发重置。

  • Either - 当控制信号处于上升沿或下降沿时触发复位。

  • Level - 在以下任一情况下触发重置:

    • 在当前时间步长处,控制信号不为零。

    • 控制信号从上一时间步的非零值变为当前时间步的零值。

  • Level hold - 当当前时间步长处的控制信号不为零时,触发复位。

当您选择除 None 以外的任何选项时,软件会向该模块添加一个复位输入端口。请向该输入端口提供复位控制输入信号。

编程用法

模块参数:ExternalReset
类型:字符向量、字符串
值:'None''Rising''Falling''Either''Level''Level hold'
默认值:'None'

参考

[1] Ljung, L. System Identification: Theory for the User. Upper Saddle River, NJ: Prentice-Hall PTR, 1999, pp. 363–369.

[2] Zhang, Q. "Some Implementation Aspects of Sliding Window Least Squares Algorithms." IFAC Proceedings. Vol. 33, Issue 15, 2000, pp. 763-768.

扩展功能

全部展开

C/C++ 代码生成
使用 Simulink® Coder™ 生成 C 代码和 C++ 代码。

PLC 代码生成
使用 Simulink® PLC Coder™ 生成结构化文本代码。

版本历史记录

在 R2014a 中推出