code lissage

bonjour.
je voudrais savoir comment ce code de lissage fonctionne,
j'ai une lecture de capteur infrarouge qui est trop fluctuante,
j'aimerai la stabilisé.

Code:
void loop()
{FilteredSpeed= lpfilter(Speed*.9+(FilteredSpeed*.1), filterVal , FilteredSpeed); }
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;
}*_

merci de votre lecture.

Bonjour
C'est un filtre passe-bas numérique du premier ordre.

La fonction lpfilter() reçoit :
data = donnée brute a filtrer
filterVal : coefficient du filtre compris entre 0 et 0.99 (peut etre vu come un %)
filterdedVAL : valeur filtrée précédente

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

Le calcul consiste à combiner un % de la valeur brute actuelle (instant n) avec un % de la valeur filtrée antérieure (instant n-1)
On actualise enfin la 'dernière valeur filtrée'

Avec *filterVal=*0,5 le filtre revient à une moyenne simple entre valeur brute actuelle et valeur filtrée précédente, c'est du 50/50

merci al1fch
:smiley:

bonjour.
j'ai des soucis avec la fonction :blush:
voioà coment j'ai tra
voici le bout de code:

valeur_brute = Lect_Capt_1;
}
void filtre_pass_bas(int valeur_brute){
resultat_filtre_Prec= Lpfilter(resultat*.9+(resultat_filtre_Prec*.1),Coef_filtre ,resultat_filtre_Prec); } je pense que c'est ici que cela ne va pas je n'ai pas vraiment de relation avec le reste
float Lpfilter(float valeur_brute, float Coef_filtre, float Valeur_Filtre_Prec){

  • if (Coef_filtre > 1){*
  • Coef_filtre = .99;*
  • }*
  • else if (Coef_filtre <= 0){*
  • Coef_filtre = 0;*
  • }*
    Valeur_Filtre_Prec = (valeur_brute * (1 - Coef_filtre)) + (Valeur_Filtre_Prec * Coef_filtre);

merci de votre aide.*

valeur_brute = Lect_Capt_1;
}

void filtre_pass_bas(int valeur_brute){
      resultat_filtre_Prec= Lpfilter(valeur_brute, Coef_filtre , resultat_filtre_Prec);
} 

float Lpfilter(float valeur_brute, float Coef_filtre, float Valeur_Filtre_Prec){

     if (Coef_filtre > 1){
       Coef_filtre = .99;
    }
     else if (Coef_filtre <= 0){
       Coef_filtre = 0;
    }
    return (valeur_brute * (1 - Coef_filtre)) + (Valeur_Filtre_Prec * Coef_filtre);
}

merci pour cette correction fdufnews :smiley:

Bonjour,

J'ai lu attentivement toutes ces infos;
Malgrés cela, je ne parviens pas à utgiliser le filtre passe-bas lpfilter dans mon code.

Si je lis les données X de mon entrée A0 et veut les lisser en Fx.
Que dois-je mettre dans le setup et dans le Void...

lpfilter est-il bien intégré à Arduino ou faut-il installer une librairie...

Merci d'avance pour les infos supplémentaires que vous pourriez me donner.

J

Vous avez dit que c'est un filtre passe-bas. Donc quelle est sa fréquence de coupure????