2012-04-24 11 views
14

Ich habe versucht, auf zu verstehen, wie die beiden Spitzen aus dem Histogramm zu erkennen. Es kann mehrere geben, aber ich muss die zwei höchsten auswählen. Grundsätzlich muss ich, dass, obwohl ich diese Spitzen nach links oder rechts verschoben habe, ich sie ergreifen muss. Ihre Verbreitung kann variieren und ihre PEAK-Werte könnten sich ändern, also muss ich einen Weg finden, um diese zwei Spitzen in Matlab zu erreichen.Detect die zwei höchsten Spitzen von Histogramm

Was ich bisher getan haben ist ein 5-Wert-Fenster zu erstellen. Dieses Fenster wird mit Werten aus dem Histogramm gefüllt und ein Scan wird durchgeführt. Jedes Mal bewege ich mich 5 Schritte weiter zum nächsten Wert und vergleiche den vorherigen Wert mit dem aktuellen Wert. Was immer größer ist, bleibt erhalten.

Gibt es einen besseren Weg, dies zu tun?

enter image description here

+0

Ich glaube, Sie separate Signalverarbeitung von der Programmierung in dieser Frage können nicht. Wenn jemand eine auf Statistiken basierende Antwort vorlegt, was wäre das? Signalverarbeitung oder Programmierung? –

Antwort

5

Return Daten aus hist (oder histc) Funktion einer Variablen (y = hist(x,bin);) und verwenden PEAKFINDER FileExchange Vorlage lokale Maxima zu finden.

Ich habe auch PEAKDET Funktion von Eli Billauer verwendet. Funktioniert super. Sie können meine answer hier mit Codebeispiel überprüfen.

+1

Ich würde vorschlagen, eine Schätzung der Kerndichte durchzuführen, bevor Sie einen Peak Finder ausführen. Die Beispielzahlen auf der Seite "Dateiaustausch" zeigen mehrere falsche Positive. Warum wurde diese Frage auch überhaupt auf dsp übertragen? o_O – abcd

+0

@Bringbackspy: Ja, Sie können 'ksdensity' Funktion anstelle von' hist' verwenden. Wie bei der Frage Migration auf DSP, ich habe keine Ahnung. Es wurde durch die Entscheidung eines Moderators verschoben, während ich an der Antwort arbeitete. – yuk

+0

Yuk, einfach toll! Danke sieht vielversprechend aus, also werde ich einen PEEK haben :) –

6

Der einfachste Weg, dies zu tun wäre, um zuerst die Daten zu glätten eine Gaußsche Kernel unter Verwendung der Hochfrequenzschwankungen zu entfernen.

Dann nutzen Sie die Funktion localmax die lokalen Maxima zu finden.

+2

+1 wenn du weißt, dass dein Histogramm 'inhärent' bimodal ist, dann würde ich es glätten, bis es nur zwei Maxima hat. – leonbloy

+0

@slayton, Das Histogramm wurde bereits durch eine Glättungsphase durchlaufen. –

+1

@Wajih, ok, aber wenn Sie nur die Peaks isolieren möchten, können Sie es mehr glätten, um die hohen Frequenzschwankungen herauszufiltern. Diese Variationen machen die Peak-Erkennung schwierig, weil Sie viele lokale Maxima haben. Wenn Sie sie herausfiltern, dann ist das ziemlich trivial. – slayton