He construido (varios) filtros Kalman extendidos discretos (EKF). El modelo de sistema que estoy construyendo tiene 9 estados y 10 observaciones. Veo que la mayoría de los estados convergen, excepto uno. Todos, excepto 1-2 de la estimación del estado EKF, parecen ir a la deriva. Como el EKF depende de que todos los estados sean convergentes, el resto de los estados son muy erróneos después de la divergencia.
¿Cómo verifico la observabilidad del EKF? ¿Simplemente verifico el rango de la medición jacobiana y veo si es menor que el rango máximo de la medición jacobiana?
Después de agregar más medidas en mi simulación, pude lograr que las cosas convergieran. Sin embargo, mi pregunta sobre la observabilidad aún permanece.
Problema:
La verdad básica y los gráficos estimados de EKF se pueden encontrar aquí o ver a continuación.
Notas:
- El modelo es bastante no lineal entre los pasos de tiempo 400-600, por lo tanto, existe cierta divergencia de algunos de los estados.
- La figura / estado 6 es la que parece estar divergiendo
- Ignore las gráficas de "lecturas del sensor" para las Figuras 8/9
Cosas que he probado:
- Sé que para los sistemas de espacio de estado lineal puede usar el Teorema de Cayley Hamilton para verificar la observabilidad.
- He intentado comprobar el residuo de innovación / medición
e
y todas las innovaciones convergen a 0 - También he probado diferentes entradas y no parecen afectar la convergencia de los estados divergentes.
- He sintonizado el EKF sin ningún signo de convergencia para los estados divergentes.
- Gráficos para otra señal de entrada: o ver abajo
- Después de hablar con un colega, sugirió que investigue otro problema que podría ser que haya una observación que dependa linealmente de 2 estados, por ejemplo
y = x1 + x2
. Hay un número infinito de valores que podrían satisfacer lo mismoy
, pero ¿no debería la observabilidad capturar también este problema?
Avíseme si hay algo más que pueda proporcionar.
Gráficos de verdad real y estimación de EKF:
haga clic en la imagen para ampliarla
Señal de entrada adicional:
haga clic en la imagen para ampliarla
rank(O) = [H; HA...] = n
. El único problema es que tengo algo así como unsin( x(3) )
seno de estado 3. ¿Lo linealizox(3)
y lo trato como parte de la matriz A? Probaré esto por la mañana e informaré de nuevo. cwrucutter.wordpress.com/2012/11/12/…