オンライン状態推定のコマンド ラインでの検証
非線形システムのオンライン状態推定で extendedKalmanFilter
、unscentedKalmanFilter
または particleFilter
コマンドを使用してから、コードをアプリケーションに配布する前に推定を検証します。検証で推定の信頼度が低いことが示される場合、次の手順についてはオンライン状態推定のトラブルシューティングを参照してください。オンライン推定結果を検証した後は、MATLAB® Coder™ または MATLAB Compiler™ ソフトウェアを使用して、C/C++ コードまたはスタンドアロン アプリケーションを生成できます。
フィルターの性能を検証するには、さまざまなシナリオの測定出力データまたはシミュレーション出力データを使用して状態推定を実行します。
対象のすべての操作条件で推定が問題なく機能することを確認するには、異なる操作条件や入力値での出力データをシステムから取得します。たとえば、ノイズを含む位置測定を使用して車両の位置と速度を追跡すると仮定します。異なる車両速度や高速運転および低速運転でのデータを測定します。
さまざまなノイズ値で推定性能が低下しないことを確認するには、対象の操作条件のそれぞれについて、異なるノイズの実現による複数の実験データまたはシミュレーション データのセットを取得します。
これらのシナリオのそれぞれについて、出力推定誤差および状態推定誤差を調べることでフィルター性能をテストします。オンライン状態推定の実行例および検証例については、アンセンテッド カルマン フィルターおよび粒子フィルターを使用した非線形の状態推定を参照してください。
出力推定誤差の確認
出力推定誤差は測定出力 y
と推定出力 yEstimated
の差です。システムの測定関数を使用して、各タイム ステップでの推定出力を取得できます。たとえば、vdpMeasurementFcn.m
が非線形システムの測定関数であり、拡張カルマン フィルター オブジェクト obj
を使用して状態推定を実行している場合、現在の状態推定を次のように使用して推定出力を計算できます。
yEstimated = vdpMeasurementFcn(obj.State); estimationError = y-yEstimated;
ここで、obj.State
は predict
コマンドを使って状態を推定した後の状態値 です。 は、前の時間 k-1
までに測定された出力を使って推定された、時間 k
について予測された状態推定です。
extendedKalmanFilter
または unscentedKalmanFilter
を使用している場合、residual
を使用して推定誤差を得ることもできます。
[residual,residualCovariance] = residual(obj,y);
推定誤差 (残差) には次の特性がなければなりません。
小さい振幅 — 出力のサイズに関連する小さな誤差によって推定値の信頼性が高まります。
ゼロ平均
低い自己相関 (タイム ラグ 0 を除く) — 自己相関を計算するために、MATLAB の
xcorr
コマンドを使用できます。
シミュレーション データの状態推定誤差の確認
非線形システムの出力データのシミュレーションを行い、状態推定のデータを使用すると、真の状態値がわかります。推測値と真の状態値の間の誤差を計算して、その誤差を解析できます。任意のタイム ステップでの推定状態値は、predict
または correct
コマンドを使用した状態の推定後、obj.State
に格納されます。状態推定誤差は、次の特性を満たさなければなりません。
小さい振幅
ゼロ平均
低い自己相関 (タイム ラグ 0 を除く)
状態推定誤差の共分散を計算して、これをフィルターの StateCovariance
プロパティに格納されている状態推定誤差の共分散と比較することもできます。同様の値が得られると、フィルターの性能の信頼性が高まります。
参考
extendedKalmanFilter
| unscentedKalmanFilter
| particleFilter
| residual