Optische Klingel kompliziert realisiert
-
- Beiträge: 34
- Registriert: 06.01.2017 05:41:47
Optische Klingel kompliziert realisiert
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?
Ü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?
Re: Optische Klingel kompliziert realisiert
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.
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.
-
- Beiträge: 34
- Registriert: 06.01.2017 05:41:47
Re: Optische Klingel kompliziert realisiert
Das klingt auf jeden Fall sehr interessant.
Kann die Kreuzkorrelation denn damit umgehen, dass manche Typen "Ding-Dong" klingeln und manche "Ding ............................. Dong"?
Kann die Kreuzkorrelation denn damit umgehen, dass manche Typen "Ding-Dong" klingeln und manche "Ding ............................. Dong"?
Re: Optische Klingel kompliziert realisiert
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, octave 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.
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, octave 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.
Re: Optische Klingel kompliziert realisiert
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.
Re: Optische Klingel kompliziert realisiert
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 ... .
Gibt natürlich auch Funk-Klingeln. Kann man bestimmt mehrere Empfänger nutzen, an einen "Glühobst" ranbasteln. Wäre aber zu einfach ... .
Zuletzt geändert von BenutzerGa4gooPh am 11.01.2017 09:40:42, insgesamt 1-mal geändert.
Re: Optische Klingel kompliziert realisiert
Es würde reichen, nur das "Dong" zu korrelieren.Jana66 hat geschrieben:Ding-Dong und Ding-------------Dong sind zwar unterschiedliche Signale
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ß.mp3-Dateien sind komprimiert. Deshalb bitte nicht für statistische Auswertungen (Korrelation, Faltung) nutzen.
Re: Optische Klingel kompliziert realisiert
Habe ich geschrieben, das einzeln reicht.MSfree hat geschrieben:Es würde reichen, nur das "Dong" zu korrelieren.
Du hast aber Recht, das technisch bedingte, immer gleiche Dongggg wäre am Besten. Ansonsten Ding und Diiiiiing.
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.
Re: Optische Klingel kompliziert realisiert
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.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.
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.
-
- Beiträge: 34
- Registriert: 06.01.2017 05:41:47
Re: Optische Klingel kompliziert realisiert
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?
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?
Re: Optische Klingel kompliziert realisiert
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.FragDenPinguin hat geschrieben:Dass mp3 genutzt wird hat den Hintergrund, dass die Netzwerkanbindung zum Mikrofon eine ziemliche "Bambusleitung" ist.
Re: Optische Klingel kompliziert realisiert
Faltung und Kreuzkorrelation sind sehr ähnlich. Insgesamt bezeichnet man die gesamte Operation/Funktion damit, nicht nur einen Schritt.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?
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.
Re: Optische Klingel kompliziert realisiert
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.
Wenn ich sowas bauen wollte, würde ich das elektrische Signal abgreifen, btw. - weniger Aufwand und noch eindeutiger.
Re: Optische Klingel kompliziert realisiert
Ich hatte gestern mal an Spracherkennungssoftware gedacht. Die ist doch anlernbar? Auch mit Klingelton?
Wie weiterverarbeiten ist mir dann jedoch nicht mehr eingefallen ...
Wie weiterverarbeiten ist mir dann jedoch nicht mehr eingefallen ...
-
- Beiträge: 34
- Registriert: 06.01.2017 05:41:47
Re: Optische Klingel kompliziert realisiert
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.Jana66 hat geschrieben:Faltung und Kreuzkorrelation sind sehr ähnlich. Insgesamt bezeichnet man die gesamte Operation/Funktion damit, nicht nur einen Schritt.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?
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
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.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.
Zuletzt geändert von FragDenPinguin am 11.01.2017 15:45:12, insgesamt 2-mal geändert.
-
- Beiträge: 34
- Registriert: 06.01.2017 05:41:47
Re: Optische Klingel kompliziert realisiert
Habe ich auch dran gedacht, wusste aber nicht, wie ich das umsetzen soll.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.
Re: Optische Klingel kompliziert realisiert
Verschieben musst du auch.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?
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!
Re: Optische Klingel kompliziert realisiert
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.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.
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
-
- Beiträge: 34
- Registriert: 06.01.2017 05:41:47
Re: Optische Klingel kompliziert realisiert
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.
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?
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?
Re: Optische Klingel kompliziert realisiert
Radio Eriwan sagt:FragDenPinguin hat geschrieben:Kann man das vielleicht nutzen, um den mp3-Stream ohne Dekodieren bezüglich der Präsenz des Gongs auszuwerten?
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.