Hallo, ich habe auf einem Nexys4 FPGA-Board ein Microphon das die Daten als PDM ausgibt. Im Datenblatt steht: PDM data connections are becoming more and more popular in portable audio applications, such as cellphones and tablets. With PDM, two channels can be transmitted with only two wires. The frequency of a PDM signal usually falls in the range of 1MHz to 3MHz. In a PDM bit stream, a 1 corresponds a positive pulse and a 0 corresponds a negative pulse. A run consisting of all ‘1’s would corresponds to the maximum positive value and a run of ‘0’s would corresponds to the minimum amplitude value. Also in kurz: Lauter '1' entsprechen der maximalen Amplitude, lauter '0' der minimalen Amplitude. Hier http://www.cs.tut.fi/sgn/arg/rosti/1-bit/ sieht es aber in den ersten beiden Graphen anders aus, da sind lauter '1' die maximale Steigung und lauter '0' die minimale Steigung (größtes Gefälle). Was stimmt denn nun? Ich will das also dekodieren so dass ich am Ende alle paar Takte einen Wert für die Amplitude rausfällt. Jetzt bilde ich einen gleitenden Mittwlwert über 256 Samples, summiere also alle '1' auf und das gebe ich dann aus aber es klingt ... bescheiden. Gibt es da andere einfache Lösungen ohne digitale Filter zu verwenden? Danke!
Hab es gelöst, in der Tat funktioniert es mit dem gleitenden Mittelwert, ich hatte es nur falsch umgesetzt, zuerst hatte ich: Der Mittelwert wird über 255 Samples gebildet und dann beim 255ten Sample übergeben an eine andere Komponente die den Wert dann als PWM ausgibt (Audio). Das rauschte irre. Jetzt gebe ich den Mittelwert viel öfter an die PWM Komponente. Dazu ist diese natürlich auch sehr viel höher getaktet, genauer mit 200 MHz und die PDM Komponente mit 200/64 = 3,125 MHz. Jetzt klingt es einigermaßen brauchbar, klar noch nicht ganz so gut wie wenn ich das PDM-Signal direkt an den Audioausgang verbinden würde, aber ich finde eine sehr einfache und brauchbare PDM nach PWM Wandlung. Die Beschreibung aus dem Datenblatt war auch korrekt, es ist also die Amplitude und nicht die Steigung.
In diesem thread gings' auch um PDM, dort habe ich mal mit besseren Filtern als Mittelwertfiltern probiert Beitrag "FIR Filter Optimierung eines PDM Signals auf STM32F407 simuliert mit Matlab" Cheers Detlef
Ui, ja klingt interessant aber ... ich kenne mich nicht mit Signalverarbeitung aus. Irgendwann mit viel Zeit lerne ich das mal.
>>>Gibt es da andere einfache Lösungen ohne digitale Filter zu verwenden?
Ohne Zeit um Lernen von Signalverarbeitung kann man auch einfach nen
Tiefpass ranhängen (R und C), das klappt bei PDM auch, krächzt halt
bißchen oder ist dumpf.
Cheers
Detlef
:
Bearbeitet durch User
Ja könnte man aber ich wollte ja Amplitundenwerte die ich dann weiterverarbeiten kann. Hat auch ganz brauchbar geklappt.
-gb- schrieb: > Ja könnte man aber ich wollte ja Amplitundenwerte die ich dann > weiterverarbeiten kann. Hat auch ganz brauchbar geklappt. Ein Blick in das Mikrophon-Datenblatt ADPM421 offenbart, dass das ADC-Signal im Mikrophon eine aufwendige Filterung durchlaufen hat (Fourth-order Σ-Δ modulator, Angaben zur Samplefrequenz und zur Filterlänge fehlen leider). Offensichtlich ist dieses Mikrophon zur direkten Ausgabe des PWM-Signals via LP (wie beim Nexys4) oder zum Anschluss an einen geeigneten SigmaDSP-Codec gedacht (s.a. http://www.analog.com/media/en/technical-documentation/application-notes/AN-1323.pdf). So wie ich das verstehe, verlierst Du beim "Auslesen" der Amplitudenwerte in Speicherworte die durch den Σ-Δ Modulator gewonnene effektive Auflösung. Also statt >= 16bit effektiv im PDM-Signal kommst Du vielleicht auf 7- oder maxiaml 8-bit (auch in AoE 13.9.4 nachzulesen). Gruß, Burkhard
Ja, richtig aber gibt es eine einfache Methode sonst aus dem PDM-Signal schön weiterverarbeitbare Werte zu bekommen? Wenn ich das PDM dirket auf den Audioausgang gebe klingt es super aber ich wollte es eben als Übung mal nach PWM wandeln.
Moin, So wie ich das seh', kommt also aus dem Mikro ein Signal mit 1bit Breite und 2.4MHz Takt. Das ganze muss durch einen digitalen Tiefpass, der eine Grenzfrequenz so um die 15KHz hat. Wenn dem so ist, mit was fuer einer Samplefrequenz sollen denn die "breiten" Samples aus dem Tiefpass rauskommen und wieviele Bit sollen die breit sein? Gibts in der Entwicklungsumgebung nicht irgend einen Core-Generator, mit dem man solche Filter designen kann, ohne sich drum zu kuemmern, wie die genau funktionieren? Gruss WK
Den Coregenerator gibt es, wollte ich aber vermeiden weil ich sehr ungerne Black-Boxes in meinem Design habe. Ausserdem haben diese generierten Dinger so komische Interfaces die ich dann erst irgendwie bespaßen müsste ...
Gustl B. schrieb: > Den Coregenerator gibt es, wollte ich aber vermeiden weil ich sehr > ungerne Black-Boxes in meinem Design habe. Ausserdem haben diese > generierten Dinger so komische Interfaces die ich dann erst irgendwie > bespaßen müsste ... Ich denke es hängt vom weiteren Verarbeitunsweg ab, ob ein einfaches Moving-Average Filter reicht oder ob Du einen entsprechenden Butterworth-LowPass brauchst. Wenn Du ein FIR-Filter selbst, also ohne CoreGenerator, bauen willst, lohnt evtl. ein Blick nach opencores.org. BTW: Das Mikrophon kann Datenraten von 1 bis 3.3 MHz; im Digilent Beispiel-Design zum Nexys4-Board läuft es mit 2 MHz. Die Samplefrequenz für das Filter sollte der des Mikros entsprechen, die Bittiefe den Anforderungen Deines Designs. Leicht OT, ich besitze das Nexys4 seit ein paar Tagen ebenfalls und habe das umgekehrte Problem zu lösen, nämlich Daten, die mit 12bit Tiefe aus einem ADC kommen über das eingebaute Analog-Filter auszugeben (wenn ich keinen externen Audio-Codec verwenden will). Gruß, Burkhard
Du willst die Daten über die Mono-Klinkenbuchse ausgeben? Das geht doch sehr gut mit PWM? Hab leider gerade keine Zeit für irgendwas mit Signalverarbeitung. Ich wollte nur mal das Mikrophon in Betrieb nehmen und das passt ja so einigermaßen ...
Er will ja den Eingang des Mikros verarbeiten und nicht was ausgeben, oder? Eigentlich sind diese MEMS-Mikros nichts anderes, als Mikros+Delta-Sigma und müssten sich auch entsprechend filtern lassen. Man muss entspreched viele Samples aufintegrieren und dividieren.
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.