カルマンフィルターの使用方法


12

2D空間(サーフェス)にオブジェクトの軌跡があります。軌跡は一連の(x,y)座標として与えられます。私の測定値はノイズが多く、時には明らかな外れ値があることを知っています。だから、私は私の観測をフィルタリングしたい。

カルマンフィルターを理解している限り、それはまさに必要なことを行います。だから、私はそれを使用しようとします。ここで python実装を見つけました。そして、これはドキュメントが提供する例です:

from pykalman import KalmanFilter
import numpy as np
kf = KalmanFilter(transition_matrices = [[1, 1], [0, 1]], observation_matrices = [[0.1, 0.5], [-0.3, 0.0]])
measurements = np.asarray([[1,0], [0,0], [0,1]])  # 3 observations
kf = kf.em(measurements, n_iter=5)
(filtered_state_means, filtered_state_covariances) = kf.filter(measurements)
(smoothed_state_means, smoothed_state_covariances) = kf.smooth(measurements)

入力と出力の解釈に問題があります。それmeasurementsが私の測定値(座標)であると思います。例の測定値は整数であるため、少し混乱していますが。

私もいくつか提供する必要がtransition_matricesありobservation_matricesます。そこにどんな価値を置くべきですか?これらの行列はどういう意味ですか?

最後に、出力はどこにありますか?それがあるべきfiltered_state_meanssmoothed_state_means。これらの配列には正しい形状があります(2, n_observations)。ただし、これらの配列の値は元の座標から離れすぎています。

それでは、このカルマンフィルターの使用方法は?


行列はカルマンフィルターによって推定されます。おそらく、最適化アルゴリズムなどの開始値をいくつか指定する必要があります。
リチャードハーディ

1
状態空間モデルを指定することから始める必要があります。これは、観測を観測されていない状態に関連付け、状態が時間とともにどのように進化するかを説明します。これにより、遷移および観測行列、状態誤差の共分散行列(「プロセスノイズ」)、および観測誤差の共分散行列(これらはウィキペディアのページA、F、H、Q、R C、Q、Rのリンクをクリックしてください)。カルマンフィルターは、それらすべてを指定すると、(観測不可能な)状態とその分散共分散行列を推定するための単純なアルゴリズムです。
Glen_b -Reinstateモニカ

リンクする関数は、EMを使用して通常指定するものを推定できるため、標準KFとは少し異なるものを実装しているようです。
Glen_b-モニカを

回答:


8

以下は、役に立つかもしれない2次元のカルマンフィルターのです。Pythonにあります。

状態ベクトルは、x0方向の位置、x1方向の位置、x0方向の速度、x1方向の速度の4つの変数で構成されます。コメント行「x:初期状態4-位置と速度のタプル:(x0、x1、x0_dot、x1_dot)」を参照してください。

システム/オブジェクトの次の状態の予測を容易にする状態遷移行列(F)は、位置と速度の現在の状態値を組み合わせて位置(x0 + x0_dotおよびx1 + x1_dot)および速度の現在の状態値を予測します速度(x0_dotおよびx1_dot)。

測定マトリックス(H)は、x0とx1の両方の位置のみを考慮するように見えます。

モーションノイズマトリックス(Q)は4行4列の単位マトリックスに初期化され、測定ノイズは0.0001に設定されます。

この例でコードが機能することを願っています。


1

カルマンフィルターは、モデルベースの予測フィルターです。このようにフィルターを正しく実装すると、入力で通常の測定値を入力したときに、出力での遅延がほとんどまたはまったくなくなります。モデルは常に静的ではないため、ライブラリを使用するのではなく、カルマンフィルターを直接実装する方が常に簡単であることがわかります。

フィルターの動作方法は、プロセスの数学的記述を使用して以前の状態に基づいて現在の値を予測し、現在のセンサー測定に基づいてその推定値を修正します。したがって、測定された状態との関係がモデルで定義されている限り、モデルで使用される隠れた状態(測定されない)およびその他のパラメーターを推定することもできます。

アルゴリズムを理解していなければ、フィルターを使用しようとするとミスを犯しやすいため、カルマンフィルターをより詳細に検討することをお勧めします。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.