Pages: [1]   Go Down
Author Topic: code lissage  (Read 982 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: 961
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: 23
Posts: 3017
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

Pages: [1]   Go Up
Jump to: