主要内容

预测

使用扩展或Unspented Kalman滤波器或粒子滤波器预测状态和状态估计在下次步骤中的误差协方差

描述

预测命令预测状态和状态估计错误协方差ExtendedKalmanFilter.undentedkalmanfilter要么粒子滤片在下次步骤的对象。要实现扩展或Unscented Kalman滤波器算法,请使用预测正确命令一起。如果存在当前的输出测量,则可以使用预测正确。如果缺少测量,则只能使用预测。有关使用命令的订单的信息,请参阅使用预测和正确的命令

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

你创造了obj.使用ExtendedKalmanFilter.undentedkalmanfilter要么粒子滤片命令。您指定了非线性系统的状态转换功能和测量功能obj.。您还指定了过程和测量噪声术语是否在这些功能中是附加的或非不起作用。该对象的属性存储最新的估计状态值。假设在时间步骤K.obj.state. X ^ [ K. | K. ] 。该值是时间估计的时间K.,估计使用测量的输出直到时间K.。当你使用的时候预测命令,软件返回 X ^ [ K. + 1 | K. ] 在里面预测斯特ate.输出。哪里 X ^ [ K. + 1 | K. ] 是时候估计时间K + 1,估计使用测量输出直到时间K.。该命令返回状态估计错误协方差 X ^ [ K. + 1 | K. ] 在里面predightstatecovariance.输出。该软件还更新了StateCovariance.属性obj.使用这些校正的值。

如果状态转换函数,请使用此语法F你指定的obj.statetransitionfcn.具有以下形式之一:

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

  • x(k)= f(x(k-1),w(k-1))- 对于非资本过程噪声。

哪里XW.是系统的状态和过程噪声。唯一的输入F是州和过程噪音。

[预测斯特ate.predightstatecovariance.) =预测(obj.US1,... 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.mat.y

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

obj.processnoise = 0.01;obj.measurementnoise = 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:尺寸(y)[残差,残余转移性] =残差(obj,y(k));[纠正符,纠正符号统计信息] =正确(OBJ,Y(k));[预测史泰,predgegetstatecovariance] =预测(obj);REALBUF(k,:)=残差;Xcorbuf(k,:) =纠正符';xpredbuf(k,:) = predgegetstate';结束

当你使用的时候正确命令,obj.state.obj.statecovariance.使用纠正状态和状态估计更新时间步骤的错误协方差值K.纠正符号纠正策略。当你使用的时候预测命令,obj.state.obj.statecovariance.使用预测值进行更新时间步骤K + 1预测斯特ate.predightstatecovariance.

在这个例子中,你使用过正确之前预测因为初始状态值是 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)网格标题(“实际和估计测量,剩余”)传奇('衡量''估计''剩余的'

估计敏捷地追踪测量值。在初始瞬态之后,在整个运行过程中剩余仍然相对较小。

加载van der pol ode数据,并指定采样时间。

vdpodedata.mat.包含使用ODE45的非线性参数mu = 1的van der POL ode的模拟,具有初始条件[2; 0]。用采样时间提取真正的状态dt = 0.05

AddPath(FullFile(Matlabroot,“例子”'控制''主要')))%添加示例数据负载('vdpodedata.mat''xtrue''dt')TSPAN = 0:DT:5;

得到了测量。在这个例子中,一个传感器测量带有标准偏差的高斯噪声的第一状态0.04

SQRTR = 0.04;YMEAS = XTRUE(:,1)+ SQRTR * RANDN(NUMER(TSPAN),1);

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

mypf = plaretfilter(@ vdpparticlefilterstatefcn,@ vdpmeasurementlikelihoodfcn);

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

初始化(mypf,1000,[2; 0],眼睛(2));

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

mypf.stateestimationMethod ='意思';mypf.resamplingmethod ='systematic';

使用该州估算各国正确预测命令,并存储估计的状态。

XEST =零(尺寸(XTRUE));对于k = 1:尺寸(xtrue,1)xest(k,:) =正确(mypf,Ymeas(k));预测(MYPF);结束

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

图(1)绘图(Xtrue(:,1),Xtrue(:,2),'X',XEST(:1),XEST(:,2),'ro')传奇('真正''估计'

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

考虑一个带输入的非线性系统谁的状态X和测量y根据以下状态转换和测量方程式化:

X [ K. ] = X [ K. - 1 ] + [ K. - 1 ] + W. [ K. - 1 ]

y [ K. ] = X [ K. ] + 2 * [ K. ] + V. [ K. ] 2

过程噪声W.当测量噪声存在时,系统的噪声是可加性的V.是非过度的。

为系统创建状态转换功能和测量功能。使用额外输入指定函数

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

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

创建一个扩展的卡尔曼筛选对象,用于使用指定的函数估计非线性系统的状态。将状态的初始值指定为1,并且测量噪声为非二倍。

obj = ExtendedKalmanFilter(F,H,1,'hasadditivemeasurementnoise',假);

指定测量噪声协方差。

obj.measurementnoise = 0.01;

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

用测量校正国家估计y[K.] =0.8并输入[K.] =0.2在时间步骤K.

正确的(obj, 0.8, 0.2)

在下次步骤中预测状态[K.] =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);

输出参数

全部收缩

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

有关如何指定对象的初始状态的信息,请参阅ExtendedKalmanFilter.undentedkalmanfilter粒子滤片参考页面。

预测状态估计错误协方差,作为一个返回m-通过-m矩阵,m是系统的状态数量。

更多关于

全部收缩

使用预测正确命令

创建了扩展或Uncented Kalman筛选器或粒子过滤器对象后,obj.,实现估计算法,使用正确预测命令一起。

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

[纠正术,纠正转移性] =正确(OBJ,Y,UM)

正确命令更新StateCovariance.对象的属性具有估计值,纠正符号CorrectedCovariance

预测命令在下次步骤中返回状态和状态估计错误协方差的预测。如果您的状态转换函数有其他输入参数S.,您将这些指定为输入预测命令。该命令将这些值传递给状态转换函数。

[预测恒星,预测转移性] =预测(Obj,美国)

预测命令更新StateCovariance.具有预测值的对象的属性,预测斯特ate.predatecovariance.

如果当前输出测量存在于给定时间步骤中,则可以使用正确预测。如果缺少测量,则只能使用预测。有关这些命令如何实现算法的详细信息,请参阅扩展和Unstented Kalman滤波器算法用于在线状态估计

您实现命令的顺序取决于测量数据的可用性yS.,和m对于您的系统:

  • 正确然后预测- 假设在时间步骤K., 的价值obj.state. X ^ [ K. | K. - 1 ] 。该值是系统的状态K.,估计使用测量的输出直到时间K-1。您还具有测量的输出y [k]和投入S.[K]m[K]同时步骤。

    然后你先执行正确使用测量系统数据命令y [k]和其他投入m[K]。更新的值obj.state.成为 X ^ [ K. | K. ] ,国家估计时间K.,估计使用测量的输出达到时间K.。当你执行时预测使用输入命令S.[K]obj.state.现在商店 X ^ [ K. + 1 | K. ] 。该算法使用该状态值作为输入正确下次步骤中的命令。

  • 预测然后正确- 假设在时间步骤K., 的价值obj.state. X ^ [ K. - 1 | K. - 1 ] 。您还具有测量的输出y [k]并输入m[K]同时步骤,但你有S.[k-1]从上一步一步。

    然后你先执行预测使用输入命令S.[k-1]。更新的值obj.state. X ^ [ K. | K. - 1 ] 。当你执行时正确命令输入参数y [k]m[K]obj.state.是更新的 X ^ [ K. | K. ] 。该算法使用该状态值作为输入预测下次步骤中的命令。

因此,在两种情况下,状态估计时间K. X ^ [ K. | K. ] 是一样的,如果是在时候K.您无法访问当前状态转换功能输入S.[K],而是拥有S.[k-1],然后使用预测首先正确

有关使用该估计状态的示例预测正确命令,参见使用Unspented Kalman Filter在线估算状态要么使用粒子过滤器在线估算状态

介绍在R2016B.