# Filtro de Kalman

El filtro de Kalman es un algoritmo desarrollado por Rudolf E. Kalman en 1960 que sirve para poder identificar el estado oculto (no medible) de un sistema dinámico lineal, al igual que el observador de Luenberger, pero sirve además cuando el sistema está sometido a ruido blanco aditivo. La diferencia entre ambos es que en el observador de Luenberger, la ganancia K de realimentación del error debe ser elegida "a mano", mientras que el filtro de Kalman es capaz de escogerla de forma óptima cuando se conocen las varianzas de los ruidos que afectan al sistema.
Ya que el filtro de Kalman es un algoritmo recursivo, puede correr en tiempo real usando únicamente las mediciones de entrada actuales, el estado calculado previamente y su matriz de incertidumbre, y no requiere ninguna otra información adicional.
El filtro de Kalman tiene numerosas aplicaciones en tecnología. Una aplicación común es la guía, navegación y control de vehículos, especialmente naves espaciales. Además, se utiliza ampliamente en campos como el procesamiento de señales y la econometría.

## Sistema lineal en el espacio de estado

Se entiende como espacio de estado el conjunto de todos los posibles estados de un sistema dinámico. Cada estado corresponde a un punto del espacio de estado.

### Caso de tiempo discreto

Se tiene un sistema representado en el espacio de estado:
$\quad x_{k}=A_{k-1}x_{k-1}+B_{k-1}u_{k-1}+w_{k-1}$
$\quad z_{k}=H_{k}x_{k}+v_{k}$
siendo $x_{k}$ y $z_{k}$ el verdadero estado y su estimación (u observación) en el tiempo $k$. Se consideran $w_{k}$ y $v_{k}$ tales que:
$w_{k}$ es ruido blanco de valor promedio igual a cero y con varianza $Q_{k}$ en el instante $k$.
$v_{k}$ es ruido blanco de valor promedio igual a cero y con varianza $R_{k}$ en el instante $k$.
El filtro de Kalman permite estimar el estado $x_{k}$ a partir de las mediciones anteriores de $u_{k-1}$, $z_{k-1}$, $Q_{k-1}$, $R_{k-1}$ y las estimaciones anteriores de $x_{k-1}$.

### Caso de tiempo continuo

Se tiene un sistema representado en el espacio de estado:
$\quad {\frac {d}{dt}}x(t)=A(t)x(t)+B(t)u(t)+w(t)$
$\quad z(t)=C(t)x(t)+v(t)$
donde:
$w(t)$ es ruido blanco de valor promedio igual a cero y con varianza $Q(t)$ en el intervalo de tiempo descrito como $t$.
$v(t)$ es ruido blanco de valor promedio igual a cero y con varianza $R(t)$ en el intervalo de tiempo descrito como $t$.
El filtro de Kalman permite estimar el estado $x(t+dt)$ a partir de las mediciones anteriores de $u(t)$, $z(t)$, $Q(t)$, $R(t)$ y las estimaciones anteriores de $x(t)$.

## Algoritmo del filtro discreto de Kalman

El filtro de Kalman es un algoritmo recursivo en el que el estado $x_{k}$ es considerado una variable aleatoria Gaussiana. El filtro de Kalman suele describirse en dos pasos: predicción y corrección.

### Predicción

| Estimación a priori | ${\hat {\textbf {x}}}_{k|k-1}=\mathbf {\Phi } _{k}\ {\textbf {x}}_{k-1|k-1}$ |
| Covarianza del error asociada a la estimación a priori | ${\textbf {P}}_{k|k-1}=\mathbf {\Phi } _{k}{\textbf {P}}_{k-1|k-1}\mathbf {\Phi } _{k}^{\text{T}}+{\textbf {Q}}_{k}$ |

### Corrección

| Actualización del residuo de la medición | ${\tilde {\textbf {y}}}_{k}={\textbf {z}}_{k}-{\textbf {H}}_{k}{\hat {\textbf {x}}}_{k|k-1}$ |
| Ganancia de Kalman | ${\textbf {K}}_{k}={\textbf {P}}_{k|k-1}{\textbf {H}}_{k}^{\text{T}}({\textbf {H}}_{k}{\textbf {P}}_{k|k-1}{\textbf {H}}_{k}^{\text{T}}+{\textbf {R}}_{k})^{-1}$ |
| Estimación a posteriori | ${\hat {\textbf {x}}}_{k|k}={\hat {\textbf {x}}}_{k|k-1}+{\textbf {K}}_{k}{\tilde {\textbf {y}}}_{k}$ |
| Covarianza del error asociada a la estimación a posteriori | ${\textbf {P}}_{k|k}=(I-{\textbf {K}}_{k}{\textbf {H}}_{k}){\textbf {P}}_{k|k-1}$ |
donde:
$\mathbf {\Phi } _{k}:$ Matriz de transición de estados. Es la matriz que relaciona ${\textbf {x}}_{k|k-1}$ con ${\textbf {x}}_{k-1|k-1}$ en la ausencia de funciones forzantes (funciones que dependen únicamente del tiempo y ninguna otra variable).
${\textbf {x}}_{k|k-1}:$ El estimado a priori del vector de estados
${\textbf {P}}_{k|k-1}:$ Covarianza del error asociada a la estimación a priori
${\textbf {z}}_{k}:$ Vector de mediciones al momento k
${\textbf {H}}_{k}:$ La matriz que indica la relación entre mediciones y el vector de estado al momento k, en el supuesto ideal de que no hubiera ruido en las mediciones.
${\textbf {R}}_{k}:$ La matriz de covarianza del ruido de las mediciones (depende de la resolución de los sensores).

## Extensibilidad

En el caso de que el sistema dinámico sea no lineal, es posible usar una modificación del algoritmo llamada "Filtro de Kalman Extendido", el cual linealiza el sistema en torno al ${\hat {x}}(t)$ identificado realmente, para calcular la ganancia y la dirección de corrección adecuada. En este caso, en vez de haber matrices A, B y C, hay dos funciones $f(x,u,w)$ y $h(x,v)$ que entregan la transición de estado y la observación (la salida contaminada) respectivamente. El modelo lineal dinámico con observación no lineal y no Gaussiano se estudia en este caso. Se extiende el teorema de Masreliez (ver. C. Johan Masreliez, 1975) como una aproximación de filtrado no Gaussiano con ecuación de estado lineal y ecuación de observaciones también lineal, al caso en que la ecuación de observaciones no lineal pueda aproximarse mediante el desarrollo en serie de Taylor de segundo orden.

## Primeras aplicaciones

Kalman encontró una audiencia receptiva de su filtro en el verano de 1960 en una visita de Stanley F. Schmidt del Ames Research Center de NASA en Mountain View (California). Kalman describió su resultado y Schmidt reconoció su potencial aplicativo - la estimación de la trayectoria y el problema del control del programa Apolo. Schmidt comenzó a trabajar inmediatamente en lo que fue probablemente la primera implementación completa del filtro de Kalman. Entusiasmado sobre el éxito del mismo, Schmidt impulsó usar el filtro en trabajos similares. A comienzos de 1961, Schmidt describió sus resultados a Richard H. Battin del laboratorio de instrumentación del MIT (llamado más tarde el Charles Stark Draper Laboratory). Battin estuvo usando métodos de espacio de estado para el diseño y la implementación de sistemas de navegación astronáutica, y él hizo al filtro de Kalman parte del sistema de guía del Apolo, el cual fue diseñado y desarrollado en el laboratorio de instrumentación. A mediados de la década de 1960, influenciado por Schmidt, el filtro de Kalman se hizo parte del sistema de navegación del transporte aéreo C5A, siendo diseñado por Lockheed Aircraft Company. El filtro de Kalman resolvió el problema de la fusión de datos asociado con la combinación de los datos del radar con los datos del sensor inercial al lograr una aproximación global de la trayectoria de la aeronave. Desde entonces ha sido parte integral de la estimación de trayectorias a bordo de las aeronaves y del diseño de sistemas de control.

## Impacto del filtro de Kalman en la tecnología

Desde el punto de vista de los problemas que involucran control y estimación, el filtro de Kalman ha sido considerado el gran logro en la teoría de estimación del siglo XX. Muchos de los logros desde su introducción no hubiesen sido posibles sin éste. Se puede decir que el filtro de Kalman fue una de las tecnologías que permitió la era espacial, ya que la precisión y eficiencia en la navegación de las naves espaciales a través del sistema solar no habrían sido posibles sin éste.
El principal uso del filtro de Kalman ha sido en los sistemas de control modernos, en el seguimiento y navegación de todo tipo de vehículos y en el diseño predictivo de estimación de los mismos.

## Aplicaciones

* Reducción de ruido en lectura de sensores
* Algoritmos de control en radares
* Vehículos de conducción autónoma
* Interfaz Cerebro Computadora
* sistema global de navegación por satélite