2016-05-27 9 views
0

Ich versuche, alle großen Spitzenwerte dieses Signals zu erhalten:Spitzenerfassung Matlab

enter image description here

Wie Sie sehen, ein großer Peak dort durch eine kleinere Spitze gefolgt ist, und ich möchte, dass jeder bekommen Wert des größten Peaks. Ich habe das schon probiert [pks1,locs1] = findpeaks(y1,'MinPeakHeight',??); aber ich kann nicht finden, was ich statt der schreiben kann ?? Wissend, dass das Signal nicht jedes Mal dasselbe sein wird (natürlich wird es jemals ein großes + kleineres Spitzenschema geben, aber Zeitintervalle und Amplituden können sich ändern). Ich habe viele Dinge mit std(), mean(), max() versucht, aber keine der Kombinationen funktioniert richtig.

Irgendwelche Ideen, wie kann ich das Problem lösen?

Antwort

1

Sie könnten versuchen, das Schlüsselwort 'MinPeakDistance' zu verwenden und einen Mindestabstand zwischen den beiden Spitzen einzugeben, der etwas höher ist als der Abstand zwischen der großen Spitze und der folgenden kleinen Spitze. So zum Beispiel:

[pks1,locs1] = findpeaks(y1,'MinPeakDistance',0.3); 

bearbeiten: Wenn die Zeit zwischen den Spitzen (und die folgenden kleineren) viel variiert werden Sie wahrscheinlich etwas Nachbearbeitung zu tun haben. Finden Sie zuerst alle Spitzen einschließlich der kleineren zweiten. Dann entfernen Sie in Ihrem Peak-Array jeden Peak, der deutlich niedriger ist als seine beiden Nachbarn.

Sie könnten auch versuchen, mit 'MinPeakProminence' hantieren.

Im Allgemeinen erfordern diese Probleme eine Kalibrierung für die letzten paar Prozent der Algorithmen Genauigkeit, und es gibt keine universelle Heilung.

Ich empfehle auch einen Blick auf alle anderen Optionen in der documentation.