Comprender el filtro de Kalman con un ejemplo simple de radar
(kalmanfilter.net)- El filtro de Kalman es un algoritmo óptimo de estimación de estado que estima el estado de un sistema y predice el futuro en entornos con mucho ruido.
- Usando como ejemplo un radar de seguimiento de aeronaves, se explica el proceso de mejorar la precisión repitiendo las etapas de predicción y actualización a partir de mediciones de distancia y velocidad.
- En cada etapa se calculan el vector de estado, la matriz de covarianza y la ganancia de Kalman (Kalman Gain) para combinar de forma ponderada las mediciones y las predicciones.
- Se muestra con valores numéricos que, al considerar tanto la incertidumbre de medición como la del modelo, el error de estimación (incertidumbre) disminuye con el tiempo.
- Mediante un ejemplo numérico intuitivo y cálculos paso a paso, se brinda una base de comprensión para diseñar e implementar el filtro directamente.
Introducción al filtro de Kalman
-
Kalman Filter** es un algoritmo de estimación de estado que estima y predice el estado de un sistema en entornos donde existe incertidumbre, como ruido de medición o factores externos.
- Se utiliza como herramienta clave en diversos campos como seguimiento de objetos, navegación, robótica y control.
- Por ejemplo, puede usarse para reducir el ruido en la trayectoria del mouse y obtener un movimiento más suave, detectar tendencias en datos financieros o hacer predicciones meteorológicas.
- Se señala que muchos materiales educativos se centran en la derivación matemática y carecen de ejemplos prácticos, por lo que este material ofrece una explicación intuitiva centrada en ejemplos numéricos.
- También se abordan casos en los que un filtro mal diseñado falla en el seguimiento, y se presentan formas de corregirlo.
- El objetivo es que el lector consolide la comprensión necesaria para diseñar e implementar un filtro de Kalman por sí mismo.
Ruta de aprendizaje
- Resumen en una sola página: presenta de forma breve los conceptos clave y las fórmulas principales, y solo requiere conocimientos básicos de estadística y álgebra lineal.
- Tutorial web gratuito: tutorial en línea con ejemplos numéricos paso a paso para desarrollar intuición, sin conocimientos previos necesarios.
- Kalman Filter from the Ground Up (libro): 14 ejemplos numéricos completos, filtros no lineales (Extended/Unscented) y fusión de sensores, con código en Python y MATLAB.
La necesidad de predecir
- Se explica la necesidad de la estimación de estado y la predicción mediante el ejemplo de un radar de seguimiento de aeronaves.
- El estado del sistema es la posición de la aeronave (distancia (r)), y el radar calcula la distancia midiendo el tiempo de reflexión del pulso.
- La velocidad (v) puede medirse mediante el efecto Doppler.
- La predicción de la posición después de un intervalo de tiempo fijo (\Delta t) se realiza mediante un modelo dinámico.
- Ejemplo: (r_{t_1} = r_{t_0} + v \cdot \Delta t)
- (\Delta t = 5s), (r_{t_0}=10,000m), (v=200m/s) → (r_{t_1}=11,000m)
- En el entorno real existen ruido de medición (Measurement Noise) e incertidumbre del modelo (Process Noise).
- Incluso si varios radares miden al mismo tiempo, los resultados difieren ligeramente.
- Factores externos como el viento rompen la suposición de velocidad constante.
- El filtro de Kalman realiza al mismo tiempo la estimación del estado actual y la predicción del estado futuro, y además proporciona la incertidumbre (varianza) de cada estimación.
- Es un algoritmo óptimo que minimiza la incertidumbre de la estimación del estado.
Ejemplo de filtro de Kalman
-
Un radar unidimensional mide la distancia (r) y la velocidad (v) de una aeronave.
- Vector de estado (\boldsymbol{x} = [r, v]^T)
- El sistema se representa usando vectores y matrices.
-
Iteration 0 — inicialización y predicción
-
Inicialización
- El filtro se inicializa con la primera medición. (\boldsymbol{z}_0 = [10{,}000, 200]^T)
- Incertidumbre de medición (desviación estándar): distancia 4m, velocidad 0.5m/s (\boldsymbol{R}_0 = \begin{bmatrix}16 & 0 \ 0 & 0.25\end{bmatrix})
- Estimación inicial del estado (\hat{\boldsymbol{x}}_{0,0} = \boldsymbol{z}_0)
- Covarianza inicial (\boldsymbol{P}_{0,0} = \boldsymbol{R}_0)
-
Etapa de predicción
- Intervalo de tiempo (\Delta t = 5s)
- Matriz de transición de estado (\boldsymbol{F} = \begin{bmatrix}1 & 5 \ 0 & 1\end{bmatrix})
- Estado predicho (\hat{\boldsymbol{x}}{1,0} = \boldsymbol{F}\hat{\boldsymbol{x}}{0,0} = [11{,}000, 200]^T)
- Predicción de la covarianza (sin incluir ruido de proceso): (\boldsymbol{P}{1,0} = \boldsymbol{F}\boldsymbol{P}{0,0}\boldsymbol{F}^T = \begin{bmatrix}22.25 & 1.25 \ 1.25 & 0.25\end{bmatrix})
- Se agrega ruido de proceso ((\sigma_a = 0.2m/s^2)): (\boldsymbol{Q} = \begin{bmatrix}6.25 & 2.5 \ 2.5 & 1\end{bmatrix})
- Covarianza predicha final: (\boldsymbol{P}_{1,0} = \begin{bmatrix}28.5 & 3.75 \ 3.75 & 1.25\end{bmatrix})
-
Resumen de Iteration 0
- Se inicializan el estado y la covarianza con la primera medición.
- Se predicen el siguiente estado y la incertidumbre usando el modelo de transición de estado.
- Fórmulas de predicción
- Predicción del estado: (\hat{\boldsymbol{x}}{n+1,n} = \boldsymbol{F}\hat{\boldsymbol{x}}{n,n} + \boldsymbol{G}\boldsymbol{u}_n)
- Predicción de la covarianza: (\boldsymbol{P}{n+1,n} = \boldsymbol{F}\boldsymbol{P}{n,n}\boldsymbol{F}^T + \boldsymbol{Q})
-
Iteration 1 — actualización y predicción
-
Actualización del filtro
- Segunda medición: (\boldsymbol{z}_1 = [11{,}020, 202]^T)
- Aumenta la incertidumbre de medición (desviación estándar: distancia 6m, velocidad 1.5m/s) (\boldsymbol{R}_1 = \begin{bmatrix}36 & 0 \ 0 & 2.25\end{bmatrix})
- Al compararla con la covarianza predicha (\boldsymbol{P}_{1,0}), la incertidumbre de la predicción es menor.
- El filtro de Kalman combina medición y predicción como un promedio ponderado.
- Peso (K_1): ganancia de Kalman
- Ecuación de actualización del estado: (\hat{\boldsymbol{x}}{1,1} = \hat{\boldsymbol{x}}{1,0} + \boldsymbol{K}_1(\boldsymbol{z}1 - \boldsymbol{H}\hat{\boldsymbol{x}}{1,0}))
- Matriz de observación (\boldsymbol{H} = \boldsymbol{I})
- Cálculo de la ganancia de Kalman: (\boldsymbol{K}1 = \boldsymbol{P}{1,0}\boldsymbol{H}^T(\boldsymbol{H}\boldsymbol{P}_{1,0}\boldsymbol{H}^T + \boldsymbol{R}_1)^{-1}) Resultado: (\boldsymbol{K}_1 = \begin{bmatrix}0.4048 & 0.6377 \ 0.0399 & 0.3144\end{bmatrix})
- Innovación (innovation): (\boldsymbol{z}1 - \hat{\boldsymbol{x}}{1,0} = [20, 2]^T)
- Valor de corrección: (\boldsymbol{K}_1[20, 2]^T = [9.37, 1.43]^T)
- Estado actualizado: (\hat{\boldsymbol{x}}_{1,1} = [11{,}009.37, 201.43]^T)
-
Actualización de la covarianza
- Se usa la forma simplificada: (\boldsymbol{P}_{1,1} = (\boldsymbol{I} - \boldsymbol{K}1)\boldsymbol{P}{1,0})
- Resultado: (\boldsymbol{P}_{1,1} = \begin{bmatrix}14.57 & 1.43 \ 1.43 & 0.71\end{bmatrix})
- Después de la actualización, la incertidumbre es menor que la incertidumbre de la predicción y la de la medición. → Al combinar medición y predicción, la incertidumbre siempre disminuye
-
Etapa de predicción
- Predicción para el siguiente instante (t_2)
- Predicción del estado: (\hat{\boldsymbol{x}}{2,1} = \boldsymbol{F}\hat{\boldsymbol{x}}{1,1} = [12{,}016.5, 201.43]^T)
- Predicción de la covarianza: (\boldsymbol{P}{2,1} = \boldsymbol{F}\boldsymbol{P}{1,1}\boldsymbol{F}^T + \boldsymbol{Q} = \begin{bmatrix}52.86 & 7.47 \ 7.47 & 1.71\end{bmatrix})
- Si pasa el tiempo sin mediciones, la incertidumbre vuelve a aumentar.
- Predicción para el siguiente instante (t_2)
-
Resumen de Iteration 1
- Etapa de actualización: se combinan predicción y medición con la ganancia de Kalman.
- Etapa de predicción: el estado actualizado se proyecta al siguiente instante.
- Fórmulas principales
- Actualización del estado: (\hat{\boldsymbol{x}}{n,n} = \hat{\boldsymbol{x}}{n,n-1} + \boldsymbol{K}_n(\boldsymbol{z}n - \boldsymbol{H}\hat{\boldsymbol{x}}{n,n-1}))
- Actualización de la covarianza (forma de Joseph): (\boldsymbol{P}_{n,n} = (\boldsymbol{I} - \boldsymbol{K}n\boldsymbol{H})\boldsymbol{P}{n,n-1}(\boldsymbol{I} - \boldsymbol{K}_n\boldsymbol{H})^T + \boldsymbol{K}_n\boldsymbol{R}_n\boldsymbol{K}_n^T)
- Ganancia de Kalman: (\boldsymbol{K}n = \boldsymbol{P}{n,n-1}\boldsymbol{H}^T(\boldsymbol{H}\boldsymbol{P}_{n,n-1}\boldsymbol{H}^T + \boldsymbol{R}_n)^{-1})
Resumen del ejemplo
- Las tres etapas del filtro de Kalman: inicialización → predicción → actualización
- Después, se repite el bucle predicción-actualización.
- Cada vez que se agrega una nueva medición, la incertidumbre disminuye y la estimación del estado del sistema se vuelve cada vez más precisa.
- Materiales de aprendizaje adicionales
- Tutorial en línea gratuito: ofrece ejemplos numéricos paso a paso.
- Libro Kalman Filter from the Ground Up: incluye filtros lineales y no lineales, guía de implementación y código en Python/MATLAB.
1 comentarios
Comentarios en Hacker News
Soy el autor. Hace poco actualicé la página principal de mi tutorial de Kalman Filter. Añadí un ejemplo sencillo de seguimiento por radar para que también lo pueda entender gente que solo tenga bases de estadística y álgebra lineal.
Intenté minimizar la derivación de fórmulas, pero mostrando de forma intuitiva el ruido de las mediciones, el modelo de predicción y cómo se combinan en el filtro. Me gustaría recibir comentarios sobre el nivel matemático y la claridad de la explicación.
La guía intuitiva como yo la veo sería así:
Al final, la clave es el método de mínimos cuadrados, y bajo ciertas suposiciones se puede demostrar que eso es óptimo.
El artículo “How a Kalman Filter Works in Pictures” me pareció muy bueno.
Por ejemplo, un filtro pasa-bajas también es una clase de estimador, pero el Kalman filter le agrega un modelo de proceso y cálculo de covarianza para ajustarse dinámicamente.
Refleja la relación entre variables correlacionadas, como posición y velocidad, de modo que una medición de una afecte también la estimación de las otras.
Aun así, como está basado en álgebra lineal, necesita asumir ruido gaussiano, y para problemas no lineales hacen falta variantes como EKF o UKF.
Para entender un Kalman filter hay que conocer estas cuatro cosas:
El filtro es una solución matemática para estimar de forma óptima el estado interno y la covarianza de un sistema a partir de mediciones.
Creo que el libro de Alex Becker es una excelente introducción al tema. Tiene muchos ejemplos y ayuda mucho a construir intuición.
Al aprender Kalman filter, se vuelve mucho más intuitivo cuando hay dos o más entradas con distintas características de ruido. Pero la mayoría de los tutoriales solo tratan una sola entrada.
El Kalman filter sí se usa bastante en la práctica. Por ejemplo, en Sendspin lo usan para sincronizar bocinas.
Puedes revisar el demo en vivo y la documentación de implementación.
Me pregunto si el concepto del Kalman filter podría aplicarse también a los testimonios de personas.
En thekalmanfilter.com también se puede ver una explicación sencilla.
Este artículo me pareció como un anuncio de un libro caro. Ya hay muchos materiales gratuitos, por ejemplo Kalman and Bayesian Filters in Python y otros. Me da curiosidad saber qué ventaja ofrece este libro en particular.