主要内容

正确的

正确的状态和状态估计误差协方差使用扩展或无味卡尔曼滤波、粒子滤波和测量

描述

正确的命令更新状态和状态估计误差的协方差extendedKalmanFilter,unscentedKalmanFilterparticleFilter对象使用测量系统输出。实现扩展或无味卡尔曼滤波、粒子滤波,使用正确的预测命令在一起。如果当前输出测量存在,您可以使用正确的预测。如果测量失踪,你只能使用预测。信息的顺序使用的命令,明白了使用正确预测和命令

例子

(CorrectedState,CorrectedStateCovariance正确]= (obj,y)纠正的状态估计和状态估计误差协方差扩展或无味卡尔曼滤波器,或粒子滤波对象obj使用测量输出y

您创建obj使用extendedKalmanFilter,unscentedKalmanFilterparticleFilter命令。您指定的状态转换函数和测量函数非线性系统obj。还你指定的过程和测量噪声方面在这些功能添加剂或非相加。的状态对象的属性存储最新估计状态值。假设在时间步k,obj.State x ^ ( k | k 1 ] 。这个值是状态估计的时间k直到时间估计,使用测量输出k - 1。当你使用正确的命令与测量系统输出y [k],软件返回修正后的状态估计 x ^ ( k | k ] CorrectedState输出。在哪里 x ^ ( k | k ] 是状态估计的时间吗k直到时间估计,使用测量输出k。命令返回的状态估计误差协方差 x ^ ( k | k ] CorrectedStateCovariance输出。软件也更新了状态StateCovariance的属性obj与这些纠正值。

使用这种语法如果测量功能h你指定的obj.MeasurementFcn有下列形式之一:

  • y (k) = h (x (k))——对添加剂测量噪声。

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

在哪里y (k),x (k),v (k)测量输出、状态和测量系统的噪声在时间步吗k。唯一的输入h是美国和测量噪声。

例子

(CorrectedState,CorrectedStateCovariance正确]= (obj,y,听Um1,…,学院)指定附加的输入参数,如果测量系统需要这些输入的函数。您可以指定多个参数。

使用这种语法如果测量功能h有下列形式之一:

  • y (k) = h (x (k),听Um1,…,学院)——对添加剂测量噪声。

  • y (k) = h (x (k), v (k),听Um1,…,学院)——非相加测量噪声。

正确的命令通过这些输入测量函数来计算估计输出。

例子

全部折叠

估计美国范德堡尔振荡器的使用扩展卡尔曼滤波算法和测量输出数据。振荡器有两个州和一个输出。

创建一个扩展卡尔曼滤波对象振荡器。使用保存之前书面和状态转换和测量功能,vdpStateFcn.mvdpMeasurementFcn.m。这些函数描述的离散近似范德堡尔振荡器的非线性参数 μ 等于1。假设功能添加剂过程和测量系统中的噪声。初始状态两种状态的值指定为(1,0)。这是想为国家在初始时间的值k基于知识的系统输出,直到时间k - 1, x ˆ ( k | k - - - - - - 1 ]

obj = extendedKalmanFilter (@vdpStateFcn、@vdpMeasurementFcn [1, 0]);

加载测量输出数据y从振荡器。在这个例子中,使用模拟静态数据来说明。数据存储在vdp_data.mat文件。

负载vdp_data.maty

指定过程噪声和测量噪声协方差的振荡器。

obj。ProcessNoise = 0.01;obj。米easurementNoise = 0.16;

初始化数组来捕获估计的结果。

residBuf = [];xcorBuf = [];xpredBuf = [];

实现扩展的卡尔曼滤波算法估计美国振荡器的使用正确的预测命令。你第一次正确 x ˆ ( k | k - - - - - - 1 ] 使用测量时间k得到 x ˆ ( k | k ] 。然后,你在下次一步预测状态的价值 x ˆ ( k + 1 | k ] 使用 x ˆ ( k | k ] ,国家估计时间步k估计使用直到时间测量k

模拟实时数据测量,使用一个时间步的测量数据。计算之间的残余预测和实际测量,以评估过滤器执行和收敛。计算剩余是一个可选的步骤。当你使用剩余,立即命令之前正确的命令。如果预测匹配的测量,剩余是零。

执行时间的实时命令步骤后,缓冲结果运行后,这样你就可以把它们完成。

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

当你使用正确的命令,obj.Stateobj.StateCovariance更新与修正后的状态和状态估计误差协方差值时间步k,CorrectedStateCorrectedStateCovariance。当你使用预测命令,obj.Stateobj.StateCovariance和时间步的预测的值更新吗k + 1,PredictedStatePredictedStateCovariance。当你使用剩余命令,您不要修改任何obj属性。

在本例中,您使用正确的之前预测因为初始状态值 x ˆ ( k | k - - - - - - 1 ] ,一个国家想在初始时间的值k基于系统输出,直到时间k - 1。如果你的初始状态值 x ˆ ( k - - - - - - 1 | k - - - - - - 1 ] ,在之前的时间价值k - 1基于测量之前k - 1,然后使用预测命令。更多信息的顺序使用预测正确的,请参阅使用正确预测和命令

情节估计,使用主要价值观。

情节(xcorBuf (: 1) xcorBuf(:, 2)标题(“估计状态”)

图包含一个坐标轴对象。坐标轴对象与标题估计包含一个类型的对象。

情节的实际测量,测量胎儿估计,残留。测量功能vdpMeasurementFcn,测量是第一个状态。

M = [y, xcorBuf (: 1), residBuf);情节(M)网格标题(实际和估计测量,剩余的)传说(“测量”,“估计”,“残留”)

图包含一个坐标轴对象。坐标轴对象与实际标题和估计测量,剩余包含3线类型的对象。这些对象代表测量,估计的,剩余。

估计密切跟踪测量。在最初的瞬态之后,整个运行残余仍然相对较小。

范德堡尔颂歌数据加载,并指定样品的时间。

vdpODEdata.mat包含一个模拟的范德堡尔颂歌和非线性参数μ= 1,采用数值,初始条件(2,0)。的真实状态与样本提取时间dt = 0.05

目录(fullfile (matlabroot,“例子”,“控制”,“主要”))%添加示例数据负载(“vdpODEdata.mat”,“xTrue”,“dt”)tSpan = 0: dt: 5;

得到了测量。在这个例子中,一个传感器测量第一州与标准差的高斯噪声0.04

sqrtR = 0.04;yMeas = xTrue (: 1) + sqrtR * randn(元素个数(tSpan), 1);

创建一个粒子滤波,并设置状态转换和测量功能的可能性。

myPF = particleFilter (@vdpParticleFilterStateFcn @vdpMeasurementLikelihoodFcn);

初始化粒子滤波的状态[2;0]与单位协方差,和使用1000年粒子。

初始化(myPF, 1000,(2, 0),眼(2));

选择的意思是状态估计和系统的重采样方法。

myPF。StateEstimationMethod =“的意思是”;myPF。ResamplingMethod =“系统”;

估计美国使用正确的预测命令,并存储估计状态。

x = 0(大小(xTrue));k = 1:尺寸(xTrue, 1) x (k,:) =正确(myPF, yMeas (k));预测(myPF);结束

阴谋的结果,比较估计和真正的状态。

图(1)情节(xTrue (: 1), xTrue (:, 2),“x”x (: 1) x (:, 2),“罗”)传说(“真正的”,“估计”)

图包含一个坐标轴对象。坐标轴对象包含2线类型的对象。这些对象是真的,估计。

rmpath (fullfile (matlabroot,“例子”,“控制”,“主要”))%删除示例数据

考虑输入的非线性系统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。米easurementNoise = 0.01;

你现在可以估计系统的状态使用预测正确的命令。你通过的值u预测正确的,进而将它们传递到状态转换和测量功能,分别。

正确的状态估计与测量y(k]=0.8和输入u(k]=0.2在时间步k

正确的(obj, 0.8, 0.2)

预测下一个时间步的状态u(k]=0.2

预测(obj, 0.2)

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

[残余,ResidualCovariance] =剩余(obj, 0.8, 0.2);

输入参数

全部折叠

扩展或无味卡尔曼滤波、粒子滤波对象在线状态估计,使用以下命令之一:创建

测量系统输出在当前时间步,指定为一个N元向量,N是测量的数量。

额外的输入参数的测量功能系统,指定为任何类型的输入参数。测量功能,h中指定的MeasurementFcnMeasurementLikelihoodFcn的属性obj。如果函数需要输入参数除了状态和测量噪声值,指定这些输入的正确的命令语法。正确的命令将这些输入传递给测量或测量计算似然函数估计输出。您可以指定多个参数。

例如,假设你的测量或测量似然函数计算估计系统输出y使用系统的输入u和当前时间k,除了状态x:

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

当你在时间步执行在线状态估计k,指定这些额外的输入正确的命令语法:

[CorrectedState, CorrectedStateCovariance] =正确(obj, y, u (k), k);

输出参数

全部折叠

修正状态估计,作为一个向量返回的大小,在那里是系统的状态数。如果你指定的初始状态obj作为一个列向量作为一个列向量返回,否则吗返回一个行向量。

信息关于如何指定对象的初始状态,看到了extendedKalmanFilter,unscentedKalmanFilterparticleFilter参考页面。

修正状态估计误差协方差,作为一个返回——- - - - - -矩阵,是系统的状态数。

更多关于

全部折叠

使用预测正确的命令

您已经创建了一个扩展或无味卡尔曼滤波后,或粒子滤波对象,obj,实现估计算法,使用正确的预测命令在一起。

在时间步k,正确的命令返回修正后的状态和状态估计误差协方差值使用测量系统输出y [k]在同一时间的步骤。如果你的测量函数有额外的输入参数U,你指定这些作为输入正确的命令。该命令将这些值传递给测量功能。

[CorrectedState, CorrectedCovariance] =正确(obj, y,嗯)

正确的命令更新状态StateCovariance对象的属性与估计的值,CorrectedStateCorrectedCovariance

预测命令返回的状态和状态估计误差协方差预测下一个时间步。如果你的状态转换函数有额外的输入参数U年代,你指定这些作为输入预测命令。该命令将这些值传递给状态转换函数。

[PredictedState, PredictedCovariance] =预测(obj,美国)

预测命令更新状态StateCovariance与预测对象的属性值,PredictedStatePredictedCovariance

如果当前输出测量存在于一个给定的时间步长,可以使用正确的预测。如果测量失踪,你只能使用预测。这些命令是如何实现算法的详细信息,明白了扩展和无味卡尔曼滤波算法在线状态估计

您实现命令的顺序取决于测量数据的可用性y,U年代,U为你的系统:

  • 正确的然后预测——假设在时间步k的价值,obj.State x ^ ( k | k 1 ] 。这个值是系统的状态k直到时间估计,使用测量输出k - 1。你也有测量的输出y [k]和输入U年代[k]U[k]在同一时间的步骤。

    那么你首先执行正确的命令与测量系统数据y [k]和额外的输入U[k]。命令更新的价值obj.State x ^ ( k | k ] ,国家估计时间k估计,使用测量输出时间k。当你然后执行预测命令输入U年代[k],obj.State现在商店 x ^ ( k + 1 | k ] 。该算法使用这个状态值作为输入正确的命令在接下来的时间步。

  • 预测然后正确的——假设在时间步k的价值,obj.State x ^ ( k 1 | k 1 ] 。你也有测量的输出y [k]和输入U[k]但是你同时一步U年代(k - 1)从之前的时间步。

    那么你首先执行预测命令输入U年代(k - 1)。命令更新的价值obj.State x ^ ( k | k 1 ] 。当你然后执行正确的命令输入参数y [k]U[k],obj.State更新与 x ^ ( k | k ] 。该算法使用这个状态值作为输入预测命令在接下来的时间步。

因此,虽然在这两种情况下的状态估计的时间k, x ^ ( k | k ] 是一样的,如果在时间吗k你没有访问当前状态转换函数输入U年代[k],而不是U年代(k - 1),然后用预测首先,然后正确的

为评估国家使用的一个例子预测正确的命令,看到使用扩展卡尔曼滤波器估计状态在线使用粒子滤波估计状态在线

版本历史

介绍了R2016b