カルマンフィルターシミュレーター 戻る
信号処理 / 制御工学

カルマンフィルターシミュレーター

ノイズまみれの観測データから真の状態を推定するカルマンフィルターを可視化。プロセスノイズ Q と観測ノイズ R を調整してフィルタ特性を直感的に理解できます。

パラメータ設定

計算結果
生データ RMSE
フィルタ後 RMSE
定常カルマンゲイン
最終共分散 P
信号推定(真値・観測値・カルマン推定)
Signal
カルマンゲイン K と誤差共分散 P の推移
Gain
理論・主要公式

$\hat{x}^- = F\hat{x},\quad P^- = P + Q$
更新ステップ
$K = P^- H^T / (HP^-H^T + R)$
$\hat{x}= \hat{x}^- + K(z - H\hat{x}^-)$
$P = (1-KH)P^-$
F=H=1(1次元等速モデル)

カルマンフィルターとは

🙋
カルマンフィルターって、GPSの位置情報を滑らかにするやつですよね?具体的に何を「フィルター」してるんですか?
🎓
ざっくり言うと、センサーの「観測ノイズ」と、予測モデルの「プロセスノイズ」という2種類の不確かさを、確率的に処理して最適な推定値を出すんだ。このシミュレーターの上のスライダー「観測ノイズ R」と「プロセスノイズ Q」を動かすと、そのバランスがどう結果に影響するか、すぐに体感できるよ。
🙋
「観測ノイズ R」を大きくすると、センサーが信用できないってことですよね?でも、じゃあ何を信じるんですか?
🎓
その通り!Rを大きくすると「センサーの値はブレてるから、あまり信用しないでおこう」と判断するんだ。代わりに、内部の予測モデル(ここでは等速直線運動モデル)をより信頼するようになる。だから推定値(緑線)は、実際の観測値(青点)よりも、モデルに基づいた滑らかな軌道(赤線)に近づく。逆にRを小さくしてQを大きくすると、センサーをガンガン信用して観測値にぴったり追従する動きになるよ。
🙋
なるほど!でも、モデルが間違ってたらどうなるんですか?例えば車が急に曲がったら?
🎓
良いところに気づいたね!それが「プロセスノイズ Q」の役割だ。Qは「モデルがどれだけ現実から外れる可能性があるか」を表すパラメータなんだ。車が急に曲がるかもしれない、エンジンの加速が予測と違うかもしれない、そういう不確かさをQで表現する。Qを大きく設定しておけば、モデルを過信せず、観測値の変化にも素早く反応できる。実務では、このQとRのチューニングが一番の腕の見せ所だね。

よくある質問

Qはモデルの予測の不確かさ、Rはセンサーの測定誤差を表します。Qを大きくするとフィルターは観測値を重視し、Rを大きくすると予測モデルを重視します。実際のシステムの特性に合わせて、シミュレーション結果を見ながら調整してください。
GPSとIMUを組み合わせた位置推定、ロボットの自己位置推定、気象予報、金融時系列分析、制御工学など、ノイズを含むセンサーデータから真の状態を推定するあらゆる分野で広く利用されています。
QやRの値が実際のノイズ特性と大きく乖離している可能性があります。特にQを極端に小さく設定すると、モデル予測を過信し観測値を無視して発散しやすくなります。初期値の設定も確認してください。
はい、同じ原理です。多次元では状態ベクトルと共分散行列が拡張され、行列演算で予測と更新を行います。本シミュレーターで1次元の基本動作を理解すれば、拡張カルマンフィルターなど高度な手法への応用も容易になります。

実世界での応用

GPSナビゲーション・位置追跡:衛星からの信号にはマルチパスや電離層の影響でノイズが含まれます。単純なGPSの位置情報は数メートル単位でブレますが、カルマンフィルターに車速センサーやジャイロの情報(プロセスモデル)を組み合わせることで、サブメートルレベルの滑らかで正確な位置推定を実現しています。

航空機・宇宙機の姿勢・軌道制御:ジャイロスコープや加速度センサーはドリフト誤差が、星センサーは瞬間的なノイズがあります。複数のセンサー情報を統合(センサーフュージョン)し、機体の運動モデルと照合しながら最適な姿勢・位置を推定。これがなければ安定した自動航行は不可能です。

ロボットの自己位置推定(SLAM):移動ロボットが、内部のオドメトリ(車輪の回転数から計算した位置)と、LiDARやカメラからの環境観測情報を融合させます。オドメトリは累積誤差が、観測は外乱を受けますが、カルマンフィルターを用いることで、地図内での自身の位置を長時間にわたり高精度に保ち続けることができます。

経済・金融データの分析:株価や為替レートなどの時系列データから、トレンドや周期性などの「状態」をノイズの中から抽出するために応用されます。観測値である市場価格の変動(R)と、経済モデルに基づく予測の不確かさ(Q)をバランスさせながら、潜在的な真の価値を推定するツールとして利用されています。

よくある誤解と注意点

まず、「カルマンフィルターは万能の魔法ではない」ということを肝に銘じておこう。一番多い誤解は、どんなデータを放り込んでも自動的にうまくいくと思ってしまうことだ。このシミュレーターで使っている「等速直線運動モデル」は、あくまで例題。実務では、対象の物理を正しく表す「状態遷移モデル」と「観測モデル」を自分で設計する必要がある。例えば、バネマスダンパ系の振動を推定したいなら、状態量に速度や加速度を含め、運動方程式に基づいたモデルを組まなければならない。

次に、パラメータQとRの決め方。シミュレーターではスライダーで直感的に動かせるが、実問題ではどう決めるか?実は、R(観測ノイズ)は比較的決めやすい。使用するセンサーのデータシートに「誤差±何mm」と書いてあれば、そこから分散を計算できる。問題はQ(プロセスノイズ)だ。「モデルがどれだけ外れるか」を数値化するのは難しい。一つの実践的な方法は、「想定される最大のモデル誤差」を考慮して決めること。例えば、車の等速モデルで、1秒間に想定しうる最大加速度が0.3G(約3 m/s²)だとすると、その分散を参考にQを設定する。最初は大きめに設定して、後からフィルタの応答を見ながらチューニングするのがコツだ。

最後に、発散(Divergence)という落とし穴を知っておこう。これは、フィルタの推定誤差共分散行列Pが計算上で小さくなりすぎ、新しい観測値を全く信用しなくなって推定が実際の値から大きく外れ、二度と戻ってこなくなる現象だ。原因は、モデルの誤りや不当に小さなQの設定など。シミュレーターで「観測ノイズR」を極端に小さく、「プロセスノイズQ」をほぼゼロに設定して、急に真の軌道(赤線)を曲げてみると、緑の推定値が全く追従できずにズレたままになる様子を再現できる。これを防ぐため、実装ではPがある値以下にならないようにする「下限設定」などの工夫が必要になる。

使い方ガイド

  1. プロセスノイズ分散(Q)スライダーを0.01~1.0の範囲で調整し、システムモデルの不確実性を設定します
  2. 観測ノイズ分散(R)スライダーを0.1~10.0の範囲で変更し、センサー計測の信頼度を制御します
  3. 初期推定誤差共分散(P0)を0.1~5.0で設定し、初期状態の不確実性を定義します
  4. 信号周波数(f)スライダーで0.1~2.0Hzの範囲から目標周波数を選択し、フィルター応答を観察します
  5. リアルタイム更新されるカルマンゲインと推定軌跡をモニタリングし、ノイズ除去効果を視認します

具体的な計算例

GPS搭載ドローンの位置推定を想定します。Q=0.05(プロセスノイズ)、R=2.0(GPS誤差)、P0=1.0、周波数0.5Hzで実行した場合、カルマンゲインは約0.87に収束し、実測値の±3m誤差を±0.4m以下に削減します。一方Q=0.5に増加させると、ゲインは0.95に上昇してモデル不確実性に適応し、突風などの外乱応答が速くなります。自動車の速度推定(エンコーダー+加速度計)でR=0.8を設定した場合、推定遅延は約50msとなり、制御系の応答性が向上します。

実務での注意点

  1. GPS測位の精度クラスがRを決定します:農業機械のRTK-GPS(±2cm)はR=0.0004に設定し、通常GPS(±5m)はR=25に設定するなど、センサー仕様に合わせて調整が必須です
  2. 移動ロボットの動力学モデルの誤差をQで補償します:計画軌道と実際の駆動系の乖離が大きい場合、Q=0.3以上を推奨します
  3. 初期値P0=1.0以上に設定し、起動直後の推定信頼度を低く保つことで、学習段階での過度な応答を防止します
  4. 周波数が2.0Hzを超える高速変動には、R値を0.1以下に設定してセンサー信号を重視し、応答遅延を最小化してください