pykalman でカルマンフィルタを試す
Python でカルマンフィルタを勉強しようと思いましたが、Python-Control でどうやってカルマンフィルタを使えるのかわからなかったので、pykalman というパッケージを試してみました。
ここ の SciPy のドキュメントにカルマンフィルタの実装が載っていますが、pykalman を使えばもっとパラメトリックにカルマンフィルタを設計できそうです。
pykalman は pip でインストールできます。scipy 等を先にインストールしておく必要があります。 なお、Python3 でも問題なく使えます。
pip install pykalman
一番シンプルな使い方は以下のような感じです。パラメータ設定の仕方がよくわかっていないので、これから勉強していきます。
import numpy as np from matplotlib import pylab as plt from pykalman import KalmanFilter x = -0.37727 observations = np.random.normal(x, 0.1, size=50) kf = KalmanFilter(transition_matrices=np.array([[1, 1], [0, 1]]), transition_covariance=0.0000001*np.eye(2)) smoothed_states_pred = kf.em(observations).smooth(observations)[0] filtered_states_pred = kf.em(observations).filter(observations)[0] plt.figure(figsize=(12, 9)) plt.plot(observations, "-xc", label="observations") plt.plot(smoothed_states_pred[:, 0], "b", label="smoothed") plt.plot(filtered_states_pred[:, 0], "r", label="filtered") plt.axhline(x, color="k", label="truth value") plt.legend() plt.show()
