主要内容

particleFilter

粒子滤波对象在线状态估计

描述

粒子滤波是一种递归的贝叶斯状态估计量,利用离散粒子近似估计状态的后验分布。测量时是有用的在线状态估计和系统模型,模型状态相关的测量,是可用的。粒子滤波算法计算估计递归和涉及到初始化状态,预测和校正步骤。

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

考虑植物与状态x、输入u、输出、过程噪声w,测量y。假设您能代表植物作为非线性系统。

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

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

执行在线状态估计,创建非线性状态转换函数和似然函数测量。然后构造particleFilter使用这些对象的非线性函数。在您创建对象:

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

  2. 在下一步使用预测状态估计预测命令。

  3. 正确估计使用状态正确的命令。

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

创建

对象描述

例子

pf= particleFilter (StateTransitionFcn,MeasurementLikelihoodFcn)创建一个粒子滤波对象在线离散时间非线性系统的状态估计。StateTransitionFcn是一个函数,计算粒子(假设状态)下一个时间步,考虑到在一个时间步状态向量。MeasurementLikelihoodFcn是一个函数,计算每个粒子的可能性基于传感器测量。

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

输入参数

全部展开

状态转换函数,指定为一个函数处理,确定粒子的过渡(状态假设)之间的时间步骤。还的一个属性particleFilter对象。有关更多信息,请参见属性

测量似然函数,指定为一个处理函数,用于计算粒子的可能性(状态假设)传感器测量。还的一个属性particleFilter对象。有关更多信息,请参见属性

属性

全部展开

状态变量的数量,指定为一个标量。这个属性是只读的,设置使用初始化。州的数量是隐式根据指定的矩阵的最初的意思是粒子,或国家界限。

数量的粒子滤波器中使用,指定为一个标量。每个粒子代表一个国家的假设。只有使用你指定这个属性初始化

状态转换函数,指定为一个函数处理,确定粒子的过渡(状态假设)之间的时间步骤。这个函数计算下一个时间步的粒子,包括过程噪声、粒子在一个时间步。

相比之下,状态转换函数extendedKalmanFilterunscentedKalmanFilter生成一个单一的状态估计在给定的时间步长。

你写并保存状态转换函数为非线性系统,并指定一个函数构建时处理particleFilter对象。例如,如果vdpParticleFilterStateFcn.m状态转换函数,指定吗StateTransitionFcn作为@vdpParticleFilterStateFcn。您还可以指定StateTransitionFcn作为一个匿名函数的句柄函数。

函数签名如下:

函数predictedParticles = myStateTransitionFcn (previousParticles变长度输入宗量)

StateTransitionFcn函数接受至少一个输入参数。第一个参数是粒子的集合previousParticles代表国家的假设在前一个时间步。可选的使用变长度输入宗量函数允许您输入的任何额外的参数相关的预测下一个状态,使用预测,如下所示:

预测(pf、__arg1最长)

如果StateOrientation“列”呢previousParticles是一个NumStateVariables——- - - - - -NumParticles数组中。如果StateOrientation“行”呢previousParticles是一个NumParticles——- - - - - -NumStateVariables数组中。

StateTransitionFcn必须返回一个输出,predictedParticles,这是预测粒子的集合地点为当前时间步(数组维度一样previousParticles)。

StateTransitionFcn必须包括随机过程噪声(从任何分布适合于您的应用程序)的吗predictedParticles

看到一个状态转换函数的一个例子StateOrientation属性设置为“列”,类型编辑vdpParticleFilterStateFcn在命令行中。

测量似然函数,指定为一个处理函数,用于计算粒子的可能性(状态假设)使用传感器测量。为每个状态的假设(粒子),函数首先计算一个n元测量假设向量。那么每个测量的可能性假设计算基于传感器测量和测量噪声概率分布。

相比之下,测量功能extendedKalmanFilterunscentedKalmanFilter需要一个状态的假设,并返回一个单一的测量估计。

你写并保存测量似然函数根据你的测量模型,并使用它来构建对象。例如,如果vdpMeasurementLikelihoodFcn.m是测量似然函数,指定MeasurementLikelihoodFcn作为@vdpMeasurementLikelihoodFcn。您还可以指定MeasurementLikelihoodFcn作为一个匿名函数的句柄函数。

函数签名如下:

函数= myMeasurementLikelihoodFcn可能性(predictedParticles、测量、变长度输入宗量)

MeasurementLikelihoodFcn函数接受至少两个输入参数。第一个参数是粒子的集合predictedParticles代表预测状态的假设。如果StateOrientation“列”呢predictedParticles是一个NumStateVariables——- - - - - -NumParticles数组中。如果StateOrientation“行”呢predictedParticles是一个NumParticles——- - - - - -NumStateVariables数组中。第二个参数,测量n元传感器测量在当前时间步。你可以提供额外的输入参数使用变长度输入宗量

MeasurementLikelihoodFcn必须返回一个输出,可能性,一个向量NumParticles长度,给定的可能性测量对于每个粒子(状态假设)。

测量似然函数的一个例子,类型编辑vdpMeasurementLikelihoodFcn在命令行中。

状态变量是否有一个圆形分布,指定为一个逻辑数组。

这是一个只读属性,设置使用初始化

使用一个圆形(或角度)分布概率密度函数的范围(π-π,)IsStateVariableCircular是一个行向量,NumStateVariables元素。每个向量元素指示是否循环相关的状态变量。

政策决定何时触发重采样,指定为一个particleResamplingPolicy对象。

重采样的粒子是一个至关重要的一步使用粒子滤波估计状态。它使您能够选择粒子当前状态的基础上,而不是使用粒子分布在初始化。不断重采样的粒子在当前估计,可以得到更准确的跟踪和提高长期性能。

您可以触发重采样以固定时间间隔或动态,根据有效的粒子的数量。最低有效粒子比率衡量的是当前的粒子集接近后如何分布。有效的粒子的数量计算:

N e f f = 1 = 1 N ( w ) 2

在这个方程,N是粒子数,w每个粒子的规范化的重量。有效的粒子比Neff/NumParticles。因此,权重的有效粒子比是一个函数的所有粒子。后粒子的权重达到足够低的价值,他们并不是导致了状态估计。这种低价值触发重采样,所以粒子接近当前状态估计和有较高的权重。

以下的属性particleResamplingPolicy对象可以被修改来控制,当重采样触发:

财产 价值 类型 描述

TriggerMethod

“比”(默认)

“间隔”

特征向量

这是一个方法来确定当发生重采样时,根据选择的值。的“间隔”价值在固定时间触发重采样的粒子滤波操作步骤。的“比”值触发重采样率的基础上有效的总粒子。

SamplingInterval

1(默认)

标量

固定的重采样的时间间隔,指定为一个标量。这期间间隔决定了校正步骤执行重采样。例如,值为2意味着每秒钟执行重采样校正步骤。的值意味着永远不会执行重采样。

这个属性只适用于TriggerMethod被设置为“间隔”

MinEffectiveParticleRatio

0.5(默认)

标量

这是所需的最低有效粒子数比粒子的总数NumParticles。有效粒子数是衡量当前的粒子集的近似后验分布。低有效的粒子比意味着低导致了估计和重采样的粒子数量是必需的。

如果有效粒子数的比值粒子的总数NumParticles低于的MinEffectiveParticleRatio重采样步骤触发。

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

  • 多项式的——多项式重采样,也叫简化随机抽样,生成的N均匀分布的随机数独立开区间(0,1)并使用它们来选择粒子与体重成正比。

  • “残留”-残差重采样由两个阶段组成。第一阶段是一个确定性的复制的每个粒子权重比1 / N。第二阶段由随机抽样使用剩余的重量(贴上残差)。

  • “分层”——分层重采样粒子的整个人口分为子集称为地层。它pre-partitions(0,1)时间间隔为N不相交的子区间的大小1 / N。随机数是画在每个子区间和独立样本指标选择地层。

  • “系统”——系统重采样是类似于它还利用地层分层重采样。唯一的区别是它吸引了一个开区间的随机数(0,1 / N)剩下的在一个固定的采样点的计算是确定的1 / N步长。

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

  • “的意思是”——对象输出的加权平均粒子,根据属性权重粒子状态估计。

  • “maxweight”- - - - - -对象输出最高的粒子重量作为状态估计。

粒子值的数组,指定为一个基于数组StateOrientation属性:

  • 如果StateOrientation“行”然后粒子是一个NumParticles——- - - - - -NumStateVariables数组中。

  • 如果StateOrientation“列”然后粒子是一个NumStateVariables——- - - - - -NumParticles数组中。

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

粒子权重,定义为一个向量基础上的价值StateOrientation属性:

  • 如果StateOrientation“行”然后权重是一个NumParticles1的向量,其中每个重量与粒子在同一行粒子财产。

  • 如果StateOrientation“列”然后权重是1 -NumParticles向量,其中每个重量与粒子在同一列中粒子财产。

当前状态估计,定义为一个向量的值StateOrientation属性:

  • 如果StateOrientation“行”然后状态是1 -NumStateVariables向量

  • 如果StateOrientation“列”然后状态是一个NumStateVariables1的向量

状态是一个只读属性,是来自粒子基于StateEstimationMethod财产。指StateEstimationMethod细节的价值状态是确定的。

状态随着StateCovariance也可以决定使用吗getStateEstimate

当前状态估计误差协方差的估计,定义为一个NumStateVariables——- - - - - -NumStateVariables数组中。StateCovariance是一个只读属性和基于计算StateEstimationMethod。如果你指定一个状态估计方法不支持协方差,那么函数返回金宝appStateCovariance[]。

StateCovariance状态可以决定在一起使用吗getStateEstimate

对象的功能

初始化 初始化粒子滤波的状态
预测 预测状态和状态估计误差协方差在下次一步使用扩展或无味卡尔曼滤波、粒子滤波
正确的 正确的状态和状态估计误差协方差使用扩展或无味卡尔曼滤波、粒子滤波和测量
getStateEstimate 从粒子提取最佳状态估计和协方差
克隆 在线状态估计对象副本

例子

全部折叠

创建一个粒子滤波对象估计系统的状态,创建相应的状态转换函数和似然函数的测量系统。

在这个例子中,函数vdpParticleFilterStateFcn描述了一个离散近似范德堡尔振荡器的非线性参数,μ,等于1。此外,它高斯过程噪声的模型。vdpMeasurementLikelihood函数计算粒子的可能性噪声测量的第一状态,假设一个高斯测量噪声分布。

创建粒子滤波对象。使用功能处理提供状态转换和测量功能对象的可能性。

myPF = particleFilter (@vdpParticleFilterStateFcn @vdpMeasurementLikelihoodFcn);

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

版权2012年MathWorks公司. .

范德堡尔颂歌数据加载,并指定样品的时间。

vdpODEdata.mat包含一个模拟的范德堡尔颂歌和非线性参数μ= 1,采用数值,初始条件(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(元素个数(tSpan), 1);

创建一个粒子滤波,并设置状态转换和测量功能的可能性。

myPF = particleFilter (@vdpParticleFilterStateFcn @vdpMeasurementLikelihoodFcn);

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

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

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

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

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

x = 0(大小(xTrue));k = 1:尺寸(xTrue, 1) x (k,:) =正确(myPF, yMeas (k));预测(myPF);结束

阴谋的结果,比较估计和真正的状态。

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

图包含一个坐标轴对象。坐标轴对象包含2线类型的对象。这些对象是真的,估计。

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

引用

下午李[1]t . m . Bolic Djuric,“重采样的粒子滤波方法:分类、实现和战略,”IEEE信号处理杂志,32卷,不。3、2015年5月,页70 - 86。

扩展功能

版本历史

介绍了R2017b