Algorithme de Savitzky-Golay

Un article de Wikipédia, l'encyclopédie libre.

L'algorithme de Savitzky-Golay est une méthode utilisée en traitement du signal pour lisser une courbe et en extraire les dérivées successives. Il a été décrit en 1964 par Abraham Savitzky (en) et Marcel Golay[1].

Description de l'algorithme[modifier | modifier le code]

Algorithme de Savitzky-Golay appliqué sur un signal gaussien bruité avec un polynôme de degré 3 et une largeur de 9 points. De haut en bas : le signal lissé, la dérivée et la dérivée seconde.
Lissage point par point (mêmes conditions que l'image précédente). L'arc de courbe rouge montre le résultat de la régression sur la fenêtre considérée ; les arcs de courbe en jaune montrent l'extrapolation du polynôme de régression. Les points obtenus pour le lissage sont représentés par des ronds.

Considérons une courbe y = ƒ(x), et présentant des « aspérités », des oscillations de faibles amplitudes ; on parle de signal bruité. Il s'agit d'une courbe discrète, c'est-à-dire définie par un nuage de points (x(i), y(i))1 ≤ in.

L'algorithme de lissage le plus simple est la méthode des moyennes glissantes :

  • on considère une fenêtre, un intervalle, de « demi-largeur » (nombre de points) ;
  • on calcule la moyenne y + 1 de la fonction sur l'intervalle [1 ; 2 × + 1] (l'intervalle a donc une largeur de 2 + 1, n'est pas exactement la demi-largeur) ;
  • on définit un nouveau point (x( + 1), yliss( + 1)) avec yliss( + 1) = y + 1 ;
  • on fait glisser l'intervalle d'un point et l'on recommence.

Cet algorithme est simple, mais « violent » : il atténue énormément les fortes variations, il écrête les pics.

Pour la suite, nous désignons l'intervalle i comme étant [i ; i +  ], l'intervalle de milieu i et de largeur 2 + 1.

Une manière plus fine consiste à considérer un polynôme de degré d, avec d < 2 + 1. Pour chaque intervalle i, on effectue une régression pour déterminer le polynôme Pi minimisant l'erreur au sens des moindres carrés. On définit la valeur lissée

Par ailleurs, si le polynôme est au moins de degré 1, on peut déterminer la dérivée

et de manière générale, on peut déterminer la d-ième dérivée.

On voit que la méthode des moyennes glissantes est un lissage de Savitzky-Golay avec un polynôme de degré 0.

Illustration du fonctionnement de l'algorithme de Savistky-Golay sur le lissage d'un signal bruité représentant des pics.
Illustration du fonctionnement de l'algorithme de Savistky-Golay sur le lissage d'un signal bruité représentant des pics.

Choix des paramètres[modifier | modifier le code]

Dans la pratique :

  • un polynôme de degré 2 permet de prendre en compte la courbure ; un polynôme de degré 3 permet de prendre en compte des points d'inflexion ; il est rarement nécessaire d'aller au-delà ;
  • le nombre de points d'un intervalle doit être suffisamment grand devant le degré du polynôme pour que le lissage soit effectif ; s'ils sont égaux, le polynôme passe exactement par tous les points de l'intervalle, il n'y a donc pas de lissage.

On prend donc en général un polynôme de degré 3 et une fenêtre glissante d'au moins 5 points.

Plus la fenêtre est large, plus la courbe est lissée, mais plus on atténue les variations de petite longueur d'onde. La largeur limite est de l'ordre de la longueur d'onde des détails que l'on veut conserver. Si par exemple on s'intéresse à des pics — cas très fréquents en spectrométrie et en diffractométrie —, on prend en général pour largeur de fenêtre la largeur à mi-hauteur du pic le plus fin.

Cas d'un pas constant[modifier | modifier le code]

Concrètement, les coefficients de la régression polynomiale sont calculés par une combinaison linéaire des points de l'intervalle glissant. La valeur lissée, et les valeurs des dérivées, sont donc elles-mêmes des combinaisons linéaires :

 ;
 ;

Si le pas h = xixi - 1 est constant[2], les coefficients bk, b'k, sont les mêmes partout ; on se retrouve dans le cas d'un filtre à réponse impulsionnelle finie (filtre RIF). On peut donc déterminer au départ les coefficients bk, b'k, …, ce qui fournit un algorithme rapide et facile à mettre en œuvre — par exemple avec un tableur ; on parle alors de coefficients de convolution.

Dans ces conditions, on trouve que :

  • le lissage est identique que l'on utilise un polynôme de degré 2 (quadratique) ou 3 (cubique) ;
  • la dérivation est identique que l'on utilise un polynôme de degré 3 (cubique) ou 4 (« quartique ») ;
  • la dérivée seconde est identique que l'on utilise un polynôme de degré 4 (« quartique ») ou 5 (« quintique ») ;
  • les coefficients sont symétriques ou anti-symétriques, selon l'ordre de dérivation :
bk = b2k ; b'k = –b'2k ; …
  • on a toujours b' = 0 : le point yi ne contribue pas au calcul de y'liss i.

Les valeurs des coefficients sont tabulées pour des tailles de fenêtre (intervalle glissant) données. Par exemple, pour une fenêtre de 5 points et un polynôme de degré 3 :

 ;
 ;
.

Les tableaux ci-dessous donnent les coefficients de convolution pour des degrés de polynôme et des largeurs de fenêtre données.

Coefficients de convolution pour le lissage
Degré 2/3 (quadratique/cubique) 4/5 (quartique/quintique)
Largeur 5 7 9 7 9
–4 –21 15
–3 –2 14 5 –55
–2 –3 3 39 –30 30
–1 12 6 54 75 135
0 17 7 59 131 179
1 12 6 54 75 135
2 –3 3 39 –30 30
3 –2 14 5 –55
4 –21 15
Normalisation 35 21 231 231 429
Coefficients de convolution pour la dérivée
Degré 2 (quadratique) 3/4 (cubique/quartique)
Largeur 5 7 9 5 7 9
–4 –4 86
–3 –3 –3 22 –142
–2 –2 –2 –2 1 –67 –193
–1 –1 –1 –1 –8 –58 –126
0 0 0 0 0 0 0
1 1 1 1 8 58 126
2 2 2 2 –1 67 193
3 3 3 –22 142
4 4 –86
Normalisation 10h 28h 60h 12h 252h 1 188h

Remarque : la normalisation utilise le pas d'échantillonnage h.

Coefficients de convolution pour la dérivée seconde
Degré 2/3 (quadratique/cubique) 4/5 (quartique/quintique)
Largeur 5 7 9 5 7 9
–4 28 −4 158
–3 5 7 –117 12 243
–2 2 0 –8 –3 603 4 983
–1 –1 –3 –17 48 –171 −6 963
0 –2 –4 –20 –90 –630 −12 210
1 –1 –3 –17 48 –171 −6 963
2 2 0 –8 –3 603 4 983
3 5 7 –117 12 243
4 28 −4 158
Normalisation 7h2 42h2 462h2 36h2 1 188h2 56 628h2

Calcul des coefficients de convolution[modifier | modifier le code]

On se place en un point k donné. Les coordonnées du point expérimental sont (xk, yk).

Pour déterminer les coefficients de corrélation, on effectue un changement de variable afin d'avoir une abscisse centrée réduite — c'est-à-dire que l'intervalle sur lequel on effectue la régression devient [– ;  ] : on pose

  • x est la moyenne des valeurs de x sur l'intervalle [xk ; xk + ] considéré, c'est le centre de la fenêtre ;
  • h est le pas d'échantillonnage (distance entre deux points voisins).

L'abscisse z prend les valeurs (– ; – + 1 ; … ; –1 ; 0 ; 1 ; …  ). Par exemple, pour une fenêtre glissante de 5 points, on a (zi)1 ≤ i ≤ 5 = (–2 ; –1 ; 0 ; 1 ; 2).

Le polynôme de degré d s'exprime alors sous la forme :

Considérons la fonction vectorielle

avec

Sa matrice jacobienne s'écrit

La solution des équations normales

est donc

La valeur de la courbe lissée est la valeur du polynôme au centre de l'intervalle :

 ;

Pour les dérivées successives :

 ;
.

Par exemple, pour un polynôme de degré d = 3 et une fenêtre de 5 points, donc = 2 :

.

On a donc :

 ;
 ;
.

Notes et références[modifier | modifier le code]

  1. Abraham Savitzky et Marcel J. E. Golay, « Smoothing and Differentiation of Data by Simplified Least Squares Procedures », Analytical Chemistry, vol. 8, no 36,‎ , p. 1627–1639 (DOI 10.1021/ac60214a047)
  2. on n'a pas toujours un pas constant, on peut avoir un pas variable
    • pour des raisons d'optimisation : on veut mesurer plus finement une zone et plus grossièrement une autre (pour gagner du temps) ;
    • pour des raisons matérielles :
      • le système générant la valeur d'entrée x n'a pas une réponse linéaire,
      • pour des mesures très précises, la boucle de régulation peut prendre beaucoup de temps pour stabiliser la valeur d'entrée à la valeur de consigne xth, on peut alors gagner du temps en mesurant un point alors que la consigne n'est pas totalement atteinte, la valeur de x étant relevée de manière très précise.