主要内容

预测

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

描述

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

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

例子

PredictedStatePredictedStateCovariance) =预测(obj预测扩展或Unscented Kalman滤波器的状态估计和状态估计误差协方差,或粒子过滤器对象obj在下一次步骤。

你创造了obj使用extendedKalmanFilterunscentedKalmanFilter或者particleFilter命令。你指定非线性系统的状态跃迁函数和测量函数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)-对于非添加剂的过程噪声。

例子

全部折叠

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

为振荡器创建一个Unscented Kalman筛选对象。使用先前写入和保存的状态转换和测量功能,vdpstatefcn.m.vdpmeasurementfcn.m..这些功能描述了与Van der POL振荡器的离散近似,具有非线性参数,MU,等于1.该功能假设系统中的添加过程和测量噪声。指定两个状态为[1; 0]的初始状态值。这是初始时间猜测状态值的猜测k,使用系统输出的知识直到时间k - 1 x ˆ k | k - 1

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

加载测量的输出数据,y,来自振荡器。在此示例中,使用模拟静态数据进行插图。数据存储在vdp_data.mat文件。

负载vdp_data.maty

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

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

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

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

实现UndEnded Kalman滤波器算法来估计振荡器的状态通过使用该算法正确的预测命令。你第一次正确 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 ='systematic'

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

XEST =零(尺寸(XTRUE));k=1:size(xTrue,1) xEst(k,:) = correct(myPF,yMeas(k));预测(myPF);结束

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

图(1)情节(xTrue (: 1), xTrue (:, 2),“x”,XEST(:1),XEST(:,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.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);

输入参数

全部折叠

使用以下命令之一创建的扩展或Undented Kalman滤波器,或用于在线状态估计的粒子筛选器对象:

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

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

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

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

[预测史泰特,预先预测的柱形维托规格] =预测(OBJ,U(K-1),K-1);

输出参数

全部折叠

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

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

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

更多关于

全部折叠

使用预测正确的命令

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

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

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

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

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

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

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

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

执行命令的顺序取决于测量数据的可用性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),然后使用预测首先正确的

下面是使用预测正确的命令,看到使用Unspented Kalman Filter在线估算状态或者使用粒子过滤器在线估算状态

介绍了R2016b