Fehlende oder falsche Peaks entdecken #2

Open
opened 2017-10-12 14:11:27 +02:00 by toni · 2 comments
Owner

Die normale Peak Detection kann bei einigen Datensätzen Peaks übersehen bzw. auch zu viele finden. Gesucht ist ein einfacher und schneller Algorithmus, welcher diese Peaks hinzufügt bzw. entfernt.

Idee: Wir haben ja eine Periode. D.h. die Peaks müssen ungefähr gleiche Abstände zueinander haben. Das könnten wir ausnutzen.

Testcases:

  • Alle Testdaten durchlaufen und bessere Gesamtergebnisse bei der BPM Schätzung erzielen.
  • Visuell prüfen, ob bei der Autokorrelation wirklich eine bessere Erkennung vorliegt.
  • Extrema testen: Es gibt keine Peaks (gerades signal), es gibt unperiodische Peaks (asynchrones Signal), Random Signal (rauschen).
Die normale Peak Detection kann bei einigen Datensätzen Peaks übersehen bzw. auch zu viele finden. Gesucht ist ein einfacher und schneller Algorithmus, welcher diese Peaks hinzufügt bzw. entfernt. Idee: Wir haben ja eine Periode. D.h. die Peaks müssen ungefähr gleiche Abstände zueinander haben. Das könnten wir ausnutzen. Testcases: - Alle Testdaten durchlaufen und bessere Gesamtergebnisse bei der BPM Schätzung erzielen. - Visuell prüfen, ob bei der Autokorrelation wirklich eine bessere Erkennung vorliegt. - Extrema testen: Es gibt keine Peaks (gerades signal), es gibt unperiodische Peaks (asynchrones Signal), Random Signal (rauschen).
toni self-assigned this 2017-10-12 14:11:27 +02:00
toni added the
Feature
label 2017-10-12 14:11:27 +02:00
Author
Owner

Verfahren steht, wurde aber noch nicht auf Herz und Nieren getestet.

Grobe Funktionsweise:

Find false detected peaks. This could be a not detected or an additional detected peak. Simple algorithm:

    1. Choose smallest diff(peaks) value smallest_peak (e.g. 48, 97, 49, [45], ..)
    1. Divide all diff_peaks values with smallest_peak to get factor_peaks (e.g. 1.1, 1.8, 1.2, 1, ..) and to whole numbers (e.g. 1, [2], 1, 1, ..)
    1. Divide diff_peaks / factor_peaks and split (e.g. 48, [48.5, 48.5], 49, 45, ..) diff_peaks_new
    1. Start at first peak and cumsum the correlation values at the lag positions given by diff_peaks_new to sum_peaks_new and sum_peaks for diff_peaks
    1. If sum_diff_new > sum_diff finish, else remove smallest_peak from diff(peaks) and goto 1)
Verfahren steht, wurde aber noch nicht auf Herz und Nieren getestet. Grobe Funktionsweise: Find false detected peaks. This could be a not detected or an additional detected peak. Simple algorithm: - 1) Choose smallest diff(peaks) value smallest_peak (e.g. 48, 97, 49, [45], ..) - 2) Divide all diff_peaks values with smallest_peak to get factor_peaks (e.g. 1.1, 1.8, 1.2, 1, ..) and to whole numbers (e.g. 1, [2], 1, 1, ..) - 3) Divide diff_peaks / factor_peaks and split (e.g. 48, [48.5, 48.5], 49, 45, ..) diff_peaks_new - 4) Start at first peak and cumsum the correlation values at the lag positions given by diff_peaks_new to sum_peaks_new and sum_peaks for diff_peaks - 5) If sum_diff_new > sum_diff finish, else remove smallest_peak from diff(peaks) and goto 1)
Author
Owner

In den meisten Fälle funktioniert die Methode wirklich gut. Gibt aber 2 - 3 Fälle, in denen zu viele neue Punkte erkannt werden (siehe Anhang). Eine Art Vorfilter wäre sicherlich nicht schlecht... Vielleicht basierend auf vergangenem Wissen über die BPM. Zu kleine Distanzen (diff) zwischen den Peaks werden gleich entsorgt oder sowas.

EDIT: Rote Punkte im Bild wurden von der hier gezeigten Methode eingefügt. Die grünen Punkte kommen aus Matlabs "findpeaks".

In den meisten Fälle funktioniert die Methode wirklich gut. Gibt aber 2 - 3 Fälle, in denen zu viele neue Punkte erkannt werden (siehe Anhang). Eine Art Vorfilter wäre sicherlich nicht schlecht... Vielleicht basierend auf vergangenem Wissen über die BPM. Zu kleine Distanzen (diff) zwischen den Peaks werden gleich entsorgt oder sowas. EDIT: Rote Punkte im Bild wurden von der hier gezeigten Methode eingefügt. Die grünen Punkte kommen aus Matlabs "findpeaks".
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: toni/Dirigent#2
No description provided.