Impulse zählen

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
BrainPain
User
Beiträge: 5
Registriert: Dienstag 2. November 2021, 17:46

Guten Abend,

da ich ziemlicher python neuling bin und ich vor einer vermutlich einfachen Aufgabe stehe, bei der ich nicht weiß wie ich sie angehen soll, frage ich einfach mal hier nach.
Ich habe verschiedene Messsignale in Form von einfachen Fließkommazahlen. In den Signalen gibt es nicht-periodische Impulse. Diese können in Form eines Sägezahns, rechtecks oder einem negativen peak auftreten. Im ersten ansatz möchte ich diese Impulse zählen. Also wie viele Impulse habe ich bspw. in einer .csv Datei. Gibt es dazu einen Lösungsansatz, bzw. welche Bibliothek wäre dafür wohl am geeignetsten?

Vielen Dank schon mal im Voraus für die Hilfe!
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

So trivial ist das nicht. Ein Weg ist zb eine Schwellwert-Über- oder Unterschreitung, gefolgt von einer Hysterese. Alternativ kannst du auch eine gleitende Fourier-Analyse machen, und die als Hochpass nutzen.
BrainPain
User
Beiträge: 5
Registriert: Dienstag 2. November 2021, 17:46

Genau, an eine Schwellwert Über- bzw. Unterschreitung habe ich auch schon gedacht. Komfortabel wäre hierbei natürlich, wenn ich irgendwie durch eine Fallunterscheidung unterscheiden könnte, welcher Fall gerade verwendet werden muss. Quasi eine Erkennung des "Musters" eines Impulses.
Tendentiell ist Python ja geeignet zur Mustererkennung, aber vermutlich nicht in dem Sinne, den ich meine oder?
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

Warum sollte es das nicht sein? Es ist eine Turing-vollständige Sprache. Und jenseits dieses recht technischen Kriteriums ausdrucksstark, und mit vielen Bibliotheken zum number crunching gesegnet.

Und wenn man einen Wert unabhängig von seinem Vorzeichen betrachten will, bietet sich seit Jahrhunderten der Betrag an. In Python mit der eingebauten Funktion abs verfügbar.
BrainPain
User
Beiträge: 5
Registriert: Dienstag 2. November 2021, 17:46

Da ich bei manchen Messergebnissen noch gar nicht weiß wie diese Impulse aussehen, sondern nur dass es welche geben muss würde ich gerne irgendwie durch eine Mustererkennung diese Impulse selbstständig erkennen lassen. Es wäre also bspw. auch Möglich, dass zwei peaks eng beieinander liegen, die aber einen Impuls darstellen. Gibt es da irgendwo einen Begriff, nach dem ich mich schlau machen kann oder eine besonders geeignete Bibliothek?

Danke für deine Hilfe!
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

Eine generische Mustererkennung halte ich für schwierig bis unmöglich. Egal in welcher Sprache. Alle mir bekannten maschinellen Lernverfahren brauchen schon Beispiele von dem, was sie erkennen können. Und ein solches Verfahren braucht man schon, wenn man mehr als nur zählen will, wie du zuerst gesagt hast. Sondern eben auch klassifizieren.

Der Begriff peak detection ist denke ich ein guter Start.
tonikae
User
Beiträge: 90
Registriert: Sonntag 23. Februar 2020, 10:27

Irgendwie fällt mir das schwer, mir das vorstellen zu können, wie die verschiedenen Impulsformen überhaupt
vorliegen sollen. Rechteck, und Sägezahn irgendwie sträubt sich da was in mir. Denn Rechteck ist ja
normalerweise digital(hat also nur zwei Zustände) kann auch unterschiedlich lang sein, ein Sägezahn ist aber
immer analog. Ist das wirklich in einer einzigen Zahlenreihe?

Wie auch immer....
Die Impulse/Peaks müssen ja eine maximale Amplitude haben und da kann man dann evtl. ansetzen.
d.h. Wenn des Rechteck die typischen 5 Volt hat(und das als zahlenwert 5.0 vorliegt)
und der Sägezahn auf maximal 3 Volt kommt(wäre dann der Zahlenwert 3.0) braucht man nur noch das
Auftreten zu zählen Aus der Höhe ergibt sich auch die Impulsform - denn ein Rechteck kann keine 3 Volt
haben (das springt von 0 auf 5 und umgekehrt). So weit einfach nur mal eine Vermutung in den Raum gestellt
denn das Signal das du beschreibst erscheint mir nicht so wirklich schlüssig.
BrainPain
User
Beiträge: 5
Registriert: Dienstag 2. November 2021, 17:46

Also tatsächlich geht es mir in erster Linie nur um das Zählen an sich. Da ich unterschiedliche Impulsformen erwarte habe ich auch beispielhaft die Rechteck und Sägezahn Signale genannt. Diese sollen einfach nur für verschiedene Signalformen der Impulse stehen.

Technisch wäre es auch durchaus möglich Trainingsdaten zu erfassen, welche ich dann in einen Algorithmus gebe, welcher dann das Messignal mit den Trainingsdaten vergleicht.
Und bei jeder Übereinstimmung wird dann eben gezählt.
Und wie ich einen solchen Algorithmus erstelle bzw. welches verfahren dafür das richtige ist, ist mir leider noch nicht ganz klar. Spontan sieht es für mich im ersten Moment nach Klassifizierung und pattern recognition aus :?:
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

Dazu kann man keine allgemeine Aussage treffen. Denn niemand hat deine Daten, und kennt deine Randbedingungen. Das Thema Peak Detection produziert viele Ergebnisse, und damit wuerde ich erstmal spielen. Sobald du einen Peak *hast*, kannst du von einer Detection zu einer Klassifizierung kommen, zb indem du in einem Fenster um den Peak herum die Daten durch ein maschinelles Lernverfahren lernst, und dann probierst, zu erkennen. Welche Groesse dieses Fenster hat, haengt eben von deinem Problem ab. Gezeiten haben 12h Periode, Akustik-Schwingungen Milli- oder Mikrosekunden, etc. pp.
BrainPain
User
Beiträge: 5
Registriert: Dienstag 2. November 2021, 17:46

Ja das macht sinn. Ich verstehe das jetzt so, dass ich durch das Fenster festlege, was quasi die gesuchten Daten sind, oder? Bedeutet, dass ich für bspw. Sägezahnimpuls und Rechteck oder andere Formen jedes mal ein neues Fenster um einen Impuls legen muss, um diesen "einlernen" zu können oder?
Zur peak-detection gibt es viele verständliche Beispiele, die konnte ich mir gestern schon angucken. Um ein maschinelles Lernverfahren zu verwenden hätte ich k-means verwendet, da ich im Augenblick ja weiß, wie viele Cluster ich habe (Beispiel Sägezahn & Rechteck). Ist das tatsächlich geeignet oder bin ich auf dem Holzweg?
In die einzelnen Cluster müsste ich dann vermutlich die verschiedenen Variationen des Sägezahns und der Rechtecke einfügen bzw. lernen oder?
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das Fenster bestimmt die Eingabe an deinen Klassifikator. Viele NNs zur Bilderkennung arbeiten zb auf 240x240 Pixeln (oder so etwas), wobei die Feature-Vektor-Größe eben auf das Problem ankommt.

k-means oder SVM oder oder oder sind geeignete Verfahren. Man geht so vor, dass man eine Pipeline aufbaut, die einem die extraktion vornimmt, und basierend darauf Testdaten bereitstellt, mit händischen Labeln. Und die man dann dem gewählten Verfahren vorwirft, und mit zb Cross-Validation auf ihre Performance abklopft.

Das sind aber alles Grundlagen des ML, und da kann man hier nicht ein 3 Posts das grundlegende Verständnis aufbauen. Dazu musst du Kurse belegen & damit die Intuition aufbauen, was für dein Problem passt. Oder jemanden anheuern, den du entsprechend tief einweihen kannst, und der das dann aus seiner Erfahrung entscheidet.
Antworten