Ich glaube, ich versteh dich nun nicht wirklich richtig, aber mit d(pos_pks) kommst du an die Differenz an den erkannten Peaks.
Wenn du nun aus den erkannten Peaks nur diejenigen willst, die (in der Richtung von links nach rechts) sehr steil sind, kommst du vielleicht damit weiter:
Falls beide Richtungen (von links und von rechts) steil sein sollen, müsstest du eben auch die Differenz d an den Stellen pos_pks + 1 anschauen und testen. Das kriegst du sicher selbst hin. (Achtung beim Rand).
pariser
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 19.05.2013, 23:13
Titel:
Code:
, müsstest du eben auch die Differenz d an den Stellen pos_pks + 1 anschauen und testen. Das kriegst du sicher selbst hin. (Achtung beim Rand).
Wenn das nur von links nach rechts steil sein soll, dann bist du schon fertig.
Aber Achtung, da ich mich nun halbwegs hierfür verantwortlich fühle, solltest du beachten, dass das diff(data) nur proportional zur Steigung ist, wenn die zugehörigen X-Werte äquidistant sind, denn nur dann reicht es, die Zähler (also Differenzen der Y-Werte) zu betrachten. Sind deine zugehörigen X-Werte nicht äquidistant müsstest du immer das Verhältnis diff(y) zu diff(x) betrachten, um wirklich Steigungen zu kriegen.
Kleines Beispiel:
Code:
y = [1,2,3,2,2,5,4,3,4];
x = [1,2,2.1,3,4,7,8.5,9,10];
figure plot(x,y,'o-')
Es wäre falsch, hier nur die Differenzen der y-Werte zu betrachten, denn der Sprung vom Punkt (2,2) auf den Punkt (2.1, 3) ist viel Steiler als der Sprung vom Punkt (4,2) auf (7,5), obwohl die Differenz der Y-Werte für den ersten Sprung "nur" 1 beträgt und für den zweiten Sprung 3.
Die Steigung wäre beim ersten Sprung nämlich (3-2)/(2.1-2) = 1/0.1 = 10 und beim zweiten Sprung (5-2)/(7-4) = 3/3 = 1.
Viele Grüße,
Nras.
pariser
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 19.05.2013, 23:44
Titel:
Meine Daten sind äquidistant, also in einem konstanten Abstand. Danke nochmal für den Hinweis
Ich würd mich auf jeden Fall freuen, wenn du das letzte Gewünschte noch in dein Code-Vorschlag einbauen könntest?
Ich würde mich freuen, wenn du das selber versuchen würdest.
Was hast du versucht und was bekommst du für ein Ergebnis bzw. für eine Fehlermeldung?
Und noch mal, wenn das nur von links steil ssein soll, dann brauchst du die Differenzen rechts von Peak (also an den Stellen pos_pks + 1) nicht zu betrachten.
da passt nur was mit den Klammern nicht.
Du möchtes salopp gesprochen: pos_pks(gültige Indizes), das heißt in den Klammern gehört ein logischer Ausdruck, etwa so:
das Skript läuft so bei mir nicht durch. Meinst du in Zeile 14 data = y; statt y = data? data ist bis dahin nämlich gar nicht bekannt.
Ich glaube, du hast bloß das Prinzip noch nicht wirklich verstanden. Das funktioniert sonst alles genau so, wie es soll. Alle Peaks sind von links und von rechts Steil. Deine Konstanste setzt du 0, damit ist per Definition jeder Peak "steil".
Der große Vorteil von solchen Variablen wie "isLinksSteil" bzw. "isRechtsSteil" ist neben der Lesbarkeit auch, dass du sie dir mal ansehen kannst. Dann würdest du sehen, dass dort überall einsen stehen, es also für jeden Peak wahr ist, dass sie linkssteil bzw. rechtssteil sind.
Du müsstest deine Konstante also (viel) größer Wählen, damit einige der Peaks rausfallen. Bei den Daten könnte man vielleicht (aus der Luft gegriffen) konstante = 500 setzen, dann werden einige der Peaks weggefiltert.
data = y; % Wieso auch immer.
x = linspace(0,1,length(data));
% Plot figure plot(x,data) hold on
plot(x(pos_pks_filtered), y(pos_pks_filtered), 'k^', 'MarkerFaceColor','red')
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.