Pages: [1]   Go Down
Author Topic: code lissage  (Read 1226 times)
0 Members and 1 Guest are viewing this topic.
france
Offline Offline
Newbie
*
Karma: 0
Posts: 42
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
« Last Edit: November 16, 2012, 02:01:42 am by lcd1602 » Logged

France
Offline Offline
God Member
*****
Karma: 4
Posts: 971
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Code:
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
« Last Edit: November 16, 2012, 01:06:19 pm by al1fch » Logged

france
Offline Offline
Newbie
*
Karma: 0
Posts: 42
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

merci al1fch
 smiley-grin
Logged

france
Offline Offline
Newbie
*
Karma: 0
Posts: 42
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

bonjour.
 j'ai des soucis avec la fonction  smiley-red
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.*
« Last Edit: November 17, 2012, 12:57:41 pm by lcd1602 » Logged

France
Offline Offline
Faraday Member
**
Karma: 36
Posts: 3421
There is an Arduino for that
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Code:
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);
}
« Last Edit: November 17, 2012, 03:17:10 pm by fdufnews » Logged

france
Offline Offline
Newbie
*
Karma: 0
Posts: 42
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

merci pour cette correction fdufnews  smiley-grin
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 1
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Logged

Pages: [1]   Go Up
Jump to: