Liebe Leute, für ein Kunstprojekt, bei dem ESP8266 WS2812B-Ledstreifen ansteuern, soll zusätzlich ein bestimmter Ton (ein Ping, ~8kHz, ~10ms, siehe Anhang) trotz Nebengeräuschen erkannt werden. Das WLAN des ESP8266 ist dabei aktiv. Die WS2812B werden mit der NeoPixelBus-Bibliothek (https://github.com/Makuna/NeoPixelBus) über I2S und DMA angesteuert. Elektret-Module mit MAX4466 und MAX9814 sind vorhanden. Einzelne Elektret-Mikrofonkapseln und NE567D sind im Zulauf. Gibt es noch andere Optionen? Der ADC des ESP8266 scheint ungeeignet zu sein, da er bei aktivem WLAN nur 1kHz Samplingrate hat? Statt analoger Mikrofone könnte ich INMP441-Module verwenden und das Signal digital filtern, z.B mit dem https://de.wikipedia.org/wiki/Goertzel-Algorithmus. Aber kann ich auf dem ESP8266 sowohl I2S-Ausgabe mit DMA als auch I2S-Empfang mit DMA gleichzeitig nutzen? Eure Ideen und Ansichten? LG, Sebastian
Sebastian W. schrieb: > Eure Ideen und Ansichten? I2S ist doch perfekt. Nimm gfs einen anderen uC. Wieso muss gleichzeitig IN/OUT möglich sein?
Ich habe da meine Zweifel. Das Ping ist nicht genug einzigartig, das es nicht auch in beliebigen Sounds erkannt werden würde. Ist ja praktisch nur ein kurzes 'klick', als wenn jemand auf eine Glasflasche mit einem Nagel tippt. Entweder gleich mit einem Kontaktmikro auf der Glasplatte aufnehmen, oder einen mehr einzigartigen Ton verwenden. DTMF ist z.B. so ein Sound.
> Gibt es noch andere Optionen?
Due koenntest eine FFT machen und dann das Bin bei 8khz naeher
betrachten.
Es waere vielleicht auch klug vorher im Analogbereich einen
Bandpass zu haben oder sogar eine ALC damit du mit dem Dynamikbereich
der Umgebung besser klarkommst.
Vanye
Matthias S. schrieb: > auf eine Glasflasche mit einem Nagel tippt. Ich schüttle da nur den Schlüsselbund und habe hunderte solcher Geräusche.
Lothar M. schrieb: > Ich schüttle da nur den Schlüsselbund und habe hunderte solcher > Geräusche. Genau, das meinte ich ja mit nicht einzigartig genug. Kommt viel zu häufig in beliebigen Sounds vor.
Um eine ziemlich sichere akustische Erkennungsrate zu erreichen, erfanden die Telefongesellschaften schon in den 60er Jahren das "DTMF-Verfahren". Das bedeutet, dass immer zwei ganz bestimmte Frequenzen GEMINSAM auftreten müssen ... Hast du Einfluss/Zugriff auf den "Ping"? Nimm zwei Frequenzen, evtl. sogar welche aus dem DTMF-Konzept. Dafür gibts reichlich Lösungen in Hard- und Software ...
Frank E. schrieb: > Hast du Einfluss/Zugriff auf den "Ping"? Hier liegt der (Oster)Hase im Pfeffer. Wie genau sieht dieses "Ping" auf dem Oszi aus? Ist es immer exakt gleich? Also von wem oder was wird dieses Ping erzeugt?
Sebastian W. schrieb: > Eure Ideen und Ansichten? Hab keine Erfahrungen damit, aber das klingt doch stark nach einer Fourier transformation.
Frank E. schrieb: > Um eine ziemlich sichere akustische Erkennungsrate zu erreichen, > erfanden die Telefongesellschaften schon in den 60er Jahren das > "DTMF-Verfahren". Das bedeutet, dass immer zwei ganz bestimmte > Frequenzen GEMINSAM auftreten müssen ... Jepp! Die Rundfunkgesellschaften haben für eine noch zuverlässigere Erkennung den "Hinz Triller" erfunden. Der wurde auch inmitten von Musikstücken oder gesprochenen Worten erkannt, um damit den Verkehsfunkempfänger im Autoradio zu triggern.
Rainer D. schrieb: > Der wurde auch inmitten von > Musikstücken oder gesprochenen Worten erkannt, um damit den > Verkehsfunkempfänger im Autoradio zu triggern. Muss aber relativ lange gesendet werden, damit sauber von anderen Tonsignalen unterschieden werden konnte. Zitat: "...Dabei schaltet ein 1,20 s ±0,1 s langer Hinz-Triller die Durchsagekennung zu, ein 0,55 s ±0,05 s langer Hinz-Triller die Kennung wieder aus..." /Zitat Quelle: https://de.wikipedia.org/wiki/Autofahrer-Rundfunk-Information ciao gustav
:
Bearbeitet durch User
Lothar M. schrieb: > Ich schüttle da nur den Schlüsselbund und habe hunderte solcher > Geräusche. Die lassen sich aber trotzdem zerlegen. Die FFT wird im 3D gebildet, hat also das Abklingverhalten in sich. Das ist sehr genau bestimmbar. Wir unterscheiden Motorcharacteristiken und Anschlagsverhalten damit. Deren Störgeräusche hören sich fürs Ohr alle gleich an.
H. E. schrieb: > Die FFT wird im 3D gebildet, hat also das Abklingverhalten in sich. Mit einem ESP8266? Kann sein, das er nach nur wenigen Minuten ein Ergebnis hat. Vergiss es...
:
Bearbeitet durch User
Liebe Leute, danke für eure Kommentare. H. H. schrieb: > Analog kommt nicht in Frage? Schon der NE567 könnte das wohl. NE567 sind im Zulauf. Allerdings wäre das Abklingverhalten als zusätzlicher Filter schon interessant. H. E. schrieb: > I2S ist doch perfekt. Wieso muss gleichzeitig > IN/OUT möglich sein? I2S OUT wird zur Ansteuerung der Leds verwendet, daher die Frage ob der ESP8266 gleichzeitig auch noch I2S IN betreiben kann. H. E. schrieb: > Nimm gfs einen anderen uC. Falls nötig dann ja. Matthias S. schrieb: > Das Ping ist nicht genug einzigartig Lothar M. schrieb: > Ich schüttle da nur den Schlüsselbund und habe hunderte solcher > Geräusche. Frank E. schrieb: > Hast du Einfluss/Zugriff auf den "Ping"? Stefan M. schrieb: > Wie genau sieht dieses "Ping" auf dem Oszi aus? > Ist es immer exakt gleich? > Also von wem oder was wird dieses Ping erzeugt? Die Art des Geräuschs ist durch das Objekt vorgegeben. Je nach Modell variiert die Frequenz zwischen 7850Hz und 8000Hz, und die Lautstärke variiert auch ein wenig. H. E. schrieb: > Die lassen sich aber trotzdem zerlegen. Die FFT wird im 3D gebildet, hat also das Abklingverhalten in sich. Ich dachte an Goertzel auf Sequenzen von Audioblöcken von etwa 2-3ms (also 16-24 Wellen), um dann das Abklingverhalten auch auszuwerten. Matthias S. schrieb: > Mit einem ESP8266? Kann sein, das er nach nur wenigen Minuten ein > Ergebnis hat. Vergiss es... Ein Atmega328P ist mit einer Fließkommaversion der Goertzel tatsächlich überfordert. Für einen Audioblock von 128 Samples bei 38462Hz (500kHz ADC-Clock, free-running, 13 ADC clock ticks per sample) braucht der Algorithmus 5ms, die Blöcke laufen aber alle 3.3ms ein. Ein ESP8266 sollte das aber schaffen. Vanye R. schrieb: > Es waere vielleicht auch klug vorher im Analogbereich einen > Bandpass zu haben oder sogar eine ALC damit du mit dem Dynamikbereich > der Umgebung besser klarkommst. Ok, mal sehen wie weit ich ohne komme. LG, Sebastian
Geräuscherkennung durch neuronale Chips: zB. https://www.codico.com/de/de/aktuelles/news/dbm10l-neues-soc-fuer-sprach-und-geraeuscherkennung-mit-niedrigstem-stromverbrauch
Mit einem Teensy 4.0 erkennt das angehängte Programm das Geräusch recht sicher. Schlüsselklappern oder allergisches Niesen allerdings ebenfalls, da könnte man noch die Intensität anpassen und/oder die Form der Lautstärkekurve auswerten:
1 | t4-audio-adc-dma.ino,Apr 11 2023 15:11:41 |
2 | |
3 | Originalgeräusch: |
4 | 745 3265.9 5190.4 2359.0 938.9 420.2 221.4 163.9 133.7 71.6 46.2 60.3 46.0 107.0 91.8 43.1 |
5 | |
6 | Ping.wav vorgespielt: |
7 | 4450 1619.8 4278.3 1611.4 331.0 289.7 142.0 130.0 -> ping.wav vorgespielt |
8 | |
9 | Schlüsselklappern: |
10 | 29676 503.4 85.5 578.8 422.5 185.1 173.0 188.8 91.3 58.8 |
11 | 29699 482.6 244.3 |
12 | 29731 586.9 164.4 127.5 72.8 |
13 | 29754 406.5 143.8 340.3 195.5 55.7 105.1 49.2 73.2 221.7 260.5 85.0 54.1 544.1 223.6 |
14 | 29770 491.2 351.2 167.1 115.3 151.4 105.4 102.2 98.4 |
15 | |
16 | Niesen #1: |
17 | 36162 473.2 273.0 73.6 112.3 126.5 57.6 113.2 43.2 127.7 247.2 164.2 139.0 118.6 73.6 59.3 58.8 96.9 47.5 132.8 45.4 41.5 47.7 |
18 | |
19 | Niesen #2: |
20 | 39625 626.9 360.3 188.0 270.5 190.9 377.2 |
21 | 39636 411.1 317.7 691.8 289.0 53.7 257.8 352.2 150.3 315.6 308.4 355.9 49.5 479.4 467.1 415.2 316.4 588.8 467.4 123.0 341.5 236.0 424.4 230.6 298.2 192.0 56.1 90.4 158.4 89.9 168.8 42.0 198.6 264.7 75.4 77.0 288.9 283.6 475.4 337.5 151.6 326.4 56.9 393.3 100.4 155.1 114.2 424.1 722.2 399.2 423.7 537.8 874.7 478.6 508.0 264.8 215.6 147.2 230.4 311.6 197.8 243.1 |
Allerdings würde ich ungern auf den Teensy-Prozessor wechseln (BGA, kein WLAN). Bin also gespannt ob der NE567 ausreicht. LG, Sebastian
Warum schießt man mit Kanonen auf Spatzen? Sowas löst man mit bisserl Hühnerfutter. --- Wie wurde der Hinz-Triller erkannt? Das stelle ich mir nicht ganz so einfach vor.
Sebastian W. schrieb: > Schlüsselklappern: > Niesen #1: > Niesen #2: Stell mal bitte die Audiodateien rein.
Abdul K. schrieb: > Wie wurde der Hinz-Triller erkannt? Das stelle ich mir nicht ganz so > einfach vor. Wer mich kennt...
Vielleicht war das ein riesen Kasten a la 19" mit einer Bank Sample-EPROMs...
Abdul K. schrieb: > H. H. schrieb: >> Wer mich kennt... > > Willst du schon tot sein?? Ich triller noch, der Werner leider nicht mehr.
Rainer D. schrieb: > Jepp! Die Rundfunkgesellschaften haben für eine noch zuverlässigere > Erkennung den "Hinz Triller" erfunden. Der wurde auch inmitten von > Musikstücken oder gesprochenen Worten erkannt, um damit den > Verkehsfunkempfänger im Autoradio zu triggern. Der Hinz-Triller hat aber nur indirekt die Radios getriggert. Eigentlich war er nur dazu da, um vom Studio aus den ARI bzw. später auch RDS im Sender zu aktivieren, und DADURCH wurde dann das Radio getriggert. Daher war der Aufwand zur Erkennung auch ehr Nebensächlich. Vom Prinzip her aber: Audiosignal -> Bandpass (2,2-2,5kHz) -> FM demodulator -> Schwingkreisfilter (123Hz) -> Pegeldetektor. Gruß Jobst
Gibt es eigentlich auch Tonereignisse, die Menschen besonders schlecht hören? Ich erinnere mich an eine Vorführung in der Telekom-Ausbildung, da wurde gezeigt das Menschen reine Sinustöne kaum orten können.
Abdul K. schrieb: > Gibt es eigentlich auch Tonereignisse, die Menschen besonders schlecht > hören? Verbote.
Hier mal ein Vorschlag. Kaum Aufwand notwendig. Sind paar Tricks drin zum Lernen. Mit einem Bandpaß am Eingang wäre das Ergebnis dann noch besser. Downsampling mit 1kHz Abtastrate würde mit normalen Filtern nicht funktionieren, da das Signal zeitlich zu kurz ist.
Jobst M. schrieb: > Der Hinz-Triller hat aber nur indirekt die Radios getriggert. Das stimmt so nicht ganz. Heute ja. OK. Aber früher, zu Zeiten der ersten Einführung wurde tatsächlich direkt durch die Modulation auf UKW/FM ein Relais im Autoradio geschaltet. Bei meinem Clarion war das jedenfalls noch so. Drückte einfach Cassettenwiedergabe zu, schaltete auf UKW um. Bei einigen wurde dann auch auf "extra laut" umgeschaltet. Die ganze Sache hatte auch noch einen anderen Hintergrund: Es wurde dikutiert, ob der Einbau eines Autoradios zur Pflicht werden sollte und das Einschalten auch. Damit auf Verkehrsstaus besser hingewiesen werden konnte. Da hat aber die gesetzlichen Hürden nicht geschafft. Statt dessen kam DLF auf die Idee, erst mit den an Autobahnraststätten errichteten Info-Ständen und dann mit dem D-Dur Akkord, der die Durchsage triggerte. Weil das damit nicht so klappte, kam dann das mit dem Hinz-Triller. Später wurde das zum ARI-System und RDS weiterentwickelt. Der Trick: Der Hinz-Triller ist nicht mehr im Basisband und damit auch nicht zu hören. Wenn man den noch hört, ist das eine Notlösung, weil was in der UKW-Zuführung nicht stimmt, RDS ne Panne hat. Oder der Ballempfänger das nicht kann. ciao gustav
Abdul K. schrieb: > Hier mal ein Vorschlag. Kaum Aufwand notwendig. Sind paar Tricks drin > zum Lernen. Mit einem Bandpaß am Eingang wäre das Ergebnis dann noch > besser. Sieht interessant aus, danke. Muss ich mir genauer anschauen. LG, Sebastian
Abdul K. schrieb: > Wie wurde der Hinz-Triller erkannt? Das stelle ich mir nicht ganz so > einfach vor. Studiere ein Schaltbild eines alten Autoradios. Aber hier gibt es die Unterscheidung zwischen ARI-Decoder und Hinztriller-Erkennung zu beachten. Abdul K. schrieb: > Hier mal ein Vorschlag. Kaum Aufwand notwendig Was hält man von Switched Capacitor Technik? Oder ist das auch schon wieder aus der Mode? ciao gustav
Abdul K. schrieb: > Sind paar Tricks drin zum Lernen. Ja, offenbar welche, die ich noch nicht kannte und auch keine Infos in der Hilfe dazu gefunden habe: wavefile=ping.wav TRIGGER V(start)>0.5 Zu der Triggerfunktion fand ich nichts ... Vielleicht gibst du mir einen Tipp?
Ich kann mich dunkel an eine Schaltung von vor etwa 50 Jahren erinnern, da wurde das Signal durch einen Bandpass geleitet und der Pegel A gemessen (Gleichrichter). Das Signal wurde auch durch eine komplementäre Bandsperre geleitet und dort wurde der Pegel B gemessen. Die beiden Pegel wurden subtrahiert. Wenn die Differenz A-B groß genug war, so war der Ton erkannt. Rein analog, passend zu diesem Unterforum.
Karl B. schrieb: > Abdul K. schrieb: >> Wie wurde der Hinz-Triller erkannt? Das stelle ich mir nicht ganz so >> einfach vor. > > Studiere ein Schaltbild eines alten Autoradios. > Aber hier gibt es die Unterscheidung zwischen ARI-Decoder und > Hinztriller-Erkennung zu beachten. So alte Schaltpläne kenne ich nicht. Ich bin Generation RDS-Dekoder a la TDA7330. > Abdul K. schrieb: >> Hier mal ein Vorschlag. Kaum Aufwand notwendig > > Was hält man von Switched Capacitor Technik? > Oder ist das auch schon wieder aus der Mode? Diskret sind die aus der Mode. Wie soll das aussehen?
:
Bearbeitet durch User
wangnick schrieb: > Mit einem Teensy 4.0 erkennt das angehängte Programm das Geräusch recht > sicher. Schlüsselklappern oder allergisches Niesen allerdings ebenfalls, Genau was die anderen sagen: ein einfacher kurzer 8kHz-Sinus kommt ständig vor - da bekommst du laufend Fehlmeldungen. > Allerdings würde ich ungern auf den Teensy-Prozessor wechseln (BGA, kein > WLAN). Das kann auch ein AVR - schmeiß einfach mal die floats raus. Dein Filter hat nur ein paar mul-adds, zum Teil mit Faktor 0 (coef=2*cos(pi/2)=0), den sqrt am Ende brauchst du nicht. Trivialer Kram ... > Bin also gespannt ob der NE567 ausreicht. Wird auch nichts bringen - dein Signal ist zu simpel! Modulier es!
Sebastian W. schrieb: > H. E. schrieb: >> I2S ist doch perfekt. Wieso muss gleichzeitig >> IN/OUT möglich sein? > > I2S OUT wird zur Ansteuerung der Leds verwendet, daher die Frage ob der > ESP8266 gleichzeitig auch noch I2S IN betreiben kann. Ok, die INMP441-Mikrofone sind angekommen, und ich habe erste Versuche unternommen. Anschluß an den ESP8266 und Goertzel-Erkennung der Ping-Frequenz funktionieren. Allerdings scheint die I2S-Hardware des ESP8266 für I2SO und I2SI nur eine gemeinsame I2S-BCK-Frequenz, nur eine gemeinsame Anzahl Kanäle, und nur eine gemeinsame Bitlänge der Daten, und dabei nur entweder 16 Bit oder 24 Bit zu unterstützen. Wenn ich also I2SO weiter für die WS2812B-Ansteuerung verwenden möchte, dann bin ich auf eine I2S-BCK-Frequenz von 3.2MHz (4 I2S-Bits kodieren jeweils ein WS2812B-Bit bei 800kHz) festgelegt. Das ergibt bei zwei Kanälen a 16 Bit eine I2S-WS-Frequenz von 100kHz (und bei 24 Bit eine I2S-WS-Frequenz von 75kHz). Und das INMP441 unterstützt zwar eine BCK-Frequenz bis 3.2MHz, aber nur eine WS-Frequenz bis maximal 50kHz, und braucht zwingend zwei Kanäle in der Übertragung. Das geht also nach meinen bisherigen Erkenntnissen nicht zusammen. To be continued ... LG, Sebastian PS: Jetzt wird es hier im Analogforum doch ein wenig digital ...
:
Bearbeitet durch User
Wenn du über den Sinn der Aktion mehr schreiben würdest, könnte man auch eine optimale Lösung finden.
Ich schrieb:
> Dein Filter hat nur ein paar mul-adds, zum Teil mit Faktor 0
Alle mit Faktor 0, bleiben also nur adds übrig.
Liebe Leute, hier ein kurzer Fortschrittsbericht, und eine sich daran anschließende Frage. Ich habe die ESP8266-Software so umgestellt, dass die NeoPixelBus-Bibliothek jetzt UART anstatt I2SO zur Ausgabe des WS2812B-Bitstroms nutzt. So kann ich das INMP441-Mikrofon an I2SI anschließen und eine Samplingrate des vierfachen der Suchfrequenz verwenden, so dass der Goertzel-Filter tatsächlich nur Additionen verwendet. Das funktioniert so weit. Allerdings kämpfe ich immer noch mit zwei Problemen, a) dem Verlust der seriellen Ausgabe von Lognachrichten, und b) dass der OTA-Update von Software über das WLAN anscheinend nicht mehr funktioniert. Parallel dazu sind NE567D als LM567CM (https://www.reichelt.de/de/de/ton-dekoder-1-schaltkreis-so-8-ne-567-d-smd-p18804.html) angekommen, und ich versuche die Tonerkennung auch damit zu realisieren. Ich scheitere bisher allerdings daran, ein Ausgangssignal zu erzeugen. Anbei meine jetzige Schaltung und eine Aufzeichnung der (fehlenden) Reaktion auf einen meiner Pings. Was mache ich da falsch? Der Oszillator läuft mit 7890Hz. Das Signal hat 7910Hz und auch über ~50 Zyklen einen Hub >100mV. Ist das Signal trotzdem zu kurz und/oder zu schwach? LG, Sebastian
Sebastian W. schrieb: > Was mache ich da falsch? Der Oszillator läuft mit 7890Hz. Das Signal hat > 7910Hz und auch über ~50 Zyklen einen Hub >100mV. Ist das Signal > trotzdem zu kurz und/oder zu schwach? Keiner? Ich habe den 47nF-Keramikkondensator gegen einen Folientyp getauscht, und parallel zu dem 3k3-Widerstand noch einen 18k-Widerstand verbaut. fO ist jetzt unangeregt recht stabil bei ~8kHz. Wenn ich mit einem Samsung S8 über Phyphox einen 7960Hz-Ton erzeuge und direkt an das Mikrofon halte, bekomme ich einen Spannungshub von 230mV an Pin 3, also ~80mVrms. Die PLL lockt auch wieder zügig auf das Signal. Dennoch fällt der Pegel an Pin 1 nur um ~20mV ab, und Pin 8 schließt nicht zu GND. Wieso nicht? LG, Sebastian
Mach mal einen langsamen Sweep. Vielleicht stimmt Mittenfrequenz oder Bandbreite nicht. Ich kann's nicht nachvollziehen ohne 567.
Abdul K. schrieb: > Mach mal einen langsamen Sweep. Vielleicht stimmt Mittenfrequenz oder > Bandbreite nicht. Gute Idee. Ich werde berichten ... LG, Sebastian
Abdul K. schrieb: > Mach mal einen langsamen Sweep. Vielleicht stimmt Mittenfrequenz oder > Bandbreite nicht. Sweep hat einen ersten Treffer auf Pin 8 gebracht. Die eigentliche Ursache scheint aber der zu geringe Eingangspegel der Kapsel gewesen zu sein. Ich habe jetzt stattdessen ein MAX4466-Elektret-Mikrofonmodul (Schaltplan ähnlich https://github.com/adafruit/Adafruit-MAX4466-Electret-Mic-Amplifier-PCBs/blob/master/Adafruit%20MAX4466%20Mic%20Amp.sch) über 1nf an Pin 3 angeschlossen, und jetzt reagiert Pin 8 auch nach einigen wenigen 1Vpp-Wellen wie erwartet. Abdul K. schrieb: > Abblockkondensator fürs IC fehlt anscheinend auch. Notiert. LG, Sebastian
Da stimmt doch was nicht. Im NXP DB steht ab 20mVrms am Eingang. Dahinter kommt noch ein Scopebild mit 100mVrms. Leider gibt es für den Chip wohl kein Spice-Modell. Ich hätte bei den internen Gilbert-Mixern eher so 1mV erwartet. Erklärbar wäre das nur mit Breitbandstörern, denn das detection limit für ne PLL ist -6dB. Rauschen sieht man aber nicht in deinem Eingangssignal.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.