Як користуватися фільтром 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.