非線形カルマンフィルタ (1) - 線形カルマンフィルタ -
目次
本シリーズについて
非線形現象に対するカルマンフィルタを本で勉強したのでメモも兼ねてまとめます.
観測データに基づいて, 線形確率システムの状態ベクトルを逐次的に最適化・推定するアルゴリズムとして, カルマンフィルタが有名です. カルマンフィルタは状態ベクトルの時間発展と, 状態ベクトルの観測に線形性を仮定しているため, 非線形の現象に適用するためには工夫が必要となります. 本シリーズでは線形カルマンフィルタから順を追って非線形カルマンフィルタの実装へ進んでいきます.
- 非線形モデルに拡張したアンサンブルカルマンフィルタはこちら↓ dosuex.hatenablog.com
今回は状態遷移、観測がともに線形である(行列演算で記述できる)ケースを考えます.
TL;DR
コード( Jupyter notebook )はこちらです.
状態空間モデルで表される線形確率システム
を考えます。ここで, は状態ベクトル, は観測ベクトル, , はガウスノイズベクトルです. また は遷移行列, は駆動行列, は観測行列と呼ばれます. さらに, , , それぞれに対する誤差共分散行列としてを導入します.
取り急ぎ, 下式たちを実装すればカルマンフィルタができます. 添字の は時刻 の情報を用いて時刻の状態を推定する操作(予測)を表し, は現在の時刻の情報を用いて状態を最適化する操作(フィルタリング)を表します. また は時刻まで予測が完了している状態での時刻の最適化操作(スムージング)を表します.
カルマンフィルタ
1:初期値を , とおき, とする.
2:観測更新ステップ
A:カルマンゲイン
B:フィルタ推定値
C:フィルタ推定誤差共分散行列
3:時間更新ステップ
A:1段先予測値
B:予測誤差共分散行列
4: としてステップ2に戻る.
カルマンスムーザ
実装
動的な線形システムの逐次予測をカルマンフィルタを使って行います. 参考資料のp.56にある例の通り, 人工衛星の回転運動を線形近似した4次元システムを考えます.
ただし, : 人工衛星の姿勢角度, : 角速度, : 角加速度の平均値成分, : 角加速度のランダム成分であり, は平均0のガウスノイズです. サンプル間隔 で離散化すると時間発展は以下で記述されます.
ただし, ガウスノイズの分散は, とします. 状態ベクトルの初期値および推定値の初期値を
としてシミュレーションを行います. 衛星の姿勢角推定の結果を下図に示します.
緑線のフィルタ推定値は観測値の影響を大きく受けていますが, 赤線のスムージング推定値は姿勢角の真の動きに迫っている様子が見えます.