PieM
Senior Member
Il arrive que l'on ait besoin de mesurer en continu une grandeur (lumière, température, distance, bruit), mais que l'on souhaite s'affranchir de brusque variations perturbatrice.
L'utilisation de temporisation ne résout pas le problème car cela ne fait que retarder le la décision liée à la mesure. En outre ceci se fait aux dépend du temps de scrutation du programme, donc apporter un manque de réactivité.
Il est possible dans ce cas d'utiliser un filtre passe bas analogique mais cette méthode manque de souplesse dans son adaptation, et engendre la perte de la valeur instantanée mesurée.
L'autre méthode est purement numérique, et ne nécessite donc aucun composant électronique.
Elle consiste à utiliser un lissage via la méthode de la moyenne glissante. Ceci nécessite toutefois un algorithme gourmand en mémoire.
Sans avoir une consommation excessive de mémoire, une autre méthode, paramétrable, peut être réalisée de la façon suivante:
Définir une variable b0 (ou w0) comme étant la valeur instantanée lue
Définir une variable w1 comme étant la moyenne en cours
Définir une variable b4 comme étant le coefficient de pondération.
la formule générale est la suivante:
valeur actuelle = (w1*b4 + b0) / (b4+1)
cette valeur actuelle devenant ensuite w1
en pratique le programme se présente de la façon suivante :
à l'initialisation:
lire b0
écrire que w1 = b0 ' initialise la moyenne avec la 1ere valeur lue.
Dans le programme principal:
dans une boucle d'échantillonnage, de fréquence à définir:
lire b0
calculer w1 = w1* b4 + b0 / (b4+1) si les parenthèses sont autorisées
sinon,calculer en trois temps
w1 = w1* b4 + b0
b0 = b4+1 (la réutilisation de b0 économisant une variable)
w1=w1/b0
Nota: en choisissant le coef = coef+1, la formule devient:
w1= b4-1*w1+b0/b4
Dans ce principe w1 contient donc la moyenne de la valeur en cours et des valeurs précédentes pondérées par un coefficient.
Selon le choix du coefficient, on voit sur le graphique que le lissage est plus ou moins importante.
la comparaison avec une vraie moyenne glissante sur 8 valeurs est visible également.
En fonction de l'utilisation, on peut comparer la valeur mesurée instantanée (b0) à la valeur W1 devenant une référence de seuil variable dans le temps.
Par exemple, détecter, malgrè les variations de luminosité lentes ( jour > nuit), le passage d'un objet devant une LDR le jour, aussi bien que l'apparition d'une lumière vive dans l'obscurité.
L'utilisation de temporisation ne résout pas le problème car cela ne fait que retarder le la décision liée à la mesure. En outre ceci se fait aux dépend du temps de scrutation du programme, donc apporter un manque de réactivité.
Il est possible dans ce cas d'utiliser un filtre passe bas analogique mais cette méthode manque de souplesse dans son adaptation, et engendre la perte de la valeur instantanée mesurée.
L'autre méthode est purement numérique, et ne nécessite donc aucun composant électronique.
Elle consiste à utiliser un lissage via la méthode de la moyenne glissante. Ceci nécessite toutefois un algorithme gourmand en mémoire.
Sans avoir une consommation excessive de mémoire, une autre méthode, paramétrable, peut être réalisée de la façon suivante:
Définir une variable b0 (ou w0) comme étant la valeur instantanée lue
Définir une variable w1 comme étant la moyenne en cours
Définir une variable b4 comme étant le coefficient de pondération.
la formule générale est la suivante:
valeur actuelle = (w1*b4 + b0) / (b4+1)
cette valeur actuelle devenant ensuite w1
en pratique le programme se présente de la façon suivante :
à l'initialisation:
lire b0
écrire que w1 = b0 ' initialise la moyenne avec la 1ere valeur lue.
Dans le programme principal:
dans une boucle d'échantillonnage, de fréquence à définir:
lire b0
calculer w1 = w1* b4 + b0 / (b4+1) si les parenthèses sont autorisées
sinon,calculer en trois temps
w1 = w1* b4 + b0
b0 = b4+1 (la réutilisation de b0 économisant une variable)
w1=w1/b0
Nota: en choisissant le coef = coef+1, la formule devient:
w1= b4-1*w1+b0/b4
Dans ce principe w1 contient donc la moyenne de la valeur en cours et des valeurs précédentes pondérées par un coefficient.
Selon le choix du coefficient, on voit sur le graphique que le lissage est plus ou moins importante.
la comparaison avec une vraie moyenne glissante sur 8 valeurs est visible également.
En fonction de l'utilisation, on peut comparer la valeur mesurée instantanée (b0) à la valeur W1 devenant une référence de seuil variable dans le temps.
Par exemple, détecter, malgrè les variations de luminosité lentes ( jour > nuit), le passage d'un objet devant une LDR le jour, aussi bien que l'apparition d'une lumière vive dans l'obscurité.
Attachments
-
128.8 KB Views: 63
Last edited: