主要内容

预测

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

描述

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

例子

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))-用于非加性工艺噪声。

在哪里x而且w是系统的状态噪声和过程噪声。唯一的输入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.m而且vdpMeasurementFcn.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] = predict(obj);residBuf(k,:) =剩余;xcorBuf(k,:) = CorrectedState';xpredBuf(k,:) = PredictedState';结束

当您使用正确的命令,obj。状态而且obj。StateCovariance时间步的修正状态和状态估计误差协方差值是否更新kCorrectedState而且CorrectedStateCovariance.当您使用预测命令,obj。状态而且obj。StateCovariance是否更新了时间步长的预测值k + 1PredictedState而且PredictedStateCovariance

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

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

plot(xcorBuf(:,1), xcorBuf(:,2))“估计状态”

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

画出实际测量值,修正后的估计测量值和残差值。的测量函数vdpMeasurementFcn,测量值为第一状态。

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

图中包含一个axes对象。标题为Actual和Estimated Measurements, Residual的axis对象包含3个类型为line的对象。这些对象代表测量,估计,剩余。

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

加载van der Pol ODE数据,并指定采样时间。

vdpODEdata.mat包含了具有初始条件的非线性参数mu=1的van der Pol ODE的模拟,使用ode45(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(numel(tSpan),1);

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

myPF = particleFilter(@vdpParticleFilterStateFcn,@ vdpmeasurementlikehoodfcn);

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

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

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

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

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

xEst = 0 (size(xTrue));k=1:size(xTrue,1) xEst(k,:) = right (myPF,yMeas(k));预测(myPF);结束

绘制结果图,并将估计状态与真实状态进行比较。

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

图中包含一个axes对象。坐标轴对象包含两个line类型的对象。这些对象表示True、Estimated。

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)(√(x+u));H = @(x,v,u)(x+2*u+v^2);

f而且h分别是存储状态转换和测量函数的匿名函数的函数句柄。在测量函数中,由于测量噪声是非加性的,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)

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

[Residual, ResidualCovariance] = Residual (obj,0.8,0.2);

输入参数

全部折叠

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

状态转换函数的附加输入参数,指定为任意类型的输入参数。状态转移函数,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] = predict(obj,u(k-1),k-1);

输出参数

全部折叠

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

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

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

更多关于

全部折叠

使用预测而且正确的命令

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

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

[CorrectedState,CorrectedCovariance] = correct(obj,y,Um)

正确的命令更新状态而且StateCovariance具有估计值的对象的属性,CorrectedState而且CorrectedCovariance

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

[PredictedState, predictedco方差]= predict(obj,Us)

预测命令更新状态而且StateCovariance具有预测值的对象的属性,PredictedState而且PredictedCovariance

如果在给定的时间步上存在电流输出测量,则可以使用正确的而且预测.如果缺少测量,则只能使用预测.有关这些命令如何实现算法的详细信息,请参见在线状态估计的扩展和无气味卡尔曼滤波算法

执行命令的顺序取决于测量数据的可用性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中引入