Lisser des valeurs expérimentales bruitées avant de tracer la représentation

Principe

Les courbes obtenues après importation des valeurs brutes issues d'un capteur sont souvent difficiles à exploiter en raison des bruits de mesures.

Il est donc intéressant de filtrer ces défauts dont la fréquence des variations est élevée (comparée aux variations du signal que l'on souhaite observer) pour ne conserver que l'évolution de la grandeur qui nous intéresse. Comme on peut le voir sur le graphe ci-contre, on supprime ainsi les fluctuations transitoires de façon à souligner les tendances à plus long terme.

On parle de l'opération de filtrage qui est une étape indispensable du processus de conversion d'un signal analogique en signal numérique

On propose ici une méthode filtrage relativement simple à mettre en œuvre et à justifier auprès des élèves de lycée.

Lissage d'une courbeInformations[1]

Il est conseillé de réaliser une copie de la liste originale pour ne pas risquer d'altérer les mesures. En Python, modifier une donnée d'une extraction d'un tableau peut entraîner une modification du tableau initial !

1
import numpy as np  # Importation de la bibliothèque numpy
2
B = np.copy(A)  # Création d'une copie de la liste originale

MéthodeFiltre numérique par moyenne glissante

Cette méthode consiste à remplacer chaque valeur du tableau par une moyenne des valeurs qui l'entourent. Cette moyenne est dite glissante (ou mobile) parce qu'elle est recalculée de façon continue, en utilisant à chaque calcul un sous-ensemble d'éléments dans lequel un nouvel élément remplace le plus ancien.

1
import numpy as np
2
3
# signal_brut est le tableau des valeurs brutes
4
5
## fonction lissage : retourne un tableau correspondant aux valeurs de signal_brut remplacées par une moyenne glissante, des valeurs qui les entourent, centrée de largeur deux L
6
def lissage(signal_brut,L):
7
    res = np.copy(signal_brut) # duplication des valeurs
8
    for i in range (1,len(signal_brut)-1): # toutes les valeurs sauf la première et la dernière
9
        L_g = min(i,L) # nombre de valeurs disponibles à gauche
10
        L_d = min(len(signal_brut)-i-1,L) # nombre de valeurs disponibles à droite
11
        Li=min(L_g,L_d)
12
        res[i]=np.sum(signal_brut[i-Li:i+Li+1])/(2*Li+1)
13
    return res
14
15
# signal_lisse est le tableau des valeurs lissées avec une moyenne glissante de largeur 2x10
16
signal_lisse = lissage(signal_brut,10)

Il est possible de changer la valeur de L qui règle l'étendue de la moyenne pour ajuster le niveau de lissage.