Bagaimana cara menggunakan filter Kalman?


12

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 measurementsadalah pengukuran saya (koordinat). Meskipun saya agak bingung karena pengukuran dalam contoh ini adalah bilangan bulat.

Saya juga perlu menyediakan beberapa transition_matricesdan 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_meansatau 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?


Matriks akan diestimasi oleh filter Kalman. Anda mungkin harus memberikan hanya beberapa nilai awal untuk algoritme pengoptimalan atau sejenisnya.
Richard Hardy

1
Anda harus mulai dengan menentukan model ruang negara, yang menghubungkan pengamatan Anda dengan negara yang tidak teramati dan menjelaskan bagaimana negara berkembang dari waktu ke waktu; ini akan memberi Anda transisi dan matriks pengamatan serta matriks kovarian kesalahan negara ("noise proses") dan matriks kovarians untuk kesalahan pengamatan (ini adalah F, H, Q dan R di halaman wikipedia, A, C, Q & R pada tautan yang Anda berikan). Kalman FIlter hanyalah sebuah algoritma untuk memperkirakan keadaan (tidak dapat diobservasi) dan matriks varians-kovariansnya pada setiap kali begitu Anda telah menentukan semua hal itu.
Glen_b -Reinstate Monica

Fungsi yang Anda tautkan tampaknya mengimplementasikan sesuatu yang sedikit berbeda dari KF standar karena dapat menggunakan EM untuk memperkirakan beberapa hal yang biasanya Anda tentukan.
Glen_b -Reinstate Monica

Jawaban:


8

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.


1

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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.