GaussianFilter (FPScript)
Filtre un signal avec un filtre gaussien. Généralement utilisé pour le lissage et comme filtre pour mesurer et analyser la circularité.
Syntaxe
GaussianFilter(DataSet, Type, Fc1, [ Fc2 ], [ SamplingRate ] [ , Mode = GAUSSIANFILTERMODE_SYMMETRIC_EXTENSION ])
La syntaxe de la fonction GaussianFilter se compose des éléments suivants :
Section |
Description |
||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
DataSet |
L'ensemble de données à filtrer. Les structures de données autorisées sont Séries de données, Matrice de données, Signal et Série de signaux. Tous les types de données réels sont autorisés, sauf Temps calendaire et Période de temps. Les valeurs invalides ne sont pas autorisées dans cet argument. 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. |
||||||||||
Type |
Précise le type de filtre. L'argument Type peut avoir les valeurs suivantes :
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é. |
||||||||||
Fc1 |
Spécifie la première fréquence de coupure du filtre gaussien. La fréquence doit être comprise entre 0 et 0,5 (la moitié du taux d'échantillonnage normalisé à un) ou entre 0 et 0,5 * SamplingRate. La fréquence de coupure du filtre gaussien est définie comme la fréquence à laquelle l'amplitude du filtre passe par 50 % de l'amplitude du signal original. Les structures de données autorisées sont Scalaire. Tous les types de données réels sont autorisés, sauf Temps calendaire et Période de temps. La valeur doit être supérieure ou égale à 0. 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é. |
||||||||||
Fc2 |
Spécifie la seconde fréquence de coupure du filtre gaussien. La fréquence doit être comprise entre 0 et 0,5 (la moitié du taux d'échantillonnage normalisé à un) ou entre 0 et 0,5 * SamplingRate. Cet argument n'a pas à être spécifié pour un filtre passe-bas ou passe-haut. La fréquence de coupure du filtre gaussien est définie comme la fréquence à laquelle l'amplitude du filtre passe par 50 % de l'amplitude du signal original. Les structures de données autorisées sont Scalaire. Tous les types de données réels sont autorisés, sauf Temps calendaire et Période de temps. La valeur doit être supérieure ou égale à 0. 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é. |
||||||||||
SamplingRate |
Précise le taux d'échantillonnage. L'argument est facultatif. Si l'argument n'est pas précisé, alors pour les fréquences de coupure Fc1 et Fc2 une fréquence normalisée de 0 à 0,5 doit être spécifiée dans chaque cas. Les structures de données autorisées sont Scalaire. Tous les types de données réels sont autorisés, sauf Temps calendaire et Période de temps. La valeur doit être supérieure à 0. 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. |
||||||||||
Mode |
Le filtrage correspond à la convolution (rapide) avec une fonction gaussienne dans le domaine temporel. L'argument précise donc le mode de calcul pour effectuer la convolution. L'argument Mode peut avoir les valeurs suivantes :
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 GAUSSIANFILTERMODE_SYMMETRIC_EXTENSION . |
Remarques
Le filtre gaussien (passe-bas) correspond à la convolution avec la fonction gaussienne suivante (noyau de convolution) dans le domaine temporel :
Dans cette équation, fc représente la fréquence de coupure. Dans ce cas, la convolution est calculée à l'aide de la FFT (transformée de Fourier rapide) comme suit : IRFFTn(FFTn(Data)*FFTn(GaussianKernel)). Comme la transformée de Fourier rapide d'une fonction gaussienne produit à son tour une fonction gaussienne, la fonction de transfert (c'est-à-dire FFTn(GaussianKernel)) peut être calculée explicitement. Dans le domaine fréquentiel, le filtre est donc calculé comme une multiplication avec la fonction de transfert suivante :
En sélectionnant f = fc, on obtient S(f) = 0,5, c'est-à-dire que l'amplitude du filtre passe par 50 % de l'amplitude du signal d'origine.
Dans le domaine fréquentiel, le filtre passe-haut gaussien correspond à une multiplication avec la fonction de transfert 1-S(f). Le filtre passe-bande et le filtre coupe-bande résultent donc d'une combinaison de passe-bas et de passe-haut.
Pour le choix spécifique suivant de fc, le noyau gaussien est écrit de manière équivalente dans le domaine temporel comme convolution avec une distribution normale gaussienne (avec une valeur attendue de 0 et un écart type de σ) comme :
La structure du résultat correspond à celle de l'argument DataSet. Le calcul des matrices de données et des séries de signaux est effectué colonne par colonne. Si elles sont présentes, les composantes X ou Z sont copiées dans le résultat sans modification.
Remarque Le filtre gaussien peut notamment être utilisé pour le lissage. Il est également fréquemment utilisé comme filtre pour mesurer et analyser la circularité ; voir [1]. Le GAUSSIANFILTERMODE_PERIODIC_BOUNDARY doit être utilisé lorsqu'on travaille avec un ensemble de données d'entrée périodiques ou un profil de circularité fermé. Dans le cas de données non périodiques et de données transitoires, utilisez le mode GAUSSIANFILTERMODE_ZERO_BOUNDARY (correspond à la condition limite zéro). À cette fin, un nombre approprié de zéros est ajouté au signal d'entrée pour la transformée de Fourier (zero padding). Dans le cas de données non périodiques avec une condition aux limites inconnue, utilisez le mode GAUSSIANFILTERMODE_SYMMETRIC_EXTENSION(condition limite exacte inconnue, les données sont étendues symétriquement). En règle générale, cela permet d'obtenir un lissage naturel des bords.
Disponible dans
Option Filtres numériques
Exemples
GaussianFilter(Data, FILTER_LOWPASS, 0.04)
Lisse un ensemble de données à l'aide du filtre passe-bas gaussien avec une fréquence de coupure de 0,04. Produit généralement un meilleur lissage que le lissage avec une moyenne mobile utilisant la fonction Smooth.
GaussianFilter(Data, FILTER_HIGHPASS, 0.01)
Supprime la composante continue avec un filtre passe-haut gaussien à basse fréquence de coupure. Les résultats sont similaires à ceux de la fonction DCRemovalFilter.
Dim dirac = (0 # 100) : 1 : (0 # 100)
Dim gaussCoeff = GaussianFilter(dirac, FILTER_LOWPASS, 0.04)
AmplitudeResponse(gaussCoeff)
Calcule la réponse en amplitude du filtre gaussien (passe-bas avec une fréquence de coupure de 0,04). La fonction GaussianFilter est appliquée à une impulsion de Dirac. On obtient ainsi la fonction de transfert du système sous la forme de coefficients de filtre. À l'aide de coefficients de filtrage, la fonction AmplitudeResponse peut être utilisée pour calculer la réponse d'amplitude du filtre. La figure suivante montre la comparaison entre la réponse en amplitude du filtre passe-bas gaussien avec une fréquence de coupure de 0,04 et une moyenne glissante avec une largeur de lissage de 7 (voir fonction Smooth). Les hautes fréquences, en particulier, sont mieux supprimées que lorsque l'on utilise la moyenne glissante :
L'illustration suivante montre la comparaison entre la réponse en amplitude du filtre passe-haut gaussien avec une fréquence de coupure de 0,04 et la fonction DCRemovalFilter avec la même fréquence de coupure et un ordre de 2 :
Dim sigma = 4.5
Dim fc = sqrt(log(2))/(sigma*sqrt(2)*PI)
GaussianFilter(Data, FILTER_LOWPASS, fc)
Lisse un ensemble de données par convolution avec une distribution normale gaussienne avec un écart-type réglable de σ (largeur).
Voir aussi
Fonction MaximumInscribedCircle
Fonction MinimumCircumscribedCircle
Objet d'analyse Lissage de Signal
Objet d'analyse Approximation Circulaire
Littérature
[1] B. Muralikrishnan, J. Raja: Computational Surface and Roundness Metrology. Springer-Verlag London Limited,2009.ISBN 1-848-00296-3.
[2] DIN Deutsches Institut für Normung e.V.: Part 2: Specification operators (ISO 12181-2:2011); English translation of DIN EN ISO 12181-2:2011-07. Dans: Geometrical product specifications (GPS) - Roundness. 2011.