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!
Impulse zählen
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?
Tendentiell ist Python ja geeignet zur Mustererkennung, aber vermutlich nicht in dem Sinne, den ich meine oder?
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.
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.
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!
Danke für deine Hilfe!
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.
Der Begriff peak detection ist denke ich ein guter Start.
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.
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.
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
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

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.
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?
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?
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.
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.