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

unnötige Extrema wegbekommen

 

lunatik
Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 14.11.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.11.2008, 16:42     Titel: unnötige Extrema wegbekommen
  Antworten mit Zitat      
Hallo,

folgendes Programm:

Y=rad2deg(data(:,9)),X=(data(:,1))/1000 %daten einlesen (ein Rohsignal: Auslenkung über Zeit)
[coefB coefA] = butter(4,2/50,'low'); % 2Hz Butterworth
filtY = filtfilt(coefB,coefA,Y); % Filtern ausführen
G=gradient(filtY,0.01) % ableitung bilden

%plotten des gefilterten Ausgangsignals, der Ableitung und der Extrempunkte auf dem gef.Ausgangssignal.
plot(X,filtY)
hold on
plot(X,G,'k')
plot(X(find(diff(sign(G)))),filtY(find(diff(sign(G)))),'g*')


folgendes Problem:
viele der gefundenen Extrema sind vernachlässigbar, da sie zu nah beinander liegen. Wie kann ich denn die unnötigen Extrema herausfiltern? Die Signalkurve soll so bleiben und nicht weiter gefiltern werden.

vielen Dank, falls wer helfen kann.
Private Nachricht senden Benutzer-Profile anzeigen


petit165

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.11.2008, 02:25     Titel: Lokale Extrema übergehen
  Antworten mit Zitat      
Also... Dir muss natürlich klar sein, dass man die nacheinander laufenden Maxima/Minima nur zusammen fassen kann, falls man weiß in welchem Interval man höchstens eins erwartet.
Aber vielleicht hilft dir dieses Skript für die Problemstellung:
http://www.mathworks.de/matlabcentral/fileexchange/18551
 
petit165

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.11.2008, 02:37     Titel: Ergänzung lokale Extrema
  Antworten mit Zitat      
ohh sorry. Ich vergaß die ursprüngliche Idee etwas auszuführen. Natürlich ist es nicht ganz fertig.
Ich würde mit einem Interval so beginnen:

minimum = min(y(j:j+interval));
maximum = max(y(j:j+interval));

falls es ein Extremum im Interval existiert. Aber das kann man ja auch in Abhängigkeit der in der ersten Runde gefundenen Extrema eingrenzen.
Ist also nur ein Ansatz

Viel Erfolg - petit

P.S.: den gesamten Ansatz kann man aber auch über Frequenzanalyse betrachten -- ist in der Praxis aber eher untauglich, weil die Frequenz-Filter nie perfekt filtern.
 
lunatik
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 14.11.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.11.2008, 11:44     Titel:
  Antworten mit Zitat      
min(y(...)) geht aber wohl nur, wenn ich eine klar definierte Funktion habe, oder?
Bei mir ist das ein Datensatz, der in etwa so aussieht:
5.0000 5.1000
6.0000 5.0000
7.0000 5.3000
8.0000 2.3000

dabei ist die erste spalte die Zeit und die zweite die Extrempunkte.
Private Nachricht senden Benutzer-Profile anzeigen
 
Purdey
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 10.09.08
Wohnort: ---
Version: 7.5.0 (R2007b)
     Beitrag Verfasst am: 26.11.2008, 12:07     Titel:
  Antworten mit Zitat      
ich denke die funktion "findpeaks" kann dir weiterhelfen, sofern du Zugriff auf die Rohdaten hast:

Code:

[...] = FINDPEAKS(X,'MINPEAKDISTANCE',MPD)
 


lg,

Purdey

Zuletzt bearbeitet von Purdey am 26.11.2008, 12:08, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
Maddy
Ehrenmitglied

Ehrenmitglied



Beiträge: 494
Anmeldedatum: 02.10.08
Wohnort: Greifswald
Version: ---
     Beitrag Verfasst am: 26.11.2008, 12:08     Titel:
  Antworten mit Zitat      
Wie wärs wenn du das Signal extra filterst auf der Skala in der du Extremas vermutest, die Extrema dieses gefilterten Signals suchst und dann im Original-Signal um die gefundenen Extrema das lokale Maximum bestimmst?

edit: da war wohl jemand schneller und pfiffiger Wink
_________________

>> why
The computer did it.
Private Nachricht senden Benutzer-Profile anzeigen
 
petit165

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.11.2008, 01:08     Titel: [value, index] = findpeaks(x, 'threshold');
  Antworten mit Zitat      
Purdey hat Folgendes geschrieben:
ich denke die funktion "findpeaks" kann dir weiterhelfen, sofern du Zugriff auf die Rohdaten hast:

Code:

[...] = FINDPEAKS(X,'MINPEAKDISTANCE',MPD)
 


lg,

Purdey


das ist richtig gut! vielen Dank auch von meiner Seite.
 
lunatik
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 14.11.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.11.2008, 10:57     Titel: Re: [value, index] = findpeaks(x, 'threshold');
  Antworten mit Zitat      
[quote="petit165"]
Purdey hat Folgendes geschrieben:
ich denke die funktion "findpeaks" kann dir weiterhelfen, sofern du Zugriff auf die Rohdaten hast:

Code:

[...] = FINDPEAKS(X,'MINPEAKDISTANCE',MPD)
 


lg,

Purdey


ja! vielen Dank!
ich werde es wohl in Verbindung mit
[...] = FINDPEAKS(X,'THRESHOLD',TH)

anwenden.

lg
Lunatik
Private Nachricht senden Benutzer-Profile anzeigen
 
Purdey
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 10.09.08
Wohnort: ---
Version: 7.5.0 (R2007b)
     Beitrag Verfasst am: 29.11.2008, 12:41     Titel:
  Antworten mit Zitat      
Ein kleiner Hinweis noch: Meines Wissens nach findet die Funktion keine Plateaus. Das läßt sich mit Filtern in der Regel aber gut abfangen.

Lg,

Purdey
Private Nachricht senden Benutzer-Profile anzeigen
 
lunatik
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 14.11.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.12.2008, 15:44     Titel:
  Antworten mit Zitat      
Jetzt hab ich aber wieder ein Problem, und zwar, erstens, verstehe ich nicht, was für Peaks da gefunden werden, und zweitens, es werden viel zu wenig Peaks gefunden, aber den Abstand kleiner als 1 kann ich ja nicht machen, sonst kommt die Fehlermeldung:
"??? Error using ==> findpeaks>setvalues at 108
MinPeakDistance should be an integer greater than 0.

Error in ==> findpeaks at 64
[Pd,Np] = setvalues(Pd,Np,L);"

Ich habe den plot meines Ergebnisses soweit angehängt.

Code:

[PKS,LOCS] = FINDPEAKS(filtY,'MINPEAKDISTANCE',1);
plot (LOCS,PKS,'b*')
 


lg
lunatik

mindist.fig
 Beschreibung:

Download
 Dateiname:  mindist.fig
 Dateigröße:  2.4 MB
 Heruntergeladen:  807 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Purdey
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 10.09.08
Wohnort: ---
Version: 7.5.0 (R2007b)
     Beitrag Verfasst am: 08.12.2008, 20:29     Titel:
  Antworten mit Zitat      
Hi, also wie oben geschrieben könnte das Problem darin liegen, dass einzelne Peaks, die im Plot wie solche aussehen mögen, gar keine sind sondern Plateaus. Hast du vorher einen Filter über die Daten laufen lassen?

Lg,

Chris

Hab mir jetzt mal den PLot angesehen, das sieht extrem seltsam aus; spontan würde ich vermuten dass das nicht die Daten sind, in welchen die Peaks gesucht werden... evtl. kannst du mal einen kurzen Ausschnitt der Daten posten? (z.B. von x100 bis x200).
Private Nachricht senden Benutzer-Profile anzeigen
 
lunatik
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 14.11.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.12.2008, 10:31     Titel:
  Antworten mit Zitat      
Ich habe gestern das Problem erkannt: LOCS sind ja die Indizes. Die darf man so nicht plotten, sondern X(LOCS).

Aber ich stehe immer noch vor meiner eigentlichen Aufgabe: ich finde zu viele Peaks und mit Hilfe der MINPEAKDISTANCE kann man das schon begrenzen, aber manche wichtigen werden dann doch ausgelassen. Sprich, ich bräuchte ne Funktion, die nicht den horizontalen Abstand zwischen den gefundenen Peaks begrenzt/erweitert, sondern den vertikalen.

Hier ein Beispiel aus meinem Datensatz: X.zip und der plot: mindist.fig


Achso, muss natürlich sagen, dass ich die Y-Daten noch filtere mit

Code:

[coefB coefA] = butter(4,3/50,'low');
filtY = filtfilt(coefB,coefA,Y);
 


und dann ist die FINDPEAK funktion so:

Code:

%MAX
  [PKS,LOCS] = FINDPEAKS(filtY,'MINPEAKDISTANCE',150);
 plot (X(LOCS),PKS,'r*')                    % Plot Maxima, rote *
   
   
%MIN
filtY=-1*filtY;                             % invertieren der Lenkung zum Finden von Min mit findpeaks
[PKS,LOCS] = FINDPEAKS(filtY,'MINPEAKDISTANCE',150);
 plot (X(LOCS),-PKS,'b*')                   % Plot Minima, blaue *
 


X.zip
 Beschreibung:
Datensatz X und Y

Download
 Dateiname:  X.zip
 Dateigröße:  155.44 KB
 Heruntergeladen:  637 mal
mindist.fig
 Beschreibung:
Da z.B. an die Zeit zw 200 und 260sec ranzoomen.

Download
 Dateiname:  mindist.fig
 Dateigröße:  508.83 KB
 Heruntergeladen:  845 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
DarkRudy
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 04.12.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.12.2008, 11:26     Titel:
  Antworten mit Zitat      
hey,
ich habe leider auch mit findpeaks zu kämpfen, da ich ebenfalls versuche mit matlab solche messdaten auszuwerten.

kennt jemand ne möglichkeit, dass er mir bei findpeaks extremwerte mit gleicher größe (sprich plateaus) rauswirft. was meint ihr zum beispiel wenn ihr vom filtern der werte spricht?
Private Nachricht senden Benutzer-Profile anzeigen
 
Purdey
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 10.09.08
Wohnort: ---
Version: 7.5.0 (R2007b)
     Beitrag Verfasst am: 09.12.2008, 20:41     Titel:
  Antworten mit Zitat      
Hallo!

Ich hatte die Funktion findpeaks mal so in den Raum geworfen, weil man damit eigentlich alles machen kann. Die Hilfe zu dieser Funktion (wie zu allen anderen auch) ruft ihr so auf:

Code:


Um also nicht nur nach Mindestabstand, sondern auch nach Mindesthöhe zu suchen, muss das Ganze wie folgt aufgebaut werden:

Code:

[PKS,LOCS]= FINDPEAKS(X, 'MINPEAKHEIGHT',MPH, 'MINPEAKDISTANCE',MPD)
 


Häufig werden Daten vor der Verarbeitung gefiltert, das ist eine Wissenschaft für sich. Hilfreich können hierbei z..B. folgende Funktionen sein:

Code:


Lg,

Purdey
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 - 2024 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.