裏口からのカルマンフィルタ入門 の履歴(No.2)
更新裏口からのカルマンフィルタ入門†
京都大学の丸田先生の
という動画を見て勉強したのでそれについてメモ。
こういうのを無料で気軽に好きな時に見られるのは非常にありがたい!
- 状態変数
- (モデル化された)系の状態を記述するのに必要十分な変数
- 例えば質点の運動なら位置と速度
- ボーリングのボールなら位置と速度と角度と角速度
- ある時刻の状態変数と「状態更新式」があれば(モデル化された)系の運動が決まる
- 一般に、現実の系はモデル化された系よりもずっと多くの状態変数を含んでいる
- 状態更新式
- ある時刻 $t_k$ における状態変数を $x_k$ と書く
- 状態更新式は $x_{k}$ から $x_{k+1}$ を計算することのできる式になっている
- ただこの方程式はガウシアン誤差を含んでいても良いものとする
- つまり、同じ $x_{k}$ を与えても常に全く同じ運動が起きるとは限らず、誤差の分だけ異なる運動となる可能性がある
- この「誤差」は現実の系に加わる外乱である場合もあるけれど、現実の系と、それを単純化したモデル化された系との間の乖離を埋め合わせる役割を持つことも多い
- 観測
- $x_{k}$ で表される系を測定して観測値 $y_k$ を得る
- 観測式
- $x_{k}$ から $y_k$ を計算できる式
- ここにもノイズが含まれうる
- 観測が時定数を持つことを考えると $x_{k-n}$ にも依存していいように思うのだけれど、ここではそういうのは考えていないっぽい
- ああ、そうじゃなく、時定数のように測定値が過去の値に引きずられるのは装置の内部状態を反映しているので、そこは状態変数として取り込むべきなのか
- モデル
- 状態更新式と観測式を合わせたものモデル
- モデルは現実の系の状態変化と観測を近似するものでしかない
- 問題設定
- 状態変数は未知である
- 十分に正しいモデルが知られているものとする
- 観測値 $y_1,y_2,\dots,y_k$ から状態 $x_k$ をなるべく正しく推定するというのがここでの問題
- 状態更新式には既知の入力 $u_k$ が含まれてもいい
- カルマンフィルタ
- モデル(状態更新式と観測式)さえ与えれば、パラメータの調整などなく最適な推定を行える方法
- 当然、「最適な推定」がどれだけ正しいものとなるかはモデルがどれだけ正しいかに依存する
- レプリカ
- カルマンフィルタでは、計算機内部に現実の系のレプリカを作る
- レプリカは、状態変数 $x_k$ の予測値 $\hat x_k$ を状態更新式で更新し、$\hat x_k$ と観測式から観測値 $\hat y_k$ を予測する
- 誤差のフィードバック
- 予測値 $\hat y_k$ の観測値 $y_k$ からの誤差 $\delta y_k=\hat y_k-y_k$ を、レプリカ側の $\hat x_{k+1}$ を求める更新式 に取り込んで、$\delta y_k$ が小さくなるようフィードバックをかける
- $x_{k+1}=Ax_k-G\delta y_k$
- もっとも誤差 $\delta y_k$ を小さくする最適な $G$ のことをカルマンゲインと呼ぶ
- フィードバックゲインに関する定性的な理解
- 測定に誤差が大きい場合ゲインを小さくするとよい
- IIR フィルタ的に考えると、これによって時定数が大きくなり、ノイズが平滑化され、ある程度除去される
- 誤差の大きさはモデルの正しさとの相対値で評価されるべきで、モデルが正しいという自信があるなら、やはりゲインを小さくすると良い(誤差のフィードバックを行わなくても正しく予測値を更新できるため)
- どのように最適なゲインを選ぶか
- モデルの不確かさと観測誤差を理論に組み込む
- $x_{k+1}=Ax_k+w_k$ ただし $w_k$ は平均ゼロ、分散 $Q$ のガウスノイズ
- $y_{k+1}=Bx_k+v_k$ ただし $v_k$ は平均ゼロ、分散 $R$ のガウスノイズ
- $Q$ が大きいことは更新式のエラーが大きいことに、$R$ が大きいことは観測ノイズが大きいことに、それぞれ対応する
- カルマンフィルタ(再)
- 状態更新式と観測式と、それぞれの不確かさ $Q,R$ を与えると、推定値の誤差の分散 $\delta x_k^2=(\hat x_k-k_k)^2$ の期待値を最小化する $G$ を求めることができる
- 注意点
- 白色雑音であることが重要
- 有色雑音の場合にはうまく行かないのでしっかり覚えておく必要あり
- ノイズモデル(有色雑音への対応)
- 白色雑音に適当なフィルタを掛けたものがノイズとして加わると考える
- フィルタを構成する際に必要となる内部変数は現実には存在しない「仮想的な状態変数」としてモデルに組み込む
- すると、ノイズフィルタの状態を含めたモデルに加える雑音は白色で済むようになる
- 例えばレッドノイズ ($1/f^2$) はフィルタを使って簡単に再現できるが、ピンクノイズ ($1/f^\alpha,\ 0<\alpha<2$) を実現するのは有限次元のモデルで再現するのは難しい
- 推定分散
- モデルが正しい場合の推定なので、自信過剰になる
- カルマンフィルタが特に役に立つ例
- 周波数空間でフィルタを設計した方が簡単!と言われないようなキラーアプリケーションは?
- 多変数
- 時変・非線形モデル
- モデルに既知の入力がある場合について少し紹介されていた
- 失敗する例もある
- 入力に変化がないと複数の状態変数の寄与を切り分けられない、とか
- そういった場合にはちゃんと推定分散が増えるので、それじゃまずいときにはもっと勉強してうまい手を考える必要がある
Counter: 2605 (from 2010/06/03),
today: 2,
yesterday: 2