%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.
petit165
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 26.11.2008, 02:25
Titel: Lokale Extrema übergehen
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: ---
Verfasst am: 26.11.2008, 02:37
Titel: Ergänzung lokale Extrema
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.
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.
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 _________________
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.
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).
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
%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 *
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?
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:
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
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.