Kalman filtresi nasıl kullanılır?


12

2B alanda (bir yüzey) bir nesnenin yörüngesi var. Yörünge bir (x,y)koordinat dizisi olarak verilir . Ölçümlerimin gürültülü olduğunu ve bazen belirgin aykırı değerlerim olduğunu biliyorum. Bu yüzden gözlemlerimi filtrelemek istiyorum.

Kalman filtresini anladığım kadarıyla, tam olarak ihtiyacım olanı yapıyor. Bu yüzden kullanmaya çalışıyorum. Burada bir python uygulaması buldum . Ve bu dokümantasyonun sağladığı örnek:

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)

Girdi ve çıktının yorumlanmasında bazı sıkıntılarım var. measurementsÖlçümlerimin tam olarak bu olduğunu tahmin ediyorum (koordinatlar). Biraz kafam karışsa da, örnekteki ölçümler tamsayıdır.

Ayrıca bazı sağlamak gerekir transition_matricesve observation_matrices. Oraya hangi değerleri koymalıyım? Bu matrisler ne anlama geliyor?

Son olarak, çıktımı nerede bulabilirim? Olmalı filtered_state_meansya da smoothed_state_means. Bu diziler doğru şekillere sahiptir (2, n_observations). Ancak, bu dizideki değerler orijinal koordinatlardan çok uzak.

Peki, bu Kalman filtresi nasıl kullanılır?


Matrisler Kalman filtresi tarafından tahmin edilecektir. Muhtemelen optimizasyon algoritması veya benzeri için sadece başlangıç ​​değerleri vermeniz gerekir.
Richard Hardy

1
Gözlemlerinizi gözlemlenmemiş durumlarla ilişkilendiren ve devletin zaman içinde nasıl geliştiğini açıklayan bir durum alanı modeli belirleyerek başlamanız gerekir; bu size geçiş ve gözlem matrisinizin yanı sıra durum hatasının kovaryans matrisini ("işlem gürültüsü") ve gözlem hatası için kovaryans matrisini verecektir (wikipedia sayfasındaki A, H, Q ve R'dir, C, Q & R verdiğiniz bağlantıda). Kalman FIlter, tüm bunları belirledikten sonra her seferinde (gözlemlenemez) durumunu ve varyans-kovaryans matrisini tahmin etmek için bir algoritmadır.
Glen_b

Bağlandığınız bu işlev, standart KF'den biraz farklı bir şey uyguluyor gibi görünüyor, çünkü normalde belirttiğiniz bazı şeyleri tahmin etmek için EM'yi kullanabilir.
Glen_b -Monica

Yanıtlar:


8

İşte size faydalı olabilecek 2 boyutlu bir Kalman filtresi örneği . Python'da.

Durum vektörü dört değişkenden oluşur: x0 yönündeki konum, x1 yönündeki konum, x0 yönündeki hız ve x1 yönündeki hız. "X: başlangıç ​​durumu Konum ve hızın 4 parçası: (x0, x1, x0_dot, x1_dot)" yorum satırına bakın.

Bir sonraki durumdaki sistemin / nesnelerin öngörülmesini kolaylaştıran durum geçiş matrisi (F), konumu tahmin etmek için mevcut konum ve hız durum değerlerini (yani x0 + x0_dot ve x1 + x1_dot) ve hızın mevcut durum değerlerini birleştirir hız (yani x0_dot ve x1_dot).

Ölçüm matrisi (H) yalnızca x0 ve x1 konumlarının her ikisini de dikkate alıyor gibi görünmektedir.

Hareket gürültüsü matrisi (Q) 4'e 4 kimlik matrisine başlatılırken, ölçüm gürültüsü 0.0001 olarak ayarlanır.

Umarım bu örnek kodunuzun çalışmasını sağlar.


1

Kalman filtresi modele dayalı bir tahmin filtresidir - filtrenin doğru bir şekilde uygulanması, girişte düzenli ölçümlerle beslendiğinde çıktıda çok az gecikme olur veya hiç gecikme olmaz. Kalman filtresini kütüphaneleri kullanmanın aksine doğrudan uygulamak her zaman daha kolay olur çünkü model her zaman statik değildir.

Filtrenin çalışma şekli, işlemin matematiksel açıklamasını kullanarak önceki durumu temel alarak mevcut değeri tahmin etmesidir ve daha sonra bu tahmini geçerli sensör ölçümüne göre düzeltir. Bu nedenle, modelde ölçülen durumla ilişkileri tanımlandığı sürece, modelde kullanılan gizli durumu (ölçülmeyen) ve diğer parametreleri de tahmin edebilir.

Kalman filtresini daha ayrıntılı incelemenizi öneririm çünkü algoritmayı anlamadan filtreyi kullanmaya çalışırken hata yapmak çok kolaydır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.