主要内容

剩余

使用扩展或无迹卡尔曼滤波器时的返回测量残差和残差协方差

描述

剩余命令返回实际测量值和预测测量值之间的差值ExtendedKalmanFilter.unscentedKalmanFilter查看残差为您提供了一种验证过滤器性能的方法。残差,也称为创新,量化预测误差并驱动扩展和Unspened Kalman滤波器更新序列中的校正步骤。使用时正确的预测(系统识别工具箱)要更新估计的卡尔曼滤波器状态,请使用剩余命令之前立即使用正确的命令。

例子

剩余剩余转移性]=剩余(objy返回剩余剩余在测量之间y和卡尔曼滤波器产生的预测测量obj。该函数还返回残差的协方差剩余转移性

您创建obj使用ExtendedKalmanFilter.或者unscentedKalmanFilter命令。你指定状态转移函数f和测量功能h非线性系统的obj这个状态对象的属性存储最新的估计状态值。每次步骤,你使用正确的预测一起更新国家x这个剩余年代时间步长的实际测量值与预测测量值的差值是否表示为年代y-hx)。残余的协方差年代是和R+RP, 在哪里R测量噪声矩阵是否由测量噪声过滤器的属性和RP是否投影到测量空间上的状态协方差矩阵。

如果度量函数使用此语法h你指定的obj。MeasurementFcn具有以下形式之一:

  • y (k) = h (x (k))用于添加测量噪声

  • y(k)=h(x(k),v(k))非加性测量噪声

这里,y (k)x(k), 和v(k)是系统的测量输出,状态和测量噪声时间步骤k这个在ly inputs toh是状态和测量噪声。

例子

剩余剩余转移性]=剩余(objyUm1,…,Umn如果系统的测量功能需要这些输入参数,则指定额外的输入参数。您可以指定多个参数。

如果度量函数使用此语法h具有以下形式之一:

  • y(k)=h(x(k),Um1,…,Umn)用于添加测量噪声

  • Y(k)= h(x(k),v(k),um1,...,umn)非加性测量噪声

例子

全部折叠

使用扩展的卡尔曼滤波器算法和测量的输出数据来估算van der POL振荡器的状态。振荡器有两个状态和一个输出。

为振荡器创建一个扩展的Kalman过滤器对象。使用先前写入和保存的状态转换和测量功能,vdpstatefcn.m.vdpMeasurementFcn.m这个年代e functions describe a discrete-approximation to a van der Pol oscillator with the nonlinearity parameter 等于1。该功能假定系统中存在附加过程和测量噪声。指定这两个状态的初始状态值为[1;0]。这是对初始时刻状态值的猜测k,基于系统输出直到时间的知识k-1 x k | k - 1

obj = ExtendedKalmanFilter(@ vdpstatefcn,@ vdpmeasurementfcn,​​[1; 0]);

加载测量的输出数据y在本例中,使用模拟静态数据进行说明。数据存储在vdp_data.mat文件

负载vdp_data.maty

指定振荡器的过程噪声和测量噪声Coverce。

obj。ProcessNoise = 0.01; obj.MeasurementNoise = 0.16;

初始化阵列以捕获估计结果。

ResidBuf = [];Xcorbuf = [];xpredbuf = [];

实现扩展卡尔曼滤波算法,通过使用正确的预测命令。你第一次正确 x k | k - 1 使用实时测量k得到 x k | k 这个n, you predict the state value at the next time step x k + 1 | k 使用 x k | k ,状态估计时间步长k估计使用测量直到时间k

为了模拟实时数据测量,每次使用一个时间步长。计算预测和实际测量之间的残差,以评估滤波器的性能和收敛情况。计算残差是一个可选步骤。当你使用剩余,将命令紧放在正确的命令。如果预测结果与测量结果吻合,则残差为零。

在执行时间步长的实时命令后,请缓冲结果,以便在运行完成后进行打印。

k = 1:size(y) [Residual,ResidualCovariance] = Residual (obj,y(k));[CorrectedState, CorrectedStateCovariance] =正确(obj, y (k));[PredictedState, PredictedStateCovariance] =预测(obj);: residBuf (k) =剩余;: xcorBuf (k) = CorrectedState ';: xpredBuf (k) = PredictedState ';结束

当你使用正确的命令,obj。年代tateobj.statecovariance.使用纠正状态和状态估计更新时间步骤的错误协方差值kCorrectedStateCorrectedStateCovariance.当你使用预测命令,obj。年代tateobj.statecovariance.是否更新了时间步长的预测值K + 1预测斯特ate.PredictedStateCovariance.当你使用剩余命令,您不会修改任何obj特性。

在这个例子中,你使用过正确的之前预测因为初始状态值为 x k | k - 1 ,是对初始时刻状态值的猜测k基于系统输出直到时间k-1.如果您的初始状态值是 x k - 1 | k - 1 ,上一个时间点的值k-1基于测量直到k-1,然后使用预测首先命令。有关使用顺序的更多信息预测正确的,请参阅使用预测和正确的命令

使用Publectrection值绘制估计的状态。

绘图(Xcorbuf(:,1),Xcorbuf(:,2))标题(“估计状态”

图包含轴。具有标题估计状态的轴包含类型线的对象。

绘制中测量功能的实际测量值、校正的估计测量值和残差vdpMeasurementFcn,测量是第一个状态。

m = [y,xcorbuf(:,1),RESTBUF];绘图(m)网格标题('实际和估计测量值,剩余') 传奇(“测量”“估计”'剩余的'

图包含轴。具有标题实际和估计测量的轴,残留物包含3个类型的线。这些对象表示测量,估计,残差。

估计值与测量值密切相关。初始瞬态后,在整个运行过程中,残差相对较小。

考虑一个带输入的非线性系统u的状态x和测量y根据以下状态转移和测量方程演化:

x k x k - 1 + u k - 1 + w k - 1

y k x k + 2 u k + v k 2

过程噪声w在测量噪声较低的情况下,系统的噪声是可加的v非相加。

为系统创建状态转换函数和测量函数。使用附加输入指定函数u

f = @(x,u)(sqrt(x + u));h = @(x,v,u)(x + 2 * u + v ^ 2);

fh是分别存储状态转换函数和度量函数的匿名函数的函数句柄。在度量函数中,由于度量噪声是非加性的,v也被指定为输入。注意v被指定为额外输入之前的输入u

创建一个扩展的卡尔曼滤波对象,使用指定的函数估计非线性系统的状态。指定状态的初始值为1,测量噪声为非加性。

obj = ExtendedKalmanFilter(F,H,1,'hasadditivemeasurementnoise',错误的);

指定测量噪声协方差。

obj.measurementnoise = 0.01;

现在,您可以使用预测正确的命令。你通过了价值u预测正确的,其分别将它们传递给状态转换和测量功能。

用测量校正国家估计yk]=0.8和输入uk]=0.2在时间步k

正确(obj,0.8,0.2)

预测下一个时间步骤的状态uk]=0.2

预测(OBJ,0.2)

检索错误或剩余在预测和测量之间。

[残差,残差方差]=残差(obj,0.8,0.2);

输入参数

全部折叠

扩展或UndEnded Kalman筛选器,使用以下命令之一创建:

测量系统输出在当前时间步骤,指定为一个N-element矢量,在哪里N是测量的数量。

系统测量功能的附加输入参数,指定为任意类型的输入参数。测量功能h是指定的MeasurementFcn或者MeasurementLikelihoodFcn的属性obj。如果函数除了状态和测量噪声值之外还需要输入参数,请在中指定这些输入剩余命令语法剩余命令将这些输入传递给测量或测量似然函数以计算估计的输出。您可以指定多个参数。

例如,假设您的度量或度量可能性函数计算估计的系统输出y使用系统输入u和当前的时间k,除了国家x这个Um1U平方米因此,条款是英国)k这个年代e inputs result in the estimated output

y (k) = h (x (k), u (k), k)

在时间步执行联机状态估计校正之前k,在中指定这些附加输入剩余命令语法:

[残余,残留转移性] =残差(OBJ,Y,U(K),K);

有关如何使用其他输入参数的示例,请参见指定带有附加输入的状态转换和测量函数

输出参数

全部折叠

当前测量值与预测测量值之间的残差,返回为a:

  • 标量为单输出系统

  • 大小向量N对于多输出系统,在哪里N是测量输出的数量

残差协方差,返回为anN-借-N矩阵在哪里N是测量输出的数量。

介绍了R2019b