ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

unscentedKalmanFilter

オンライン状態推定に対するアンセンテッド カルマン フィルター オブジェクトの作成

構文

obj = unscentedKalmanFilter(StateTransitionFcn,MeasurementFcn,InitialState)
obj = unscentedKalmanFilter(StateTransitionFcn,MeasurementFcn,InitialState,Name,Value)
obj = unscentedKalmanFilter(StateTransitionFcn,MeasurementFcn)
obj = unscentedKalmanFilter(StateTransitionFcn,MeasurementFcn,Name,Value)
obj = unscentedKalmanFilter(Name,Value)

説明

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

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

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

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

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

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

オブジェクトの説明

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

状態 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 を作成します。次に、これらの非線形関数を使用して unscentedKalmanFilter オブジェクトを構築し、ノイズ項が加法性であるか非加法性であるかを指定します。オブジェクトを作成した後、predict コマンドを使用して次のタイム ステップでの状態推定を予測し、correct でアンセンテッド カルマン フィルター アルゴリズムとリアルタイム データを使用して状態推定を修正します。アルゴリズムの詳細については、「オンライン状態推定のための拡張カルマン フィルター アルゴリズムおよびアンセンテッド カルマン フィルター アルゴリズム」を参照してください。

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

コマンド説明
correct

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

predict

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

clone

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

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

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

すべて折りたたむ

システムの状態を推定するためのアンセンテッド カルマン フィルター オブジェクトを定義するには、システムの状態遷移関数と測定関数を作成して保存します。

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

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

initialStateGuess = [1;0];

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

obj = unscentedKalmanFilter(@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 = unscentedKalmanFilter(@vdpStateFcn,@vdpMeasurementFcn,[2;0],...
    'ProcessNoise',0.01);

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

obj.MeasurementNoise = 0.2;

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

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

obj = unscentedKalmanFilter('HasAdditiveMeasurementNoise',false);

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

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

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

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

obj.State = [2;0];

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

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

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

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

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

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

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

obj = unscentedKalmanFilter(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)

入力引数

すべて折りたたむ

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

非線形システムの状態遷移関数を記述および保存し、それを使用してオブジェクトを作成します。たとえば、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 を入力します。

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

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

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

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

データ型: double | single

名前/値のペアの引数

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

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

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

プロパティ

すべて折りたたむ

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

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

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

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

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

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

平均の状態値の周りのシグマ ポイントの広がり。0 ~ 1 までの (0 < Alpha <= 1) スカラー値として指定します。

アンセンテッド カルマン フィルター アルゴリズムでは、システムの状態を平均値 State および分散 StateCovariance をもつ確率変数として扱います。次のタイム ステップの状態とその統計プロパティを計算するために、このアルゴリズムでは最初にアンセンテッド変換を使用して平均の State 値の周りに分散される状態値のセットを生成します。これらの生成された状態値をシグマ ポイントと呼びます。アルゴリズムは、各シグマ ポイントを状態遷移関数と測定関数への入力として使用して、新しい一連の変換された状態点と測定値を取得します。変換された点は、次のタイム ステップでの状態および状態推定誤差の共分散値を計算するために使用されます。

平均の状態値の周りのシグマ ポイントの広がりは、2 つのパラメーター Alpha および Kappa によって制御されます。3 番目のパラメーター Beta は、状態および測定の共分散の計算中に変換された点の重みに影響します。

  • Alpha — 平均の状態値の周りのシグマ ポイントの広がりを決定します。これは通常、小さい正の数値です。シグマ ポイントの広がりは Alpha に比例します。値が小さいほど、シグマ ポイントは平均の状態に近くなります。

  • Kappa — 2 番目のスケーリング パラメーター。通常は 0 に設定されます。値が小さいほど、シグマ ポイントは平均の状態に近くなります。広がりは Kappa の平方根に比例します。

  • Beta — 状態の分布の事前情報を組み込みます。ガウス分布の場合、Beta = 2 が最適です。

状態および状態の共分散の分布がわかっている場合は、これらのパラメーターを調整して分布の高次モーメントの変換を取得できます。アルゴリズムが追跡できるのは、状態の確率分布の単一のピークのみです。システムの状態分布に複数のピークがある場合、これらのパラメーターを調整してシグマ ポイントが単一のピークの周りにとどまるようにすることができます。たとえば、小さい Alpha を選択して、平均の状態値に近いシグマ ポイントを生成します。

詳細については、「アンセンテッド カルマン フィルター アルゴリズム」を参照してください。

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

変換されたシグマ ポイントの重みを調整するために使用される状態分布の特性。0 以上のスカラー値で指定します。ガウス分布の場合、Beta =2 が最適な選択です。

詳細については、Alpha プロパティの説明を参照してください。

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

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

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

平均の状態値の周りのシグマ ポイントの広がり。0 ~ 3 の (0 <= Kappa <= 3) スカラー値として指定します。Kappa は通常 0 として指定されます。値が小さいほど、シグマ ポイントは平均の状態に近くなります。広がりは Kappa の平方根に比例します。詳細については、Alpha プロパティの説明を参照してください。

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

測定関数 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 コマンドを使用した後は変更できません。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

非線形システムの状態遷移関数を記述および保存し、それを使用してオブジェクトを作成します。たとえば、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 コマンドを使用した後は変更できません。

出力引数

すべて折りたたむ

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

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

拡張機能

R2016b で導入