カルマンフィルターとは、制御システムや信号処理において、観測されるシステムの状態を推定するためのアルゴリズムである。具体的には、システムの状態に対する観測値がノイズで汚染されている場合に、真の状態を推定することが目的となる。

カルマンフィルターは、状態方程式と観測方程式が線形である場合に適用される。状態方程式は、システムの状態を時間的に変化させる数式である。観測方程式は、システムの状態を観測するための数式である。このような状況下で、カルマンフィルターは現在の観測値と過去の推定値を用いて、現在の状態を推定する。

カルマンフィルターは、以下の2つのステップに分けられる。

  1. 予測ステップ
    推定される状態 x^k\hat{x}_k の予測値を、システムの状態方程式を用いて次のように算出する。
x^kk1=Fkx^k1k1+Bkuk\begin{align*} \hat{x}_{k|k-1} &= F_k\hat{x}_{k-1|k-1} + B_ku_k \\ \end{align*}

ここで、FkF_kは状態遷移行列、BkB_kは入力行列、uku_kは入力値である。

同様に、推定される誤差共分散行列 PkP_k の予測値を、以下のように算出する。

Pkk1=FkPk1k1FkT+Qk\begin{align*} P_{k|k-1} &= F_kP_{k-1|k-1}F_k^T + Q_k \end{align*}

ここで、QkQ_kは状態遷移に伴う誤差共分散行列である。

  1. 更新ステップ
    実際の観測値 yky_k を用いて、予測値を修正し、推定値 x^k\hat{x}_k を算出する。
y~k=ykHkx^kk1\begin{align*} \tilde{y}_k &= y_k - H_k\hat{x}_{k|k-1} \\ \end{align*}

ここで、HkH_kは観測行列である。

Kk=Pkk1HkT(HkPkk1HkT+Rk)1\begin{align*} K_k &= P_{k|k-1}H_k^T(H_kP_{k|k-1}H_k^T + R_k)^{-1} \end{align*}

ここで、RkR_kは観測に伴う誤差共分散行列である。

x^kk=x^kk1+Kky~kPkk=(IKkHk)Pkk1\begin{align*} \hat{x}_{k|k} &= \hat{x}_{k|k-1} + K_k\tilde{y}_k \\ P_{k|k} &= (I - K_kH_k)P_{k|k-1} \\ \end{align*}

このようにして算出された x^k\hat{x}_k が、カルマンフィルターによる推定値である。

カルマンフィルターは、状態方程式や観測方程式が線形である場合に限られるが、非線形な場合でも拡張カカルマンフィルターや粒子フィルタなどの手法が存在する。また、カルマンフィルターは、制御システムや信号処理に限らず、様々な分野で利用されている。

リンク

Kalman filter[EN]