En primer lugar, esta es la primera vez que intento hacer un filtro de Kalman.
Anteriormente publiqué la siguiente pregunta Filtrar el ruido y las variaciones de los valores de velocidad en StackOverflow que describe los antecedentes de esta publicación. Esta es una muestra típica de valores que estoy tratando de filtrar. No necesariamente tienen que disminuir, que es el caso aquí. Pero la tasa de cambio es típicamente así
X ------- Y
16 --- 233.75
24 --- 234.01
26 --- 234.33
32 --- 234.12
36 --- 233.85
39 --- 233.42
47 --- 233.69
52 --- 233.68
55 --- 233.76
60 --- 232.97
66 --- 233.31
72 --- 233.99
He implementado mi Filtro de Kalman de acuerdo con este tutorial: Filtro de Kalman para Dummies .
Mi implementación se ve así (pseudocódigo).
//Standard deviation is 0.05. Used in calculation of Kalman gain
void updateAngle(double lastAngle){
if(firsTimeRunning==true)
priorEstimate = 0; //estimate is the old one here
priorErrorVariance = 1.2; //errorCovariance is the old one
else
priorEstimate = estimate; //estimate is the old one here
priorErrorVariance = errorCovariance; //errorCovariance is the old one
rawValue = lastAngle; //lastAngle is the newest Y-value recieved
kalmanGain = priorErrorVariance / (priorErrVariance + 0.05);
estimate = priorEstimate + (kalmanGain * (rawValue - priorEstimate));
errorCovariance = (1 - kalmanGain) * priorErrVariance;
angle = estimate; //angle is the variable I want to update
} //which will be lastAngle next time
Comienzo con una estimación previa de 0. Esto parece funcionar bien. Pero lo que noto es que kalmanGain disminuirá cada vez que se ejecute esta actualización, lo que significa que confío en mis nuevos valores menos cuanto más tiempo se esté ejecutando mi filtro (?). No quiero eso
Pasé de usar solo un promedio móvil (simple y exponencial ponderado) a usar esto. En este momento ni siquiera puedo obtener resultados tan buenos como eso.
Mi pregunta es si esta es la implementación correcta y si mi varianza de error anterior y la desviación estándar se ven bien de acuerdo con los valores de muestra que he publicado. En realidad, mis parámetros se seleccionan al azar para ver si puedo obtener buenos resultados. He intentado varios rangos diferentes pero con malos resultados. Si tiene alguna sugerencia sobre los cambios que puedo hacer, sería muy apreciada. Lo siento si faltan algunas cosas obvias. Publicación por primera vez aquí también.