Zwei 3MHz PDM MEMS-Mikrofonsignal in 96kHz Audiosignal wandeln

OP #8091461
Lesenswert?
• ▲
▼

Hallo in die Runde. Dies hier ist mein erster Beitrag, aber ich habe hier schon viel mitgelesen und denke, dass ich hier die richtige Community anspreche. Falls mein Beitrag besser in den Mikrocontroller-Bereich passt, verschiebt ihn gern dahin.

Ich suche eine Art externe Soundkarte, die mir ein PDM-Signal in USB Audio oder, noch besser (v.A. um keine Bit-Tiefe zu verlieren) in zwei analoge Audiosignale umwandelt. Aktuell verwende ich dafür ein nRF5340 Audio DK mit einer minimalen Beispielfirmware, was ich gern ablösen würde, da es mir inzwischen zu viele Workarounds enthält. https://www.nordicsemi.com/Products/Development-hardware/nRF5340-Audio-DK

Spezialanforderung dabei ist die Frequenz des Audiosignals, das ich gern mit 192kSamp/s abtasten würde, um am Ende bei (knapp unter) 96kHz Nah-Ultraschall zu landen. Der Codec auf dem nRF Board unterstützt dies zwar noch, der nRF selbst kann das entstehende Signal dann aber selbst nicht mehr abtasten, weshalb ich aktuell den analogen Kopfhörerausgang des nRF-Boards nutze (der direkt vom Codec kommt) um das Signal zu extrahieren.

Anhand des vorigen Absatzes sieht man schon, mit wie vielen Krücken das ganze aktuell läuft. Der nRF wird dabei lediglich zur Konfiguration des Codecs verwendet und eigentlich ja gar nicht mehr gebraucht, bringt aber potentiell wieder Störsignale in das Gesamtsystem ein.

Daher kommt also meine Bestrebung einen Ersatz dafür zu finden.

Jetzt aber zunächst meine Anforderungen:

  • Eingang:
    • PDM Signal von Infineon MEMS-Mikrofon, z.B. IM69D128S: https://www.infineon.com/part/IM69D128S
    • 3,072 MHz PDM Takt, oder auch 6 MHz falls sinnvoll, dann aber mit einem anderen Mikrofon
    • Unterstützt zwei parallel angeschlossene Mikrofone (eins bei fallender, eins bei steigender Taktflanke, wie bei PDM üblich)
  • gewünschtes Audio-Ausgangssignal:
    • am liebsten beide Kanäle (aber nicht zwangsläufig), also zwei parallele Ausgänge, minimal einen Ausgang mit wählbarer Flanke (erster oder zweiter Kanal dann "händisch" auswählbar)
    • 96 kHz als höchste Frequenz (oder knapp darunter, damit ich bis ~90kHz sinnvoll sehen kann) --> Also Abtastung mit 192 kSamp/s Die Problematik bzgl. Integration des Mikrofons und entsprechender Signalanteile, die bei Ultraschall durch nahegelegene Bauteile entstehen etc. ist mir bekannt, damit muss ich wohl leben...

Bisher erwogene Alternativen (und deren Schwächen):

Was meint ihr dazu? Seht ihr noch zusätzliche Alternativen oder ist es einfach nicht / oder nicht sinnvoll möglich, weil meine Anforderungen falsch gestellt sind? Ich bin mir schon der Tatsache bewusst, dass weder das Mikrofon, noch das Hardwaredesign am Ende "optimal" für den Zielfrequenzbereich geeignet sind, aber irgendeine sinnvollere Lösung als meinen jetzigen Aufbau mit nRF5340 DK muss es doch geben, oder? Vielen Dank für eure Unterstützung und für die Geduld bis hier hin weiterzulesen.

#8091512
Lesenswert?
• ▲
▼

Der ESP32 bzw. ESP32-S3 kann laut Doku PDM-Signale direkt aufnehmen und in PCM umwandeln. Samplingraten bis zu 6.144MHz werden unterstützt:

https://docs.espressif.com/projects/esp-idf/en/stable/esp32s3/api-reference/peripherals/i2s.html

Sollte das Ganze analog augegeben werden, ist natürlich noch ein I2S DAC zu ergänzen. Natürlich ohne Garantie, ausprobiert habe ich das nicht.

OP #8092975
Lesenswert?
• ▲
▼

Vielen Dank für eure Rückmeldungen.

  • ADAU7002: anscheinend hat der einen fixen PDM clock, der sich direkt aus der sample-rate berechnet. Ist das üblich für PDM? Das York Audio USB-Modul kannte ich bisher noch nicht. Sieht gut aus.

  • ESP32 mit I2S DAC wäre auch eine Idee. Einen ESP32 hab ich auch schon hier.

Wahrscheinlich läuft es also darauf hinaus, dass ich mir selber etwas zusammenstecken muss. Falls jemandem noch weitere Off-The-Shelf-Komponenten einfallen, fruee ich mich gern über weitere Ideen.

#8093198
Lesenswert?
• ▲
▼

Ein D-Flipflop mit nachgeschaltetem R-C Glied ist wohl die einfachste Möglichkeit eines PDM zu Analog Wandlers. Im Anhang eine mögliche Schaltung. Für 2 Kanäle benötigst du nur das R-C Glied, den Koppelkondensator und die Ausgangsbuchse doppelt (LR auf Ground für beide Kanäle).

Andi

Angehängte Dateien:
#8101249
Lesenswert?
• ▲
▼

Hi, ich habe mal die MEMS mics an eine I2S Schnittstelle und den PDM Strom mit einem IIR Filter bearbeitet. Danach hab ich dezimiert. Das hat verglichen mit FIR filtern sehr gut funktioniert. FIR klingt dumpf wenn die Grenzfrequenz zu niedrig ist oder rauschig wenn sie zu hoch ist. Besonders viel Spaß gemacht hat die Implementierung des IIR. Das bekommt einen digitalen input 0/1 und man benötigt nur jeden 16. Ausgangswert. Dieser Wert läßt sich direkt aus dem Zustand des IIR und dem reingekommenen 16Bit Wort über eine Tabelle berechnen. Das geht auch schnell für IIRs höherer Ordnung.

Um einen PDM Datenstrom gut zu filtern und zu dezimieren benötigt man keine dezidierte Hardware, das schafft der uC nebenbei im Interrupt. Ich erinnere mich nicht mehr an die Bitbreiten und SNRs.

Bei Interesse grab ich das Zeug nochmal aus.

Cheers Detlef

#8101299
Lesenswert?
• ▲
▼

Ja, so gehts' auch, aber langsam. Er rechnet auf den PDM Daten ein 512er FIR mit Tabelle und 16Bit Eingangsdaten. Das sind 512/16 Multiplikationen pro 16Bit PDM Wort, wenn ich das richtig verstanden habe. Er sagt ja selbst, dass es viel Rechenleistung frisst. Für ein IIR 4.Ordnung benötigt man eine Handvoll Multiplikationen pro 16Bit PDM Wort. Ein IIR 4.Ordnung ist ausreichend für sehr gute Qualität des Ausgangssignals, viel besser als ein 512erFIR, das entweder dumpf ist oder rauscht. Die 4. Ordnung hatte ich in diesem Forum mal anhand von realen PDM Daten ausgemetert.

math rulez Cheers Detlef

Persönliche Seite #8101980
Lesenswert?
• ▲
▼

Christoph M. schrieb:

Andi Y. schrieb:

Noch einfacher, und würde wahrscheinlich auch funktionieren:

Funktionieren wahrscheinlich schon, nur wahrscheinlich in extrem schlechter Qualität.

So ist es. Die PDM Daten sind ja überwiegend Rauschen. Nicht nur wegen der Rechtecke.

Damit das tauglich wird muss der Tiefpass extrem steilflankig sein und damit digital.

Man kann das auch analog machen mit einem LR-Filter z.B., aber eben nicht nur mit 6db/oct. Digital ist auch nicht unbedingt einfacher. Die oft eingesetzen CIC liefern kein gutes Ergebnis.

Mich würde aber das Hörergebnis interessieren, falls es jemand ausprobiert.

Ich habe eine 4.8MHz basiserte 6-Kanal-Spracherkennung gebaut. Das holt das maximale aus den 60dB THDN Mikros heraus. Die kleinen MEMS-Dinger bleiben aber leistungsbeschränkt.

Eine gute Kapsel für Mikros, wie wir sie in der Mikrofontechnik verwenden, ist damit nicht zu erreichen.

Detlef _. schrieb:

ein IIR 4.Ordnung benötigt man eine Handvoll Multiplikationen pro 16Bit PDM Wort.

Kriegt aber satte Phasendrehungen rein, die mitunter problematisch werden können. Je nach Anwendung. "Nur Horchen" ist damit aber o.k.

Persönliche Seite #8101984
Lesenswert?
• ▲
▼

Detlef _. schrieb:

Um einen PDM Datenstrom gut zu filtern und zu dezimieren benötigt man keine dezidierte Hardware, das schafft der uC nebenbei im Interrupt.

nun ja ... kommt eben auf die Ansprüche an: Eine klassische Hogenauer-Dezimation geht nur runter bis kurz über die Audiogrenzfrequenz, also bei den 3MHz z.B. 128:1. 256 böte sich eher an, wäre aber schon zu tief. Damit liegt man in etwa bei 28kHz, hat aber bis 500kHz noch massive Störspektren. Das mit 192 oder gar 96 anzunehmen, würde also Aias einschleppen. Da muss also zwingend ein FIR rein, denn man aber auch mit ausreichender Frequenz abtasten muss. Und er muss ziemlich lang oder mehrstufig werden. Wenn man das gut und für mehrere Kanäle machen will, ist da ein FPGA unschlagbar, oft genug unverzichtbar - besonders, weil hinterher auch noch ein Frequenzgangkorrektur reinmuss: Je nachdem wie die Mikros verbaut sind und wie sie verschaltet werden, ist der ja alles andere als linear. Ich fahre z.B. 4.8MHz MEMS mit 48MHz-Interpolation auf 1024 samples. Greift also bis 48kHz. Dann wird auf 4,8MH gesampelt und wieder herunterdezimiert, bis 4,8kHz mit Bandbegrenzung auf 24kHz. Dann ein drittes mal auf 4.8Hz wieder mit Bandbegrenzung 24kHz. Faktisch hat man damit bei 24kHz dann -6dB und bei 20kHz die -3dB. Man kriegt sogar schon einen leichten Hochpass ins Signal um 20Hz abwärst zu reduzieren.

#8102670
Lesenswert?
• ▲
▼

2016 hatte ich mal MEMS mit IIR gefiltert. Beitrag "FIR Filter Optimierung eines PDM Signals auf STM32F407 simuliert mit Matlab" Das hat super funktioniert. Was ich damals noch nicht konnte: Nach dem Filtern werden die Werte ja um z.B. Faktor 16 dezimiert, nur jeder 16-te Ausgangswert des IIR ist von Interesse. Die MEMS liefern nur 0/1, damit kann über Tabellen berechnet werden wie bei gegebenem Zustand des IIR und bekanntem 16Bit Wort vom MEMS der Zustand des IIR nach den 16 Bits input aussieht. In den Tabellen stehen Polynomkoeffizienten. Das geht super schnell.

Cheers Detlef

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