SavitzkyGolayFilter (FPScript)
Filtre l'ensemble de données avec un filtre de lissage Savitzky-Golay (également appelé Lissage des moindres carrés).
Syntaxe
SavitzkyGolayFilter(DataSet, SmoothingWidth, [ PolynomialOrder = 2 ] [ , Extrapolate = TRUE ])
La syntaxe de la fonction SavitzkyGolayFilter se compose des éléments suivants :
Section |
Description |
---|---|
DataSet |
L'ensemble de données à filtrer (lisser). Toutes les structures de données sont autorisées, sauf Scalaire et Liste. Tous les types de données numériques sont autorisés. Si l'argument est une liste, alors la fonction est exécutée pour chaque élément de la liste et le résultat est également une liste. |
SmoothingWidth |
Spécifie combien de valeurs voisines, y compris la valeur à lisser, doivent être incluses dans le lissage. La largeur de lissage doit être un nombre impair. Sinon, l'intervalle est asymétrique, et une valeur supplémentaire est incluse dans le calcul à droite du centre par opposition à la gauche. Les structures de données autorisées sont Scalaire. Tous les types de données entiers sont autorisés. La valeur doit être supérieure ou égale à 1. Si l'argument est une liste, alors son premier élément est pris. S'il s'agit à nouveau d'une liste, le processus est répété. |
PolynomialOrder |
Spécifie l'ordre du polynôme qui est ajusté localement à l'ensemble de données et donc utilisé pour déterminer les coefficients de filtrage. L'ordre polynomial choisi doit être inférieur à la largeur de lissage (de sorte qu'un nombre suffisant de points de données soit disponible pour l'ajustement du polynôme local). Sinon, l'ordre polynomial est réduit à SmoothingWidth de -1 pour le calcul. Les structures de données autorisées sont Scalaire. Tous les types de données entiers sont autorisés. La valeur doit être supérieure ou égale à 0 et inférieure ou égale à 15. Si l'argument est une liste, alors son premier élément est pris. S'il s'agit à nouveau d'une liste, le processus est répété. Si l'argument n'est pas spécifié, il est défini à la valeur par défaut 2 . |
Extrapolate |
La valeur TRUE indique que les points limites doivent être étendus symétriquement pour le filtrage. Dans ce cas, les coefficients de filtrage ne doivent être calculés qu'une seule fois. Bien que l'extrapolation puisse conduire à un comportement irrégulier du lissage aux bords, l'algorithme reste rapide. Si FALSE est sélectionné, le même ordre polynomial est utilisé pour lisser les points limites. Aux points limites, la largeur de lissage et l'ordre du polynôme à ajuster restent alors les mêmes, tandis que le point médian du filtre est décalé vers les limites. Dans ce cas, les coefficients de filtrage doivent être calculés individuellement pour tous les points limites. Cela permet généralement d'obtenir une plus grande précision lors du lissage des bords, mais l'algorithme est considérablement plus lent. Les structures de données autorisées sont Scalaire. Les types de données pris en charge sont Valeur booléenne. Si l'argument est une liste, alors son premier élément est pris. S'il s'agit à nouveau d'une liste, le processus est répété. Si l'argument n'est pas spécifié, il est défini à la valeur par défaut TRUE . |
Remarques
Le résultat a la même structure et la même unité que l'argument DataSet.
Chaque valeur dans DataSet est lissée avec (SmoothingWidth-1)/2 valeurs voisines de gauche et (SmoothingWidth-1)/2 valeurs voisines à droite (lorsque SmoothingWidth est inégale). Le lissage correspond à la convolution du signal avec des coefficients de filtrage de longueur SmoothingWidth. Pour cette procédure, les coefficients du filtre sont déterminés de telle sorte que le résultat corresponde à une régression polynomiale locale (c'est-à-dire un ajustement de la courbe polynomiale locale). Les coefficients de filtrage ne dépendent pas des valeurs Y. L'algorithme est décrit dans Algorithme de SavitzkyGolay.
Le filtrage n'est pas optimisé pour la suppression de fréquences plus élevées, mais plutôt pour la suppression de moments statistiques d'un ordre supérieur. Le filtre est donc particulièrement adapté au lissage des signaux qui, sans bruit, auraient une plage de fréquences élevée. La méthode est également utilisée lorsqu'un pic a été échantillonné à travers quelques points seulement. La position et la hauteur du pic peuvent être estimées, même si le maximum se situe entre deux points de prélèvement. Une application typique comprend, par exemple, l'analyse des spectres infrarouges. La méthode de lissage Savitzky-Golay est également connue sous le nom de filtre polynomial de lissage numérique (DISPO) et de lissage des moindres carrés.
Avant le filtrage, les valeurs sont converties en valeurs réelles ou complexes à virgule flottante de 64 bits. Le type de données du résultat est toujours une valeur réelle ou complexe à virgule flottante de 64 bits.
L'illustration montre la différence entre les deux fonctions de lissage Smooth (moyenne glissante) et SavitzkyGolayFilter (avec un ordre polynomial de 4). Les deux fonctions ont la même largeur de lissage. Alors qu'avec le lissage Savitzky-Golay, le pic le plus large est moins lissé par rapport à la moyenne glissante, les pics plus étroits conservent leur hauteur et leur largeur.
Disponible dans
Option Filtres numériques
Exemples
SavitzkyGolayFilter(Signal, 7, 2)
Lisse un signal en utilisant le filtre Savitzky-Golay. Pour ce processus, un polynôme du second ordre est utilisé, et trois valeurs voisines par côté à gauche et à droite de la valeur à lisser sont incluses dans le résultat (c'est-à-dire 7 valeurs au total).
SavitzkyGolayFilter(DataSet, N, 0)
Lisse un ensemble de données en utilisant le filtre de Savitzky-Golay par ajustement local de la courbe avec un polynôme de l'ordre de 0. Cela correspond à une moyenne glissante. À l'exception des points limites, le code est donc équivalent à Mean(DataSet, MEAN_ARITHMETIC + CALC_MOVING, N).
Dim N = 10
Dim polyOrder = 4
Dim width = 2*N + 1
Dim dirac = (0 # width) : 1 : (0 # width)
Dim coeff = SavitzkyGolayFilter(dirac, width, polyOrder)[N + 1, N + width]
AmplitudeResponse(coeff)
Calcule la réponse en amplitude du filtre de Savitzky-Golay (pour un polynôme d'ordre 4 et une largeur de lissage de 21). Pour ce faire, la fonction SavitzkyGolayFilter est appliquée à une impulsion de Dirac. Cela fournit la fonction de transfert du système sous la forme de coefficients de filtrage. À l'aide de coefficients de filtrage, la fonction AmplitudeResponse peut être utilisée pour calculer la réponse d'amplitude du filtre.
Voir aussi
Fonction SavitzkyGolayDerivative
Objet d'analyse Lissage de Signal
Littérature
[1] Savitzky, A.; Golay, M.J.E.: Smoothing and Differentiation of Data by Simplified Least Squares Procedures. Dans: Analytical Chemistry, Vol. 36, No. 8, Pages 1627-39. http://pubs.acs.org/doi/abs/10.1021/ac60214a047,1964.
[2] A. Gorry: General least-squares smoothing and differentiation by the convolution (Savitzky-Golay) method. Dans: Analytical Chemistry, Vol. 62, No. 2, Pages 570-3. http://pubs.acs.org/doi/abs/10.1021/ac00205a007,1990.