文档

particleFilter

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

描述

粒子滤波器是一种递归的贝叶斯状态估计器,它使用离散粒子来近似估计状态的后验分布。当测量和系统模型(将模型状态与测量相关联)可用时,它对于在线状态估计是有用的。粒子滤波算法递归地计算状态估计,包括初始化、预测和校正步骤。

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

考虑一个有状态的植物x、输入u、输出,过程噪声w,以及测量y.假设你可以把植物表示成一个非线性系统。

该算法计算状态估计 x 用你指定的状态转移和测量似然函数来计算非线性系统。

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

为了进行在线状态估计,需要建立非线性状态转移函数和测量似然函数。然后构造particleFilter对象使用这些非线性函数。创建对象后:

  1. 方法初始化粒子初始化命令。

  2. 方法预测下一步的状态估计预测命令。

  3. 方法修正状态估计正确的命令。

预测步骤使用最新状态,根据您提供的状态转换模型预测下一个状态。修正步骤使用电流传感器测量来修正状态估计。该算法可选地对状态空间中的粒子进行重分布或重采样,以匹配估计状态的后验分布。每个粒子代表这些状态变量的一个离散状态假设。所有粒子的集合用来帮助确定状态估计。

创建

语法

pf = particleFilter(StateTransitionFcn, measurementlikehoodfcn)

对象描述

例子

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

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

输入参数

全部展开

状态转移函数,指定为函数句柄,确定粒子(状态假设)在时间步间的转移。也是一种属性particleFilter对象。有关更多信息,请参见属性

测量似然函数,指定为函数句柄,用于从传感器测量计算粒子(状态假设)的似然。也是一种属性particleFilter对象。有关更多信息,请参见属性

属性

全部展开

状态变量的个数,指定为标量。此属性是只读的,并使用初始化.状态的数量是隐式的,基于粒子初始平均值的指定矩阵,或状态边界。

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

状态转移函数,指定为函数句柄,确定粒子(状态假设)在时间步间的转移。这个函数计算下一个时间步的粒子,包括过程噪声,给定一个时间步的粒子。

相比之下,对于的状态转移函数extendedKalmanFilter而且unscentedKalmanFilter在给定的时间步上生成单个状态估计。

编写并保存非线性系统的状态转换函数,并在构造particleFilter对象。例如,如果vdpParticleFilterStateFcn.m状态转换函数是指定的吗StateTransitionFcn作为@vdpParticleFilterStateFcn.您还可以指定StateTransitionFcn作为匿名函数的函数句柄。

函数签名如下:

函数predictedParticles = myStateTransitionFcn(previousParticles,varargin)

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

预测(pf、__arg1最长)

如果StateOrientation那么'column'是什么意思呢previousParticles是一个NumStateVariables——- - - - - -NumParticles数组中。如果StateOrientation那么row是什么意思呢previousParticles是一个NumParticles——- - - - - -NumStateVariables数组中。

StateTransitionFcn必须返回一个输出,predictedParticles,为当前时间步长的预测粒子位置集(与previousParticles).

StateTransitionFcn必须将随机过程噪声(来自任何适合您的应用程序的分布)包含在predictedParticles

方法查看状态转换函数的示例StateOrientation属性设置为'column',类型编辑vdpParticleFilterStateFcn在命令行。

测量似然函数,指定为函数句柄,用于使用传感器测量计算粒子(状态假设)的似然。对于每个状态假设(粒子),该函数首先计算一个n元测量假设向量。然后根据传感器测量结果和测量噪声概率分布计算各测量假设的似然。

相比之下,测量函数为extendedKalmanFilter而且unscentedKalmanFilter接受单个状态假设并返回单个测量估计。

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

函数签名如下:

函数似然= mymeasurementlikedfcn (predictedParticles,measurement,varargin)

MeasurementLikelihoodFcn函数至少接受两个输入参数。第一个参数是粒子的集合predictedParticles这代表了预测状态假设。如果StateOrientation那么'column'是什么意思呢predictedParticles是一个NumStateVariables——- - - - - -NumParticles数组中。如果StateOrientation那么row是什么意思呢predictedParticles是一个NumParticles——- - - - - -NumStateVariables数组中。第二个论点,测量,为n元传感器在当前时间步长的测量值。使用提供额外的输入参数变长度输入宗量

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

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

状态变量是否具有指定为逻辑数组的圆形分布。

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

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

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

粒子重采样是使用粒子滤波器估计状态的一个重要步骤。它使您能够基于当前状态选择粒子,而不是使用初始化时给定的粒子分布。通过不断地对当前估计值周围的粒子进行重采样,可以获得更精确的跟踪并提高长期性能。

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

在这个方程中,N是粒子数,和w是每个粒子的归一化权值。有效粒子比为Neff/NumParticles.因此,有效粒子比是所有粒子权重的函数。当粒子的权重达到一个足够低的值后,它们对状态估计没有贡献。这个低值触发重采样,因此粒子更接近当前状态估计,具有更高的权重。

的以下属性particleResamplingPolicy对象可以修改为在触发重采样时控制:

财产 价值 类型 描述

TriggerMethod

“比”(默认)

“间隔”

特征向量

它是一种基于所选值确定重采样发生时间的方法。的“间隔”值触发粒子滤波操作的规则时间步重采样。的“比”值触发基于有效总粒子比率的重采样。

SamplingInterval

1(默认)

标量

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

该属性仅适用于TriggerMethod设置为“间隔”

MinEffectiveParticleRatio

0.5(默认)

标量

它是有效粒子数与总粒子数的最小期望比率NumParticles.有效粒子数是衡量当前粒子集与后验分布近似程度的一个指标。较低的有效粒子比意味着较少的粒子数量有助于估计和重采样是需要的。

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

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

  • 多项式的

  • “残留”

  • “分层”

  • “系统”

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

  • “的意思是”-对象输出粒子的加权平均值,取决于属性权重而且粒子据州政府估计。

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

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

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

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

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

粒子权重,定义为基于值的向量StateOrientation属性:

  • 如果StateOrientation“行”然后权重是一个NumParticles的同一行中的粒子相关联粒子财产。

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

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

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

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

状态是只读属性,并从粒子基于StateEstimationMethod财产。指StateEstimationMethod的值如何详细说明状态是确定的。

状态随着StateCovariance还可以用getStateEstimate

当前估计的状态估计误差协方差,定义为NumStateVariables——- - - - - -NumStateVariables数组中。StateCovariance是只读属性,并根据StateEstimationMethod.如果指定的状态估计方法不支持协方差,则函数返回万博1manbetxStateCovarianceAs[]。

StateCovariance而且状态可以一起确定使用吗getStateEstimate

对象的功能

初始化 初始化粒子过滤器的状态
预测 利用扩展卡尔曼滤波器或无气味卡尔曼滤波器或粒子滤波器预测下一时间步的状态和状态估计误差协方差
正确的 使用扩展或无气味卡尔曼滤波或粒子滤波和测量修正状态和状态估计误差协方差
getStateEstimate 从粒子中提取最佳状态估计和协方差
克隆 复制在线状态估计对象

例子

全部折叠

要创建用于估计系统状态的粒子滤波对象,请为系统创建适当的状态转移函数和测量似然函数。

在本例中,函数vdpParticleFilterStateFcn描述了非线性参数为= 1的van der Pol振荡器的离散时间近似。此外,它还对高斯过程噪声进行了建模。vdpMeasurementLikelihood函数从第一状态的噪声测量中计算粒子的似然,假设测量噪声分布为高斯。

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

myPF = particleFilter(@vdpParticleFilterStateFcn,@ vdpmeasurementlikehoodfcn);

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

加载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),“罗”)传说(“真正的”“估计”

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

扩展功能

在R2017b中引入