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. :(
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.