Forum: FPGA, VHDL & Co. Delta-Sigma Modulation (XAPP154)


von Marius S. (lupin) Benutzerseite


Angehängte Dateien:

Lesenswert?

Habe ein paar Fragen zu Delta-Sigma Modulation.

Ich habe mir dazu auch XAPP154 von Xilinx angeschaut:
http://www.xilinx.com/support/documentation/application_notes/xapp154.pdf

Eine Gute Erklärung habe ich auch hier gefunden:
http://www.beis.de/Elektronik/DeltaSigma/DeltaSigma_D.html

Eigentlich super einfach, aber die XAPP154 sorgt bei mir etwas für 
Verwirrung. Ich habe auch versucht das selbst zu bauen, so wie ich das 
Prinzip verstanden habe. Aber die Ergebnisse weichen von der 
Xilinx-Implementation ab. Ich habe das alles mal mit 4 Bit 
aufgebaut/simuliert (meine folgenden Fragen gehen mal von 4 Bit aus).


Der Ausgangswert (das MSB des Latches) wird am Eingang zur 
Differenzbildung zurück geführt. Der Ausgang muss ja irgendwie gewichtet 
werden. Im zweiten Link wird das DDC (digital-digital-converter) genannt 
und der Autor sagt im Grunde, dass eine logische 1 im MSB (also High am 
Ausgang) einem Eingangswert bestehend aus 1en entspricht (bei 4 Bit z.B. 
15). Dieser wird negativ auf den Eingang zurückgeführt (also -15).

In der Xilinx-Implementierung wird der Ausgangswert anders gewichtet. 
Dort wird ein High am Ausgang als -16 am Eingang gewichtet. Der 
Eingangswert wird auch um zwei zusätzliche Bit erweitert.
Bei einem High am Ausgang und 4 Bit Auflösung wird der Vektor DeltaB zu:
0b110000 (entspricht signed -16)
Ich denke die Erweiterung passiert nur, damit man die Differenzbildung 
"Eingangswert minus Ausgangswert" als Addition realisieren kann? Oder 
hat das noch einen weiteren Nutzen? Weil eigentlich wäre doch auch 
0b10000 ausreichend (also Erweiterung um 1 Bit), das wäre ja auch -16. 
Habe das natürlich auch simuliert und es kommt was unterschiedliches 
raus. Erhöhe ich mit diesen zusätzlichen Bit noch irgendwie die 
Präzision des ganzen?

Ich habe den Xilinx-Code auch mal so geändert, dass der Ausgangswert als 
-15 gewichtet wird. Dann wird DeltaB zu:
0b110001 (entspricht signed -15)
Screenshot der Simulation im Anhang. DUT1 ist ohne Änderung (Gewichtung 
als -16). DUT2 ist mit der Änderung (Gewichtung als -15). Wie man sieht 
entsteht bei Ausgangswert 15 eine Differenz (weil 15 != 16 ist :)). Bei 
der Version mit Gewichtung als -15 entsteht keine Differenz.

Was ist richtiger? Gewichtung als 2^n-1 (z.B. 15) oder als 2^n (z.B. 
16)?


Ist sowieso die Frage, wie man den Null-Vektor und 1-Vektor als 
Eingangswert im Bitstream darstellen will.

Habe in der Simulation eine OSR (Over-Sampling-Rate) von 16 gewählt. Als 
Auflösung 4 Bit, also auch 16 Stufen.
Bei einer 0 als Eingang erwarte ich keinen Ausgangspuls, bei einer 1 
einen Ausgangspuls innerhalb der 16 takte usw.
Bei einer 15 als Eingang erwarte ich innerhalb der 16 Takte 15 
Ausgangspulse.

Also lässt sich der volle Bereich (0V bis Vref+) gar nicht ausnutzen, 
oder?

--------------------------------------------------------------------

Gibt es Tools um das ganze auch auf Systemebene durch zu simulieren? So, 
dass ich meinen Modulator erstmal als System aufbauen kann und mir einen 
Frequenzgang darstellen lassen kann. Dann könnte ich die unklaren Punkte 
einfach mal durchprobieren und mir das Ergebnis im Frequenzgang 
anschauen (was sicherlich mehr Aussagekraft hätte als ein Bitstream im 
Simulator).

Kennt ihr gute Quellen die auch Delta-Sigma-Modulatoren höherer Ordnung 
verständlich erklären? Habe schon gesehen, dass es mehrere Topologien 
gibt wie man die aufbauen kann. Wie berechnet man dann aber für die 
einzelnen Topologien die Filter-Koeffizienten?

Sorry für den vielen Text, bin verwirrt. :(

von Dogbert (Gast)


Lesenswert?

Ich glaube Delta Sigma sind im Frequenzbereich schwer zu modellieren und 
zu simulieren, wegen ihrer Nichtlinearität.

Auch wird wohl manches dazu nicht gesagt, "Betriebsgeheimnis".

Bei vielen Delta Sigma Modulatoren wird zudem kontrolliert an bestimmten 
Stellen pseudozufälliges Rauschen eingebracht "Dithering" um "tonal 
spurs" oder "gefärbtes/tönendes Quantisierungsrauschen" zu vermeiden / 
verdecken.

Aber es sind doch erstmal keine "Filter-Koeffizienten" zu berechnen, 
oder?

Zuerst wäre eine konkrete Schaltung interessant.

Hier noch ein guter Vortrag dazu:

www.lte.ei.tum.de/lehre/MSE/WT_12_13/Lecture.../MSE_sigma.pdf‎

Darin auch die unproblematische "MASH" Struktur kaskadierter 
modulatoren.

von Christoph (Gast)


Lesenswert?

Marius S. schrieb:
> Gibt es Tools um das ganze auch auf Systemebene durch zu simulieren? So,
> dass ich meinen Modulator erstmal als System aufbauen kann und mir einen
> Frequenzgang darstellen lassen kann. Dann könnte ich die unklaren Punkte
> einfach mal durchprobieren und mir das Ergebnis im Frequenzgang
> anschauen (was sicherlich mehr Aussagekraft hätte als ein Bitstream im
> Simulator).

Für die Systemebene fallen mir die üblichen verdächtigen ein: 
Matlab/Simulink (komerziell und teuer), Octave und Scilab (Beides 
Opensource).

Um deinen HDL Source Code zu simulieren und anschliessend die Daten 
besser/ausagekräftiger darzustellen könnte dir auch QUCS (auch open 
source) behilfich sein, da QUCS auch VHDL simuliert und viele 
Diagrammtypen anbietet (Oder sogar mit VHDL-AMS was aufbauen und danach 
ein Smith-Chart plotten. Ist doch vielversprechend ;-)).

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
Noch kein Account? Hier anmelden.