Hi,
ich "spiele" gerade mit dem Gedanken, eine Art von Geräuscherkennung zu realisieren.
Hintergrund ist im Wesentlichen, da es mit unserer neuen Palletsheizung mit dir Reinigung des Brennraums Probleme gibt. Dort werden in unregelmäßigen Abständen durch Spannen und Loslassen von mehreren Metallfedern die Brandrückstände abgeklopft. Das macht ein recht deutliches "metallische Knallen". Zeitweise fehlt nun aber dieses abklopfen oder es klingt hörbar anders (nicht so „metallisch“, irgendwie dumpfer). Das deutet auf eine Fehleinstellung der Funktion hin. Dann geht das Teil irgendwann auf Störung, wenn der Brennraum zu verrußt ist. Was wieder einen Einsatz des Herstellers bedingt.
So weit, so bekannt. Lt. Hersteller soll ich nun aufzeichnen, wann das Klopfen in welchen Intervallen anders klingt, denn lt. Software wird die Reinigung ja durchgeführt. D.h. ich darf dazu nach Vorstellung des Herstellers in den Keller ziehen und dort die nächsten Tage/Wochen wohnen und alle paar Stunden auf das Klopfen warten – damit war die Idee mit dieser Geräuscherkennung geboren ;)
Die Idee ist nun, ein Referenzaudiofile zu haben (aufgenommen wird solch ein „normales“ Klopfen, Dauer ist etwa 10 Sekunden). An einem µC mit Mikro wird diese Referenzaufnahme mit den erkannten Tönen verglichen. Klingt es „halbwegs“ gleich, ist es ok. Klingt es „anders“ oder bleibt es zB ein paar Stunden aus, wird ein Trigger ausgelöst (Email, logfile, Ausgang getriggert oder was auch immer). Grundsätzlich ist es recht ruhig im Raum, nur ab und an (auch unregelmäßig) werden die Pallets angesaugt, was wieder ein Geräusch erzeugt, das aber völlig anders klingt.
D.h. ich brauche eine Art Vergleich, eine gewisse Ähnlichkeit ist in Ordnung, ab einem gewissen Wert der Unähnlichkeit sollte ein Trigger ausgelöst werden. Ab Besten sollte die Geräuscherkennung "nur" und diese Art des Klopfens reagieren und die anderen Geräusche "ignorieren".
Ich komme zwar aus der SW-Entwicklung, das Thema am µC übersteigt allerdings meine Fähigkeiten :(
Was meint ihr dazu? Wie kann man sowas angehen? Welchen Controller sollte man dafür verwenden?
Ihr würdet mir sehr mit eurem Input helfen, danke euch vielmals
Die Idee ist nun, ein Referenzaudiofile zu haben (aufgenommen wird solch
ein „normales“ Klopfen, Dauer ist etwa 10 Sekunden).
Ich fürchte, du unterschätzt den Aufwand für einen solchen direkten Vergleich.
Wie wäre es mit einer Spektralanalyse. Das kann heutzutage selbst ein Smart-Phone als Wasserfalldarstellung. Dort siehst du, wenn die hohen Frequenzanteile auf Grund des metallischen Klopfens fehlen.
Nettes Vorhaben :-). Dürfte aber mit einem 'normalen' µC schwer zu realisieren sein; ich fürchte, da ist eher ein DSP gefragt.
Warum nicht ein anderer Ansatz? Ich habe z.B. einen MP3-Player, der auch aufzeichnen kann - oder sowas wie der Zoom-H1 (keine 100€), der MP3s über viele Stunden mitschneiden könnte.
Dann anschließend am PC die relevanten Stellen extrahieren, z.B. mit Audacity.
Alternativ kann man sich auch was einfaches basteln, dass die Aufnahme nur bei einem Geräusch startet und nach ca. 15s wieder stoppt. Selber muss man noch immer auswählen, was richtiges und falsches Geräusch ist.
Das geht dann schon mit einem µC, erfordert allerdings einen Eingriff in die genannten Recorder.
Lt. Hersteller soll ich nun aufzeichnen, wann das
Klopfen in welchen Intervallen anders klingt, denn lt. Software wird die
Reinigung ja durchgeführt. D.h. ich darf dazu nach Vorstellung des
Herstellers in den Keller ziehen und dort die nächsten Tage/Wochen
wohnen und alle paar Stunden auf das Klopfen warten – damit war die Idee
mit dieser Geräuscherkennung geboren ;)
Wie wäre es mit einer Spektralanalyse. Das kann heutzutage selbst ein
Smart-Phone als Wasserfalldarstellung. Dort siehst du, wenn die hohen
Frequenzanteile auf Grund des metallischen Klopfens fehlen.
Mein Handy hat so eine Geräusch-Erkenn-Funktion gleich eingebaut. Das kann ich auf ein bestimmtes Geräusch trainieren, und dann meldet es sich, wenn dieses Geräusch auftritt.
Mein Handy hat so eine Geräusch-Erkenn-Funktion gleich eingebaut. Das
kann ich auf ein bestimmtes Geräusch trainieren, und dann meldet es
sich, wenn dieses Geräusch auftritt.
Ob das hier hilft? Das Geräusch im Störfall unterscheidet sich ja vom normalen Fall. Wie viel Toleranz kann man da einstellen?
Und dann müsste man den veränderten Klang zusammen mit einem Zeitstempel aufzeichnen, um den Hersteller zufrieden zu stellen ...
Ok, wenn es dir Spaß macht, natürlich gerne die geplante Variante. Du darfst auch nach Fertigstellung darüber berichten - in Projekte & Code!
Ich ging allerdings davon aus, dass du für dein Problem eine schnelle Lösung benötigst, schließlich ist noch Winter. Das jedenfalls ist mit Plan B möglich.
in die Richtung geht Plan B ;) nur mit einem alten
Mobiltelefon
Also ich würde mal mit Plan B beginnen; Mobiltelefon hat den zusätzlichen Vorteil, daß Du Dir da eine App aussuchen kannst, die jedesmal eine neue Aufnahme startet, wenns was zu hören gibt; das liefert Dir dann ggf. auch gleich 'nen Zeitstempel.
Auf dem Weg kommst Du erstens zu Musteraufnahmen der drei Geräusche (Reinigung OK/fehlerhaft und Pellets saugen) um deren Frequenzspektren vergleichen zu können; außerdem hast Du so auf jeden Fall zeitnah passende Daten für den Hersteller und kannst ihm zusätzlich auch eine Hörprobe des Fehlklangs liefern.
Plan A kannst Du ja trotzdem unabhängig davon verfolgen, aber eben ohne Zeitdruck, dann hast Du auch nach einer Reparatur gleich eine Erfolgskontrolle.
So weit, so bekannt. Lt. Hersteller soll ich nun aufzeichnen, wann das
Klopfen in welchen Intervallen anders klingt, denn lt. Software wird die
Reinigung ja durchgeführt. D.h. ich darf dazu nach Vorstellung des
Herstellers in den Keller ziehen und dort die nächsten Tage/Wochen
wohnen und alle paar Stunden auf das Klopfen warten – damit war die Idee
mit dieser Geräuscherkennung geboren ;)
Ich hätte da nicht Technik drauf geworfen sondern einen Anwalt eingeschaltet.
Der Ofen funktioniert offensichtlich nicht vernünftig und der Hersteller stellt sich dumm um vermutlich die Garantiezeit auszusitzen.
Plan A kannst Du ja trotzdem unabhängig davon verfolgen, aber eben ohne
Zeitdruck, dann hast Du auch nach einer Reparatur gleich eine
Erfolgskontrolle.
Ich hätte da nicht Technik drauf geworfen sondern einen Anwalt
eingeschaltet.
so den Druck habe ich gar nicht und der Anwalt ist derzeit nicht nötig. Der Hersteller sieht selbst das Problem hat nach mehreren Versuchen des Teiletausches nur keine Idee mehr als die Anlage wieder auf seine Kosten abzubauen. Das will ich aber nicht wirklich. Seine Einsätze kosten mir nichts, das ganze ist halt lästig, für beide Seiten.
Mal sehen, gehe momentan etwas in die Richtung ppt&phyton&raspberry. mal sehen ob und was das wird. danke euch jedenfalls!
Die Idee ist nun, ein Referenzaudiofile zu haben (aufgenommen wird solch
ein „normales“ Klopfen, Dauer ist etwa 10 Sekunden)
Wie kann ein Klopfen 10s dauern? Nach meiner Vorstellung ist Klopfen ein ein eher kurzes Geräusch also was im Bereich einiger ms bis maximal weniger 10 ms.
Interessant ist hier nicht die gesamte Folge, sondern nur ein einzelner "Knock". Das wäre die eigentliche Referenz, nach der gesucht werden müßte.
D.h. ich brauche eine Art Vergleich, eine gewisse Ähnlichkeit ist in
Ordnung, ab einem gewissen Wert der Unähnlichkeit sollte ein Trigger
ausgelöst werden.
Das macht man andersum. Erst mal erkennt man das Vorhandensein einer Ähnlichkeit. Erkennt man nix, ist's unähnlich genug.
Was meint ihr dazu? Wie kann man sowas angehen?
Ich würde eine Abwandlung des Korrelationskoeffizienten verwenden. Abwandlung in Richtung: braucht weniger Rechenleistung, liefert aber auch einen Kennwert, der was über die Ähnlichkeit aussagt, bloß halt nicht hübsch sauber akademisch im Bereich von -1.0 bis +1.0. Sprich: weg mit den Wurzeln, Zähler und Nenner tauschen. Dann kann man das einigermaßen schnell mit Integer-Rechnungen abfackeln.
Welchen Controller
sollte man dafür verwenden?
Einen, der genug Rechenpower hat. Die nötige Rechenpower hängt im wesentlichen von der Länge der Referenz ab, deswegen auch gleich meine Frage von oben bezüglich der Länge...
Für jedes einzelne Sample des Eingangssignals muss nämlich die komplette Analyse über die gesamte Länge der Referenz laufen. Schließlich weiß man ja nicht, wo im Eingangssignal das gesuchte Signal steckt.
Wie kann ein Klopfen 10s dauern? Nach meiner Vorstellung ist Klopfen ein
ein eher kurzes Geräusch also was im Bereich einiger ms bis maximal
weniger 10 ms.
Interessant ist hier nicht die gesamte Folge, sondern nur ein
einzelner "Knock". Das wäre die eigentliche Referenz, nach der gesucht
werden müßte.
ja und nein, ein "Klopfer" dauert gemessen etwa 570ms mitsamt den Nachwellen. Nachdem aber auch die Nachwellen ein Thema sind (schwingt was mit, gibt es einen Nachhall oder Ähnliches), war die Idee da mehrere "Klopfer" aufzunehmen.
Aber du hast schon recht, einer sollte auch reichen, wenn dann müssen eh alle ähnlich klingen.
Mein Ansatz:
Der Techniker soll Dir zwei Draehte herausfuehren, die das Klopfen starten. Damit (Relais, Optokoppler...) startest Du jeweils eine Aufzeichnung passender Laenge.(Zeitstempel nicht vergessen)
Notieren, welche Abweichung Dein Zeitstempel zur internen Zeit der Anlage hat.
Die hoert man dann zusammen mit dem Techniker an.
DSP, AI, neuronales Netz.. Ja man kann auch mit einem 16in Geschütz auf Schmetterlinge ballern ...
Wenn eh ein altes Smartphone da ist, das Ding einfach daueraufzeichnen lassen von 12:00 bis 12:00 von mir aus.
Das entstandene Audiofile in Audacity (bzw einen der nicht ganz so Datenhungrigen Forks) laden.
Wenn der Keller ruhig ist kann man immer dann wenn es ein Geräusch gibt am Peak in der Darstellung sehen wo was ist, hin skippen und hinhorchen.
In der Beziehung würde ich meinen Ohren definitiv mehr Vertrauen als einem DSP...
Ist ja nun kein Hochleistungssonar das ganze...
Ja, man muss selbst seinen Hintern bewegen, hat aber definitiv keine Probleme von "übergangenen Events", "false positive Events" etc.
Ab Besten sollte die Geräuscherkennung "nur" und diese Art des Klopfens
reagieren und die anderen Geräusche "ignorieren".
Vergiss es. Du brauchst einen Trigger, der angibt, wann geklopft wird (denn wenn zwar geklopft werden soll aber nichts klopft, dann gibt es auch nichts zu hören). Dann zeichnet du jeweils eine halbe Minute um diesen Trigger herum auf. Mit diesem Ansatz machst du aus einem Tag eine Minute, die du mit Brain 1.0 dann recht schnell nach der nächsten Störung auswerten kannst.
Ich komme zwar aus der SW-Entwicklung, das Thema am µC übersteigt
allerdings meine Fähigkeiten :(
Was hat das mit uC zu tun? Oder andersrum gefragt: du hättest aber eine Idee, wie du das mit einem üblichen PC machen würdest?
Welchen Controller sollte man dafür verwenden?
Für ein Einzelstück: einen i7 mit 32GB Arbeitsspeicher und Internet.
Was meint ihr dazu?
Es ginge mit hoher Wahrscheinlichkeit schneller, wenn du eine oder 2 Wochen mit einem Rekorder neben den Ofen sitzt...
Einen Coral auf gute und schlechte Geräusche trainieren:
https://coral.ai/
Aber im Ernst, das veränderte Klopfen ist doch nicht das Problem sondern nur das Resultat eines Problems.
Da klemmt doch dann Russ oder Spänezeug in der Feder oder wo auch immer. Also, entweder öfter klopfen oder vorher bürsten oder oder oder.
Die Idee ist nun, ein Referenzaudiofile zu haben (aufgenommen wird solch
ein „normales“ Klopfen, Dauer ist etwa 10 Sekunden). An einem µC mit
Mikro wird diese Referenzaufnahme mit den erkannten Tönen verglichen.
Klingt es „halbwegs“ gleich, ist es ok. Klingt es „anders“ oder bleibt
es zB ein paar Stunden aus, wird ein Trigger ausgelöst (Email, logfile,
Ausgang getriggert oder was auch immer). Grundsätzlich ist es recht
ruhig im Raum, nur ab und an (auch unregelmäßig) werden die Pallets
angesaugt, was wieder ein Geräusch erzeugt, das aber völlig anders
klingt.
D.h. ich brauche eine Art Vergleich
Aussichtslos für Forendackel hier und die damit Geld verdienen wollen das auch weiterhin. Stell doch eine KI ein.
Angeblich werden mit KI bereits automatische Einkommen generiert. Mit einer nur leicht besseren Idee als die da oben kaufst Dir eine neue Heizung von der Konkurrenz.
Auch wenn es schon geschrieben wurde: Das geht man
offline auf einem PC an.
Die Tonaufzeichnung macht man mit einem Audiorecorder;
ich verwende -- allerdings für musikalische Zwecke --
einen Tascam DR-07X. Der kann deutlich mehr, als für
Deine Anwendung erforderlich ist.
Auf'm Handy gibt es so eine App, wie zB Easy Voice Recorder. die erlaubt den Speicher zu fuellen. Ich wuerd die App also einschalten und das Handy eine Stunde oder so aufnehmen zu lassen. Dann auf den PC rueber ziehen und mit Audacity visualisieren. Beide kosten nichts.
Egal wie, ob mit Laptop, Notebook, Handy oder Audiorecorder - der Weg ist für das Ziel der Einfachste.
Mein Vorschlag mit z.B. Zoom-H1 lag daran, dass so ein Ding hier rumliegt. Und rechnerisch kann es mit 48kbit/s MP3s für 370h aufzeichnen, auf einer 8Gbyte-SD. Wahrscheinlich ist diese Datenrate für das Geräusch hoch genug.
Grundsätzlich ist das schon machbar, es braucht aber etwas Rechenleistung und eine gute Typisierung des Differenzgeräusches, also ein Herausarbeiten der Spektralanteile, um die sich das eine vom anderen Spektrum unterscheidet. Wenn man das hören kann, ist es in aller Regel auch in Mathematik zu formulieren und zu rechnerisch machen. Braucht aber Rechenleistung und eine Fallanalyse.
Bevor jetzt wieder einer laut "KI" schreit: Nein, braucht es nicht. Man analysiert stringent die Positiv- und die Negativfälle und bildet ein Intervall für einen Matcher, der eines der beiden Signale oder keins erkennt und eine eindeutige Meldung absetzt.
Der Rest geht über klassische Korrelationsrechnung.
Kann hierzu auch den Raspberry + USB-Mikrofon empfehlen. Dann das pyaudio-Paket benutzen, um die Samples vom Mikrofon zu bekommen (am besten immer als Chunks einer bestimmten Länge).
Wenn man dann eine Aufnahme des zu identifizierenden Geräuschs als WAV-Datei hat, kann man die Samples daraus in ein numpy-Array lesen (am besten die WAV mit einem Audio-Programm der Wahl z.B. als 16bit-Integer abspeichern).
Danach kann man aus numpy die correlate-Funktion benutzen. Dann überlegt man sich einen Schwellwert für die Korrelation und kann so entscheiden, ob das aufgenommene Geräusch dem gerade mikrofonierten entspricht.
Das funktioniert bei mir sehr gut, ich habe im Haus eine Klingel mit zwei Klängen und wollte spaßenshalber mal per Software erkennen, welcher Klang gerade abgespielt wurde.
Eventuell muss man das aufgenommene/abgetastete Material noch filtern, um bessere Ergebnisse zu bekommen. Die relevanten Frequenzen für Dein Klopfen befinden sich bestimmt in einem recht definierten Frequenzbereich.
Grundsätzlich ist das schon machbar, es braucht aber etwas
Rechenleistung und eine gute Typisierung des Differenzgeräusches, also
ein Herausarbeiten der Spektralanteile, um die sich das eine vom anderen
Spektrum unterscheidet.
Das graue Zeugs zwischen den Ohren ist nicht so schlecht. Einfach einmal ein "gutes" und ein "schlechtes" Freiklopfevent aufzeichnen, die Spektren als Wasserfalldiagramm darstellen und angucken.
So weit, so bekannt. Lt. Hersteller soll ich nun aufzeichnen, wann das
Klopfen in welchen Intervallen anders klingt, denn lt. Software wird die
Reinigung ja durchgeführt. D.h. ich darf dazu nach Vorstellung des
Herstellers in den Keller ziehen und dort die nächsten Tage/Wochen
wohnen und alle paar Stunden auf das Klopfen warten – damit war die Idee
mit dieser Geräuscherkennung geboren ;)
neuen(!) Palletsheizung
Manche Kunden lassen auch alles mit sich machen. Dem Hersteller würde ich was husten. Das Ding könnte der a.) sofort wieder mitnehmen, oder b.) ich lasse es ihm direkt auf den Hof kippen, mit Rechnung. Er hätte immerhin die Wahl.
Das einzig sinnvolle wäre es, das Steuersignal direkt am Klemmkasten abzugreifen, wo der Motor oder Magnet zu Abklopfen angeschlossen ist. Aber das ist nicht Deine Sache, sondern die der Herstellers und ebenso das Aufzeichnungsgerät.
Mit PC oder Raspberry Pi machst du sicher nichts falsch. Wenn der Keller ansonsten ruhig ist, genügt es ja, nur dann aufzuzeichnen, wenn es Geräusche gibt - das Auseinanderklamüsern kannst du dann manuell erledigen.
Ansonsten: mit Python in einem Loop immer 10s oder so aufzeichnen und bei Überschreiten eines Mindestpegels diese zwischengespeicherten 10s und das, was an Geräusch hinterherkommt, samt Zeitstempel speichern.
Sollte, da du ja Erfahrung hast, eine Fingerübung für 2h sein, wobei 90 Minuten dafür draufgehen, die Hardware ans Laufen zu bekommen.
Wenn du dann noch weitergehende Ambitionen hast, kannst du die entstandenen Audiodateien dann offline per Spektralanalyse automatisch klassifizieren. Vermutlich genügt als Kriterium aber schon die reine Aufnahmedauer.
In der aktuellen c't ist ein Bericht über die Android-Geräuscherkennung, die Menschen mit Höreinschränkungen über eine Vibrations- und Textnachricht z.B. Klopfen, Rauchmelder und Klingeln mitteilt.
Kann man angeblich auch an beliebige andere Geräusche anlernen.