Go Down

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

Hexa Emails

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!
J'apprends tous les jours!

Jean-François

#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;
}
MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

Hexa Emails

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!  :)
J'apprends tous les jours!

Jean-François

MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

Go Up