Ich habe einen Vektor von Daten, der ganze Zahlen im Bereich -20 20 enthält.
Bellow ist ein Diagramm mit den Werten:
Dies ist eine Stichprobe von 96 Elementen aus den Vektordaten. Die Mehrheit der Elemente befindet sich im Intervall -2, 2, wie aus der obigen Darstellung ersichtlich ist.
Ich möchte den Lärm von den Daten entfernen. Ich möchte die Peaks mit niedriger Amplitude eliminieren und den Peak mit hoher Amplitude beibehalten, nämlich Peaks wie den Peak bei Index 74.
Grundsätzlich möchte ich nur den Kontrast zwischen den Spitzen mit hoher Amplitude und den Spitzen mit niedriger Amplitude erhöhen, und wenn es möglich wäre, die Spitzen niedriger Amplitude zu beseitigen.
Könnten Sie mir bitte einen Weg vorschlagen, dies zu tun?
Ich habe versucht, mapstd
-Funktion, aber das Problem ist, dass es auch diese hohe Amplitude Spitze normalisiert.
Ich habe an die Verwendung der Wavelet-Transformations-Toolbox gedacht, aber ich weiß nicht genau, wie ich die Daten aus den Wavelet-Zerlegungskoeffizienten rekonstruieren soll.
Können Sie mir einen Weg empfehlen, dies zu tun?
Ein Ansatz zur Erkennung von Ausreißern ist die Verwendung der Regel für drei Standardabweichungen . Ein Beispiel:
%Vor%
Es scheint, ich habe das Ziel hier falsch verstanden. Wenn du das Gegenteil machen willst, vielleicht stattdessen so etwas:
%Vor%
Sie könnten einen geteilten Fensterfilter versuchen. Wenn x Ihr aktuelles Beispiel ist, würde der Filter ungefähr wie folgt aussehen:
%Vor%Für jedes Sample x wird auf der linken Seite eine Bande umgebender Samples und auf der rechten Seite ein Band umliegender Samples gemittelt. Wenn Ihre Proben positiv und negativ sind (wie Sie), sollten Sie die Bauchmuskeln nehmen. Wert zuerst. Sie teilen dann die Probe x durch den Durchschnittswert dieser umgebenden Proben.
%Vor%Jedes Mal, wenn Sie dies tun, werden die Spitzen akzentuiert und das Rauschen wird abgeflacht. Sie können mehr als einen Durchgang machen, um den Effekt zu verstärken. Es ist etwas empfindlich für die Auswahl der Breiten dieser Bänder, kann aber funktionieren. Zum Beispiel:
Zwei Durchgänge:
Was Sie tatsächlich brauchen, ist eine Art Komprimierung, um Ihre Daten zu skalieren, das heißt: Werte zwischen -2 und 2 werden um einen bestimmten Faktor skaliert und alles andere wird um einen anderen Faktor skaliert. Ein grober Weg, um so etwas zu erreichen, besteht darin, alle kleinen Werte auf Null zu setzen, d. H.
%Vor%Bitte beachten Sie, dass dies keine sehr nichtlineare Operation ist (z. B. wenn Sie Peaks mit den Werten 2,1 und 1,9 haben wollen, werden sie ein sehr unterschiedliches Verhalten erzeugen: eines wird entfernt, das andere wird beibehalten). Für die Anzeige ist dies möglicherweise alles, was Sie für die weitere Verarbeitung benötigen. Dies hängt möglicherweise davon ab, was Sie tun möchten.
Um die Spitzen niedriger Amplitude zu eliminieren, werden Sie alle Signale mit niedriger Amplitude mit Rauschen gleichsetzen und ignorieren.
Wenn Sie apriorisches Wissen haben, benutzen Sie es einfach.
Wenn Ihr Signal ein ist, dann
%Vor%Dabei steht X für die maximal zu erwartende Größe Ihres Rauschens.
Wenn Sie Lust haben und "on the fly" suchen, dann verwenden Sie kmeans of 3. Es ist in der Statistik-Toolbox, hier:
Alternativ können Sie die Methode von Otsu für die absoluten Werte der Daten verwenden und das Vorzeichen verwenden.
Beachten Sie, dass diese und jede andere Technik, die ich in diesem Thread gesehen habe, davon ausgeht, dass Sie Post-Processing durchführen. Wenn Sie diese Verarbeitung in Echtzeit durchführen, müssen sich die Dinge ändern.
Tags und Links matlab signal-processing wavelet