Qu'est-ce que le lissage et comment puis-je le faire?
J'ai un tableau dans Matlab qui est le spectre de magnitude d'un signal de parole (la magnitude de 128 points de FFT). Comment lisser cela en utilisant une moyenne mobile? D'après ce que je comprends, je devrais prendre une taille de fenêtre d'un certain nombre d'éléments, prendre la moyenne, et cela devient le nouveau 1er élément. Déplacez ensuite la fenêtre vers la droite d'un élément, prenez la moyenne qui devient le 2e élément, et ainsi de suite. Est-ce vraiment ainsi que cela fonctionne? Je ne suis pas sûr moi-même car si je fais cela, dans mon résultat final, j'aurai moins de 128 éléments. Alors, comment ça marche et comment ça aide à lisser les points de données? Ou existe-t-il un autre moyen de lisser les données?
la source
Réponses:
Le lissage peut se faire de plusieurs façons, mais en termes très basiques et généraux, cela signifie que vous égalisez un signal, en mélangeant ses éléments avec leurs voisins. Vous salissez / brouillez un peu le signal afin de vous débarrasser du bruit. Par exemple, une technique de lissage très simple serait de recalculer chaque élément de signal
f(t)
à 0,8 de la valeur d'origine, plus 0,1 de chacun de ses voisins:Notez comment les facteurs de multiplication, ou poids, s'additionnent à un. Donc, si le signal est assez constant, le lissage ne le change pas beaucoup. Mais si le signal contenait un changement saccadé soudain, alors la contribution de ses voisins aidera à dissiper un peu ce bruit.
Les poids que vous utilisez dans cette fonction de recalcul peuvent être appelés un noyau . Une fonction gaussienne unidimensionnelle ou tout autre noyau de base devrait faire l'affaire dans votre cas.
Bel exemple d'un type particulier de lissage:
En haut: signal non
lissé En bas: signal lissé
Exemples de quelques noyaux:
la source
En plus de la belle réponse de Junuxx, je voudrais déposer quelques notes.
Le lissage est lié au filtrage ( article Wikipédia malheureusement assez vague ) - vous devez choisir le lisseur en fonction de ses propriétés.
L'un de mes favoris est le filtre médian . Ceci est un exemple de filtre non linéaire. Il possède des propriétés intéressantes, il préserve les "bords" et est assez robuste sous bruit important.
Si vous avez un modèle, la façon dont votre signal se comporte avec un filtre de Kalman vaut le détour. Son lissage est en fait une estimation bayésienne du maximum de vraisemblance du signal basée sur des observations.
la source
Le lissage implique l'utilisation d'informations provenant d'échantillons voisins afin de modifier la relation entre les échantillons voisins. Pour les vecteurs finis, aux extrémités, il n'y a pas d'information voisine d'un côté. Vos choix sont les suivants: ne pas lisser / filtrer les extrémités, accepter un vecteur lissé résultant plus court, créer des données et lisser avec cela (dépend de la précision / utilité de toutes les prédictions sur les extrémités), ou peut-être utiliser différents noyaux de lissage asymétrique à les extrémités (ce qui finit par raccourcir le contenu de l'information dans le signal).
la source
Vous pouvez trouver l'intégralité du code matlab pour lisser le filtre moyen mobile pour différentes longueurs de prises. www.gaussianwaves.com/2010/11/moving-average-filter-ma-filter-2/
la source
D'autres ont mentionné comment vous effectuez le lissage, je voudrais mentionner pourquoi le lissage fonctionne.
Si vous suréchantillonnez correctement votre signal, il variera relativement peu d'un échantillon à l'autre (échantillon = points temporels, pixels, etc.), et il devrait avoir une apparence globale lisse. En d'autres termes, votre signal contient peu de hautes fréquences, c'est-à-dire des composantes de signal qui varient à un taux similaire à votre taux d'échantillonnage.
Pourtant, les mesures sont souvent corrompues par le bruit. Dans une première approximation, nous considérons généralement que le bruit suit une distribution gaussienne avec un zéro moyen et un certain écart-type qui est simplement ajouté au-dessus du signal.
Pour réduire le bruit dans notre signal, nous faisons généralement les quatre hypothèses suivantes: le bruit est aléatoire, n'est pas corrélé entre les échantillons, a une moyenne de zéro et le signal est suffisamment suréchantillonné. Avec ces hypothèses, nous pouvons utiliser un filtre de moyenne mobile.
Considérons, par exemple, trois échantillons consécutifs. Étant donné que le signal est fortement suréchantillonné, le signal sous-jacent peut être considéré comme changeant de façon linéaire, ce qui signifie que la moyenne du signal sur les trois échantillons serait égale au vrai signal sur l'échantillon du milieu. En revanche, le bruit a une moyenne de zéro et n'est pas corrélé, ce qui signifie que sa moyenne devrait tendre à zéro. Ainsi, nous pouvons appliquer un filtre de moyenne mobile à trois échantillons, où nous remplaçons chaque échantillon par la moyenne entre lui-même et ses deux voisins adjacents.
Bien sûr, plus nous élargissons la fenêtre, plus le bruit sera égal à zéro, mais moins notre hypothèse de linéarité du vrai signal est vraie. Nous devons donc faire un compromis. Une façon d'essayer d'obtenir le meilleur des deux mondes est d'utiliser une moyenne pondérée, où nous donnons des échantillons plus éloignés de plus petits poids, de sorte que nous faisons la moyenne des effets de bruit à partir de plus grandes gammes, tout en ne pondérant pas trop le signal vrai là où il s'écarte de notre linéarité supposition.
La façon dont vous devez mettre les poids dépend du bruit, du signal et de l'efficacité de calcul, et, bien sûr, du compromis entre l'élimination du bruit et la coupure du signal.
Notez qu'il y a eu beaucoup de travail au cours des dernières années pour nous permettre d'assouplir certaines des quatre hypothèses, par exemple en concevant des schémas de lissage avec des fenêtres de filtre variables (diffusion anisotrope), ou des schémas qui n'utilisent pas vraiment de fenêtres pas du tout (moyens non locaux).
la source