Optische Klingel kompliziert realisiert

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
FragDenPinguin
Beiträge: 34
Registriert: 06.01.2017 05:41:47

Optische Klingel kompliziert realisiert

Beitrag von FragDenPinguin » 10.01.2017 21:08:08

Ich möchte folgendes Projekt realisieren, weiß aber noch nicht genau, wie man das am besten anpackt:

Übers Netzwerk bekomme ich das Audiosignal eines Mikrofons per mp3-Stream. Dieses nimmt meinen Flur daheim auf. Da ich gerne mit Kopfhörern arbeite, verpasse ich schon einmal, wenn es klingelt. Deshalb möchte ich auf dem Bildschirm eine Benachrichtigung bekommen, wenn das Mikro etwas hört, das dem Klingelton meiner Haustür ähnelt. Meine Idee dazu war eine Fourier-Analyse des Mikro-Signals und ein Vergleich mit dem Frequenzspektrum der Klingel. Außerdem hat das Signal zwei deutliche Peaks (Ding-Dong), die aber zeitlich verschieden weit auseinander liegen können.

Es gibt sicherlich einfachere Wege, das zu lösen, aber mich interessiert gerade der beschriebene Weg - also das Erkennen eines Audiomusters im mp3-Stream. Hat jemand eine Idee?

BenutzerGa4gooPh

Re: Optische Klingel kompliziert realisiert

Beitrag von BenutzerGa4gooPh » 10.01.2017 21:27:05

Kreuzkorrelation zwischen vorher empfangenem und gespeichertem und aktuell empfangenem Klingelton?
https://de.m.wikipedia.org/wiki/Kreuzkorrelation
Faltung geht auch: https://de.m.wikipedia.org/wiki/Faltung_(Mathematik)
Digital ist es sehr einfach zu realisieren, Integrale werden zu Summen von Produkten (Amplitude x Abtastzeit)

2 FFTs (gespeichertes Signal und gerade empfangenes Signal) statistisch vergleichen? Hast dann ja wieder 2 Folgen, welche Statistik für Ähnlichkeit? Bist du wahrscheinlich wieder bei obigen Operationen angelangt.
https://de.m.wikipedia.org/wiki/Schnell ... sformation

Gibt bestimmt irgendwo fertige Scripte für Kreuzkorrelation, Faltung und FFT.
Zuletzt geändert von BenutzerGa4gooPh am 10.01.2017 21:41:51, insgesamt 1-mal geändert.

FragDenPinguin
Beiträge: 34
Registriert: 06.01.2017 05:41:47

Re: Optische Klingel kompliziert realisiert

Beitrag von FragDenPinguin » 10.01.2017 21:41:37

Das klingt auf jeden Fall sehr interessant. :THX:

Kann die Kreuzkorrelation denn damit umgehen, dass manche Typen "Ding-Dong" klingeln und manche "Ding ............................. Dong"?

BenutzerGa4gooPh

Re: Optische Klingel kompliziert realisiert

Beitrag von BenutzerGa4gooPh » 10.01.2017 21:49:10

Nu ja. Musst du Ding und Dong einzeln abspeichern und das Empfangssignal gegen Ding und Dong korrelieren. Dann werden Ding und Dong einzeln erkannt. Ein Ding oder ein Dong alleine reicht sicher auch schon?!

Ding-Dong und Ding-------------Dong sind zwar unterschiedliche Signale, allerdings beide statistisch sehr ähnlich und beide viiiiel unterschiedlicher gegenüber Nomalgeraeuschen. Sollte also auch klappen.

Die Faltung oder Kreuzkorrelation muss ständig laufen, das Mikrofonsignal mit dem gespeicherten Signal korrelieren. (Oder eben mit 2 gespeicherten.)
Physisch aufbauen musst du gar nichts, das Mikro deines Laptops sollte genügen. Du nutzt das gleichermaßen zur Aufnahme/Abspeicherung des Klingeltons wie für den ständige Lauschen darauf.

mp3-Dateien sind komprimiert. Deshalb bitte nicht für statistische Auswertungen (Korrelation, Faltung) nutzen.
Vorschlag:
Nutze zum Test erst mal ein grafisches, numerisches Mathematikprogramm, Debianoctave beispielsweise und probiere die Operationen aus, lasse dir Ergebnisse anzeigen. Dateien als ganz einfache quantifizierte Amplitudenwerte (mit Abtastzeit dazwischen). Gibt also eine einzige Zahlenfolge pro Signal. Die Abtastfrequenz muss mindestens der doppelten, höchsten Signalfrequenz entsprechen. Ich würde > 40 kHz nutzen, der Mensch hört bis max 16..20 kHz, deine Klingel sollte weit darunter liegen. Abtastzeit demzufolge < 1/40KHz = 25 Mikrosekunden.

Vereinfachung: Taube nutzen Klingeln mit Blitzlicht für ein paar Minuten auch nach kurzem Klingeln, bei offener Tür sieht man die Refexionen in mehreren Räumen.

Benutzeravatar
CH777
Beiträge: 1466
Registriert: 27.05.2008 16:37:17

Re: Optische Klingel kompliziert realisiert

Beitrag von CH777 » 11.01.2017 09:31:40

Gibt es denn außer dem Klingeln noch andere laute Geräusche in deinem Flur? Falls nicht kannst du dir die mühselige Erkennung sparen und die Benahrichtigung einfach durch den Lautstärke-Peak triggern, das geht bestimmt viel einfacher.

BenutzerGa4gooPh

Re: Optische Klingel kompliziert realisiert

Beitrag von BenutzerGa4gooPh » 11.01.2017 09:38:36

Husten darf man dann aber nicht. Oder muss filtern und dann Peak-Auswertung. Da kann man es auch gleich richtig tun.
Gibt natürlich auch Funk-Klingeln. Kann man bestimmt mehrere Empfänger nutzen, an einen "Glühobst" ranbasteln. Wäre aber zu einfach ... . :mrgreen:
Zuletzt geändert von BenutzerGa4gooPh am 11.01.2017 09:40:42, insgesamt 1-mal geändert.

Benutzeravatar
MSfree
Beiträge: 11605
Registriert: 25.09.2007 19:59:30

Re: Optische Klingel kompliziert realisiert

Beitrag von MSfree » 11.01.2017 09:40:38

Jana66 hat geschrieben:Ding-Dong und Ding-------------Dong sind zwar unterschiedliche Signale
Es würde reichen, nur das "Dong" zu korrelieren.
mp3-Dateien sind komprimiert. Deshalb bitte nicht für statistische Auswertungen (Korrelation, Faltung) nutzen.
Das ist kein Problem. Einerseits ist MP3 bereits das Ergebnis der Fourier Transformation, andererseits kann man bedenkenlos das dekomprimierte MP3 mit dem statischen Mustersignal korrelieren. Der Datenverlust durch MP3 hat auf das Korrelationsergebnis so gut wie keinen Einfluß.

BenutzerGa4gooPh

Re: Optische Klingel kompliziert realisiert

Beitrag von BenutzerGa4gooPh » 11.01.2017 09:45:53

MSfree hat geschrieben:Es würde reichen, nur das "Dong" zu korrelieren.
Habe ich geschrieben, das einzeln reicht. :wink:
Du hast aber Recht, das technisch bedingte, immer gleiche Dongggg wäre am Besten. Ansonsten Ding und Diiiiiing. :mrgreen:

mp3 dekodiert geht natürlich, verkompliziert die Sache, da kann er auch nur das Klingelsignal unkomprimiert speichern und mit dem aktuell empfangenem, unkomprimierten Mikrofonsignal korrelieren. Die ständige und zyklische ("Zeitfenster") Aufzeichnung dessen muss ja nicht lang und damit speicherintensiv sein. Reichliche Klingeltonzeit mit Nachhall sollte genügen.

Benutzeravatar
MSfree
Beiträge: 11605
Registriert: 25.09.2007 19:59:30

Re: Optische Klingel kompliziert realisiert

Beitrag von MSfree » 11.01.2017 10:21:50

Jana66 hat geschrieben:mp3 dekodiert geht natürlich, verkompliziert die Sache, da kann er auch nur das Klingelsignal unkomprimiert speichern und mit dem aktuell empfangenem, unkomprimierten Mikrofonsignal korrelieren.
Natürlich kann man sich die "Formatwandlung" in MP3 auch sparen, dann ist die Datenmenge der Soundsamples halt größer. Man wird die Samples aber wohl kaum aufheben und speichern, so daß das eigentlich unerheblich ist.

Man braucht auch nicht ständig ein Soundsignal zum Korrelator zu schicken, denn das würde die CPU letzlich doch ziemlich auslasten. Wenn man das von einem Schwellwert abhängig macht, also eine bestimmte Mindestlautstärke am Mikrofon anliegen muß, bevor man das Signal zum Korrelieren weiterreicht, spart man sich jede Menge Rechenaufwand.

FragDenPinguin
Beiträge: 34
Registriert: 06.01.2017 05:41:47

Re: Optische Klingel kompliziert realisiert

Beitrag von FragDenPinguin » 11.01.2017 12:40:51

Danke für eure Anregungen! :)

Dass mp3 genutzt wird hat den Hintergrund, dass die Netzwerkanbindung zum Mikrofon eine ziemliche "Bambusleitung" ist.

PS: Sehe ich das eigentlich richtig, dass bei der Kreuzkorrelation streng genommen in jedem Zeitschritt eine neue zeitverschobene Faltung mit dem Referenzsignal gestartet wird?

Benutzeravatar
MSfree
Beiträge: 11605
Registriert: 25.09.2007 19:59:30

Re: Optische Klingel kompliziert realisiert

Beitrag von MSfree » 11.01.2017 13:35:41

FragDenPinguin hat geschrieben:Dass mp3 genutzt wird hat den Hintergrund, dass die Netzwerkanbindung zum Mikrofon eine ziemliche "Bambusleitung" ist.
Auch WAV ohne Kompression kann man klein halten, indem man z.B. nur mit 11050Hz, nur ein Kanal und nur mit 8Bit/Sample abtastet. Das ergibt eine Datenbandbreite von 11050 Byte/s (128kBit MP3 ergibt immerhin 16000Byte/s). Zur Korrelation mit einem Türgong reicht die genannte Tonqualität locker aus.

BenutzerGa4gooPh

Re: Optische Klingel kompliziert realisiert

Beitrag von BenutzerGa4gooPh » 11.01.2017 13:38:23

FragDenPinguin hat geschrieben:Sehe ich das eigentlich richtig, dass bei der Kreuzkorrelation streng genommen in jedem Zeitschritt eine neue zeitverschobene Faltung mit dem Referenzsignal gestartet wird?
Faltung und Kreuzkorrelation sind sehr ähnlich. Insgesamt bezeichnet man die gesamte Operation/Funktion damit, nicht nur einen Schritt.

Schau mal hier, gut erklärt:
https://www.google.de/url?sa=t&source=w ... rQzg4VhOEw
https://www.google.de/search?q=faltung+ ... F-8#xxri=3

Guck die Diagramme an und vergiss die Integrale. Digital brauchst du sie eh nicht, auf Grundrechenarten rueckfuehrbar wio oben gesagt. Im oben verlinkten Wikipedia (Faltung) ist eine Animation für Faltung von 2 Rechteckfunktionen. Das Ergebnis ist eine Dreieckfunktion. Maximum logischerweise bei vollständiger Gleichheit. Du wirst bei deiner Klingel einen Schwellwert für eine optische Meldung etwas unterhalb Maximum festlegen müssen. Ein eindeutiges Maximum wird auch erreicht bei "statistischer Aehnlichkeit" der gespeicherten Mikrofonaufnahme der Klingel mit der aktuellen ("gefensterten") Aufnahme. Wenn es klingelt, wird Schwellwert überschritten und Meldung.
Zuletzt geändert von BenutzerGa4gooPh am 11.01.2017 13:48:12, insgesamt 1-mal geändert.

DeletedUserReAsG

Re: Optische Klingel kompliziert realisiert

Beitrag von DeletedUserReAsG » 11.01.2017 13:47:05

Gerade Gongs haben doch eine definierte Tonhöhe. Ich würde eine der Libs für Stimmsoftware hernehmen und das auswerten. Da es zwei verschiedene, fixe Töne sind, sollte sich das ziemlich sicher erkennen lassen.

Wenn ich sowas bauen wollte, würde ich das elektrische Signal abgreifen, btw. - weniger Aufwand und noch eindeutiger.

BenutzerGa4gooPh

Re: Optische Klingel kompliziert realisiert

Beitrag von BenutzerGa4gooPh » 11.01.2017 13:49:43

Ich hatte gestern mal an Spracherkennungssoftware gedacht. Die ist doch anlernbar? Auch mit Klingelton? :mrgreen:
Wie weiterverarbeiten ist mir dann jedoch nicht mehr eingefallen ...

FragDenPinguin
Beiträge: 34
Registriert: 06.01.2017 05:41:47

Re: Optische Klingel kompliziert realisiert

Beitrag von FragDenPinguin » 11.01.2017 14:15:16

Jana66 hat geschrieben:
FragDenPinguin hat geschrieben:Sehe ich das eigentlich richtig, dass bei der Kreuzkorrelation streng genommen in jedem Zeitschritt eine neue zeitverschobene Faltung mit dem Referenzsignal gestartet wird?
Faltung und Kreuzkorrelation sind sehr ähnlich. Insgesamt bezeichnet man die gesamte Operation/Funktion damit, nicht nur einen Schritt.

Schau mal hier, gut erklärt:
https://www.google.de/url?sa=t&source=w ... rQzg4VhOEw
https://www.google.de/search?q=faltung+ ... F-8#xxri=3
Ok, danke für die Literatur. Ohne weitere Vereinfachungen müsste ich dann also jedesmal, wenn aus dem Stream ein neues Sample eintrudelt, eine neue Summe aus dem Produkt zwischen den Werten von gehörtem und Referenzsignal berechnen? Also jetzt die Kontrolle des Lautstärkepegels etc. nicht inbegriffen.
MSfree hat geschrieben: Auch WAV ohne Kompression kann man klein halten, indem man z.B. nur mit 11050Hz, nur ein Kanal und nur mit 8Bit/Sample abtastet. Das ergibt eine Datenbandbreite von 11050 Byte/s (128kBit MP3 ergibt immerhin 16000Byte/s). Zur Korrelation mit einem Türgong reicht die genannte Tonqualität locker aus.
Ich nutze momentan mp3 mit 22.1kHz/16Bit, das mit mpg123 on-the-fly dekomprimiert wird. Ergibt etwa 6% CPU-Auslastung.und 8 kByte/s auf dem Netzwerk. Wenn es da Probleme gibt, werde ich später mal mit den Formaten experimentieren.
Zuletzt geändert von FragDenPinguin am 11.01.2017 15:45:12, insgesamt 2-mal geändert.

FragDenPinguin
Beiträge: 34
Registriert: 06.01.2017 05:41:47

Re: Optische Klingel kompliziert realisiert

Beitrag von FragDenPinguin » 11.01.2017 14:17:22

niemand hat geschrieben:Gerade Gongs haben doch eine definierte Tonhöhe. Ich würde eine der Libs für Stimmsoftware hernehmen und das auswerten. Da es zwei verschiedene, fixe Töne sind, sollte sich das ziemlich sicher erkennen lassen.
Habe ich auch dran gedacht, wusste aber nicht, wie ich das umsetzen soll. ;)

BenutzerGa4gooPh

Re: Optische Klingel kompliziert realisiert

Beitrag von BenutzerGa4gooPh » 11.01.2017 20:09:32

FragDenPinguin hat geschrieben:Ohne weitere Vereinfachungen müsste ich dann also jedesmal, wenn aus dem Stream ein neues Sample eintrudelt, eine neue Summe aus dem Produkt zwischen den Werten von gehörtem und Referenzsignal berechnen?
Verschieben musst du auch. :wink:
Das was du brauchst, ist eigentlich der Spezialfall Diskrete Faltung, hier die einfache Summenformel: http://www.fernuni-hagen.de/lges/spielw ... tung.shtml
In einem Script vlt. Referenzsignal spiegeln, in der Formel kannst du ja beliebig Referenzssignal und Empfangssignal einsetzen/tauschen. Diese Gesetze helfen für Scripting: http://www.eit.hs-karlsruhe.de/mesysto/ ... summe.html
Und dumm kann man sein, wenn man sich zu helfen weiß, 2 unterschiedlich lange Papierstreifen mit Beispiel-Zahlenfolgen erleichtern Scripting: http://www.gunnar-eisenberg.de/NUe/reso ... Filter.pdf
Vielleicht findest du im Netz auch was ziemlich Fertiges.

Und nun los, Falter! :THX:

BenutzerGa4gooPh

Re: Optische Klingel kompliziert realisiert

Beitrag von BenutzerGa4gooPh » 12.01.2017 10:32:22

niemand hat geschrieben:Gerade Gongs haben doch eine definierte Tonhöhe. Ich würde eine der Libs für Stimmsoftware hernehmen und das auswerten. Da es zwei verschiedene, fixe Töne sind, sollte sich das ziemlich sicher erkennen lassen.
Um hierauf theoretisch einzugehen: Diese Möglichkeit bestünde auch. Der TO müsste eine Fouriertransformation des empfangenen Klingelsignales tun. Damit wäre ein Amplitudengang (Amplitude pro Frequenz) ersichtlich. Es wird mit Sicherheit einen ganzen Frequenzbereich, mehrere "Hauptfrequenzen" geben. Ding-Dong ist ja kein Sinuston. Dafür kann man vielleicht fertige, grafische Audio-Software nutzen.

Ein auf den "Hauptfrequenzbereich" eingestellter Bandpass-Filter (oder Equalizer) wird nur diesen Bereich durchlassen. Die quick-and-dirty-Methode wäre vielleicht sogar, einfach das Audiprogramm für Kopfhörergenuss mit ständig laufendem 2. Kanal (Mikrofon, Equalizer-gefiltert) per Mixer in die Kopfhörer einzuspeisen.

Den Hauptfrequenzbereich des Klingeltons kann man sicher auch ohne Fouriertransformation experimentell per Equalizer-Regler grob ermitteln. Einige Audioprogramme haben wohl auch die Fouriertransformation mit optischer Anzeige beriets an Bord.

Das einfache Faltungsscript würde mich jedoch mehr reizen, Meldung per Terminal "Polizei, öffnen sie die Tür!" genügt und stört den Kopfhörergenuss nicht. Was ich bei der quick-and-dirty-Lösung fast vermute. Zusätzliche Rauschunterdrückung oder Pegelschwelle für gefiltertes Mikrofonsignals verwenden?!

"Fertigen" Filtern kann man vielleicht auch eine Terminalmeldung entlocken: http://apps.linuxaudio.org/apps/categories/filters

FragDenPinguin
Beiträge: 34
Registriert: 06.01.2017 05:41:47

Re: Optische Klingel kompliziert realisiert

Beitrag von FragDenPinguin » 12.01.2017 13:49:00

Rudimentär läuft die Kreuzkorrelation schon einmal (frisst RAW signed 16 Bit Audio from stdin), werde heute abend noch ein bisschen feintunen. Tolle Anmerkungen hier. :THX:

Jemand hatte noch gesagt, dass mp3 eigentlich schon das Resultat der Fouriertransformation ist. Kann man das vielleicht nutzen, um den mp3-Stream ohne Dekodieren bezüglich der Präsenz des Gongs auszuwerten?

Benutzeravatar
MSfree
Beiträge: 11605
Registriert: 25.09.2007 19:59:30

Re: Optische Klingel kompliziert realisiert

Beitrag von MSfree » 12.01.2017 14:08:45

FragDenPinguin hat geschrieben:Kann man das vielleicht nutzen, um den mp3-Stream ohne Dekodieren bezüglich der Präsenz des Gongs auszuwerten?
Radio Eriwan sagt:
Im Prinzip ja, denn im Prinzip stecken dort die Koeffizienten der Fouriertransformation im Stream. Aber, die Daten sind zusätzlich komprimiert (AFAIK irgendein LZW-Abkömmling) und wie genau so ein MP3-Stream aufgebaut ist, kann ich dir auch nicht sagen.

Ich hatte oben aber auch geschrieben, daß es für deinen Zweck reichen würde, nur einen Kanal und den auch nur mit 8 Bit und 11050 Samples pro Sekunde zu nutzen. Das verringert den Netzwerkverkehr deutlich und verringert den Rechenaufwand bei der Kreuzkorrelation.

Antworten