Delta Sigma Wandler fuer Audiodaten

Hallo,

ich habe ein Design für einen FPGA (Spartan 3) erstellt, welcher per USB mit einem PC verbunden wird und von ihm einen unkomprimierten Audiodatenstrom (16 Bit Stereo, 44100 Hz) aus einer Wave Datei erhält. Diese wurde zuvor per Winamp mit Diskwriter Plugin aus einer mp3 Datei erstellt. Der Datenstrom wird im FPGA nun auf zwei 16 Bit Delta Sigma DA Wandler geleitet, welche mit einer Frequenz von 44.1 KHz jeweils ein neues 16 Bit Sample erhalten. Die Taktfrequenz der Wandler liegt bei 48 MHz. Die beiden Ausgangspins der Wandler am FPGA gehen auf einen Tiefpass und dann noch durch einen 10µF Kondensator zur DC Entkopplung und dann auf einen Satz Brüllwürfel. Im Prinzip funktioniert das ganze schon richtig gut (hat mich wirklich überrascht). Aber bei leisen Stellen der Musik (also vor allem am Anfang und am Ende) hört man ganz deutlich ein krutscheln (keine Ahnung wie ich das beschreiben soll, so ein digital klingendes rauschen *g*). Solange ein leises Audiosignal vorhanden ist (z.B. das ausklingen des letzten Tons) ist dieses Rauschen schon wesentlich gedämpfter. Scheinbar tritt das Problem vor allem dann auf, wenn die auszugebende Amplitude nur äusserst gering ist. Die Delta Sigma Wandler funktionieren eigentlich einwandfrei (d.h. bei konstant angelegtem Wert ist absolut Ruhe) und auch der Datenstrom zu den Wandlern scheint konstant und ohne Unterbrechungen zu kommen. (Jedenfalls denke ich, dass man sowas durchaus dann auch bei lauten Passagen bemerken müsste) Mich würde jetzt mal interessieren, woher dieses Problem kommt und wie man das behebt. Ich vermute, dass ich da noch irgendeine wichtige Regel der DA Wandlung von Signalen grösser als 100 Hz verletze. :) Insgesamt dient diese Audiogeschichte allerdings nur dazu die USB Implementierung und ein On Chip Network zu testen, d.h. hier steht mehr das Interesse im Vordergrund, nicht eine Marktreife Entwicklung. :)

Vielen Dank, Michael

Reply to
Michael Dreschmann
Loading thread data ...

|> Im Prinzip funktioniert das ganze schon richtig gut (hat mich wirklich |> überrascht). Aber bei leisen Stellen der Musik (also vor allem am |> Anfang und am Ende) hört man ganz deutlich ein krutscheln (keine |> Ahnung wie ich das beschreiben soll, so ein digital klingendes |> rauschen *g*).

Klingt verdächtig nach kaputten oder vertauschten Bits (der Serializer kann ja einen Schlag haben...). Gib mal einen "leisen" Sägezahn aus und schau das Ergebnis auf dem Oszi an. Alternativ wären auch 2er-Potzenzstufen gut geeignet...

--
         Georg Acher, acher@in.tum.de
         http://wwwbode.in.tum.de/~acher
         "Oh no, not again !" The bowl of petunias
Reply to
Georg Acher

48MHz oder KHz ?

Wie sieht es mit den Clocks aus ? Welcher Clock geht ans FPGA ? USB Interface im FPGA ? Welcher Codec ? Wenn das Design nicht sauber synchron aufgebaut ist, bzw. hie und da ein Sample zuviel oder zuwenich im Codec kreist, gibts Gezwirble im shoutsquare.

MIKE

Reply to
M.Randelzhofer

"M.Randelzhofer" schrieb im Newsbeitrag news: snipped-for-privacy@individual.net...

shoutsquare.

So wie ich das verstehe, versuchst du mit selbstgebauten Wandlern auszukommen. Probier mal einen Fertigen wie dem CS4334/5/8/9 oder PCM3008, um festzustellen ob es am Wandler oder der Logik davor liegt.

MIKE

Reply to
M.Randelzhofer

Hallo Mike,

In Ulm hatten die Ingenieure solche Effekte als "G'raffel" bezeichnet. Es war wie eine andere Welt. "My wife" hiess auch nicht "meine Frau" sondern "s'Gspusi" oder so.

Gruesse, Joerg

formatting link

Reply to
Joerg

Hallo,

geeignet...

Ich habe mal alle 16 Bits einzeln eingeschaltet (statisch) und dann die Spannung vor dem DC Entkoppelkondensator gemessen. Die waren alle korrekt, nur konnte mein Multimeter die letzten 3 Bits oder so nicht mehr auflösen :) Aber der Delta Sigma Core stammt von Xilinx und ich gehe schon davon aus, dass der in Ordnung ist. Vor allem da die Bitbreite vor der Synthese per Generic einstellbar ist. Wenn da ein Fehler wäre, würde das sicherlicht auch andere Bits treffen.

Viele Grüsse, Michael

Reply to
Michael Dreschmann

Wie gut ist denn diese mp3-Datei? Ich kenne solche Nebengeräusche, je nach Qualität des Encoders, bei Bitraten bis 128kBit/s. Probiere es doch mal lieber mit einem Sinus bei 1kHz der immer leider wird.

Tschüss Martin L.

Reply to
Martin Laabs

Hallo,

48 MHz ist die Taktversorgung der Wandler, aber nicht die Samplerate. D.h. wenn ich einen Wert von 50% ausgeben will erzeugen die Wandler ein Rechtecksignal von 24 MHz 50:50 Duty Cycle. bei 25% ein Signal von 12MHz bei 25:75. Ich habs mal dabei geschrieben, weil ich nicht weiss, ob das eine Rolle spielen kann. Ich denke aber, dass das schon hoch genug ist.

FPGA wird mit 33 MHz versorgt und generiert intern dann 48 MHz per DCM, d.h. davon ist nichts mit USB synchronisiert. Die Physical Layer für USB 1.1 benutzt dann diese 48 MHz zum abtasten des USB Signals. D.h. USB Interface ist im FPGA. Codec wird keiner Verwendet. Der Inhalt der Wavedatei ist ja schon PCM, d.h. es wird immer abwechselnd linkes und rechts 16 Bit Word an die beiden Wandler geleitet. Das einzige was noch im FPGA umgerechnet wird ist die 2er Komplementdarstellung der Daten in der Wavedatei in eine 16 Bit Absolutwertdarstellung für die Wandler. Kurz, ich addiere jedem Highbyte eines Sampels einfach 0x80.

Das Design funktioniert eigentlich recht gut. Wenn ich z.B. mit einem CAN Controller über USB kommuniziere klappt das. Wobei ich da allerdings niemals soviele Daten hingeschickt habe, wie das beim dan Audiowandlern der Fall war. Würden hin und wieder verlorene einzelne Samples ein solches Fehlerbild ergeben? Also das man das nur während leisen Passagen hört, aber nicht bei lauten?

Hm, ich glaube wäre jetzt zuviel Aufwand. :) Wie gesagt gilt es dieses Problem nicht unbedingt zu lösen. Es würde mich nur interessieren, woran das liegen kann. Ich dachte vielleicht, dass man bei Audiodaten noch etwas mehr Aufwand treiben muss, als simpel zwei Delta Sigma Wandler zu füttern. Weil die Audio DACs machen doch z.B. immer Oversampling und solche Geschichten. Ich bin mir eigentlich recht sicher, das die Zuführung der Daten zum DA Wandler einwandfrei funktioniert, daher bin ich im Moment etwas auf den Wandler selbt fixier. Ich mache am Dienstag mal eine Aufnahme, dann könnt ihr euch das ja auch mal anhören.

Danke, Michael

Reply to
Michael Dreschmann

Hi!

Ööhm - der Algorithmus macht aber schon wirklich Delta-Sigma, nicht bloß PWM, oder? 48MHz / 44kHz = ca. 1000 entsprechend gerade mal 10 Bit.

Delta-Sigma gleicht das glaub ich noch irgendwie aus, sonst müssten Wandler mit 48kHz und 16Bit ja intern mit 3GHz laufen.

Gruß, Michael.

Reply to
Michael Eggert

Hallo,

Ja, schon. So wie ich das sehe, versucht ein Delta Sigma Wandler immer so schnell wie möglich den entsprechenden Duty Cycle einzustellen. D.h. wenn ich 0x8000 anlege kommt zwei Flanken des 48 MHz Signals später ein 50:50 Duty Cycle raus. Bei manchen Werten geht die Auflösung für höhere Signalfrequenzen natürlich runter. Aber das ist wohl in Ordnung. Wenn man nach Delta Sigma googelt liest man auch immer, dass man für echte 16 Bit bei 44100 Hz 2.9 GHz Takt bräuchte, aber das macht offensichtlich kein CD Player :) D.h. es geht auch mit weniger noch gut. Ausserdem dürfte eine geringere Auflösung ja nicht zu solchen Geräuchen führen.

Michael

Reply to
Michael Dreschmann

Hallo,

Alle verwendeten Wavedateien lassen sich fehlerfrei am PC abspielen. Ich vermute mal nicht, dass die Soundkarte die noch irgendwie "restauriert". Aber den Sinus werd ich mal ausprobieren und dann auch mal hier posten.

Michael

Reply to
Michael Dreschmann

Hi!

Ich kenn zwar Deine Geräusche nicht, aber sicher hört man eine geringere Auflösung hauptsächlich bei leisen Signalen.

Gruß, Michael.

Reply to
Michael Eggert

In article , snipped-for-privacy@gmx.de (Michael Dreschmann) writes: |> Hallo, |> |> >Ööhm - der Algorithmus macht aber schon wirklich Delta-Sigma, nicht |> >bloß PWM, oder? 48MHz / 44kHz = ca. 1000 entsprechend gerade mal 10 |> >Bit. |> >Delta-Sigma gleicht das glaub ich noch irgendwie aus, sonst müssten |> >Wandler mit 48kHz und 16Bit ja intern mit 3GHz laufen. |> |> Ja, schon. So wie ich das sehe, versucht ein Delta Sigma Wandler immer |> so schnell wie möglich den entsprechenden Duty Cycle einzustellen. |> D.h. wenn ich 0x8000 anlege kommt zwei Flanken des 48 MHz Signals |> später ein 50:50 Duty Cycle raus. Bei manchen Werten geht die |> Auflösung für höhere Signalfrequenzen natürlich runter. Aber das ist

Nuja, "echte" Delta-Sigma-Wandler machen da aber schon noch etwas mehr, insb. aufwendige Filterung&Co. Das, was Xilinx unter Delta-Sigma versteht, ist wohl eher eine Art dumme Pulse-Distribution-Modulation. Also in etwa das, was der alte SN7497 macht. Ich kann mich dunkel erinnern, mal die Beschreibung des Xilinx-Cores gelesen zu haben. Dabei war mir schon damals nicht ganz klar, wie das Ding gut klingen soll ;-)

--
         Georg Acher, acher@in.tum.de
         http://wwwbode.in.tum.de/~acher
         "Oh no, not again !" The bowl of petunias
Reply to
Georg Acher

Ich würde vermuten, dass da ein paar digitale (Alias-) Filter fehlen oder falsch dimensioniert sind.

Du hörst dann (reingespiegeltes) Quantisierungsrauschen.

Das Prinzip des Delta-Sigma ADC ist ein Hochkonvertieren der Sample-Rate auf eine sehr hohe Abtastfrequenz und ein Reduzieren der Auflösung dieses Datenstroms auf eine zumeist 1 Bit Folge mit Hilfe eines digital nachgebildeten Delta Sigma Modulators. Letzterer ist im einfachsten Fall ein digitaler Integrator (Akku mit gepipelinter z^-1 Rückführung) mit nachgeschaltetem Quantisierer (Vorzeichenerkennung plus D-FF) und vorgeschaltetem Addierer zwecks Einarbeitung einer dem erzeugten Bit entsprechenden +/- Konstante.

Eben "einfach" (*) eine Simulation der analogen Schaltung.

Das Hochkonvertieren geschieht üblicherweise durch Einsetzen der Samples in einen digitalen Filter im richtigen Abstand in einen Datenstrom von Nullwerten, also z.B. so: Sample1 - 0 - 0 - 0 - Sample 2 - 0 - 0 - 0 - Sample 3 - ...

Allerdings sollte es _mehrstufig_ geschehen, weil ein Filter alleine kaum den Sprung der Sample-Rate schafft und ansonsten offensichtlich weitere Frequenzen entstehen, hier z.B. ein ganzer fieser _Kamm_ durch den Sample n zu 0 Sprung. Für das genaue "wie" der mehrstufigen Schaltung gibt es viele Möglichkeiten, alle mit Vor- und Nachteilen.

Ebenso kann man auch Delta Sigma Modulatoren mehrstufig aufbauen und auch analog mehrere Wandler zusammenschalten. Daneben kann es Sinn machen, an bestimmten Stellen künstlich Rauschen einzuführen (Dithering), um genau solches "Kruscheln" an leisen Stellen zu verschmieren.

Die Konstruktion von Delta-Sigma-Wandlern ist eine _Kunst_, und das hast Du nun gemerkt ...

An dem Wegbringen auch des letzten "Kruschelns" haben bei Philips, Crystal/Cypress & Co. die Ingenieure recht lange gearbeitet.

Einen einfachen Tipp wird Dir hier keiner geben können, wie gesagt, da dürften einfach bestimmte Blöcke fehlen.

Weiterführende Literatur:

U. Zölzer, Digitale Audiosignalverarbeitung, Teubner ISBN 3-519-16180-X

Gruß Oliver

P.s.: (*) oder auch nicht so einfach: Da sieht man mal wieder, wieviel Detailarbeit in diesen kleinen schwarzen Kästchen steckt und dass es nur mit dem Schreiben eines "Pflichtenheftes", so wie es sogenannte "Ingenieure" hierzulande gerne machen, alleine eben nicht getan ist.

--
Oliver Bartels + Erding, Germany + obartels@bartels.de
http://www.bartels.de + Phone: +49-8122-9729-0 Fax: -10
Reply to
Oliver Bartels

"Michael Dreschmann" schrieb im Newsbeitrag news: snipped-for-privacy@news.rhein-zeitung.de...

Kein Wunder das es kruschelt. Ohne noise shaping wirst du das auch nicht los. Du brauchst sonst 2.98 GHz Takt.

formatting link

--
Manfred Winterhoff, reply-to invalid, use mawin at despammed.com
homepage: http://www.geocities.com/mwinterhoff/
de.sci.electronics FAQ: http://dse-faq.elektronik-kompendium.de/
Read 'Art of Electronics' Horowitz/Hill before you ask.
Lese 'Hohe Schule der Elektronik 1+2' bevor du fragst.
Reply to
MaWin

Hallo,

Danke für dieses ausführliche Posting. Sowas hatte ich bereits vermutet. Dann ist jetzt jedenfalls klar, welche Probleme dahinter stecken, und ich weiß Bescheid, sollte ich wirklich mal einen Audio Wandler entwerfen wollen :) Danke auch an Mavin für den interessanten Link.

Michael

Reply to
Michael Dreschmann

Hallo Manfred,

Guter Artikel. Hier ist einer, der Noise Shaping erklaert:

formatting link

Die konnten es nicht lassen, Sigma-Delta griechisch zu schreiben. Ich weiss nicht, wie Noise Shaping in Deutsch heisst. Aber seit dieser Diskussion haben wir ja nun auch den Kruschelfaktor.

Gruesse, Joerg

formatting link

Reply to
Joerg

"Joerg" schrieb im Newsbeitrag news:i4UCe.4554$_% snipped-for-privacy@newssvr14.news.prodigy.com...

Rauschformung.

;-)

MfG Falk

Reply to
Falk Brunner

Hallo Falk,

Danke. Das Wort erinnert mich an manche feucht-froehliche Studentenfete.

Regards, Joerg

formatting link

Reply to
Joerg

"Falk Brunner" schrieb im Newsbeitrag news: snipped-for-privacy@individual.net...

Toll. Hat also sogar irgendein teutscher Professor ein Wort dafuer erfunden. Warum hat er nicht einfach noise shaping verwendet ? Das Wort gab es schon, und es haette den Vorteil gehabt, das man es ueberall auf der Welt versteht. Rauschformung kennt man noch nicht mal in Deutschland.

--
Manfred Winterhoff, reply-to invalid, use mawin at despammed.com
homepage: http://www.geocities.com/mwinterhoff/
de.sci.electronics FAQ: http://dse-faq.elektronik-kompendium.de/
Read 'Art of Electronics' Horowitz/Hill before you ask.
Lese 'Hohe Schule der Elektronik 1+2' bevor du fragst.
Reply to
MaWin

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.