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 implementarBreve 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.LinearKalmanIteratorType
mutable 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.EnKFType

KalmanIterator 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)$.

Atención

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).