フィルタリングとは
フィルタリングとは、観測された時系列データに含まれるノイズ成分を取り除き、本来の信号成分を抽出するための技術です。
状態空間モデル
フィルタリングでは、直接観測できない内部状態 $x_t$ を、観測値 $z_t$ から推定します。このとき、システムの振る舞いを以下の2つのモデルで表現します。
- プロセスモデル(システムモデル): 状態 $x_t$ が時間と共にどう変化するかを記述します。 $$ x_t = f(x_{t-1}, u_{t-1}) + q_{t-1} \tag{1} $$
- 観測モデル: 状態 $x_t$ から観測値 $z_t$ がどのように生成されるかを記述します。 $$ z_t = h(x_t) + r_t \tag{2} $$
ここで、$u_t$ は制御入力、$q_t$ と $r_t$ はそれぞれプロセスノイズと観測ノイズであり、一般的に平均0の正規分布(ガウス分布)に従うと仮定されます。 $$ q \sim N(0, Q) $$ $$ r \sim N(0, R) $$ $Q$ と $R$ はノイズの共分散行列です。
カルマンフィルタ (Kalman Filter, KF)
概要
KFは、線形のシステムかつ、ノイズがガウス分布に従うという仮定のもとで、状態の平均と共分散を正確に推定する最適なフィルタです。 「予測」と「更新(フィルタリング)」の2つのステップを繰り返すことで、状態を逐次的に推定します。
アルゴリズム
状態 $x$ の確率分布を、平均 $\mu$ と共分散 $\Sigma$ で表現します。
1. 予測ステップ: 1ステップ前の状態推定値から、現在の状態を予測します。
- 事前状態推定値: 1ステップ前の状態 $\mu_{t-1}$ から現在の状態 $\hat{\mu}t$ を予測。 $$ \hat{\mu}t = A\mu{t-1} + Bu{t-1} \tag{3} $$
- 事前誤差共分散行列: 予測の不確かさ $\hat{\Sigma}_t$ を計算。 $$ \hat{\Sigma}t = A\Sigma{t-1}A^T + Q \tag{4} $$
2. 更新ステップ: 予測結果を観測値 $z_t$ で補正し、より確からしい現在の状態を推定します。
- カルマンゲイン: 予測と観測のどちらをどの程度重視するかを決定する係数。 $$ K_t = \hat{\Sigma}_t H^T (H\hat{\Sigma}_t H^T + R)^{-1} \tag{5} $$
- 事後状態推定値: 予測値 $\hat{\mu}_t$ を観測値 $z_t$ で補正。 $$ \mu_t = \hat{\mu}_t + K_t(z_t - H\hat{\mu}_t) \tag{6} $$
- 事後誤差共分散行列: 更新後の不確かさ $\Sigma_t$ を計算。 $$ \Sigma_t = (I - K_tH)\hat{\Sigma}_t \tag{7} $$
拡張カルマンフィルタ (Extended Kalman Filter, EKF)
概要
KFを非線形システムに拡張した手法です。非線形な関数を、現在の状態推定値の周りで**線形近似(テーラー展開の1次項まで利用)**することで、KFの枠組みを適用します。
方法
プロセスモデル $f$ と観測モデル $h$ を、ヤコビ行列(偏微分)を用いて線形化します。 $$ F_t = \frac{\partial f}{\partial x} \bigg|{x=\mu{t-1}} $$ $$ H_t = \frac{\partial h}{\partial x} \bigg|_{x=\hat{\mu}_t} $$ この $F_t$ と $H_t$ を、線形カルマンフィルタの $A$ と $H$ の代わりに用いて計算を行いますが、予測ステップの式は非線形のまま計算します。
- 課題: 非線形性が強いシステムでは、線形化による近似誤差が大きくなり、推定精度が劣化したり、発散したりすることがあります。
Unscentedカルマンフィルタ (Unscented Kalman Filter, UKF)
概要
EKFと同様に非線形システムを扱いますが、関数を直接線形化するのではなく、Unscented変換という手法で状態の確率分布を扱います。
方法
現在の状態分布を表現する少数の代表点(シグマ点)をサンプリングし、それぞれの点を非線形関数に通します。変換後の点の分布から、重み付き平均と共分散を再計算することで、EKFよりも高精度な推定を実現します。
- 利点: ヤコビ行列の計算が不要で、EKFよりも非線形性の強いシステムに対して頑健です。
粒子フィルタ (Particle Filter, PF)
概要
非線形・非ガウスの状態空間モデルを対象とした、より汎用的なフィルタリング手法です。モンテカルロ法に基づいています。
方法
状態の確率分布を、パーティクルと呼ばれる多数のサンプル点の集合で近似します。各パーティクルが状態の「仮説」を表しており、それぞれの尤度に基づいて重みが付けられます。
PFは主に「予測」「更新」「リサンプリング」のステップで構成されます。
- 予測: 全てのパーティクルをプロセスモデルに従って時間発展させます。
- 更新: 観測値が得られると、各パーティクルの尤度(観測値らしさ)を計算し、重みを更新します。
- リサンプリング: 重みに応じてパーティクルを再サンプリングします。これにより、尤度の低い(ありえない)パーティクルは消滅し、尤度の高いパーティクルが複製され、推定が効率的に行われます。
- 利点: ガウス分布以外の複雑な確率分布も表現できるため、非常に汎用性が高いです。
- 課題: 状態の次元が大きくなると、分布を適切に表現するために必要なパーティクル数が指数関数的に増大する「次元の呪い」という問題があります。