¿Cómo usar un filtro Kalman?


12

Tengo una trayectoria de un objeto en un espacio 2D (una superficie). La trayectoria se da como una secuencia de (x,y)coordenadas. Sé que mis medidas son ruidosas y, a veces, tengo valores atípicos evidentes. Entonces, quiero filtrar mis observaciones.

Hasta donde entendí el filtro de Kalman, hace exactamente lo que necesito. Entonces, trato de usarlo. Encontré una implementación de Python aquí . Y este es el ejemplo que proporciona la documentación:

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)

Tengo algunos problemas con la interpretación de entrada y salida. Supongo que eso measurementses exactamente lo que son mis medidas (coordenadas). Aunque estoy un poco confundido porque las medidas en el ejemplo son enteros.

También necesito proporcionar algunos transition_matricesy observation_matrices. ¿Qué valores debo poner allí? ¿Qué significan estas matrices?

Finalmente, ¿dónde puedo encontrar mi salida? Debería ser filtered_state_meanso smoothed_state_means. Estas matrices tienen formas correctas (2, n_observations). Sin embargo, los valores en esta matriz están demasiado lejos de las coordenadas originales.

Entonces, ¿cómo usar este filtro de Kalman?


Las matrices serán estimadas por el filtro de Kalman. Probablemente tenga que dar solo algunos valores iniciales para el algoritmo de optimización o similar.
Richard Hardy

1
Debe comenzar especificando un modelo de espacio de estados, que relacione sus observaciones con los estados no observados y describa cómo evoluciona el estado con el tiempo; esto le dará su matriz de transición y observación, así como la matriz de covarianza del error de estado ("ruido de proceso") y la matriz de covarianza para el error de observación (estos son F, H, Q y R en la página de Wikipedia, A, C, Q & R en el enlace que das). El filtro Kalman es simplemente un algoritmo para estimar el estado (no observable) y su matriz de varianza-covarianza en cada momento una vez que haya especificado todas esas cosas.
Glen_b -Reinstala a Monica el

Esa función a la que se vincula parece implementar algo un poco diferente del KF estándar, ya que puede usar EM para estimar algunas cosas que normalmente especificaría.
Glen_b: reinstala a Monica el

Respuestas:


8

Aquí hay un ejemplo de un filtro Kalman bidimensional que puede serle útil. Está en Python.

El vector de estado consta de cuatro variables: posición en la dirección x0, posición en la dirección x1, velocidad en la dirección x0 y velocidad en la dirección x1. Vea la línea comentada "x: estado inicial 4-tupla de ubicación y velocidad: (x0, x1, x0_dot, x1_dot)".

La matriz de transición de estado (F), que facilita la predicción del siguiente estado del sistema / objeto, combina los valores de estado y posición actuales para predecir la posición (es decir, x0 + x0_dot y x1 + x1_dot) y los valores de velocidad del estado actual para velocidad (es decir, x0_dot y x1_dot).

La matriz de medición (H) parece considerar solo la posición en las posiciones x0 y x1.

La matriz de ruido de movimiento (Q) se inicializa en una matriz de identidad de 4 por 4, mientras que el ruido de medición se establece en 0,0001.

Esperemos que este ejemplo le permita hacer que su código funcione.


1

El filtro Kalman es un filtro predictivo basado en modelos, por lo que una implementación correcta del filtro tendrá poco o ningún retraso de tiempo en la salida cuando se alimente con mediciones regulares en la entrada. Siempre es más sencillo implementar el filtro kalman directamente en lugar de usar bibliotecas porque el modelo no siempre es estático.

La forma en que funciona el filtro es que predice el valor actual en función del estado anterior utilizando una descripción matemática del proceso y luego corrige esa estimación en función de la medición actual del sensor. Por lo tanto, también es capaz de estimar el estado oculto (que no se mide) y otros parámetros que se utilizan en el modelo siempre que sus relaciones con el estado medido se definan en el modelo.

Le sugiero que estudie el filtro kalman con más detalle porque sin comprender el algoritmo es muy fácil cometer errores al intentar usar el filtro.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.