Tout d'abord, c'est la première fois que j'essaye de faire un filtre de Kalman.
J'ai déjà posté la question suivante Filtrer le bruit et les variations des valeurs de vitesse sur StackOverflow qui décrit l'arrière-plan de ce message. Il s'agit d'un échantillon typique de valeurs que j'essaie de filtrer. Ils ne doivent pas nécessairement diminuer, ce qui est le cas ici. Mais le taux de changement est généralement comme ceci
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
J'ai implémenté mon filtre Kalman selon ce tutoriel: Filtre Kalman pour les nuls .
Mon implémentation ressemble à ceci (pseudocode).
//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
Je commence avec une estimation antérieure de 0. Cela semble bien fonctionner. Mais ce que je remarque, c'est que le kalmanGain diminuera chaque fois que cette mise à jour est exécutée, ce qui signifie que je fais confiance à mes nouvelles valeurs moins la durée de fonctionnement de mon filtre (?). Je n'en veux pas.
Je suis passé de l'utilisation d'une moyenne mobile (simple et pondérée exponentielle) à celle-ci. Pour l'instant, je ne peux même pas obtenir de aussi bons résultats que cela.
Ma question est de savoir si c'est la bonne mise en œuvre et si ma variance d'erreur précédente et l'écart-type semblent bons selon les valeurs d'échantillon que j'ai publiées? Mes paramètres sont en fait juste choisis au hasard pour voir si je pouvais obtenir de bons résultats. J'ai essayé plusieurs gammes différentes mais avec des résultats médiocres. Si vous avez des suggestions de changements que je peux faire, ce serait vraiment apprécié. Je suis désolé s'il manque des éléments évidents. Première publication ici aussi.