主要内容

本页采用了机器翻译。点击此处可查看英文原文。

initialize

初始化粒子滤波器的状态

说明

initialize(pf,numParticles,mean,covariance) 用于初始化一个具有指定粒子数量的粒子滤波器对象。粒子在状态空间中的初始状态,是通过从具有指定 meancovariance 的多元正态分布中采样来确定的。状态变量 (NumStateVariables) 的数量会根据 mean 向量的长度自动获取。

示例

initialize(pf,numParticles,stateBounds) 通过从给定 stateBounds 的多元均匀分布中采样,来确定 numParticles 粒子的初始位置。

initialize(___,Name,Value) 通过一个或多个 Name,Value 成对参量指定的附加选项来初始化粒子。

示例

全部折叠

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

在此示例中,函数 vdpParticleFilterStateFcnvdpMeasurementLikelihoodFcn 描述了范德波尔振荡器的离散逼近,其非线性参数 μ 等于 1。

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

myPF = particleFilter(@vdpParticleFilterStateFcn,@vdpMeasurementLikelihoodFcn);

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

initialize(myPF, 1000, [2;0], eye(2));
myPF
myPF = 
  particleFilter with properties:

           NumStateVariables: 2
                NumParticles: 1000
          StateTransitionFcn: @vdpParticleFilterStateFcn
    MeasurementLikelihoodFcn: @vdpMeasurementLikelihoodFcn
     IsStateVariableCircular: [0 0]
            ResamplingPolicy: [1×1 particleResamplingPolicy]
            ResamplingMethod: 'multinomial'
       StateEstimationMethod: 'mean'
            StateOrientation: 'column'
                   Particles: [2×1000 double]
                     Weights: [1.0000e-03 1.0000e-03 1.0000e-03 1.0000e-03 1.0000e-03 1.0000e-03 1.0000e-03 1.0000e-03 1.0000e-03 1.0000e-03 1.0000e-03 1.0000e-03 1.0000e-03 1.0000e-03 1.0000e-03 1.0000e-03 1.0000e-03 1.0000e-03 … ] (1×1000 double)
                       State: 'Use the getStateEstimate function to see the value.'
             StateCovariance: 'Use the getStateEstimate function to see the value.'

要根据构建的对象估计状态和状态估计误差协方差,请使用 predictcorrect 命令。

创建一个粒子滤波对象,并使用函数句柄向该对象提供状态转移函数和观测似然函数。

myPF = particleFilter(@vdpParticleFilterStateFcn,@vdpMeasurementLikelihoodFcn);

若要使用自定义分布初始化此粒子滤波器对象,请先使用高斯分布或均匀分布对其进行初始化。然后生成符合所需自定义分布的粒子,并将它们分配给粒子滤波器对象。

例如,使用高斯分布初始化粒子滤波器,状态设为 [2; 0],协方差为单位,并使用 1000 个粒子。

initialize(myPF,1000,[2;0],eye(2));
myPF
myPF = 
  particleFilter with properties:

           NumStateVariables: 2
                NumParticles: 1000
          StateTransitionFcn: @vdpParticleFilterStateFcn
    MeasurementLikelihoodFcn: @vdpMeasurementLikelihoodFcn
     IsStateVariableCircular: [0 0]
            ResamplingPolicy: [1×1 particleResamplingPolicy]
            ResamplingMethod: 'multinomial'
       StateEstimationMethod: 'mean'
            StateOrientation: 'column'
                   Particles: [2×1000 double]
                     Weights: [1.0000e-03 1.0000e-03 1.0000e-03 1.0000e-03 1.0000e-03 1.0000e-03 1.0000e-03 1.0000e-03 1.0000e-03 1.0000e-03 1.0000e-03 1.0000e-03 1.0000e-03 1.0000e-03 1.0000e-03 1.0000e-03 1.0000e-03 1.0000e-03 … ] (1×1000 double)
                       State: 'Use the getStateEstimate function to see the value.'
             StateCovariance: 'Use the getStateEstimate function to see the value.'

选择一个分布,并使用 makedist (Statistics and Machine Learning Toolbox) 函数为其创建一个概率分布对象。

pd = makedist('Poisson');

使用 random (Statistics and Machine Learning Toolbox) 函数生成具有所需分布的粒子。

Particles = random(pd,myPF.NumStateVariables,myPF.NumParticles);

将这些粒子分配给粒子滤波器的 Particles 属性,以使用自定义分布初始化该对象。

myPF.Particles = Particles;

要根据构建的对象估计状态和状态估计误差协方差,请使用 predictcorrect 命令。

输入参数

全部折叠

颗粒过滤器,指定为一个对象。有关详细信息,请参阅 particleFilter

过滤器中使用的粒子数量,指定为一个标量。

除非性能是个问题,否则请勿使用少于 1000 个粒子。粒子数量越多,估计结果越准确,但会牺牲运行速度,因为算法需要处理更多的粒子。调整粒子数量是改善粒子滤波器跟踪效果的最佳方法。

粒子分布的均值,指定为一个向量。pfNumStateVariables 属性是根据该向量的长度设置的。

粒子分布的协方差,指定为一个 NN 列的矩阵,其中 NpfNumStateVariables 属性的值。

状态变量的边界,指定为一个 n×2 矩阵。pfNumStateVariables 属性是根据 n 的值设置的。每一行分别对应相应状态变量的下限和上限。状态变量的数量 (NumStateVariables) 会根据 stateBounds 数组的行数自动获取。

名称-值参数

全部折叠

Name1=Value1,...,NameN=ValueN 的形式指定可选参量对组,其中 Name 是参量名称,Value 是对应的值。名称-值参量必须出现在其他参量之后,但对各个参量对组的顺序没有要求。

如果使用的是 R2021a 之前的版本,请使用逗号分隔每个名称和值,并用引号将 Name 引起来。

示例: ...'StateOrientation','row'

循环变量,即由 CircularVariables 组成的、以逗号分隔的元组,并作为逻辑向量指定。每个使用圆坐标或角坐标的状态变量均用数字 1 标示。该向量的长度等于 NumStateVariablesparticleFilter 属性。

状态的取向,指定为由 StateOrientation 组成的以逗号分隔的成对值,该值可选为以下之一:'column' 或 'row'。如果是 'column',则对象 pfState 属性与 getStateEstimate 方法会将状态以列向量的形式返回,而 Particles 属性的维度为 NumStateVariables×NumParticles。如果是 'row',则状态采用行向量方式,且 Particles 的维度为 NumParticles×NumStateVariables

版本历史记录

在 R2017b 中推出