Chaohuang a une bonne réponse, mais j'ajouterai également qu'une autre méthode que vous pouvez utiliser serait via la transformation de l'ondelette de Haar, suivie d'un retrait coefficients des ondelettes et d'une transformation de Haar inverse dans le domaine temporel.
La transformée en ondelettes de Haar décompose votre signal en coefficients de fonctions carrées et de différence, bien qu'à différentes échelles. L'idée ici est que vous «forcez» la nouvelle représentation du signal carré pour qu'elle corresponde le mieux à votre signal d'origine, et donc celle qui représente le mieux où se trouvent vos bords.
Lorsque vous effectuez un retrait co-efficace, cela signifie simplement que vous définissez des coefficients spécifiques de la fonction transformée de Haar à zéro. (Il existe d'autres méthodes plus impliquées, mais c'est la plus simple). Les coefficients d'ondelettes transformées de Haar sont des scores associés à différentes fonctions de carré / différence à différentes échelles. La RHS du signal transformé de Haar représente des bases carrées / de différence à l'échelle la plus basse et peut donc être interprétée à la «fréquence la plus élevée». La majeure partie de l'énergie du bruit se trouvera donc ici, VS la plupart de l'énergie du signal qui se trouverait sur le LHS. Il s'agit des coefficients de base qui sont annulés et le résultat est ensuite inversé et retransformé dans le domaine temporel.
Ci-joint un exemple de sinusoïde corrompue par un bruit AWGN important. L'objectif est de déterminer où se trouvent le «début» et «l'arrêt» du pouls. Le filtrage traditionnel étalera les bords haute fréquence (et très localisés dans le temps), car en son cœur, le filtrage est une technique L-2. En revanche, le processus itératif suivant réduira le bruit et préservera les bords:
(Je pensais que l'on pouvait joindre des films ici, mais je ne semble pas pouvoir le faire. Vous pouvez télécharger le film que j'ai fait du processus ici ). (Clic droit et 'enregistrer le lien sous').
J'ai écrit le processus «à la main» dans MATLAB, et ça se passe comme ceci:
- Créez une impulsion sinusoïdale corrompue par un AWGN lourd.
- Calculez l'enveloppe de ce qui précède. (Le signal').
- Calculez la transformée en ondelettes Haar de votre signal à toutes les échelles.
- Débruitage par seuillage co-efficace itératif.
- Haar inverse Transformez le vecteur co-efficace rétréci.
Vous pouvez clairement voir comment les coefficients sont réduits et la transformation de Haar inverse qui en résulte.
Cependant, un inconvénient de cette méthode est que les bords doivent se situer dans ou autour des bases carrées / de différence à une échelle donnée. Sinon, la transformation est forcée de passer au niveau supérieur suivant, et ainsi on perd un placement exact pour le bord. Il existe des méthodes multi-résolution pour contrer cela, mais elles sont plus impliquées.