Iteradores: KalmanIterator
Un iterador debe contener la información de un paso del filtro de kalman.
La función next_iteration!(iterator::KalmanIterator, control)
permite generar una nueva iteración, pero requiere que se implementen los siguientes métodos:
Métodos a implementar | Breve descripción |
---|---|
update_inner_state!(iterator, control) | Si el iterador guarda un estado interno $x_n$, este método debería actualizarlo a $x_{n+1}$. Si no (como cuando se está observando un sistema físico real del que solo se tienen mediciones), puede estar en blanco. |
forecast_observed_state!(iterator, control) | Actualiza la estimación a priori de $\hat{x}_{n+1,n}$, usando el control $u_n$. |
observe_inner_system(iterator) | Entrega una observación $y_{n+1}$ del sistema real. |
analyse!(iterator, observation) | Analiza la observación $y_{n+1}$ para generar una nueva estimación a posteriori $\hat{x}_{n+1,n+1}$. |
update_updater!(iterator) | Permite actualizar el updater luego de la iteración. Puede usarse por ejemplo, con un updater no lineal que debe ser linealizado tras cada iteración. Puede dejarse en blanco. |
Hay dos opciones disponibles
LinearKalmanIterator
Permite realizar iterar con el filtro de Kalman de toda la vida.
KalmanFilter.LinearKalmanIterator
— Typemutable struct LinearKalmanIterator{T} <: KalmanFilter.KalmanIterator
Define un iterator de Kalman que almacena tanto un estado interno (que corresponde al sistema real) como un sistema aproximado, el cual es ajustado a partir de observaciones del sistema interno.
Campos
n
Número de iteración actual $n$. Se inicializa en 0.
u
Control $u_{n-1}$ usado para llegar al estado actual
system
Sistema
hatX
Aproximación del estado interno $\hat{x}_{n,n}$, y una estimación de la matriz de covarianzas $\hat{P}_{n,n}$ del error $x_n - \hat{x}_{n,n}$.
next_hatX
Estimación $\hat{x}_{n,n-1}$ del estado $x_n$ antes de conocer la observación $y_n$ (solo contando con información hasta $y_{n-1}$).
updater
KalmanUpdater
que permite actualizar tanto el estado interno como las aproximaciones.observer
Un observador lineal que entrega observaciones $y_n$ del estado real.
noiser
Una distribución que permite agregar ruido al sistema. Por defecto es una $\mathcal{N}(0,1)$.
EnKF
Permite iterar un ensamble de estados aproximados, los que representan una muestra de la distribución de los estados en el tiempo indicado. Esto permite generar aproximaciones con el promedio y la covarianza muestral de los datos.
KalmanFilter.EnKF
— TypeKalmanIterator
que permite aproximar un estado mediante la técnica Ensemble Kalman Filter.
n::Int64
Número de iteración actual $n$. Se inicializa en 0.
N::Int64
Tamaño del ensamble $N$, cantidad de estimaciones que se trabajarán.
u::Real
Control $u_{n-1}$ usado para llegar al estado actual
system::KalmanFilter.ObservableSystem
Sistema
states_hatx::Any
Array de aproximaciones $\{ \hat{x}^{(i)}_{n,n} \}_i$ del estado real $x_n$.
states_next_hatx::Any
Array de estimaciones $\{ \hat{x}^{(i)}_{n,n-1} \}_i$ del estado real $x_n$, antes de conocer la observación $y_n$ (solo contando con información hasta $y_{n-1}$).
kalman_gain::AbstractArray
Matriz de ganancia de Kalman $K_n$
updater::KalmanFilter.KalmanUpdater
KalmanUpdater
que permite actualizar tanto el estado interno como las aproximaciones. No es necesario usar un updater linealizable, aunque sea NL.
observer::KalmanFilter.LinearObserver
Un observador lineal que entrega observaciones $y_n$ del estado real.
noiser::Distribution{Univariate,S} where S<:ValueSupport
Una distribución que permite agregar ruido al sistema. Por defecto es una normal $\mathcal{N}(0,1)$.
Hasta ahora es necesario que el usuario cuide que las condiciones iniciales estén correctamente inicializadas tanto en KalmanObserver
(para el caso en que se guarda un sistema interno) y para KalmanUpdater
(importa en la linearización inicial de un sistema no lineal).