Go Down

Topic: Filtrer des données bruitées (Read 4378 times) previous topic - next topic

MrAlexis44600

Bonjour,

je tente d'utiliser des données des accéléromètres d'un Wii nunchuck:



mais les données sont bruitées (peu de répétabilité dans les mesures, c'est à dire que 2 mesures successives vont être différentes même si l'on ne bouge pas la manette)

j'applique un filtre du type: accélération = (précédente valeur d'accélération + nouvelle) /2

mais ça ne semble pas suffisant...

Si quelqu'un a déja vu ce cas de figure et a une solution efficace, je suis preneur!

merci!

jfs

#1
Jan 27, 2011, 08:39 pm Last Edit: Jan 27, 2011, 09:07 pm by Jean-François Reason: 1
Pour filtrer tes données tu peux utiliser ça (filtre passe-bas) :

Code: [Select]

float valeur_filtree;

void loop(){

valeur_filtree= lpfilter(float(valeur_lue)*.9+(valeur_filtree*.1), filterVal , valeur_filtree);
}


float lpfilter(float data, float filterVal, float filteredVal){

 if (filterVal > 1){
   filterVal = .99;
 }
 else if (filterVal <= 0){
   filterVal = 0;
 }

 filteredVal = (data * (1 - filterVal)) + (filteredVal * filterVal);

 return filteredVal;
}
Pas d'aide par MP !!!

Concernant le fonctionnement du forum tout se trouve dans les messages épinglés en tête de page.

MrAlexis44600

Ok si je comprends bien cela permet de pondérer l'ancienne valeur par rapport à la nouvelle?
par contre elle est filtrée par la fonction mais aussi dans la manière d'appeler la fonction?
je ne comprends pas trop la partie:

Code: [Select]
float(nums[3])*.9+(valeur_a_filter*.1)

je viens de tester une moyenne pondérée avec un coeff 0.9 et cela semble mieux. Il y a tout un travail d'étalonnage qui m'attends  :P
merci pour cette réponse très rapide!  :)

jfs

Pas d'aide par MP !!!

Concernant le fonctionnement du forum tout se trouve dans les messages épinglés en tête de page.

Go Up