Delta Sigma Wandler fuer Audiodaten

M

Michael Dreschmann

Guest
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
 
In article <42da9b13.11408154@news.rhein-zeitung.de>,
michaeldre@gmx.de (Michael Dreschmann) writes:

|> 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
 
Hallo Michael,

Vielleicht ist das "Krutscheln" schon in der Wave Datei drin. Einfach
mal direkt ueber die eingebaute Soundkarte anhoeren.

Elkos und auch manche Keramikversionen sind nicht so das Gelbe vom Ei
fuer Audioanwendungen der gehobenen Klasse. Gute Folienkondensatoren
sind besser.

Andere Vermutung: Koennten es geleitete Stoerungen sein, die ueber das
USB Kabel kommen? Einfach einmal einen NF Trennuebertrager dran haengen.
Ich weiss z.B., dass es in unserer Kirche bisher nicht gelungen ist, die
Predigt stoerungsfrei auf einem Laptop aufzuzeichnen, wenn er auch nur
irgendwo anders angeschlossen war. Also muessen wir das im Akkubetrieb
machen. Waere auch einen Versuch wert, wenn die FPGA Chose ueber USB mit
Saft versorgt wird.

Gruesse, Joerg

http://www.analogconsultants.com
 
Audiodatenstrom (16 Bit Stereo, 44100 Hz) aus einer Wave Datei erhält.

Bit Sample erhalten. Die Taktfrequenz der Wandler liegt bei 48 MHz.
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
 
"M.Randelzhofer" <techseller@gmx.de> schrieb im Newsbeitrag
news:3jvo9dFrqpfvU1@individual.net...
Audiodatenstrom (16 Bit Stereo, 44100 Hz) aus einer Wave Datei erhält.

Bit Sample erhalten. Die Taktfrequenz der Wandler liegt bei 48 MHz.

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
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
 
Hallo Mike,

..., gibts Gezwirble im shoutsquare.
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

http://www.analogconsultants.com
 
"Joerg" <notthisjoergsch@removethispacbell.net> schrieb im Newsbeitrag
news:VbzCe.225$Fk4.84@newssvr21.news.prodigy.com...
Hallo Mike,

..., gibts Gezwirble im shoutsquare.

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

http://www.analogconsultants.com
Hallo Joerg,

Ein bisschen Mundartunterricht für Amerikaner:
a G'raffel (ist schwäbisch; auf bayerisch Graffee) ist ein Haufen Scheisse,
und a G'schpusi ist eher ein frischer Aufriss, seltenst die Ehefrau. Aber
genau möcht ich mich da nicht festlegen. Den Ausdruck hab ich im
Kollegenkreis jedenfalls noch nicht gehört, eher im Kommoedienstadl.

Die Bitte des Ehemanns an die Ehefrau, ihm noch einen Liter
Gerstenkaltschale aus dem Vorratskeller heranzureichen, ist in Bayern schön
knapp zu formulieren: "Geh Oide, hoi ma no a Mass".

Der schwäbische Dialekt ist da wahrscheinlich etwas charmanter.

MIKE
 
Hallo,

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

Vielleicht ist das "Krutscheln" schon in der Wave Datei drin. Einfach
mal direkt ueber die eingebaute Soundkarte anhoeren.
Natürlich schon getan, aber die ist in Ordnung.

Elkos und auch manche Keramikversionen sind nicht so das Gelbe vom Ei
fuer Audioanwendungen der gehobenen Klasse. Gute Folienkondensatoren
sind besser.
Das hat nichts mit gehobener Klasse zu tun, dieses Geräusch ist stark
zu hören, wenn das mein CD Player von sich geben würde, bekäm der
Händler den direkt wieder zurück.. :)
Ich würde auch einfach vom Hörgefühl her sagen, dass es "digitaler
Natur ist". Ich kann am Dienstag ja mal eine Aufnahme machen.. :)

Andere Vermutung: Koennten es geleitete Stoerungen sein, die ueber das
USB Kabel kommen? Einfach einmal einen NF Trennuebertrager dran haengen.
Manche Musikstücke fagen wohl mit ca. einer Sekunde genauen Nullwerten
an (also eine 0 auf 16 Bit genau, d.h. die Wandler bekommen sozusagen
einen statischen 0 Wert), da ist dann auch Ruhe. Aber wenn das Stück
dann so langsam anfängt, eben mit sehr leisen Klängen, dann kommt
dieses Krutscheln stark durch.
Ausserdem wird das FPGA Board eigenständig versorgt. Ich nehme daher
nicht an, dass es ein Versorgungsproblem ist.

Danke,
Michael
 
Michael Dreschmann <michaeldre@gmx.de> wrote:
Hallo,

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

48MHz oder KHz ?
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.

Welcher Clock geht ans FPGA ? USB Interface im FPGA ? Welcher Codec ?
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.

Wenn das Design nicht sauber synchron aufgebaut ist, bzw. hie und da ein
Sample zuviel oder zuwenich im Codec kreist, gibts Gezwirble im
shoutsquare.
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?

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.
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
 
michaeldre@gmx.de (Michael Dreschmann) wrote:

Hi!

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.
Öö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.
 
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
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
 
Hallo,

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.
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
 
michaeldre@gmx.de (Michael Dreschmann) wrote:

Hi!

Ausserdem dürfte eine
geringere Auflösung ja nicht zu solchen Geräuchen führen.
Ich kenn zwar Deine Geräusche nicht, aber sicher hört man eine
geringere Auflösung hauptsächlich bei leisen Signalen.

Gruß,
Michael.
 
In article <42dae2ac.29736999@news.rhein-zeitung.de>,
michaeldre@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
 
On Sun, 17 Jul 2005 18:19:11 GMT, michaeldre@gmx.de (Michael
Dreschmann) wrote:
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. :)
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
 
"Michael Dreschmann" <michaeldre@gmx.de> schrieb im Newsbeitrag
news:42dad321.25758819@news.rhein-zeitung.de...

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.
Kein Wunder das es kruschelt. Ohne noise shaping wirst du das auch nicht
los. Du brauchst sonst 2.98 GHz Takt.
http://www.tc.umn.edu/~erick205/Papers/paper.html

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

Einen einfachen Tipp wird Dir hier keiner geben können,
wie gesagt, da dürften einfach bestimmte Blöcke fehlen.
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
 
Hallo Manfred,

Kein Wunder das es kruschelt. Ohne noise shaping wirst du das auch nicht
los. Du brauchst sonst 2.98 GHz Takt.
http://www.tc.umn.edu/~erick205/Papers/paper.html
Guter Artikel. Hier ist einer, der Noise Shaping erklaert:
http://www.edacafe.com/books/phdThesis/Chapter-7.3.php

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

http://www.analogconsultants.com
 

Welcome to EDABoard.com

Sponsor

Back
Top