Bestimmtes Geräusch erkennen

OP #7389113
Lesenswert?

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

Angehängte Dateien:
(Firma: matzetronics) #7389627
Lesenswert?

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.

(Firma: Q3) #7390067
Lesenswert?

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

Angehängte Dateien:
#7390217
Lesenswert?

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.

#7390223
Lesenswert?

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

Gast #7390230
Lesenswert?

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.

OP #7390311
Lesenswert?

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

OP #7390462
Lesenswert?

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

Angehängte Dateien:
#7390669
Lesenswert?

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

#7390870
Lesenswert?

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

#7390889
Lesenswert?

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

#7391154
Lesenswert?

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.

Persönliche Seite #7391178
Lesenswert?

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?

#7391265
Lesenswert?

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!

OP #7391287
Lesenswert?

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

OP #7394093
Lesenswert?

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

Angehängte Dateien:
OP #7395279
Lesenswert?

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

Angehängte Dateien:
OP #7396715
Lesenswert?

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

Persönliche Seite #7396845
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren