j'ai le signal suivant qui contient des données déforméesSuppression des pointes d'un signal Matlab
Je suis en train d'enlever les pointes sans endommager mon signal, j'ai essayé la fonction medfilt1
mais lissé le bon signal qui n'est pas voulu. Le filtrage ne peut pas être utilisé en raison du chevauchement de fréquence entre le signal voulu et le signal indésirable. J'ai essayé aussi une fenêtre mobile qui comparera la valeur avec la médiane de cette fenêtre et si le point est beaucoup plus élevé que ce sera le mettre à la médiane comme indiqué ci-dessous:
%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
J'ai exterminé les pointes, mais aussi quelques-uns des pics distincts du signal ont été partis comme le montre la figure ci-dessous
Comment puis-je obtenir le meilleur débruitage d'une manière simple?
Merci
Avez-vous essayé: http://stackoverflow.com/questions/27432883/finding-peaks-matlab/27439621#27439621 –
Dans ** ce cas spécifique **, et seulement si c'est ** à des fins de présentation ** , il semble que vous pouvez simplement supprimer (ou régler 'NaN') toutes les valeurs inférieures à environ 350 et supérieures à 550. –
Votre code semble généralement OK, bien que je centre la fenêtre autour du point qui m'intéresse. Maintenant, vous avez seulement besoin de jouer avec la fenêtre et les conditions quand enlever les valeurs aberrantes. Essayez la fenêtre de 30 et lorsque le point est 2x ou la moitié de la médiane. Ou utilisez plutôt la fonction findpeaks et jouez avec celle-là. –