Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

extendedKalmanFilter

オンライン状態推定に対する拡張カルマン フィルター オブジェクトの作成

説明

obj = extendedKalmanFilter(StateTransitionFcn,MeasurementFcn,InitialState) は、離散時間非線形システムのオンライン状態推定に対する拡張カルマン フィルター オブジェクトを作成します。StateTransitionFcn は、時間 k-1 における状態ベクトルが与えられた場合の時間 k でシステムの状態を計算する関数です。MeasurementFcn は、時間 k における状態が与えられた場合の時間 k でシステムの出力測定を計算する関数です。InitialState は状態推定の初期値を指定します。

オブジェクトを作成した後、correct コマンドと predict コマンドを使用し、1 次離散時間の拡張カルマン フィルター アルゴリズムとリアルタイム データを使用して状態推定および状態推定誤差の共分散値を更新します。

obj = extendedKalmanFilter(StateTransitionFcn,MeasurementFcn,InitialState,Name,Value) は 1 つ以上の Name,Value ペア引数を使用して、拡張カルマン フィルター オブジェクトの追加属性を指定します。

obj = extendedKalmanFilter(StateTransitionFcn,MeasurementFcn) は、指定された状態遷移関数と測定関数を使用して拡張カルマン フィルター オブジェクトを作成します。predict コマンドと correct コマンドを使用する前に、ドット表記を使って初期状態を指定してください。たとえば、初期状態値が [1;0] の 2 状態システムの場合、obj.State = [1;0] と指定します。

obj = extendedKalmanFilter(StateTransitionFcn,MeasurementFcn,Name,Value) は 1 つ以上の Name,Value ペア引数を使用して、拡張カルマン フィルター オブジェクトの追加属性を指定します。predict コマンドと correct コマンドを使用する前に、Name,Value のペア引数またはドット表記を使って初期状態値を指定してください。

obj = extendedKalmanFilter(Name,Value) は 1 つ以上の Name,Value ペア引数を使用して、指定されたプロパティで拡張カルマン フィルター オブジェクトを作成します。predict コマンドと correct コマンドを使用する前に、Name,Value のペア引数またはドット表記を使って状態遷移関数、測定関数、および初期状態の値を指定してください。

オブジェクトの説明

extendedKalmanFilter は 1 次離散時間の拡張カルマン フィルター アルゴリズムを使用して、離散時間非線形システムのオンライン状態推定のオブジェクトを作成します。

状態 x、入力 u、出力 y、プロセス ノイズ w および測定ノイズ v をもつプラントについて考えます。プラントを非線形システムとして表現できると仮定します。

アルゴリズムは指定した状態遷移関数と測定関数を使用して非線形システムの状態推定 x^ を計算します。ソフトウェアを使用して、これらの関数にノイズを加法性または非加法性として指定することができます。

  • 加法性ノイズ項 — 状態遷移方程式と測定方程式は次の形式で表されます。

    x[k]=f(x[k1],us[k1])+w[k1]y[k]=h(x[k],um[k])+v[k]

    ここで f は、タイム ステップ間の状態 x の変化を記述する非線形の状態遷移関数です。非線形の測定関数 h は、x をタイム ステップ k での測定値 y に関連付けます。wv はそれぞれ、ゼロ平均の無相関プロセス ノイズと測定ノイズです。これらの関数は、方程式の usum で表される追加の入力引数をもつこともできます。たとえば、追加引数はタイム ステップ k または非線形システムに対する入力 u にすることもできます。このような引数は複数存在する可能性があります。

    両方の方程式において、ノイズ項は加法性であることに注意してください。つまり、x(k) はプロセス ノイズ w(k-1) に線形に関連し、y(k) は測定ノイズ v(k) に線形に関連します。

  • 非加法性ノイズ項 — ソフトウェアでは、状態 x[k] と測定値 y[k] がそれぞれプロセス ノイズと測定ノイズの非線形関数である、より複雑な状態遷移関数と測定関数もサポートされます。ノイズ項が非加法性な場合、状態遷移方程式と測定方程式は次の形式で表されます。

    x[k]=f(x[k1],w[k1],us[k1])y[k]=h(x[k],v[k],um[k])

オンライン状態推定を実行する場合、最初に非線形の状態遷移関数 f と測定関数 h を作成します。次に、これらの非線形関数を使用して extendedKalmanFilter オブジェクトを構築し、ノイズ項が加法性であるか非加法性であるかを指定します。また、状態遷移関数と測定関数のヤコビアンを指定することもできます。これらを指定しない場合、ソフトウェアはヤコビアンを数値的に計算します。

オブジェクトを作成した後、predict コマンドを使用して次のタイム ステップでの状態推定を予測し、correct でアルゴリズムとリアルタイム データを使用して状態推定を修正します。アルゴリズムの詳細については、オンライン状態推定のための拡張カルマン フィルター アルゴリズムおよびアンセンテッド カルマン フィルター アルゴリズムを参照してください。

次のコマンドを extendedKalmanFilter オブジェクトとともに使用できます。

コマンド説明
correct

タイム ステップ k で測定されたデータを使用して、タイム ステップ k での状態と状態推定誤差の共分散を修正します。

predict

次のタイム ステップでの状態と状態推定誤差の共分散を予測します。

residual実際の測定値と予測測定値の差を返します。
clone

同じオブジェクト プロパティ値を使用して別のオブジェクトを作成します。

構文 obj2 = obj を使用した追加のオブジェクトは作成しません。この方法 (obj2) で作成された新しいオブジェクトのプロパティに加えられたすべての変更によって、元のオブジェクト (obj) のプロパティも変更されます。

extendedKalmanFilter オブジェクトのプロパティについては、プロパティを参照してください。

すべて折りたたむ

システムの状態を推定するための拡張カルマン フィルター オブジェクトを定義するには、最初にシステムの状態遷移関数と測定関数を記述して保存します。

この例では、前に記述して保存した状態遷移関数 vdpStateFcn.m と測定関数 vdpMeasurementFcn.m を使用します。これらの関数は、1 と等しい非線形パラメーター mu を使用して、ファン デル ポール振動子への離散近似を記述します。振動子には 2 つの状態があります。

2 つの状態の初期推定を指定します。M 要素の行ベクトルまたは列ベクトルとして推定を指定します。ここで、M は状態の数です。

initialStateGuess = [1;0];

拡張カルマン フィルターオブジェクトを作成します。関数ハンドルを使用して、オブジェクトへの状態遷移関数と測定関数を指定します。

obj = extendedKalmanFilter(@vdpStateFcn,@vdpMeasurementFcn,initialStateGuess);

オブジェクトには、プロセスと測定ノイズが加法性である既定の構造体があります。

作成したオブジェクトから状態と状態推定誤差の共分散を推定するには、correct コマンドと predict コマンドおよびリアルタイム データを使用します。

2 つの状態と 1 つの出力を使用して、ファン デル ポール振動子の拡張カルマン フィルター オブジェクトを作成します。前に記述して保存した状態遷移関数 vdpStateFcn.m と測定関数 vdpMeasurementFcn.m を使用します。これらの関数は、加法性プロセスと測定ノイズの項のために記述されます。2 つの状態の初期状態の値を [2;0] と指定します。

システムに 2 つの状態があり、プロセス ノイズが加法性であるため、プロセス ノイズは 2 要素ベクトルであり、プロセス ノイズ共分散は 2 行 2 列の行列になります。プロセス ノイズ項間に相互相関がないことと、両方の項に同じ分散 0.01 があることを仮定します。プロセス ノイズ共分散をスカラーとして指定できます。ソフトウェアはスカラー値を使用して、対角方向に 0.01 をもつ 2 行 2 列の対角行列を作成します。

オブジェクトの作成中にプロセス ノイズ共分散を指定します。

obj = extendedKalmanFilter(@vdpStateFcn,@vdpMeasurementFcn,[2;0],...
    'ProcessNoise',0.01);

あるいは、ドット表記を使用してオブジェクトを作成した後、ノイズ共分散を指定できます。たとえば、測定ノイズ共分散を 0.2 として指定します。

obj.MeasurementNoise = 0.2;

システムには 1 つの出力しかないため測定ノイズは 1 要素ベクトルであり、MeasurementNoise プロパティは測定ノイズの分散を表します。

2 つの状態と 1 つの出力を使用して、ファン デル ポール振動子の拡張カルマン フィルター オブジェクトを作成します。前に記述して保存した状態遷移関数 vdpStateFcn.m と測定関数 vdpMeasurementFcn.m を使用します。2 つの状態の初期状態の値を [2;0] と指定します。

obj = extendedKalmanFilter(@vdpStateFcn,@vdpMeasurementFcn,[2;0]);

拡張カルマン フィルター アルゴリズムは状態推定に状態遷移関数と測定関数のヤコビアンを使用します。ヤコビ関数を記述して保存し、オブジェクトへの関数ハンドルとして指定します。この例では、前に記述して保存した関数 vdpStateJacobianFcn.mvdpMeasurementJacobianFcn.m を使用します。

obj.StateTransitionJacobianFcn = @vdpStateJacobianFcn;
obj.MeasurementJacobianFcn = @vdpMeasurementJacobianFcn;

関数のヤコビアンを指定しないと、ソフトウェアが数値的にヤコビアンを計算することに注意してください。この数値計算によって処理時間が増加し、状態推定の数値が不正確になる可能性があります。

2 つの状態と 1 つの出力を使用して、ファン デル ポール振動子の拡張カルマン フィルター オブジェクトを作成します。状態遷移関数のプロセス ノイズ項が加法性であると仮定します。したがって、状態とプロセス ノイズ間には線形関係があります。また、測定ノイズ項は非加法性であると仮定します。したがって、測定と測定ノイズ間には非線形関係があります。

obj = extendedKalmanFilter('HasAdditiveMeasurementNoise',false);

状態遷移関数と測定関数を指定します。前に記述して保存した関数 vdpStateFcn.mvdpMeasurementNonAdditiveNoiseFcn.m を使用します。

状態遷移関数は、プロセス ノイズが加法性であると仮定して記述されます。測定関数は測定ノイズが非加法性であると仮定して記述されます。

obj.StateTransitionFcn = @vdpStateFcn;
obj.MeasurementFcn = @vdpMeasurementNonAdditiveNoiseFcn;

2 つの状態の初期状態の値を [2;0] と指定します。

obj.State = [2;0];

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

次の状態遷移方程式と測定方程式に従って状態 x と測定値 y が変化するような入力 u をもつ、非線形システムについて考えます。

x[k]=x[k-1]+u[k-1]+w[k-1]

y[k]=x[k]+2*u[k]+v[k]2

システムのプロセス ノイズ w は加法性で、測定ノイズ v は非加法性です。

システムの状態遷移関数と測定関数を作成します。追加入力 u を使用して関数を指定します。

f = @(x,u)(sqrt(x+u));
h = @(x,v,u)(x+2*u+v^2);

fh は状態遷移関数と測定関数をそれぞれ保存する無名関数に対する関数ハンドルです。測定関数では、測定ノイズが非加法性であるため、v も入力として指定されます。追加入力 u の前に、v が入力として指定されることに注意してください。

指定した関数を使用して、非線形システムの状態を推定するために拡張カルマン フィルター オブジェクトを作成します。状態の初期値を 1、測定ノイズを非加法性として指定します。

obj = extendedKalmanFilter(f,h,1,'HasAdditiveMeasurementNoise',false);

測定ノイズ共分散を指定します。

obj.MeasurementNoise = 0.01;

これで、predict コマンドと correct コマンドを使用して、システムの状態を推定できます。u の値を predictcorrect に渡すと、状態遷移関数と測定関数にそれぞれ渡されます。

タイム ステップ k で測定値 y[k]=0.8 と入力 u[k]=0.2 を使用して状態推定値を修正します。

correct(obj,0.8,0.2)

次のタイム ステップで u[k]=0.2 が与えられた場合の状態を予測します。

predict(obj,0.2)

予測値と測定値の誤差、つまり "残差" を取得します。

[Residual, ResidualCovariance] = residual(obj,0.8,0.2);

入力引数

すべて折りたたむ

状態遷移関数 f。関数ハンドルとして指定します。この関数は、タイム ステップ k-1 で状態ベクトルが与えられた場合の、タイム ステップ k でシステムの Ns 要素をもつ状態ベクトルを計算します。Ns は非線形システムの状態の数です。

非線形システムの状態遷移関数を記述および保存し、それを使用してオブジェクトを作成します。たとえば、vdpStateFcn.m が状態遷移関数の場合、StateTransitionFcn@vdpStateFcn として指定します。StateTransitionFcn を無名関数への関数ハンドルとして指定することもできます。

記述する関数への入力は、オブジェクトの HasAdditiveProcessNoise プロパティでプロセス ノイズを加法性として指定するか、非加法性として指定するかによって異なります。

  • HasAdditiveProcessNoise が true — プロセス ノイズ w は加法性であり、状態遷移関数は前のタイム ステップでの状態値の関数として状態が変化する方法を指定します。

    x(k) = f(x(k-1),Us1,...,Usn)

    ここで x(k) は時間 k で推定された状態であり、Us1,...,Usn はシステム入力やサンプル時間など、状態遷移関数で要求された任意の追加入力引数です。推定中にこれらの追加引数を predict コマンドに渡すと、これらは状態遷移関数に渡されます。

  • HasAdditiveProcessNoise が false — プロセス ノイズは非加法性であり、状態遷移関数はプロセス ノイズの関数として状態が変化する方法も指定します。

    x(k) = f(x(k-1),w(k-1),Us1,...,Usn)

加法性のプロセス ノイズを使用した状態遷移関数の例を確認するには、コマンド ラインで edit vdpStateFcn を入力します。

測定関数 h。関数ハンドルとして指定します。この関数は、タイム ステップ k で状態ベクトルが与えられた場合の、タイム ステップ k で非線形システムの N の要素をもつ出力測定ベクトルを計算します。N はシステムの測定値の数です。測定関数を記述して保存し、それを使用してオブジェクトを作成します。たとえば、vdpMeasurementFcn.m が測定関数の場合、MeasurementFcn@vdpMeasurementFcn として指定します。MeasurementFcn を無名関数への関数ハンドルとして指定することもできます。

関数への入力は、オブジェクトの HasAdditiveMeasurementNoise プロパティで測定ノイズを加法性として指定するか、非加法性として指定するかによって異なります。

  • HasAdditiveMeasurementNoise が true — 測定ノイズ v は加法性であり、測定関数は状態値の関数として測定値が変化する方法を指定します。

    y(k) = h(x(k),Um1,...,Umn)

    ここで y(k)x(k) は時間 k で推定された出力と推定された状態であり、Um1,...,Umn は測定関数で要求されたオプションの入力引数です。たとえば、オブジェクトを追跡するために複数のセンサーを使用する場合、追加入力をセンサーの位置にすることができます。推定中にこれらの追加引数を correct コマンドに渡すと、これらは測定関数に渡されます。

  • HasAdditiveMeasurementNoise が false — 測定ノイズは非加法性であり、測定関数は測定ノイズの関数として出力測定値が変化する方法も指定します。

    y(k) = h(x(k),v(k),Um1,...,Umn)

加法性のプロセス ノイズを使用した測定関数の例を確認するには、コマンド ラインで edit vdpMeasurementFcn を入力します。非加法性のプロセス ノイズを使用した測定関数の例を確認するには、コマンド ラインで edit vdpMeasurementNonAdditiveNoiseFcn を入力します。

初期状態推定値。Ns 要素ベクトルとして指定します。ここで Ns はシステムの状態の数です。システムに関する知識に基づいて、初期状態値を指定します。

指定した値は、オブジェクトの State プロパティに保存されます。InitialState を列ベクトルとして指定すると、State も列ベクトルになり、predict コマンドと correct コマンドは状態推定値を列ベクトルとして返します。それ以外の場合、行ベクトルが返されます。

単精度浮動小数点変数を使用するフィルターが必要な場合、InitialState を単精度のベクトル変数として指定します。たとえば、状態遷移関数 vdpStateFcn.m と測定関数 vdpMeasurementFcn.m を使用した 2 状態のシステムの場合、以下のように初期状態推定値 [1;2] を使用して拡張カルマン フィルター オブジェクトを作成します。

obj = extendedKalmanFilter(@vdpStateFcn,@vdpMeasurementFcn,single([1;2]))

データ型: double | single

名前と値のペアの引数

オプションの Name,Value の引数ペアをコンマ区切りで指定します。ここで、Name は引数名で、Value は対応する値です。Name は引用符で囲まなければなりません。Name1,Value1,...,NameN,ValueN のように、複数の名前と値のペア引数を任意の順序で指定できます。

Name,Value 引数を使用して、オブジェクトの作成時に extendedKalmanFilter オブジェクトのプロパティを指定します。たとえば、拡張カルマン フィルター オブジェクトを作成し、プロセス ノイズ共分散を 0.01 として指定します。

obj = extendedKalmanFilter(StateTransitionFcn,MeasurementFcn,InitialState,'ProcessNoise',0.01);

プロパティ

すべて折りたたむ

extendedKalmanFilter オブジェクトのプロパティには次の 3 つのタイプがあります。

  • Name,Value 引数を使用したオブジェクトの作成時またはその後の状態推定中の任意の時点で、複数回指定できる調整可能なプロパティ。オブジェクトの作成後に、ドット表記を使用して調整可能なプロパティを変更します。

    obj = extendedKalmanFilter(StateTransitionFcn,MeasurementFcn,InitialState);
    obj.ProcessNoise = 0.01;

    調整可能なプロパティは StateStateCovarianceProcessNoise および MeasurementNoise です。

  • オブジェクトの作成時またはその後にドット表記を使用して 1 回のみ指定できる調整不可能なプロパティ。これらのプロパティは correctpredict を使用して状態推定の前に指定します。StateTransitionFcnMeasurementFcnStateTransitionJacobianFcn および MeasurementJacobianFcn プロパティはこのカテゴリに属します。

  • オブジェクトの作成中に指定しなければならない調整不可能なプロパティ。HasAdditiveProcessNoise および HasAdditiveMeasurementNoise プロパティはこのカテゴリに属します。

測定ノイズ特性。次のいずれかの値として指定されます。

  • true — 測定ノイズ v は加法性です。MeasurementFcn で指定する測定関数 h は次の形をとります。

    y(k) = h(x(k),Um1,...,Umn)

    ここで y(k)x(k) は時間 k で推定された出力と推定された状態であり、Um1,...,Umn は測定関数で要求されたオプションの入力引数です。

  • false — 測定ノイズは非加法性です。測定関数は状態 "および" 測定ノイズの関数として出力測定値が変化する方法を指定します。

    y(k) = h(x(k),v(k),Um1,...,Umn)

HasAdditiveMeasurementNoise は調整不可能なプロパティです。このプロパティはオブジェクトの作成中にのみ指定できます。ドット表記を使用して変更することはできません。

プロセス ノイズ特性。次のいずれかの値として指定されます。

  • true — プロセス ノイズ w は加法性です。StateTransitionFcn で指定する状態遷移関数 f は次の形をとります。

    x(k) = f(x(k-1),Us1,...,Usn)

    ここで x(k) は時間 k での推定状態であり、Us1,...,Usn は状態遷移関数で要求された任意の追加入力引数です。

  • false — プロセス ノイズは非加法性です。状態遷移関数は前のタイム ステップで状態 "および" プロセス ノイズの関数として状態が変化する方法を指定します。

    x(k) = f(x(k-1),w(k-1),Us1,...,Usn)

HasAdditiveProcessNoise は調整不可能なプロパティです。このプロパティはオブジェクトの作成中にのみ指定できます。ドット表記を使用して変更することはできません。

測定関数 h。関数ハンドルとして指定します。この関数は、タイム ステップ k で状態ベクトルが与えられた場合の、タイム ステップ k で非線形システムの N の要素をもつ出力測定ベクトルを計算します。N はシステムの測定値の数です。測定関数を記述して保存し、それを使用してオブジェクトを作成します。たとえば、vdpMeasurementFcn.m が測定関数の場合、MeasurementFcn@vdpMeasurementFcn として指定します。MeasurementFcn を無名関数への関数ハンドルとして指定することもできます。

関数への入力は、オブジェクトの HasAdditiveMeasurementNoise プロパティで測定ノイズを加法性として指定するか、非加法性として指定するかによって異なります。

  • HasAdditiveMeasurementNoise が true — 測定ノイズ v は加法性であり、測定関数は状態値の関数として測定値が変化する方法を指定します。

    y(k) = h(x(k),Um1,...,Umn)

    ここで y(k)x(k) は時間 k で推定された出力と推定された状態であり、Um1,...,Umn は測定関数で要求されたオプションの入力引数です。たとえば、オブジェクトを追跡するために複数のセンサーを使用する場合、追加入力をセンサーの位置にすることができます。推定中にこれらの追加引数を correct コマンドに渡すと、これらは測定関数に渡されます。

  • HasAdditiveMeasurementNoise が false — 測定ノイズは非加法性であり、測定関数は測定ノイズの関数として出力測定値が変化する方法も指定します。

    y(k) = h(x(k),v(k),Um1,...,Umn)

加法性のプロセス ノイズを使用した測定関数の例を確認するには、コマンド ラインで edit vdpMeasurementFcn を入力します。非加法性のプロセス ノイズを使用した測定関数の例を確認するには、コマンド ラインで edit vdpMeasurementNonAdditiveNoiseFcn を入力します。

MeasurementFcn は調整不可能なプロパティです。correct コマンドを使用する前に、オブジェクトの作成中、またはオブジェクトの作成後にドット表記を使用して 1 回指定できます。correct コマンドを使用した後は変更できません。

測定関数 h のヤコビアン。以下のいずれかとして指定します。

  • [] — ヤコビアンは correct コマンドへのすべての呼び出しで数値計算されます。これにより、処理時間が増加し、状態推定の数値が不正確になる可能性があります。

  • 関数ハンドル — ヤコビ関数を記述して保存し、関数へのハンドルを指定します。たとえば、vdpMeasurementJacobianFcn.m がヤコビ関数の場合、MeasurementJacobianFcn@vdpMeasurementJacobianFcn として指定します。

    この関数は、状態および測定ノイズに対して測定関数の偏導関数を計算します。ヤコビ関数に対する入力数は、測定関数に対する入力数と等しくなければならず、両方の関数において同じ順序で指定しなければなりません。ヤコビ関数の出力数は HasAdditiveMeasurementNoise プロパティによって異なります。

    • HasAdditiveMeasurementNoise が true — この関数は状態に対する測定関数の偏導関数 (h/x) を計算します。出力は N 行 Ns 列のヤコビ行列です。ここで N はシステムの測定値の数で、Ns は状態の数です。

    • HasAdditiveMeasurementNoise が false — この関数は、測定ノイズ項に対する測定関数の偏導関数 (h/v) である、2 番目の出力も返します。2 番目の出力は N 行 V 列のヤコビ行列として返されます。ここで V は測定ノイズ項の数です。

加法性の測定ノイズに対するヤコビ関数の例を確認するには、コマンド ラインで edit vdpMeasurementJacobianFcn を入力します。

MeasurementJacobianFcn は調整不可能なプロパティです。correct コマンドを使用する前に、オブジェクトの作成中、またはオブジェクトの作成後にドット表記を使用して 1 回指定できます。correct コマンドを使用した後は変更できません。

測定ノイズ共分散。HasAdditiveMeasurementNoise プロパティの値に応じて、スカラーまたは行列として指定されます。

  • HasAdditiveMeasurementNoise が true — 共分散をスカラーまたは N 行 N 列の行数として指定します。ここで N はシステムの測定値の数です。測定ノイズ項の間に相互相関がなく、すべての項が同じ分散をもつ場合は、スカラーを指定します。ソフトウェアはスカラー値を使用して N 行 N 列の対角行列を作成します。

  • HasAdditiveMeasurementNoise が false — 共分散を V 行 V 列の行列として指定します。ここで V は測定ノイズ項の数です。correct を使用する前に MeasurementNoise を指定しなければなりません。MeasurementNoise をはじめて行列として指定してから MeasurementNoise を変更した後、スカラーとして指定することもできます。測定ノイズ項の間に相互相関がなく、すべての項が同じ分散をもつ場合は、スカラーとして指定します。ソフトウェアは、対角方向にスカラーをもつ V 行 V 列の対角行列にスカラーを拡張します。

MeasurementNoise は調整可能なプロパティです。これはドット表記を使用して変更できます。

プロセス ノイズ共分散。HasAdditiveProcessNoise プロパティの値に応じて、スカラーまたは行列として指定されます。

  • HasAdditiveProcessNoise が true — 共分散をスカラーまたは Ns 行 Ns 列の行列として指定します。ここで Ns はシステムの状態の数です。プロセス ノイズ項の間に相互相関がなく、すべての項が同じ分散をもつ場合は、スカラーを指定します。ソフトウェアはスカラー値を使用して Ns 行 Ns 列の対角行列を作成します。

  • HasAdditiveProcessNoise が false — 共分散を W 行 W 列の行列として指定します。ここで W はプロセス ノイズ項の数です。predict を使用する前に ProcessNoise を指定しなければなりません。ProcessNoise をはじめて行列として指定してから ProcessNoise を変更した後、スカラーとして指定することもできます。プロセス ノイズ項の間に相互相関がなく、すべての項が同じ分散をもつ場合は、スカラーとして指定します。ソフトウェアはスカラーを W 行 W 列の対角行列に拡張します。

ProcessNoise は調整可能なプロパティです。これはドット表記を使用して変更できます。

非線形システムの状態。サイズ Ns のベクトルとして指定します。ここで Ns はシステムの状態の数です。

predict コマンドを使用すると、State はタイム ステップ k-1 における状態値を使用して、タイム ステップ k で予測された値で更新されます。correct コマンドを使用すると、State はタイム ステップ k で測定されたデータを使用して、タイム ステップ k で推定された値で更新されます。

State の初期値はオブジェクトの作成中に InitialState 入力引数に指定した値です。InitialState を列ベクトルとして指定すると、State も列ベクトルになり、predict コマンドと correct コマンドは状態推定値を列ベクトルとして返します。それ以外の場合、行ベクトルが返されます。単精度浮動小数点変数を使用するフィルターが必要な場合、InitialState 入力引数を使用してオブジェクトを作成する際に、State を単精度変数として指定しなければなりません。

State は調整可能なプロパティです。これはドット表記を使用して変更できます。

状態推定誤差の共分散。スカラーまたは Ns 行 Ns 列の行列として指定します。ここで Ns はシステムの状態の数です。スカラーを指定すると、ソフトウェアはスカラー値を使用して Ns 行 Ns 列の対角行列を作成します。

InitialState 入力引数に指定する初期状態の値に確信がもてない場合、共分散に高い値を指定します。

predict コマンドを使用すると、StateCovariance はタイム ステップ k-1 における状態値を使用して、タイム ステップ k で予測された値で更新されます。correct コマンドを使用すると、StateCovariance はタイム ステップ k で測定されたデータを使用して、タイム ステップ k で推定された値で更新されます。

StateCovariance は調整可能なプロパティです。これは、correct コマンドまたは predict コマンドを使用した後、ドット表記を使用して変更できます。

状態遷移関数 f。関数ハンドルとして指定します。この関数は、タイム ステップ k-1 で状態ベクトルが与えられた場合の、タイム ステップ k でシステムの Ns 要素をもつ状態ベクトルを計算します。Ns は非線形システムの状態の数です。

非線形システムの状態遷移関数を記述および保存し、それを使用してオブジェクトを作成します。たとえば、vdpStateFcn.m が状態遷移関数の場合、StateTransitionFcn@vdpStateFcn として指定します。StateTransitionFcn を無名関数への関数ハンドルとして指定することもできます。

記述する関数への入力は、オブジェクトの HasAdditiveProcessNoise プロパティでプロセス ノイズを加法性として指定するか、非加法性として指定するかによって異なります。

  • HasAdditiveProcessNoise が true — プロセス ノイズ w は加法性であり、状態遷移関数は前のタイム ステップでの状態値の関数として状態が変化する方法を指定します。

    x(k) = f(x(k-1),Us1,...,Usn)

    ここで x(k) は時間 k で推定された状態であり、Us1,...,Usn はシステム入力やサンプル時間など、状態遷移関数で要求された任意の追加入力引数です。推定中にこれらの追加引数を predict コマンドに渡すと、これらは状態遷移関数に渡されます。

  • HasAdditiveProcessNoise が false — プロセス ノイズは非加法性であり、状態遷移関数はプロセス ノイズの関数として状態が変化する方法も指定します。

    x(k) = f(x(k-1),w(k-1),Us1,...,Usn)

加法性のプロセス ノイズを使用した状態遷移関数の例を確認するには、コマンド ラインで edit vdpStateFcn を入力します。

StateTransitionFcn は調整不可能なプロパティです。predict コマンドを使用する前に、オブジェクトの作成中、またはオブジェクトの作成後にドット表記を使用して 1 回指定できます。predict コマンドを使用した後は変更できません。

状態遷移関数 f のヤコビアン。以下のいずれかとして指定します。

  • [] — ヤコビアンは predict コマンドへのすべての呼び出しで数値計算されます。これにより、処理時間が増加し、状態推定の数値が不正確になる可能性があります。

  • 関数ハンドル — ヤコビ関数を記述して保存し、関数へのハンドルを指定します。たとえば、vdpStateJacobianFcn.m がヤコビ関数の場合、StateTransitionJacobianFcn@vdpStateJacobianFcn として指定します。

    この関数は、状態とプロセス ノイズに対する状態遷移関数の偏導関数を計算します。ヤコビ関数に対する入力数は、状態遷移関数の入力数と等しくなければならず、両方の関数において同じ順序で指定しなければなりません。関数の出力数は HasAdditiveProcessNoise プロパティによって異なります。

    • HasAdditiveProcessNoise が true — 関数は状態に対する状態遷移関数の偏導関数 (f/x) を計算します。出力は Ns 行 Ns 列のヤコビ行列です。ここで Ns は状態の数です。

    • HasAdditiveProcessNoise が false — 関数は、プロセス ノイズ項に対する状態遷移関数の偏導関数 (f/w) である、2 番目の出力も返さなければなりません。2 番目の出力は Ns 行 W 列のヤコビ行列として返されます。ここで W はプロセス ノイズ項の数です。

拡張カルマン フィルター アルゴリズムはヤコビアンを使用して状態推定誤差の共分散を計算します。

加法性のプロセス ノイズに対するヤコビ関数の例を確認するには、コマンド ラインで edit vdpStateJacobianFcn を入力します。

StateTransitionJacobianFcn は調整不可能なプロパティです。predict コマンドを使用する前に、オブジェクトの作成中、またはオブジェクトの作成後にドット表記を使用して 1 回指定できます。predict コマンドを使用した後は変更できません。

出力引数

すべて折りたたむ

オンライン状態推定に対する拡張カルマン フィルター オブジェクト。extendedKalmanFilter オブジェクトとして返されます。このオブジェクトは指定されたプロパティを使用して作成されます。correct コマンドと predict コマンドを使用して、拡張カルマン フィルター アルゴリズムを使用し、状態と状態推定誤差の共分散を推定します。

predict を使用すると、obj.Stateobj.StateCovariance はタイム ステップ k-1 における状態値を使用して、タイム ステップ k で予測された値で更新されます。correct を使用すると、obj.Stateobj.StateCovariance はタイム ステップ k で測定されたデータを使用して、タイム ステップ k で推定された値で更新されます。

互換性についての考慮事項

すべて展開する

R2020b での動作変更

拡張機能

R2016b で導入