Simulink でのオンライン状態推定の検証
非線形システムのオンライン状態推定で Extended Kalman Filter、Unscented Kalman Filter または Particle Filter ブロックを使用した後、コードをアプリケーションに配布する前に推定を検証します。検証で推定の信頼度が低いことが示される場合、次の手順についてはオンライン状態推定のトラブルシューティングを参照してください。オンライン推定の結果を検証したら、Simulink® Coder™ ソフトウェアを使用してブロックの C/C++ コードを生成できます。
フィルターの性能を検証するには、これらのシナリオの測定出力データまたはシミュレーション出力データを使用して状態推定を実行します。
対象のすべての操作条件で推定が問題なく機能することを確認するには、異なる操作条件や入力値での出力データをシステムから取得します。たとえば、ノイズを含む位置測定を使用して車両の位置と速度を追跡すると仮定します。異なる車両速度や高速運転および低速運転でのデータを測定します。
さまざまなノイズ値で推定性能が低下しないことを確認するには、対象となる操作条件のそれぞれについて、異なるノイズの実現による複数の実験データまたはシミュレーション データのセットを取得します。
これらの各シナリオについて、残差および状態推定誤差を調べることでフィルター性能をテストします。
残差の確認
残差、または出力推定誤差は、測定されたシステム出力 yMeasured[k]
と推定されたシステム出力 yPredicted[k|k-1]
のタイム ステップ k
での差です。ここで、yPredicted[k|k-1]
はタイム ステップ k
で推定された出力です。これはタイム ステップ k-1
までの出力測定値を使用して予測されます。
ブロックは yPredicted[k|k-1]
を明示的に出力しませんが、推定された状態値と状態遷移関数および測定関数を使ってこの出力を計算できます。例については、残差と状態推定誤差の計算を参照してください。
残差には次の特性がなければなりません。
小さい振幅 — 出力のサイズに関連する小さな誤差によって推定値の信頼性が高まります。
ゼロ平均
低い自己相関 (タイム ラグ 0 を除く) — 自己相関を計算するために、DSP System Toolbox™ ソフトウェアの Autocorrelation (DSP System Toolbox) ブロックを使用できます。
シミュレーション データの状態推定誤差の確認
非線形システムの出力データのシミュレーションを行い、状態推定のデータを使用すると、真の状態値がわかります。推測値と真の状態値の間の誤差を計算して、その誤差を解析できます。任意のタイム ステップで推定された状態値は、ブロックの [xhat] 端子で出力されます。状態推定誤差は、次の特性を満たさなければなりません。
小さい振幅
ゼロ平均
低い自己相関 (タイム ラグ 0 を除く)
状態推定誤差の共分散を計算して、これをブロックの [P] 端子内のブロックから出力された状態推定誤差の共分散と比較することもできます。同様の値が得られると、フィルターの性能の信頼性が高まります。
残差と状態推定誤差の計算
この例では、離散時間のファン デル ポール振動子の状態を推定し、推定を検証するために状態推定誤差と残差を計算する方法を説明します。残差は出力推定誤差、つまり測定された出力と推定された出力の差です。
Simulink™ モデル vdpStateEstimModel
では、Van der Pol Oscillator ブロックが 1 と等しい非線形パラメーター mu を使用して振動子を実装します。振動子には 2 つの状態があります。最初の状態 x1
のノイズを含む測定値を使用できます。
モデルは Unscented Kalman Filter ブロックを使用して振動子の状態を推定します。このブロックは離散時間入力を必要とするため、Rate Transition ブロックは x1
をサンプリングして、離散化された出力測定値 yMeasured[k]
をタイム ステップ k
で提供します。Unscented Kalman Filter ブロックは、時間 k
までの yMeasured
を使用して、タイム ステップ k
で推定された状態値 xhat[k|k]
を出力します。フィルター ブロックは、前に記述して保存した状態遷移関数 vdpStateFcn.m
と測定関数 vdpMeasurementFcn.m
を使用します。これらの関数の詳細については、アンセンテッド カルマン フィルターおよび粒子フィルターを使用した非線形の状態推定を参照してください。
状態推定を検証するため、モデルは Generate Residual ブロックで残差を計算します。さらに、真の状態値がわかっているので、モデルは状態推定誤差も計算します。
残差を計算するため、Generate Residual ブロックは、まず推定された状態および状態遷移関数と測定関数を使用して推定出力 yPredicted[k|k-1]
を計算します。ここで yPredicted[k|k-1]
は、タイム ステップ k-1
までの出力測定値を使用して予測された、タイム ステップ k
で推定された出力です。次に、ブロックはタイム ステップ k
での残差を yMeasured[k]
- yPredicted[k|k-1]
として計算します。
残差と状態推定誤差を調べて、ゲインが小さく、ゼロ平均で自己相関が低いことを確認します。
この例では、ブロックの [現在の測定値を使用して状態推定値を改善] パラメーターが選択されているので、Unscented Kalman Filter ブロックは xhat[k|k]
を出力します。このパラメーターをオフにすると、ブロックは代わりに、時間 k-1
までの yMeasured
を使用してタイム ステップ k
で予測された状態値 xhat[k|k-1]
を出力します。この場合は、yPredicted[k|k-1] = MeasurementFcn(xhat[k|k-1])
が計算されます。ここで、MeasurementFcn
はシステムの測定関数です。
参考
Kalman Filter | Extended Kalman Filter | Unscented Kalman Filter | Particle Filter