メインコンテンツ

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

extendedKalmanFilter

R2026a

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

説明

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

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

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

作成

説明

obj = extendedKalmanFilter(stateTransitionFcn,measurementFcn,initialState) は、離散時間非線形システムのオンライン状態推定用の拡張カルマン フィルター オブジェクトを作成します。

  • stateTransitionFcn は、時間 k-1 における状態ベクトルが与えられた場合の時間 k におけるシステムの状態を計算する関数です。この関数は、オブジェクトの StateTransitionFcn プロパティに格納されます。

  • measurementFcn は、時間 k における状態が与えられた場合の時間 k におけるシステムの出力測定を計算する関数です。この関数は、オブジェクトの MeasurementFcn プロパティに格納されます。

  • initialState は、状態推定の初期値を指定します。この値は、オブジェクトの State プロパティに格納されます。

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

  • predict は、タイム ステップ k-1 における状態値を使用して、タイム ステップ k の予測値で obj.State と obj.StateCovariance を更新します。

  • correct は、タイム ステップ k における測定データを使用して、タイム ステップ k の推定値で obj.State と obj.StateCovariance を更新します。

例

obj = extendedKalmanFilter(___,PropertyName=Value) は、名前と値の引数を使用してプロパティを追加で設定します。状態遷移関数、測定関数、および初期状態値を作成時に指定しない場合は、ドット表記を使用して指定します。たとえば、初期状態値が [1;0] の 2 状態システムの場合、作成後にそれらの値を指定するには obj.State = [1;0] を使用します。

例

プロパティ

すべて展開する

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

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

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

    調整可能なプロパティは State、StateCovariance、ProcessNoise、MeasurementNoise、StateTransitionFcn、MeasurementFcn、StateTransitionJacobianFcn、および 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)

HasMeasurementWrapping プロパティを有効にしている場合、測定関数の出力にラップの範囲も含まれていなければなりません。これは "N" 行 2 列の行列として指定します。1 列目に最小測定範囲、2 列目に最大測定範囲を指定します。"N" はシステムの測定値の数です。

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

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

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

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

  • 関数ハンドル — ヤコビ関数を記述して保存するか、generateJacobianFcn を使用してヤコビ関数を生成し、その関数のハンドルを指定します。たとえば、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 コマンドまたは predict コマンドを使用した後に、ドット表記を使用して変更できます。

測定ノイズ共分散。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 は調整可能なプロパティです。correct コマンドまたは predict コマンドを使用した後に、ドット表記を使用して変更できます。

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

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

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

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

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

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

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

加法性のプロセス ノイズに対するヤコビ関数の例を確認するには、MATLAB® コマンド プロンプトで次のように入力します。

edit vdpStateJacobianFcn

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

測定値のラップの有効化。0 または 1 として指定します。測定値のラップを有効にして、モデルの状態に依存しない循環測定がある場合に状態を推定できます。このパラメーターを選択する場合、指定する測定関数に次の 2 つの出力が含まれていなければなりません。

  1. タイム ステップ "k" の状態ベクトルが与えられた場合の測定値。タイム ステップ "k" における非線形システムの "N" 要素の出力測定ベクトルとして指定します。"N" はシステムの測定値の数です。

  2. 測定値のラップの範囲。"N" 行 2 列の行列として指定します。1 列目に最小測定範囲、2 列目に最大測定範囲を指定します。

HasMeasurementWrapping プロパティを有効にすると、定義した範囲内で測定残差がラップされ、正しくない測定残差の値によるフィルターの発散を防ぐのに役立ちます。例については、拡張カルマン フィルターを使用したラップされた測定値による状態推定を参照してください。

HasMeasurementWrapping は調整不可能なプロパティです。オブジェクトの作成中に 1 回だけ指定できます。状態推定オブジェクトの作成後は変更できません。

オブジェクト関数

correct拡張カルマン フィルター、アンセンテッド カルマン フィルター、または粒子フィルターと測定値を使用して、状態および状態推定誤差の共分散を修正します。
predict拡張カルマン フィルター、アンセンテッド カルマン フィルター、または粒子フィルターを使用した次のタイム ステップにおける状態および状態推定誤差の共分散の予測
residual拡張カルマン フィルターまたはアンセンテッド カルマン フィルターを使用するとき、測定残差と残差共分散を返す
cloneオンライン状態推定オブジェクトをコピー
generateJacobianFcn自動微分を使用して拡張カルマン フィルターの MATLAB ヤコビ関数を生成

例

すべて折りたたむ

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

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

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

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

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

ヤコビ関数が使用できない場合は、自動微分を使用して生成できます。

obj.StateTransitionJacobianFcn = generateJacobianFcn(obj,'state');
obj.MeasurementJacobianFcn = generateJacobianFcn(obj,'measurement');

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

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

obj = extendedKalmanFilter('HasAdditiveMeasurementNoise',false);

状態遷移関数と測定関数を指定します。前に記述して保存した関数 vdpStateFcn.m と vdpMeasurementNonAdditiveNoiseFcn.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);

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

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

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

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

obj.MeasurementNoise = 0.01;

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

タイム ステップ 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);

アルゴリズム

1 次離散時間の拡張カルマン フィルター アルゴリズムで、離散時間非線形システムのオンライン状態推定を実行します。

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

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

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

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

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

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

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

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

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

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

拡張機能

すべて展開する

バージョン履歴

R2016b で導入

すべて展開する