主要内容

粒子滤片

用于在线状态估计的粒子过滤器对象

描述

粒子过滤器是递归,使用离散粒子来近似估计状态的后部分布。它可用于在线状态估计,当测量和系统模型相关的何时将模型状态与测量相关联。粒子滤波器算法递归地计算状态估计,涉及初始化,预测和校正步骤。

粒子滤片使用离散时间粒子滤波器算法创建用于离散时间非线性系统的在线状态估计的对象。

考虑一个有状态的植物X, 输入, 输出m,过程噪声W.和测量y。假设您可以将工厂代表为非线性系统。

该算法计算状态估计值 X ^ 使用状态转换和测量似曲功能的非线性系统您指定。

该软件支持任意非线性状态转金宝app换和测量模型,具有任意过程和测量噪声分布。

要执行在线状态估计,请创建非线性状态转换功能和测量似然函数。然后构建粒子滤片对象使用这些非线性函数。创建对象后:

  1. 使用初始化粒子初始化命令。

  2. 预测使用该步骤的状态估计预测命令。

  3. 使用校正国家估计数正确的命令。

预测步骤使用最新状态来基于您提供的状态转换模型来预测下一个状态。校正步骤使用电流传感器测量来校正状态估计。该算法可选地重新分配或重新起皱状态空间中的粒子以匹配估计状态的后部分布。每个粒子表示这些状态变量的离散状态假设。所有粒子的集合用于帮助确定状态估计。

创建

对象描述

例子

PF.=粒子漂白剂(StateTransitionFCN.MeasurementLikelihoodfcn.创建用于离散时间非线性系统的在线状态估计的粒子过滤器对象。StateTransitionFCN.是在给定时步骤的状态向量,在下次步骤中计算粒子(状态假设)的功能。MeasurementLikelihoodfcn.是一个函数,它根据传感器测量值计算每个粒子的可能性。

创建对象后,使用初始化命令用已知的平均值和协方差初始化粒子或限定的边界内的均匀分布粒子。然后,使用正确的预测命令来使用传感器测量更新粒子(以及状态估计)。

输入参数

展开全部

状态转换函数指定为函数句柄,确定时间步长之间的粒子(状态假设)的转换。也是一个财产粒子滤片对象。有关更多信息,请参见特性

指定为函数手柄的测量似然函数用于计算粒子(状态假设)从传感器测量的可能性。也是一个财产粒子滤片对象。有关更多信息,请参见特性

特性

展开全部

状态变量的数量,指定为标量。此属性是只读的,设置使用初始化。基于初始粒子的初始矩阵或状态界限的指定矩阵来隐含状态。

过滤器中使用的粒子数,指定为标量。每个粒子代表一个状态假设。您才通过使用仅指定此属性初始化

状态转换函数指定为函数句柄,确定时间步长之间的粒子(状态假设)的转换。该功能在下次步骤中计算颗粒,包括在时间步骤中给定颗粒的过程噪声。

相比之下,状态转换功能ExtendedKalmanFilter.undentedkalmanfilter在给定时间步骤生成单个状态估计。

您为非线性系统编写并保存状态转换功能,并在构建时将其指定为函数句柄粒子滤片对象。例如,如果vdpparticlefilterstatefcn.m.是状态转换功能,指定StateTransitionFCN.作为@vdpparticlefilterstatefcn.。您也可以指定StateTransitionFCN.作为匿名功能的函数处理。

函数签名如下:

函数预测术= mystatetransitionfcn(以前的术颗粒,varargin)

StateTransitionFCN.函数接受至少一个输入参数。第一个参数是一组粒子前一个部分表示上一个时间步骤的状态假设。可选地使用varargin.在该功能中,您可以使用额外的参数输入与预测下一个状态相关的任何额外参数预测, 如下:

预测(pf、__arg1最长)

如果陈辞那是'列',然后前一个部分是A.numstatevariables.——- - - - - -numparticles.数组中。如果陈辞那是'行',然后前一个部分是A.numparticles.——- - - - - -numstatevariables.数组中。

StateTransitionFCN.必须恰好返回一个输出,预测律,这是当前时间步骤的预测粒子位置(尺寸相同的阵列)前一个部分)。

StateTransitionFCN.必须包括随机过程噪声(来自适合您申请的任何分发)预测律

查看状态转换功能的示例陈辞属性设置为“列”,类型编辑vdpparticlefilterstatefcn.在命令行。

指定为函数手柄的测量似然函数用于计算使用传感器测量的粒子(状态假设)的可能性。对于每个状态假设(粒子),该功能首先计算n元素测量假设向量。然后基于传感器测量和测量噪声概率分布来计算每个测量假设的可能性。

相比之下,测量功能ExtendedKalmanFilter.undentedkalmanfilter采用单一的状态假设并返回单个测量估计值。

您可以根据您的度量模型编写并保存度量可能性函数,并使用它来构造对象。例如,如果vdpMeasurementLikelihoodFcn.m是测量似然函数,指定MeasurementLikelihoodfcn.作为@vdpmeasurementlikelihoodfcn.。您也可以指定MeasurementLikelihoodfcn.作为匿名功能的函数处理。

函数签名如下:

功能似然= mymeasurementlikeliohefcn(预测颗粒,测量,varargin)

MeasurementLikelihoodfcn.函数接受至少两个输入参数。第一个参数是一组粒子预测律这代表了预测状态假说。如果陈辞那是'列',然后预测律是A.numstatevariables.——- - - - - -numparticles.数组中。如果陈辞那是'行',然后预测律是A.numparticles.——- - - - - -numstatevariables.数组中。第二个参数,测量,是当前时间步骤的n元素传感器测量。您可以使用额外的输入参数varargin.

MeasurementLikelihoodfcn.必须恰好返回一个输出,可能性,矢量与numparticles.长度,这是给定的可能性测量对于每个颗粒(状态假设)。

要查看测量似然函数的示例,请键入编辑vdpmeasurementlikelioiefcn.在命令行。

状态变量是否具有圆形分布,指定为逻辑阵列。

这是一个只读属性并使用初始化

圆形(或角度)分布使用具有一系列的概率密度函数(π-π,)istatevariablecircular.是一排矢量与numstatevariables.元素。每个矢量元素指示关联状态变量是圆形的。

确定何时触发重采样的策略设置,指定为aparticleresamplingpolicy对象。

粒子的重采样是使用粒子滤波器估计状态的重要步骤。它允许您根据当前状态选择粒子,而不是使用初始化时给出的粒子分布。通过对当前估计周围的粒子连续重采样,可以获得更准确的跟踪并提高长期性能。

您可以根据有效粒子的数量,以固定的间隔或动态方式触发重采样。最小有效粒子比是当前粒子集近似后验分布的程度的度量。有效粒子数计算公式为:

在这个方程,N是粒子的数量,和W.是每个颗粒的归一化重量。然后是有效的粒子比Neff/numparticles.。因此,有效粒度是所有颗粒的重量的函数。在粒子的重量达到足够低的值之后,它们没有贡献状态估计。该低值触发重新采样,因此粒子更接近当前状态估计并具有更高的权重。

以下属性particleresamplingpolicy可以在触发重新采样时修改对象以控制:

财产 价值 类型 描述

triggermethod.

“比”(默认)

'间隔'

字符向量

基于所选的值,它是确定重新采样时的方法。这'间隔'值触发在粒子滤波器操作的常规时间步骤重新采样。这“比”基于有效总粒子的比率触发重采样。

SamplingInterval.

1(默认)

标量子

重新采样之间的固定间隔,指定为标量。该间隔确定在哪些校正步骤期间执行重采样。例如,2的值表示重采样是执行每秒校正步骤。价值意味着从未执行重新采样。

此属性仅适用于此triggermethod.被设置为'间隔'

mineffectiveparticleratio

0.5(默认)

标量子

它是有效数量的颗粒与总颗粒总数的最小所需比率numparticles.。有效数量的颗粒是测量当前一组粒子近似于后部分布的程度。较低的有效粒度意味着较低数量的粒子是有助于估计和重采样。

如果有效数量的颗粒的比率与颗粒的总数numparticles.下面mineffectiveparticleratio,则触发重采样步长。

用于粒子重采样的方法,指定为以下之一:

  • '多行'

  • '剩余的'

  • '分层'

  • 'systematic'

用于从粒子中提取状态估计的方法,指定为以下之一:

  • '意思'- 对象输出粒子的加权平均值,具体取决于属性重量粒子,作为国家估计。

  • 'maxweight'- 该对象输出具有最高权重的粒子作为状态估计。

粒子值阵列,指定为基于阵列的阵列陈辞财产:

  • 如果陈辞'排'然后粒子是一个numparticles.——- - - - - -numstatevariables.数组中。

  • 如果陈辞'柱子'然后粒子是一个numstatevariables.——- - - - - -numparticles.数组中。

每一行或每一列对应一个状态假设(单个粒子)。

粒子重量,定义为基于值的矢量陈辞财产:

  • 如果陈辞'排'然后重量是A.numparticles.-1载向量,每个重量与同一行中的粒子相关联粒子财产。

  • 如果陈辞'柱子'然后重量是一个1-by-numparticles.向量,其中每个权重与同一列中的粒子相关联粒子财产。

的值定义为向量的当前状态估计陈辞财产:

  • 如果陈辞'排'然后状态是一个1-by-numstatevariables.向量

  • 如果陈辞'柱子'然后状态是A.numstatevariables.-By-1矢量

状态是只读属性,并来自于粒子基于最终于司法方法财产。参考最终于司法方法有关如何价值的详细信息状态是确定的。

状态随着StateCovariance.也可以使用GetStateEstimate

当前估计状态估计误差协方差,定义为numstatevariables.——- - - - - -numstatevariables.数组中。StateCovariance.是一个只读属性,是基于的最终于司法方法。如果指定不支持协方差的状态估计方法,则函数返回金宝appStateCovariance.作为 [ ]。

StateCovariance.状态可以一起使用GetStateEstimate

对象功能

初始化 初始化粒子过滤器的状态
预测 使用扩展或Unspented Kalman滤波器或粒子滤波器预测状态和状态估计在下次步骤中的误差协方差
正确的 使用扩展或Unspented Kalman滤波器或粒子滤波器和测量来正确的状态和状态估计错误协方差
GetStateEstimate 从粒子中提取最佳状态估计和协方差
克隆 复制在线状态估计对象

例子

全部收缩

要创建用于估计系统状态的粒子过滤器对象,为系统创建适当的状态转换功能和测量似然函数。

在此示例中,功能vdpParticleFilterStateFcn用非线性参数,MU,等于1.此外,对Van der POL振荡器进行离散时间近似。另外,它模拟高斯过程噪声。Vdpmeasurementlikelihie假设高斯测量噪声分布,功能计算粒子的可能性来自第一状态的噪声测量。

创建粒子过滤器对象。使用函数手柄为对象提供状态转换和测量似然。

mypf = plaretfilter(@ vdpparticlefilterstatefcn,@ vdpmeasurementlikelihoodfcn);

从构造对象初始化和估计状态和状态估计错误协方差,使用初始化预测, 和正确的命令。

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

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

加载 ('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') 传奇('真的'“估计”

图中包含一个坐标轴。轴线包含2个线型对象。这些对象表示True, Estimated。

扩展能力

在R2017B中介绍