1

Ich habe das folgende Signal, das einige verzerrte Daten enthältEntfernen Spitzen von einem Signal Matlab

Raw signal

Ich versuche, diese Spitzen zu entfernen, ohne mein Signal zu beschädigen, habe ich versucht, die medfilt1 Funktion, aber es hat auch das richtige Signal geglättet, was nicht gewollt ist. Die Filterung kann wegen der Frequenzüberlappung zwischen dem gewünschten und dem unerwünschten Signal nicht verwendet werden. Ich habe auch versucht, ein sich bewegendes Fenster, die den Wert mit dem Median dieses Fensters vergleichen, und wenn der Punkt, viel höher als es ist, wird es es dem Median eingestellt, wie unten gezeigt:

%moving cleaning window 
y1_1= y1(1:100);%first window 
x=1; 
%cleaning loop 
while x<= length(y1) 
    if(y1(x)> 1.01*(median(y1_1))||y1(x) < 0.95*(median(y1_1))) 
     y1(x)= median(y1_1); 
    end 
    if(x>= length(y1)-100) 
     y1_1= y1(length(y1)-100:length(y1)); 
    else 
    y1_1 = y1(x:x+100); 
    end 
    x=x+1; 
end 

ich losgeworden habe die Spitzen aber

Output of actual program

wie kann ich erreichen, um die besten Entrauschen auf einfache Art und Weise auch wie gezeigt einige der deutlichen Spitzen des Signals wurden unten

in der Figur weg?

Dank

+0

Haben Sie versucht: http://stackoverflow.com/questions/27432883/finding-peaks-matlab/27439621#27439621 –

+0

In ** diesem speziellen Fall **, und nur wenn das ** für Präsentationszwecke ist ** Es sieht so aus, als könnten Sie alle Werte unter 350 und über 550 entfernen (oder auf NaN setzen). –

+0

Ihr Code sieht im Allgemeinen OK aus, obwohl ich das Fenster um den Punkt zentrieren würde, an dem ich interessiert bin. Jetzt müssen Sie nur noch Spiel mit Fenster und Bedingungen, wann Ausreißer entfernt werden sollen. Probiere ein Fenster von 30 und wenn der Punkt 2x oder die Hälfte des Median ist. Oder benutzen Sie stattdessen die findpeaks-Funktion und spielen Sie mit dieser. –

Antwort

1

Sie Medianfilter oder Gleitmittelungsfilters verwenden können. Was auch immer Filter ist, Sie müssen eine Art Schwelle verwenden. Schwellen Sie die Spitzen und ersetzen Sie sie durch Ihr Filterergebnis.

s=rand(500,1)*5; 
s(ceil(rand(1,20)*500))=rand(1,20)*100; 
maxs=max(s); 

figure 
subplot(211); plot(s); 

thr=10; 
med_s=medfilt2(s,[10,1]); 
s(s>med_s+thr)=med_s(s>med_s+thr); 
subplot(212); plot(s); ylim([0 maxs]) 

enter image description here

0

Wenn Sie R2017a aktualisieren können, können Sie die filloutliers Funktion überprüfen möchten. Es gibt verschiedene Methoden, die Sie verwenden können, um die Spitzen zu erkennen, und ebenso eine Vielzahl von Möglichkeiten, diese zu füllen.

Wenn Sie grundsätzlich einen Medianfilter erhalten möchten, aber nur für die Spikes, können Sie 'movmedian' als Suchmethode und 'center' als Füllmethode angeben.

+0

Das ist eine gute Idee, ich könnte die Studie herunterladen und die Ergebnisse sehen. – Isra

Verwandte Themen