WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

findpeaks und ersetzen durch Mittelwert?

 

Thomas_74
Forum-Century

Forum-Century


Beiträge: 241
Anmeldedatum: 06.02.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.07.2014, 16:36     Titel: findpeaks und ersetzen durch Mittelwert?
  Antworten mit Zitat      
Hi,

ich suche mit findpeaks nach Aussreissern.
Code:

Diese möchte ich ersetzen, entweder durch einen Mittelwert der angrenzenden Punkte oder wenn man es interpolieren kann wär es noch besser.
Leider weiss ich nicht wie ich jetzt in y die in locs gespeicherten Stellen durch einen fit / Mittelwert ersetze? Sad

P.S.: da y schon was grösser sein kann wäre es cool eine Lösung ohne Schleife zu haben.

MfG Thomas
Private Nachricht senden Benutzer-Profile anzeigen


Nras
Forum-Meister

Forum-Meister


Beiträge: 608
Anmeldedatum: 21.02.12
Wohnort: ---
Version: 7.12.0.635 (R2011a)
     Beitrag Verfasst am: 16.07.2014, 09:06     Titel:
  Antworten mit Zitat      
Hallo,

ich glaube das hier http://www.gomatlab.de/interpoliere.....pikeglaettung-t34107.html ist das, was du suchst. Überall da, wo kein Ausrei0er vorliegt, ist die rote Kurve gleich der blauen Kurve, also dem Original. An den zuvor (irgendwie) gefundenen Ausreißerstellen wird zwischen den nächsten nicht-Ausreißer-Nachbarn interpoliert.

Viele Grüße,
Nras.
Private Nachricht senden Benutzer-Profile anzeigen
 
Thomas_74
Themenstarter

Forum-Century

Forum-Century


Beiträge: 241
Anmeldedatum: 06.02.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.07.2014, 10:24     Titel:
  Antworten mit Zitat      
Ja genau so was wollte ich, allerdings hapert es noch bei der Umsetzung Embarassed Embarassed

Code:
[dateia,pathn]=uigetfile('*.*','auswählen');
[y,Fs]=audioread([pathn dateia]);
y=y(:,1);   % erzwingt Mono
[~,locs]=findpeaks(y),'MINPEAKDISTANCE',10,'THRESHOLD',0.1*(max(y)-min(y)));
t=(1:length(y))';
y_interp = interp1(t(~locs),y(~locs), t);


führt bei mir zu der Fehlermeldung:
Code:
Attempted to access X(1); index out of bounds because numel(X)=0.

Error in interp1 (line 160)
        extptids = Xq < X(1) | Xq > X(end);

Error in Sound_enh_v3 (line 14)
y_interp = interp1(t(~locs),y(~locs), t);


was mir nichts sagt ist y vielleicht zu groß (835200x1)?

Das verlinkte Beispiel mit der Kurve läuft jedenfalls.

MfG Thomas
Private Nachricht senden Benutzer-Profile anzeigen
 
Thomas_74
Themenstarter

Forum-Century

Forum-Century


Beiträge: 241
Anmeldedatum: 06.02.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.07.2014, 10:29     Titel:
  Antworten mit Zitat      
Hi,

hab gerade gesehen das die ausrereisser im verlinkten Beispiel logical 0 oder 1 sind in einem Vektor der genau so lang ist wie y.
Mein Vektor locs enthält nur die Stellen wo Ausreisser sind. Muss ich nun auch einen logical Vektor erzeugen oder kann man locs auch direkt in interp1 eingeben?

MfG Thomas
Private Nachricht senden Benutzer-Profile anzeigen
 
Nras
Forum-Meister

Forum-Meister


Beiträge: 608
Anmeldedatum: 21.02.12
Wohnort: ---
Version: 7.12.0.635 (R2011a)
     Beitrag Verfasst am: 16.07.2014, 10:52     Titel:
  Antworten mit Zitat      
Hallo,

ja, du brauchst den logischen Vektor. Ich habe hier keine signal processing toolbox, aber ich kenne ja die Ausreißerpositionen in meinem Beispiel. Ich würde es dann mit ismember() machen:
Code:
% Daten erzeugen
t = linspace(0,4*pi,2000);
ausreisser = rand(size(t))>0.95;
y = sin(t) + 0.2*(rand(size(t))-0.5);
y(ausreisser) = y(ausreisser)+2*rand(1,sum(ausreisser));

% ab hier startest du
locs = find(ausreisser);    % statt findpeaks (ich kenne die Ausreißer ja schon)
invalid = ismember(1:length(y), locs);  % logischer Vektor
y_interp = interp1(t(~invalid),y(~invalid), t);
plot(t,y),hold on
plot(t,y_interp,'r-')


Viele Grüße,
Nras.
Private Nachricht senden Benutzer-Profile anzeigen
 
Thomas_74
Themenstarter

Forum-Century

Forum-Century


Beiträge: 241
Anmeldedatum: 06.02.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.07.2014, 11:22     Titel:
  Antworten mit Zitat      
Cool Läuft auf jeden Fall schon mal durch.

Jetzt muss ich nur noch die richtigen Parameter zum Ausreisser suchen finden.

Vielen Dank!
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.