Main Content

initialize

粒子フィルターの状態を初期化

説明

initialize(pf,numParticles,mean,covariance) は、指定した粒子数で粒子フィルター オブジェクトを初期化します。状態空間における粒子の初期状態は、指定された meancovariance をもつ多変量正規分布からのサンプリングにより定義されます。状態変数の数 (NumStateVariables) は mean ベクトルの長さに基づいて自動的に取得されます。

initialize(pf,numParticles,stateBounds) は、与えられた stateBounds をもつ多変量一様分布からサンプリングすることにより、numParticles 粒子の初期位置を決定します。

initialize(___,Name,Value) は、1 つ以上の Name,Value のペアの引数で指定された追加オプションを使って粒子を初期化します。

すべて折りたたむ

粒子フィルター オブジェクトを作成し、そのオブジェクトに関数ハンドルを使用して状態遷移関数と測定尤度関数を提供します。

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: [1x1 particleResamplingPolicy]
            ResamplingMethod: 'multinomial'
       StateEstimationMethod: 'mean'
            StateOrientation: 'column'
                   Particles: [2x1000 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 ... ] (1x1000 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;

作成したオブジェクトから状態と状態推定誤差の共分散を推定するには、predict コマンドと correct コマンドを使用します。

入力引数

すべて折りたたむ

粒子フィルター。オブジェクトで指定します。詳細については、particleFilter を参照してください。

フィルターで使用される粒子の数。スカラーとして指定します。

パフォーマンスが問題になる場合を除き、1000 個以上の粒子を使用してください。粒子の数が多いほど推定結果は改善しますが、アルゴリズムでより多くの粒子を処理しなければならないため、パフォーマンス速度が犠牲になります。粒子フィルターの追跡を改善するには、粒子の数を調整するのが最良の方法です。

粒子分布の平均値。ベクトルとして指定します。pfNumStateVariables プロパティはこのベクトルの長さに基づいて設定されます。

粒子分布の共分散。N 行 N 列の行列として指定します。N は pfNumStateVariables プロパティの値です。

状態変数の範囲。n 行 2 列の行列として指定します。pfNumStateVariables プロパティは n の値に基づいて設定されます。各行は対応する状態変数の下限と上限に対応します。状態変数の数 (NumStateVariables) は、配列 stateBounds の行数に基づいて自動的に取得されます。

名前と値の引数

引数のオプションのペアを Name1=Value1,...,NameN=ValueN として指定します。Name は引数名、Value は対応する値です。名前と値の引数は他の引数の後に表示されなければなりませんが、ペアの順序は重要ではありません。

R2021a より前では、名前と値をそれぞれコンマを使って区切り、Name を引用符で囲みます。

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

循環変数。CircularVariables からなるコンマ区切りのペアで、logical ベクトルとして指定します。循環座標または角座標を使用する各状態変数は 1 で示されます。ベクトルの長さは particleFilterNumStateVariables プロパティと等しくなります。

状態の方向。'column' または 'row' の値をとる StateOrientation からなるコンマ区切りのペアとして指定します。'column' の場合、オブジェクト pfState プロパティと getStateEstimate メソッドは状態を列ベクトルとして返し、Particles プロパティの次元は NumStateVariablesNumParticles 列となります。'row' の場合、状態は行方向になり、Particles の次元は NumParticlesNumStateVariables 列です。

バージョン履歴

R2017b で導入