主要内容

预测

利用扩展卡尔曼滤波或无迹卡尔曼滤波或粒子滤波预测下一时刻的状态和状态估计误差协方差

描述

预测命令预测状态和状态估计误差协方差extendedKalmanFilterunscentedKalmanFilterparticleFilter对象的下一个时间步骤。为了实现扩展卡尔曼滤波算法或无迹卡尔曼滤波算法,使用预测正确的命令在一起。如果当前输出测量存在,可以使用预测正确的.如果缺少度量,您只能使用预测.有关命令使用顺序的信息,请参见使用预测和正确的命令

使用这个预测命令用于使用实时数据进行在线状态估计。当数据不能实时提供时,要计算识别模型的k -步前输出,使用预测为离线估计。

例子

PredictedStatePredictedStateCovariance) =预测(obj预测扩展卡尔曼滤波或无迹卡尔曼滤波或粒子滤波对象的状态估计和状态估计误差协方差obj在下一个时间步骤。

您创建obj使用extendedKalmanFilterunscentedKalmanFilterparticleFilter命令。你指定非线性系统的状态跃迁函数和测量函数obj.您还指定这些函数中的过程和测量噪声项是可加性的还是非可加性的。的状态属性存储最新的估计状态值。假设在时间步长kobj。状态 x k | k .这个值是时间的状态估计k,使用测量输出直到时间k.当你使用预测命令,软件返回 x k + 1 | k PredictedState输出。在哪里 x k + 1 | k 状态是时间的估计吗k + 1,使用测量到时间的输出进行估计k.的状态估计误差协方差 x k + 1 | k PredictedStateCovariance输出。该软件还更新状态StateCovariance的属性obj用这些修正值。

如果是状态转换函数,请使用此语法f你在obj。StateTransitionFcn有下列形式之一:

  • x (k) = f (x (k - 1))-用于添加过程噪声。

  • x (k) = f (x (k - 1), w (k - 1))-对于非添加剂的过程噪声。

在哪里xw为系统的状态噪声和过程噪声。唯一的输入f是状态和过程的噪声。

例子

PredictedStatePredictedStateCovariance) =预测(objUs1…Usn如果系统的状态转移函数需要这些输入,则指定额外的输入参数。您可以指定多个参数。

如果您的状态转换函数使用此语法f有下列形式之一:

  • x (k) = f (x (k - 1), Us1,…Usn)-用于添加过程噪声。

  • x (k) = f (x (k - 1), w (k - 1), Us1,…Usn)-对于非添加剂的过程噪声。

例子

全部折叠

利用无迹卡尔曼滤波算法和实测输出数据估计范德堡尔振荡器的状态。振荡器有两个状态和一个输出。

为振荡器创建一个无迹卡尔曼滤波对象。使用先前编写和保存的状态转换和测量功能,vdpStateFcn.mvdpMeasurementFcn.m.这些函数描述了非线性参数为1的范德堡尔振荡器的离散逼近。该功能假定系统中存在附加过程和测量噪声。指定这两个状态的初始状态值为[1;0]。这是对初始时刻状态值的猜测k,使用系统输出直到时间的知识k - 1 x ˆ k | k - 1

obj = unscentedKalmanFilter (@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: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。状态obj。StateCovariance是否更新修正状态和状态估计误差协方差值的时间步长kCorrectedStateCorrectedStateCovariance.当你使用预测命令,obj。状态obj。StateCovariance是否更新了时间步长的预测值k + 1PredictedStatePredictedStateCovariance

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

使用后校正值绘制估计状态。

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

图中包含一个轴对象。标题为Estimated States的axes对象包含一个类型为line的对象。

绘制实际测量值、修正后的估计测量值和残差。的测量函数vdpMeasurementFcn,测量是第一状态。

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

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

估计密切跟踪测量。在初始瞬态后,残余量在整个运行过程中保持相对较小。

加载van der Pol ODE数据,并指定示例时间。

vdpODEdata.mat包含一个具有非线性参数mu=1的van der Pol ODE的模拟,使用ode45,具有初始条件(2, 0).用采样时间提取真实状态dt = 0.05

负载(“vdpODEdata.mat”“xTrue”“dt”tSpan = 0:dt:5;

得到了测量。对于本例,传感器用带有标准偏差的高斯噪声测量第一个状态0.04

sqrtR = 0.04;yMeas = xTrue(:,1) + sqrtR*randn(numel(tSpan),1); / /输出

创建一个粒子过滤器,并设置状态转移和测量似然函数。

myPF = particleFilter (@vdpParticleFilterStateFcn @vdpMeasurementLikelihoodFcn);

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

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

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

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

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

x = 0(大小(xTrue));k=1:size(xTrue,1) xEst(k,:) = correct(myPF,yMeas(k));预测(myPF);结束

绘制结果,并比较估计的和真实的状态。

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

图中包含一个轴对象。轴对象包含两个类型为line的对象。这些对象表示True, Estimated。

考虑一个有输入的非线性系统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预测正确的,然后分别将它们传递给状态转换函数和测量函数。

用测量来修正状态估计yk] =0.8和输入uk] =0.2在时间步k

正确的(obj, 0.8, 0.2)

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

预测(obj, 0.2)

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

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

输入参数

全部折叠

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

状态转换函数的附加输入参数,指定为任意类型的输入参数。状态转移函数,f中指定的StateTransitionFcn对象的属性。如果函数除了需要状态和进程噪声值之外还需要输入参数,则可以在预测命令语法。

例如,假设状态转移函数计算预测的状态x在时间步k使用系统的输入u (k - 1)和时间k - 1除了国家x (k - 1)

x (k) = f (x (k - 1), u (k - 1), k - 1)

然后在时间步长上进行在线状态估计k中指定这些额外的输入预测命令语法:

[PredictedState, PredictedStateCovariance] =预测(obj u (k - 1), k - 1);

输出参数

全部折叠

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

有关如何指定对象的初始状态的信息,请参见extendedKalmanFilterunscentedKalmanFilterparticleFilter参考页面。

预测状态估计误差协方差,返回为——- - - - - -矩阵,是系统的状态数。

更多关于

全部折叠

使用预测正确的命令

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

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

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

正确的命令更新状态StateCovariance物体的属性和估计值CorrectedStateCorrectedCovariance

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

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

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

如果当前输出测量在给定的时间步长存在,您可以使用正确的预测.如果缺少度量,您只能使用预测.这些命令的具体实现方法请参见在线状态估计的扩展和无迹卡尔曼滤波算法

执行命令的顺序取决于测量数据的可用性yU年代,U为你的系统:

  • 正确的然后预测-假设在时间步长k的价值obj。状态 x k | k 1 .该值表示系统在某一时刻的状态k,使用测量输出直到时间k - 1.你也有测量的输出y [k]和输入U年代[k]U[k]同时步进。

    然后你首先执行正确的使用测量的系统数据进行命令y [k]和额外的输入U[k].命令用来更新obj。状态 x k | k ,对时间的状态估计k,使用测量到时间的输出进行估计k.然后执行预测命令输入U年代[k]obj。状态现在商店 x k + 1 | k .该算法使用该状态值作为正确的命令,在下一个时间步骤中执行。

  • 预测然后正确的-假设在时间步长k的价值obj。状态 x k 1 | k 1 .你也有测量的输出y [k]和输入U[k]在同一时间,但你有U年代(k - 1)从上一个时间步骤。

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

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

下面是使用预测正确的命令,看到利用无迹卡尔曼滤波在线估计状态使用粒子过滤器在线估计状态

介绍了R2016b