Як користуватися фільтром Kalman?


12

У мене траєкторія об'єкта у двомірному просторі (поверхні). Траєкторія задається у вигляді послідовності (x,y)координат. Я знаю, що мої вимірювання шумні, і іноді я маю очевидні люди. Отже, я хочу відфільтрувати свої спостереження.

Наскільки я зрозумів фільтр Кальмана, він робить саме те, що мені потрібно. Отже, я намагаюся ним скористатися. Я знайшов реалізацію пітона тут . І це приклад, який надає документація:

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_meansабо smoothed_state_means. Ці масиви мають правильну форму (2, n_observations). Однак значення в цьому масиві занадто далеко від початкових координат.

Отже, як використовувати цей фільтр Кальмана?


Матриці будуть оцінені фільтром Кальмана. Ймовірно, вам доведеться дати лише деякі вихідні значення для алгоритму оптимізації тощо.
Річард Харді

1
Для початку потрібно вказати модель простору стану, яка пов'язує ваші спостереження з неспостережуваними станами та описує, як стан розвивається з часом; це дасть вам матрицю переходу та спостереження, а також матрицю коваріації помилки стану ("шум процесу") та матрицю коваріації помилки спостереження (це F, H, Q і R на сторінці вікіпедії, A, C, Q & R за посиланням, яке ви надаєте). Kalman FIlter - це просто алгоритм для оцінки (неспостережуваного) стану та його матриці коефіцієнта дисперсії кожного разу, коли ви вказуєте всі ці речі.
Glen_b -Встановіть Моніку

Ця функція, на яку ви посилаєтесь, здається, реалізує щось трохи відмінне від стандартного KF, оскільки вона може використовувати EM для оцінки деяких речей, які ви зазвичай визначаєте.
Glen_b -Встановити Моніку

Відповіді:


8

Ось приклад двомірного фільтра Кальмана, який може бути корисним вам. Це в Python.

Вектор стану складається з чотирьох змінних: положення у напрямку x0, положення у напрямку x1, швидкість у напрямку x0 та швидкість у напрямку x1. Дивіться коментований рядок "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

Фільтр Kalman - це модельний прогнозний фільтр - оскільки така правильна реалізація фільтра матиме невелику або відсутність часу затримки на виході при подачі на регулярні вимірювання на вході. Я вважаю, що завжди легше застосовувати фільтр kalman безпосередньо на відміну від використання бібліотек, оскільки модель не завжди є статичною.

Як працює фільтр, він прогнозує значення струму на основі попереднього стану, використовуючи математичний опис процесу, а потім виправляє цю оцінку на основі вимірювання датчика струму. Таким чином, він також може оцінювати прихований стан (який не вимірюється) та інші параметри, які використовуються в моделі до тих пір, поки їх залежність від вимірюваного стану визначається в моделі.

Я б запропонував вам вивчити фільтр kalman більш детально, оскільки без розуміння алгоритму дуже легко помилитися при спробі використання фільтра.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.