Saya memiliki lintasan objek dalam ruang 2D (permukaan). Lintasan diberikan sebagai urutan (x,y)
koordinat. Saya tahu bahwa pengukuran saya berisik dan kadang-kadang saya memiliki outlier yang jelas. Jadi, saya ingin memfilter pengamatan saya.
Sejauh yang saya mengerti filter Kalman, itu melakukan apa yang saya butuhkan. Jadi, saya mencoba menggunakannya. Saya menemukan implementasi python di sini . Dan ini adalah contoh yang disediakan oleh dokumentasi:
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)
Saya memiliki beberapa masalah dengan interpretasi input dan output. Saya kira itu measurements
adalah pengukuran saya (koordinat). Meskipun saya agak bingung karena pengukuran dalam contoh ini adalah bilangan bulat.
Saya juga perlu menyediakan beberapa transition_matrices
dan observation_matrices
. Nilai apa yang harus saya taruh di sana? Apa yang dimaksud dengan matriks ini?
Akhirnya, di mana saya dapat menemukan output saya? Haruskah filtered_state_means
atau smoothed_state_means
. Array ini memiliki bentuk yang benar (2, n_observations)
. Namun, nilai dalam array ini terlalu jauh dari koordinat aslinya.
Jadi, bagaimana cara menggunakan filter Kalman ini?
Jawaban:
Berikut adalah contoh filter Kalman 2 dimensi yang mungkin berguna bagi Anda. Itu dalam Python.
Vektor state terdiri dari empat variabel: posisi di arah x0, posisi di arah x1, kecepatan di arah x0, dan kecepatan di arah x1. Lihat baris komentar "x: status awal 4-tupel lokasi dan kecepatan: (x0, x1, x0_dot, x1_dot)".
Matriks transisi-negara (F), yang memfasilitasi prediksi sistem / objek keadaan berikutnya, menggabungkan nilai keadaan saat ini dari posisi dan kecepatan untuk memprediksi posisi (yaitu x0 + x0_dot dan x1 + x1_dot) dan nilai keadaan saat ini dari kecepatan untuk kecepatan (yaitu x0_dot dan x1_dot).
Matriks pengukuran (H) tampaknya hanya mempertimbangkan posisi pada posisi x0 dan x1.
Matriks derau gerak (Q) diinisialisasi ke matriks identitas 4-oleh-4, sedangkan derau pengukuran diatur ke 0,0001.
Semoga contoh ini memungkinkan Anda membuat kode Anda berfungsi.
sumber
Kalman filter adalah model filter prediktif berbasis - dengan demikian implementasi yang benar dari filter akan memiliki sedikit atau tidak ada waktu tunda pada output ketika diumpankan dengan pengukuran reguler pada input. Saya merasa selalu lebih mudah untuk menerapkan filter kalman secara langsung sebagai lawan menggunakan perpustakaan karena modelnya tidak selalu statis.
Cara kerja filter adalah memprediksi nilai saat ini berdasarkan keadaan sebelumnya menggunakan deskripsi matematis dari proses dan kemudian mengoreksi estimasi tersebut berdasarkan pengukuran sensor saat ini. Dengan demikian juga mampu memperkirakan keadaan tersembunyi (yang tidak diukur) dan parameter lain yang digunakan dalam model selama hubungannya dengan keadaan terukur didefinisikan dalam model.
Saya akan menyarankan Anda mempelajari filter kalman lebih detail karena tanpa memahami algoritma itu sangat mudah untuk membuat kesalahan ketika mencoba menggunakan filter.
sumber