カルマンフィルター
カルマンフィルターは、 離散的な誤差のある観測から、時々刻々と時間変化する量(例えばある物体の位置と速度)を推定するために用いられる。レーダーやコンピュータビジョンなど、工学分野で広く用いられる。例えば、カーナビゲーションでは、機器内蔵の加速度計や人工衛星からの誤差のある情報を統合して、時々刻々変化する自動車の位置を推定するのに応用されている。カルマンフィルターは、目標物の時間変化を支配する法則を活用して、目標物の位置を現在(フィルター)、未来(予測)、過去(内挿あるいは平滑化)に推定することができる。
カルマンフィルターは、直接システムの状態が観測できない問題に対する状態推定法のひとつであるから、一般的に観測方程式を伴う問題に適用される。
カルマンフィルターは隠れマルコフモデル (hidden Markov model) の類似であると考えることができる。2者の主たる差異は隠れマルコフモデルにおける状態変数が、連続であるか離散であるかである。また、隠れマルコフモデルでは状態変数の未来への変化を任意の分布に従う形式で統計的に与えることができる一方で、カルマンフィルターでは、ガウス分布に従う雑音によって未来の状態変数が統計的に記述される点が異なっている。したがって、カルマンフィルターと隠れマルコフモデルの間には強固な双対性が存在する。ちなみに、カルマンフィルターの導出過程においては、「システムに付随する雑音の性質はガウス分布に従う」という仮定の下に行われるのが一般的であるが、雑音の性質がガウス分布に従わない場合であっても、カルマンフィルターは線形なクラスにおける最適推定値、すなわち線形最小分散推定値を導くことができる点で、汎用性に富んでいるといえる。
唯一に観測可能である、雑音の影響を受けた出力過程に基づいて(制御問題においては、入力も観測可能な過程となる)、カルマンフィルターを用いてシステムの状態を推定するためには、対象のシステムに対して、カルマンフィルターの理念に合致するような状態の遷移(すなわち状態過程)に関するモデルを与えなければならない。
反復推定との対応関係は、1 ステップ前の状態推定値が 1 ステップ前までの全ての観測値(入力値も含め)の情報を線形結合の形で保有しているという事実により与えられる。
以降、 x ^ n | m {\displaystyle {\hat {\boldsymbol {x}}}_{n|m}} は時刻 m 時点での時刻 n の状態推定値を示すものとする。
フィルターの現在(時刻 k )の状態(様子)は、以下の2つの変数で特徴付けられる。
x ^ k | k {\displaystyle {\hat {\boldsymbol {x}}}_{k|k}} システム(系)の状態推定値。
P k | k {\displaystyle P_{k|k}} 誤差の共分散行列(推定値の精度)。
カルマンフィルターは、時間ステップをひとつ進めるために予測と更新の二つの手続きを行う。予測の手続きでは、前の時刻の推定状態から、今の時刻の推定状態を計算する。更新では、今の時刻の観測を用いて、推定値を補正してより正確な状態を推定する。
, z k ) = p ( x 0 ) ∏ i = 1 k p ( z i | x i ) p ( x i | x i − 1 ) {\displaystyle p({\boldsymbol {x}}_{0},\dots ,{\boldsymbol {x}}_{k},{\boldsymbol {z}}_{1},\dots ,{\boldsymbol {z}}_{k})=p({\boldsymbol {x}}_{0})\prod _{i=1}^{k}p({\boldsymbol {z}}_{i}|{\boldsymbol {x}}_{i})p({\boldsymbol {x}}_{i}|{\boldsymbol {x}}_{i-1})}
で、表される。
一方、カルマンフィルターで状態 x を求めるには現在の系の状態とそれまでの観測だけを用いる。
カルマンフィルターの予測と更新の手続きを、確率を使って表してみる。予測後の状態の確率分布は、時刻 k − 1 から時刻 k への変化に関する確率と、時刻 (k − 1) の状態の積になるから、
p ( x k | Z k − 1 ) = ∫ p ( x k | x k − 1 ) p ( x k − 1 | Z k − 1 ) d x k − 1 {\displaystyle p({\boldsymbol {x}}_{k}|{\boldsymbol {Z}}_{k-1})=\int p({\boldsymbol {x}}_{k}|{\boldsymbol {x}}_{k-1})p({\boldsymbol {x}}_{k-1}|{\boldsymbol {Z}}_{k-1})\,d{\boldsymbol {x}}_{k-1}}
P k | k − 1 = F k P k − 1 | k − 1 F k T + G k Q k G k T {\displaystyle P_{k|k-1}=F_{k}P_{k-1|k-1}F_{k}^{\textrm {T}}+G_{k}Q_{k}G_{k}^{\textrm {T}}}
更新
e k = z k − h ( x ^ k | k − 1 , 0 ) {\displaystyle {\boldsymbol {e}}_{k}={\boldsymbol {z}}_{k}-h({\hat {\boldsymbol {x}}}_{k|k-1},0)}
S k = H k P k | k − 1 H k T + R k {\displaystyle S_{k}=H_{k}P_{k|k-1}H_{k}^{\textrm {T}}+R_{k}}
K k = P k | k − 1 H k T S k − 1 {\displaystyle K_{k}=P_{k|k-1}H_{k}^{\textrm {T}}S_{k}^{-1}}
カルマンフィルター (英: Kalman filter) は、誤差のある観測値を用いて、ある動的システムの状態を推定あるいは制御するための、無限インパルス応答フィルターの一種である。