Filtrer des données bruitées

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!

Pour filtrer tes données tu peux utiliser ça (filtre passe-bas) :

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;
}

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:

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 :stuck_out_tongue:
merci pour cette réponse très rapide! :slight_smile:

J'ai corrigé. :*