Matlab - Signal De Suppression De Bruit
J'ai un vecteur de données, qui contient des entiers dans la plage -20 20.
Soufflet est un complot avec les valeurs:
C'est un échantillon de 96 éléments à partir de données vectorielles. La majorité des éléments sont situés dans l'intervalle -2, 2, comme on peut le voir ci-dessus parcelle.
Je veux éliminer le bruit à partir des données. Je tiens à éliminer la faible amplitude des pics, et de garder la forte amplitude de crête, à savoir, des pics, comme celui de l'indice de 74.
En gros, je veux juste augmenter le contraste entre les hautes crêtes d'amplitude et de faible amplitude des pics, et si il serait possible d'éliminer la faible amplitude des pics.
Pourriez-vous me suggérer un moyen de le faire?
J'ai essayé mapstd
fonction, mais le problème est qu'il normalise également que l'amplitude de crête.
Je pensais à l'aide de la transformée en ondelettes boîte à outils, mais je ne sais pas comment reconstruire les données à partir de la décomposition en ondelettes des coefficients.
Pouvez-vous me recommander un moyen de le faire?
Oui, exactement. Je veux juste éliminer le bruit du signal.
Vous avez besoin d'appliquer une fonction non linéaire, communément connu comme une "zone morte" de manière que vous venez de définir toutes les valeurs dont la magnitude est inférieure à un seuil donné à zéro.
Est-il une sorte d'exemple pour ce ou une boîte à outils matlab/fonction?
Je pense avoir fait le bon montage de la question, de sorte qu'il serait plus clair.
OriginalL'auteur Simon | 2011-07-29
Vous devez vous connecter pour publier un commentaire.
Si c'est pour des fins de démonstration seulement, et vous n'êtes en fait pas va être mis à l'échelle à l'aide de ces valeurs pour rien, j'ai parfois envie d'augmenter le contraste de la manière suivante:
edit: depuis que nous sommes en affichant des images, voici le mien (avant/après):
La chose est, beaucoup de la haute fréquence des données sont présentes dans le point sharp. En fait, un complot qui a zéro bruit et un seul point (c'est à dire une fonction delta de dirac) ont le même ampleur sur chaque fréquence. Je ne sais pas comment vous pouvez le faire avec une transformée de fourier.
Se débarrasser de hautes fréquences ne seront pas vous aider, parce que votre grande amplitude des pics sont de haute fréquence. Si vous utilisez la transformée en ondelettes, vous pouvez à l'amplitude de seuillage au lieu de la fréquence de filtrage.
J'ai appliqué votre suggestion précédente en utilisant le logarithme de données.
Data = Data .* logb(Data, abs(mean(Data) + 2 * std(Data)))
, où le deuxième argument de lalogb
fonction est le logarithme en base. En fait, tous les éléments entremean
etmean + 2 * std
sont réduits et tous les autres sont augmentés par le logarithme du facteur. Que pensez-vous de cela?Pourriez-vous fournir un aperçu sur les raisons de cette marche? Quel est le calcul derrière tout cela?
OriginalL'auteur hughes
Une approche pour détecter les valeurs aberrantes est d'utiliser le trois écart-type de la règle. Un exemple:
EDIT:
Il semble que j'ai mal compris le but ici. Si vous souhaitez faire le contraire, peut-être quelque chose comme ceci à la place:
Le 3-sigma règle trouve les valeurs aberrantes dans un sens statistique du terme, probablement pas adapté pour ce genre de traitement de signal...
Merci pour la réponse sur une ancienne réponse 🙂 j'ai demandé parce que j'ai réussi à l'utiliser comme une étape d'un "détecteur d'activité vocale".
OriginalL'auteur Amro
Vous devriez essayer de fractionner la fenêtre de filtre. Si x est votre niveau actuel de l'échantillon, le filtre devrait ressembler à quelque chose comme:
Pour chaque échantillon, x, vous en moyenne une bande entourant les échantillons sur la gauche (L) et une bande entourant les échantillons sur la droite. Si vos échantillons sont positifs et négatifs (comme la vôtre), vous devriez prendre l'abs. la valeur première. Ensuite, vous divisez l'échantillon x par la valeur moyenne de ces entourant les échantillons.
Chaque fois que vous faites cela, les pics sont accentuées et le bruit est aplatie. Vous pouvez faire plus d'un passage à l'augmentation de l'effet. Il est un peu sensible à la sélection de la largeur de ces bandes, mais peut travailler. Par exemple:
Deux passes:
k
, ce qui ne les zéros? N'cet algorithme ont un nom?OriginalL'auteur Jonathan
Ce que vous avez réellement besoin est un certain type de compression à l'échelle de vos données, c'est: les valeurs entre -2 et 2 sont à l'échelle par un facteur fixe et tout le reste est mis à l'échelle par un autre facteur. Une façon grossière pour accomplir une telle chose, c'est en mettant toutes les petites valeurs à zéro, c'est à dire
S'il vous plaît ne pas que ceci est d'une opération non linéaire (par exemple, lorsque vous avez voulu pics évalué à 2,1 et 1,9, ils vont produire un comportement différent: l'une sera supprimé, l'autre sera conservé). Donc, pour l'affichage, cela pourrait être tout ce dont vous avez besoin, pour la poursuite du traitement il dépend peut-être de ce que vous essayez de faire.
OriginalL'auteur Egon
Pour éliminer la faible amplitude des pics, vous allez assimiler tout le bas de l'amplitude du signal à bruit et l'ignorer.
Si vous avez des apriorique de la connaissance, pour en faire usage.
si votre signal est un, alors
où X est le max taille attendue de votre bruit.
Si vous voulez obtenir la fantaisie, et trouve cela "à la volée" puis, utilisez kmeans de 3. C'est dans la boîte à outils de statistiques, ici:
http://www.mathworks.com/help/toolbox/stats/kmeans.html
Alternativement, vous pouvez utiliser la méthode d'Otsu sur les valeurs absolues des données, et utiliser le panneau arrière.
Note, de ces et tous les autres technique que j'ai vu sur ce fil est en supposant que vous faites de post-traitement. Si vous faites ce traitement en temps réel, les choses vont changer.
OriginalL'auteur John