Как использовать фильтр Калмана?

12

У меня есть траектория объекта в 2D-пространстве (поверхности). Траектория задается в виде последовательности (x,y)координат. Я знаю, что мои измерения шумят, и иногда у меня есть очевидные выбросы. Итак, я хочу отфильтровать свои наблюдения.

Насколько я понял фильтр Калмана, он делает именно то, что мне нужно. Итак, я пытаюсь использовать это. Я нашел реализацию Python здесь . И это пример, который предоставляет документация:

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 по ссылке, которую вы даете). Фильтр Калмана - это просто алгоритм для оценки (ненаблюдаемого) состояния и его дисперсионно-ковариационной матрицы каждый раз, когда вы указали все эти вещи.
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.

Надеюсь, этот пример позволит вам заставить ваш код работать.

michael_rw
источник
1

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

Способ работы фильтра заключается в том, что он прогнозирует текущее значение на основе предыдущего состояния, используя математическое описание процесса, а затем корректирует эту оценку на основе текущего измерения датчика. Таким образом, он также способен оценивать скрытое состояние (которое не измеряется) и другие параметры, которые используются в модели, если в модели определены их связи с измеренным состоянием.

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

Мартин
источник