Peaks in beschleunigendem Signal

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
piratos
User
Beiträge: 12
Registriert: Dienstag 26. Oktober 2021, 11:03

Hallo,

Ich suche eine Möglichkeit die Peaks in einem beschleunigenden Signal zu erfassen. In meinem angefügten Bild rot eingekreist, dabei ist nur ein Auszug meines gesamten Datensatzes dargestellt.
Bild

Das Problem besteht darin, dass der zeitliche Abstand zwischen den Peaks immer kleiner wird. Die Amplitude der Peaks wird zudem immer größer. Ich kenne die Peakerfassung bisher leider nur so (detecta, scipy), dass man einen Mindestabstand zwischen zwei Peaks bzw. eine Mindesthöhe des Peaks angibt. Das kommt hier leider leider nicht in Frage.

Ziel ist es durch die Abstände dieser Peaks die Beschleunigung der Rotation zu bestimmen. Hat hier vielleicht jemand eine Idee, wie man das Problem am besten angeht?


Vielen Dank und Grüße,
Jeff

Edit: Um genau zu sein, ich brauche eigentlich nicht die "Peaks" sondern die Abstände der "Hügel".
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Gibt es einen Grund, warum du nicht die nach unten gerichteten Peaks nimmst? Oder Valleys, wenn man so will? Die sehen viel sauberer aus, ein Threshold von unter 200 wuerde zB gut funktionieren, plus natuerlich einem gleitenden Durchschnitt oder Windowing-Ansatz (das wird in diesen peak-detections schon alles eingebaut sein).
piratos
User
Beiträge: 12
Registriert: Dienstag 26. Oktober 2021, 11:03

Das ist eine sehr gute Idee mit den Valleys. Danke!

Ein Threshold ist aber leider schwierig, weil die Temperatur sich sehr stark verändert über den gesamten Datensatz. Es handelt sich hier um Live-Messwerte, daher ist es meiner Meinung nach leider auch nicht so einfach einen Threshold für verschiedene Segmente zu bestimmen. Ich dachte, dass es evtl. sinnvoller ist, die Valleys oder Hügel über die vorangegangene Steigung zu ermitteln. Das ist aber wiederum nicht so einfach, wegen der Form der Hügel.

Diese Form entsteht durch die Polgeometrie der Maschine. Nach 4 "Hügeln" ist eine Umdrehung abgeschlossen und daraus möchte ich dann die Drehzahl bestimmen.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich kann’s ja nur beurteilen anhand dessen, was du zeigst. Da reicht ein threshold. Du kannst den aber ja auch adaptiv machen. Du musst dann eben schrittweise vorgehen, und zb die Temperatur-Progression über die peaks dazu nutzen, den threshold entsprechend anpassen, und jeweils die nächsten peaks damit abgrasen.
rogerb
User
Beiträge: 878
Registriert: Dienstag 26. November 2019, 23:24

@piratos, hast du dir mal die Dokumentation von
scipy.signal.find_peaks angeschaut?
https://docs.scipy.org/doc/scipy/refere ... find-peaks

Es scheint mir, du verwechselst "threshold" mit "height"
'threshold' ist der *relative* Unterschied benachbarter Samples. Dass die abolute Höhe variiert sollte also für 'threshold' unerheblich sein.

Wenn man in der Dokumentation ganz unten schaut sieht man auch ein Beispiel wo Peaks unterschiedlicher Höhe gefunden werden können.
Da wird mit dem Parameter "prominence" gearbeitet.

Wenn man die Peaks gefunden hat, hat man auch den Abstand der Peaks. Die Beschleunigung ist die zweite Ableitung der Abstandskurve. Die liefert scipy auch:
https://docs.scipy.org/doc/scipy/refere ... derivative
Antworten