|
|
Bestimmung von Peak in Signal |
|
Kronecker |

Forum-Anfänger
|
 |
Beiträge: 32
|
 |
|
 |
Anmeldedatum: 08.04.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 04.01.2014, 13:52
Titel: Bestimmung von Peak in Signal
|
 |
Hi,
bin bei einem Problem angelangt, bei dem ich irgendwie nicht so recht weiter weiß. Und zwar möchte ich den Index des ersten maximalen Peaks des Signal (im Anhang) bestimmen. Das Signal schwingt sich auf und hat mehrere Peaks, deswegen kann ich es mit Minima und Maxima nur schwer bestimmen. Der zweite darauffolgende Peak ist eigentlich nur eine Reflexion, die nicht beachtet werden soll. Hab das ganze schon über die Funktion findpeaks gemacht, leider mit wenig Erfolg, da er wiederum auch den zweiten max. Peak findet.
Habs über einen threshold auch schon versucht, lief aber auch nicht wie erwünscht. Kann mir hier vielleicht jemand Tipps geben, wie man dieses Problem angehen kann bzw. hat vielleicht jemand schon so etwas ähnliches gemacht, um mir den Vorgang im Detail zu erläutern.
Bin über jede Hilfe dankbar!
mfg
Beschreibung: |
|
 Download |
Dateiname: |
Beispiel.jpg |
Dateigröße: |
42.88 KB |
Heruntergeladen: |
447 mal |
|
|
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 04.01.2014, 19:16
Titel: Re: Bestimmung von Peak in Signal
|
 |
Hallo Kronecker,
Welches ist denn der "erste maximale Peak" in dem gezeigten Signal? "Maximal" bedeutet im Allgemeinen der höchste Peak und davon gibt es nur einen hier.
Wenn FindPeaks zwei Peaks liefert, wie wäre es dann, der ersten der beiden zu nehmen?
Zitat: |
Habs über einen threshold auch schon versucht, lief aber auch nicht wie erwünscht. |
Darauf kann man kaum etwas antworten. Zeige doch mal, was Du genau versucht hast und erkläre, was nich wie gewünscht lief.
Viele Grüße, Jan
|
|
|
Kronecker |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 32
|
 |
|
 |
Anmeldedatum: 08.04.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 05.01.2014, 21:23
Titel:
|
 |
|
 |
|
Hi Jan,
danke mal für deine Antwort. Werd versuchen so gut wie möglich zu erklären, was ich gemacht habe.
Das Signal hat knapp 10000 Einträge. Der Index des Peaks bei 1,2s ist der gesuchte, der bei 1,4s ergibt sich aus Reflexionen. Im Prizip hab ich ja schon eine Lösung, aber die ist nicht besonders gut. Und zwar hab ich mir alle Hochpunkte berechnet (alle Punkte die größer als 2/3 vom Maximalwert sind, damit nicht alle berechnet werden), sie sortiert und den zweithöchsten verwendet, weil es genau der gesuchte ist. Aber irgendwie bin ich damit nicht zufrieden. Würden mehr Reflexionen auftreten, so ist der gesuchte dann nicht mehr der zweithöchste.
Findpeaks liefert mir 5000 Punkte (Peaks). Mit 'MINPEAKDISTANCE' werden dann zwar wirklich nur die höchsten Punkte berechnet, jedoch muss ich dann wiederum den ersten "hohen" Peak ausfindig machen. Findpeaks ist zudem noch extrem rechenaufwendig, wenn so viele Peaks enthalten sind.
Deshalb hab ich mir gedacht, dass es vielleicht einen optimaleren Lösungsweg gibt. Hab das Signal in den Anhang getan. Code kann ich leider keinen dazutun, aber meine Berechnung ist 6 Zeilen lang.
Hoffe das mein Problem durch das Signal im Anhang etwas verständlicher ist. Beim Darstellen, sollte noch ein fliplr(signal) verwendet werden.
mfg
Beschreibung: |
|
 Download |
Dateiname: |
signal.rar |
Dateigröße: |
947.59 KB |
Heruntergeladen: |
357 mal |
|
|
|
Kronecker |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 32
|
 |
|
 |
Anmeldedatum: 08.04.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 06.01.2014, 12:24
Titel:
|
 |
Hi,
hab das Problem auf einen optimaleren Weg gelöst. Zwar nicht der beste, aber besser als jener, den ich im letzten post erwähnte. Hab es mittels threshold glöst.
Wäre dennoch über Tipps erfreut.
mfg
|
|
|
Headbucket |

Forum-Anfänger
|
 |
Beiträge: 34
|
 |
|
 |
Anmeldedatum: 03.12.13
|
 |
|
 |
Wohnort: Dresden
|
 |
|
 |
Version: R2007B
|
 |
|
|
 |
|
Verfasst am: 06.01.2014, 15:15
Titel:
|
 |
|
 |
|
Hallo,
Kronecker hat Folgendes geschrieben: |
Und zwar hab ich mir alle Hochpunkte berechnet (alle Punkte die größer als 2/3 vom Maximalwert sind, damit nicht alle berechnet werden), sie sortiert und den zweithöchsten verwendet, weil es genau der gesuchte ist. |
Wieso der Aufwand des Sortierens? Wenn ich dich richtig verstanden habe suchst du immer genau den ersten "großen" Peak. Wenn du nur alle Peaks raussuchst, die 2/3 des Maximalwerts entsprechen sollten bei deinem Beispiel ja genau zwei Peaks rauskommen. Dort nimmst du dann einfach den ersten (welche zeitlich gesehen eher kommt).
Eigentlich ist das auch die übliche Methode und du gehst ja auch richtig vor: Schwellwert festlegen -> Peaks über dieses Schwellwerte untersuchen -> Peaks nach dem ersten Maximum verwerfen.
Natürlich hängt und fällt jetzt alles an der Wahl des Schwellwertes und der Wahl von "MINPEAKDISTANCE". Hier gilt es nun Abzuschätzen, ob die Signale robust genug sind oder ob du noch weitere Berechnungen durchführen musst (dynamische Berechnung des Schwellwertes, sodass immer mindestens 3-4 Maxima untersucht werden, usw.).
Oder du schreibst einfach, was dir an deiner bisherigen Lösung noch nicht gefällt und wo es noch zu Problemen kommt.
Grüße
Headbucket
|
|
|
Kronecker |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 32
|
 |
|
 |
Anmeldedatum: 08.04.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 06.01.2014, 16:33
Titel:
|
 |
|
 |
|
Hi,
danke für die Antwort.
Meine erste Lösung war nicht gerade besonders gut. Das große Problem dabei ist, dass zum Ausgangssignal immer ein Rauschen dazuaddiert wird, dh. dass das Signal, das ich hier hochgeladen habe eigentlich immer anders aussieht (minimal halt). Das Maximum ist immer der zweite "große" Peak, also der höchste in dem Fall, jedoch können die nähesten zwei Nebenmaxima des "Ringings" größer als der erste "große" Peak, der gesucht ist, sein. In 70% der Fälle war der gesuchte Peak immer der zweitgrößte.
Hab die Lösung jetzt ein wenig optimiert indem ich die Hüllkurve berechne, mit findpeak und der Wahl von "MINPEAKDISTANCE" so vorgehe, dass immer der maximale Peak und der gesuchte mit ein zwei Nebenmaxima enthalten sind. Die Lösung liefert bessere Ergebnisse, jedoch hab ich bei der Wahl von "MINPEAKDISTANZ" wieder trixen müssen. Hab das ganze jetzt so weit hinbekommen, dass in 8/10 der Fälle immer der gesuchte Peak (erste große) der letzte Eintrag von locs in [peak, locs] = findpeaks(...) ist.
Das Ergebnis ist zwar besser, aber irgendwie doch nicht perfekt. Am optimalsten wäre es, wenn ich mehrere Peaks im Bereich über (keine Ahnung) 90% vom Maximalwert bekomme und mir dann das "erste" lokale Maximum berechne, und den Rest einfach wegwerfe. Aber irgendwie bekomme ich das nicht hin, bzw. weiß nicht so recht welche Befehle ich verwenden soll, damit das ganze rechentechnisch nicht so intensiv wird.
Ziel ist es eigentlich, dass ich diesen Vorgang knapp 1000 mal oder öfters durchführe und mir dann ein Histogramm erzeuge. Leider ist der Prozess jetzt schon so intensiv, dass für 100 Wiederholungen ca. 1,5min benötigt werden.
mfg
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
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
| 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.
|
|