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

Bestimmung von Peak in Signal

 

Kronecker
Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 08.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.01.2014, 13:52     Titel: Bestimmung von Peak in Signal
  Antworten mit Zitat      
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

Beispiel.jpg
 Beschreibung:

Download
 Dateiname:  Beispiel.jpg
 Dateigröße:  42.88 KB
 Heruntergeladen:  447 mal
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 04.01.2014, 19:16     Titel: Re: Bestimmung von Peak in Signal
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
Kronecker
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 08.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.01.2014, 21:23     Titel:
  Antworten mit Zitat      
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

signal.rar
 Beschreibung:

Download
 Dateiname:  signal.rar
 Dateigröße:  947.59 KB
 Heruntergeladen:  357 mal
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Kronecker
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 08.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.01.2014, 12:24     Titel:
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Headbucket
Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 03.12.13
Wohnort: Dresden
Version: R2007B
     Beitrag Verfasst am: 06.01.2014, 15:15     Titel:
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
Kronecker
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 08.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.01.2014, 16:33     Titel:
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
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.