Beim Durchlesen des Beitrags
Beitrag "Nicht-Sinus DDS"
sind einige grundlegende Fragen zu DDS aufgetaucht, für die ich lieber
einen neuen Thread eröffne, da es um Theorie geht, und nicht um ein zu
realisierendes Projekt.
Das Basis-Prinzip der DDS ist, soweit ich es verstanden habe (bitte
korrigieren, wenn es nicht so ist!), dass man eine Kurvenform in einer
LUT mit N Werten hinterlegt, und von dieser in einem fixen Takt Ta
entweder jeden, jeden zweiten, jeden dritten, bzw. jeden k-ten Wert
"abtastet" und ausgibt und den Index der LUT modulo N nimmt.
Als Abtastfrequenz bezeichne ich
Wenn ich in der LUT N Werte einer einzelnen Sinus-Periode ablege
und k=1 ist (ich nehme jeden LUT-Wert), so erhalte ich ein Signal
welches der Abtastung eines Sinus der Frequenz
im Zyklus Ta entspricht.
Nehme ich nun nur jeden k-ten Wert der LUT, dann entspricht die
erhaltene Folge einer Abtastung eines Sinus der Frequenz
Nun ein konkretes Beispiel:
N=16, k=3, T=1ms
Dann erhalte ich über die LUT eine Signalfolge, die identisch zu der
Abtastfolge eines Sinus mit f=187,5 Hz mit Ta=1ms ist.
Da die Nyquistfrequenz bei 500Hz liegt, ist das Abtasttheorem hier
eindeutig nicht verletzt, und ich erhalte mit einem idealen
Rekonstruktionsfilter (klar dass es das nicht gibt...) wieder genau
diesen Sinus, auch wenn das Verhältnis der Signalfrequenz zur
Grundfrequenz in diesem Fall 16/3, also nicht ganzzahlig ist.
Frage: Durch welchen Effekt kommen bei DDS nun unerwünschte Störbänder
zum Vorschein - ich kann hier nichts finden, und es sieht alles klar und
sauber aus, solange die Zielfrequenz das Abtasttheorem nicht verletzt...
So wie ich es mir bisher zusammenreime, können Störfrequenzen erst dann
zustande kommen, wenn die Auflösung der LUT kleiner ist, als jene des
Phaseninkrements und dadurch der aktuelle Index einem Abschneidefehler
unterliegt (i.a.W.: nicht-ganzzahliges k). Davon war aber im Thread
keine Rede.
Vielleicht findet sich jemand, der das auch einem Laien beibringen
möchte.
Vielen Dank
Michael W. schrieb:> Frage: Durch welchen Effekt kommen bei DDS nun unerwünschte Störbänder> zum Vorschein - ich kann hier nichts finden, und es sieht alles klar und> sauber aus, solange die Zielfrequenz das Abtasttheorem nicht verletzt...
Du machst einen Denkfehler, der darin besteht, daß du ein mehr oder
weniger ideales Tiefpaßfilter voraussetzt.
Ein DDS erzeugt tatsächlich Stützstellen - und die können zu einer
Grundwelle gehören, also zu einem analogen Kurvenverlauf, der zwischen 2
Stützstellen keinen Wendepunkt besitzt (2.Ableitung) oder zu einem
sogenannten Alias, der zwischen 2 Stützstellen eine oder mehrere
Wendepunkte besitzt. Mit geeigneten Filtern kann man durchaus einen
gewünschten Alias herausfiltern und weiterverwenden.
Das ist möglich, weil ja das konkrete analoge Signal am DAC-Ausgang im
Takte des DDS-Taktes (neudeutsch..) einen Sprung von der alten zur neuen
Stützstellen-Amplitude vollführt, was frequenzmäßig gesehen eben eine
Breitseite an Oberwellen bedeutet.
W.S.
>Grundfrequenz in diesem Fall 16/3, also nicht ganzzahlig ist.
Hieraus resultiert meiner Meinung nach der Fehler der DDS. Der Wert, der
aus der Tabelle abgelesen wird, entspricht nicht dem Wert, den man bei
einer kontinuierlichen Berechnung an der Stelle ablesen würde.
>Du machst einen Denkfehler, der darin besteht, daß du ein mehr oder>weniger ideales Tiefpaßfilter voraussetzt.
Es hat nichts mit einem Tiefpassfilter zu tun.
Hallo Michael, anschaulich könntest Du es folgendermaßen machen:
Erzeuge 3 verschiedene Signale:
y1=sin(..t)
y2=LUT(t)
y3=DDS(t)
Das kann man mit Excel oder Matlab machen. Damit es anschaulich wird,
sollte delta_t viel kleiner als die Abtastzeit sein, dann sieht man die
Sprünge in den Signalen.
@W.S.
Den Effekt der Generierung von Mischfrequenzen in ganzzahligen Abständen
der Taktfrequenz habe ich aber auch bei einer normalen A/D Wandlung
(abgesehen von anderen Dingen, die dann noch hinzu kommen). Insofern ist
das aber dann kein Spezifikum der DDS (zumindest wenn man sie so
verwendet wie ich beschrieben habe) sondern ein "Abtast"phänomen, wo aus
einem kontinuierlichen Signal Stützstellen entnommen werden.
@chris_
>Hieraus resultiert meiner Meinung nach der Fehler der DDS.>Der Wert, der aus der Tabelle abgelesen wird, entspricht nicht dem Wert,>den man bei einer kontinuierlichen Berechnung an der Stelle>ablesen würde.
Das verstehe ich nun nicht:
Wenn du die Stützstellen der LUT durchnummerierst (0, 1, 2...15, 16, 17,
...) dann werden in meinem Beispiel (N=16) genau die Indizes
0, 3, 6, 9, 12, 15, 18, 21, 24
bzw. mit modulo
0, 3, 6, 9, 12, 15, 2, 5, 8, ...
herausgenommen.
Als Beispiel habe ich im Anhang den resultierenden Verlauf für k=1, 3, 8
und 15 "simuliert" um eine Diskussionsgrundlage zu haben (sorry für den
Platzverbrauch). Die grünen Kurven sind das Ergebnis eines idealen
Tiefpasses (Rückfaltung mit sinc-Impulsantwort).
Für den Fall k=3 sehe ich nicht, was du mit deiner Aussage meinst.
Insbesondere sehe ich nicht, wo der Unterschied zu einem "normal"
abgetasteten Signal ist und wo du Sprünge siehst (bei einem
zeitdiskreten Signal habe ich doch immer Sprünge, solange sich dieses
zeitlich ändert)?
Das Signal in der LUT ist eigentlich das Signal nach einem
Abtasthalteglied.
Du kannst das Problem nur erkennen, wenn Du LUT(t) zeichnest, nicht
LUT(n).
Es müsste so wie das Signal in der unteren Hälfte des Bildes aussehen:
http://www.elv.de/journal_pic.aspx?id=354375
Der Fehler an den Abtastzeitpunkten ist
e=dds(t)-sin(..t)
dds(n)=dds(trunc(..t))
Der Fehler kommt aus der Quantisierung der Zeit mittels "trunc"
Der entscheidende Satz in dem Artikel:
". In der Regel haben wir es deshalb mit einer Treppe mit
ungleichmäßiger Stufenhöhe zu tun. Weil das Abtast-Halteglied den
Eingangswert über die Abtastperiode konstant hält, kann man es auch als
Reihenschaltung aus einem idealen Abtaster mit einem Halteglied nullter
Ordnung (Zero-Order-Hold: ZOH) beschreiben. Der Vorgang des Haltens
eines idealen Abtastwerts hat natürlich seine Auswirkungen, insbesondere
auf den Frequenzgang. "
chris_ schrieb:> Hieraus resultiert meiner Meinung nach der Fehler der DDS. Der Wert, der> aus der Tabelle abgelesen wird, entspricht nicht dem Wert, den man bei> einer kontinuierlichen Berechnung an der Stelle ablesen würde.
Warum sollte dies nicht der Fall sein? Wenn es korrekt gemacht ist,
enthält die Tabelle nichts anderes, als den echten Funktionswert Y(t)
inbegriffen der Rundung des Wertes Y. Beim Auslesen kommt noch die
Rundung des Wertes t hinzu. Die Tabelle tritt mithin nur an die Stelle
von Mathematik und ihm Rahmen der Auflösungen beider Werte Y,t ist das
100% exakt. Das Problem besteht natürlich nun in genau diesem Umstand
der limitierten Auflösung. Damit muss man leben bzw sie durch Dithering
lindern, wie hier ausgeführt wurde: DitheringMichael W. schrieb:> dieser in einem fixen Takt Ta> entweder jeden, jeden zweiten, jeden dritten, bzw.
Das muss nicht ganzzahlig sein. Die Tabelle wird durchaus mit gebrochen
rationalen Zahlen angesteurt. Das ist dann der beschriebene Jitter.
chris_:
>> Hieraus resultiert meiner Meinung nach der Fehler der DDS. Der Wert, der>> aus der Tabelle abgelesen wird, entspricht nicht dem Wert, den man bei>> einer kontinuierlichen Berechnung an der Stelle ablesen würde.
Jürgen:
>Warum sollte dies nicht der Fall sein? Wenn es korrekt gemacht ist,>enthält die Tabelle nichts anderes, als den echten Funktionswert Y(t)
Ungünstigerweise ist der Zeitpunkt in der Tabelle Y(T) aber nicht der
Zeitpunkt den man für man bei der Erzeugung einer ungeraden Frequenz
haben möchte. Deshalb muss man die Zeit runden und deshalb gibt es die
Fehler.
chris_ schrieb:> Der Fehler kommt aus der Quantisierung der Zeit mittels "trunc"
Vielleicht kommen wir der Sache nun näher...was wird bei k=3 "getrunct"?
Der dritte Wert im Ergebnis x[2] entspricht dem Index "6" in der LUT.
Genauso ist x[7]=LUT[5], usw. Da gibt es keine Rundungsfehler, da keine
Nachkommastellen.
Bei nicht ganzzahligem k (z.B. 3.1 wie im Anhang) hat man natürlich
Fehler, aber definitiv nicht wenn k ganzzahlig ist.
Geht man bei DDS automatisch von Gleitkommadarstellungen aus, wo
Stellen nach dem Akkumulationsvorgang gerundet werden?
Ich schrieb ja im ersten Posting:
>So wie ich es mir bisher zusammenreime, können Störfrequenzen erst dann
zustande kommen, wenn die Auflösung der LUT kleiner ist, als jene des
Phaseninkrements und dadurch der aktuelle Index einem Abschneidefehler
unterliegt (i.a.W.: nicht-ganzzahliges k). Davon war aber im Thread
keine Rede.
Ist des Rätsels Lösung etwa: bei nicht ganzzahligem Phaseninkrement
bekommt man Artefakte, die sich aufgrund der fehlerhaften Zuordnung
einer beliebigen Zeit zu den gerundeten Werten in der LUT ergeben? Dann
hätte ich es verstanden.
PS: Das Bild ist übrigens falsch (es ist für N=100 statt 16), kann es
aber nicht mehr löschen ;-) Der Fehler ist aber klar...
chris_ schrieb:> Der entscheidende Satz in dem Artikel:>> ". In der Regel haben wir es deshalb mit einer Treppe mit> ungleichmäßiger Stufenhöhe zu tun. Weil das Abtast-Halteglied den> Eingangswert über die Abtastperiode konstant hält, kann man es auch als> Reihenschaltung aus einem idealen Abtaster mit einem Halteglied nullter> Ordnung (Zero-Order-Hold: ZOH) beschreiben. Der Vorgang des Haltens> eines idealen Abtastwerts hat natürlich seine Auswirkungen, insbesondere> auf den Frequenzgang. "
Das kann man aber durch einen geeigneten Frequenzgang des
Rekonstruktionsfilters wieder vollständig kompensieren (theoretisch
natürlich - hier geht es mir aber nur um Theorie). Deshalb ist das
sicher nicht das Problem.
>Geht man bei DDS automatisch von Gleitkommadarstellungen aus, wo>Stellen nach dem Akkumulationsvorgang gerundet werden?
Ob man es so sagen kann, weiß ich nicht.
Aber nimm mal folgendes Scenario:
Fs=10kHz
f1=1kHz
f2=1.00001kHz
f2 braucht die Gleitkommadarstellung.
Damit "hüpft" der Zeiger in die LUT nicht immer gleichmässig.
chris_ schrieb:> Jürgen:>>Warum sollte dies nicht der Fall sein? Wenn es korrekt gemacht ist,>>enthält die Tabelle nichts anderes, als den echten Funktionswert Y(t)>> Ungünstigerweise ist der Zeitpunkt in der Tabelle Y(T) aber nicht der> Zeitpunkt den man für man bei der Erzeugung einer ungeraden Frequenz> haben möchte.
Ja, aber das ist das Merkmal jeder tabellarischen Darstellung. Wenn dies
ein Problem ist, das man nicht akzeptieren kann, darf man eben keine
Tabelle
chris_ schrieb:> Damit "hüpft" der Zeiger in die LUT nicht immer gleichmässig.
ja, das ist klar. Wenn das gemeint ist, ist meine Frage zu 100%
beantwortet. Ich ging davon aus, dass man bei DDS immer ein ganzzahliges
Vielfaches der Grundfrequenz generiert. Dass man dazwischen auch rundet,
ist mir neu und erklärt natürlich, dass es hier Artefakte gibt.
Danke für die ausführliche Antwort.
Wieder ein Mysterium der DSV geklärt ;-)
>Das kann man aber durch einen geeigneten Frequenzgang des>Rekonstruktionsfilters wieder vollständig kompensieren
Das habe ich mir auch zuerst gedacht, bei näherem Hinsehen gibt es aber
einen Denkfehler:
Stell dir einfach mal vor, Du würdest den treppenförmigen Sinus ohne
Aliasing-Filter abtasten. Könnte man den treppeförmigen Sinus wieder
rekonstruieren? Laut Abtasttheorem nicht, weil die Treppen unendlich
hohe Frequenzen enthalten.
Man könnte das Treppensignal nur genau dann wieder rekonstruieren, wenn
man genau in der Treppenstufenbreite abtastet. Die DDS tut das aber nur
bei ganzzahligen Vielfachen.
Die Beschreibung in dem Artikel bezieht sich darauf, dass man im System
die Abtastrate konstant hält.
> Ich ging davon aus, dass man bei DDS immer ein ganzzahliges> Vielfaches der Grundfrequenz generiert.
Das geniale an der DDS ist ja, nicht ganzzahlige Frequenzen ( mit den
entsprechenden Fehlern ) erzeugen zu können.
Genau aus diesem Grund habe ich die zwei Sweeps gepostet:
Beitrag "Re: Nicht-Sinus DDS"
Das funktioniert ja nur, weil man die Frequenzen kontinuierlich
durchstimmen kann.
>Danke für die ausführliche Antwort.
Bitte :-)
( da haben sich die Postings wohl ein wenig überschlagen )
>Wieder ein Mysterium der DSV geklärt ;-)
Hoffentlich auch für alle Mitleser ;-)
Obwohl meine Frage schon beantwortet ist, verstehe ich nun doch nicht
was du meinst. Es wird ja nichts abgetastet, sondern eine vorhandene
diskrete Zeitserie (woher sie auch immer kommen mag) mit einem DAC auf
Analog umgewandelt. Das Resultierende Spektrum ist das Spektrum der
gewichteten Dirac-Impulse (inklusive Aliasing) multipliziert mit einer
Gewichtsfunktion
Das Basisband wird dadurch geschwächt, es kommen aber keine
Eindringlinge von Seitenbändern hinein, solange das Abtasttheorem
eingehalten wird. Das ist Standardtheorie der Abtastung und hat nichts
mit DDS zu tun. Der DAC weiß ja nicht, woher die Abtastwerte kommen.
Möglicherweise sind es aber genau die DDS Artefakte die zur einer
Verletzung des Abtasttheorems führen. Meinst du das?
Nochmals danke für die Geduld mit einem Laien.
Und wie kommt man nun zu den Artefakten? D.h. wo diese liegen und wie
stark sie sind?
Die Antwort steht wahrscheinlich in
Nicholas III, H. and Samueli, H., 1987, “An Analysis of the Output
Spectrum of Direct Digital Frequency Synthesizers in the Presence of
Phase-Accumulator Truncation”, 41st Annual Frequency Control Symposium
aber ich kann dieses Konferenz-Paper nirgends gratis runterladen. Ich
bin von keiner Uni...
http://www.analog.com/static/imported-files/tutorials/450968421DDS_Tutorial_rev12-2-99.pdf
gibt sich zwar Mühe, ist aber sehr sehr heuristisch begründet.
Gibt es alternative Quellen?
Michael W. schrieb:> Gibt es alternative Quellen?
Du könntest Dir mal in Excel eine Simulation zusammenbauen, dann
bekommst Du ein Gefühl für die Artefakte.
Die Fehler, die die DDS produziert, ist immer auch im Zusammenhang mit
der Ansteuerung zu sehen. Je nach Frequenz(-bereich) und anschliessender
Filterung ist das mehr oder weniger relevant. Bei einer DDS, die nur der
Erzeugun von Sin und Cos für z.B. IQ-Prozessierung dient und bei der die
Frequenzen ganzzahlig passend zur Systemfrequenz eingestellt sind und
die Auflösung der Tabelle gross genug ist, sind die Werte praktisch
artefaktfrei. Wie exakt eine spätere analoge Interpretation der Welle
gelingt, ist dann wieder vom Filter abhängig und dieser kann ebenfalls
mehr oder weniger auf die zu rekonstruierende Frequenz abgestimmt
werden, indem Trägerfrequenz und Zielfrequenz ganzzahlig in die
Filter-TAPs passen. Genau hier beginnt die Arbeit des Ingenieurs.
Im allgemeinen Fall wird die DDS immer einen staistischen Fehler
generieren, dessen maximale Auswirkung man simulieren kann. Auch da ist
die Art und der Aufbau des Filters ins Spiel zu bringen.
Ohne die Einlassungen im Ganzen verstanden zu haben ist das Hauptproblem
der DDS bisher nur am Rande einmal erwähnt worden: Phasenjitter . Vllt.
erhellt 'dds phase jitter' (63k hits) das Dunkel etwas.
Cheers
Detlef
>Ohne die Einlassungen im Ganzen verstanden zu haben ist das Hauptproblem>der DDS bisher nur am Rande einmal erwähnt worden: Phasenjitter .
Du hast Recht, das Wort "Phasenjitter" ist nicht gefallen.
>Der Fehler an den Abtastzeitpunkten ist>>e=dds(t)-sin(..t)>>dds(n)=dds(trunc(..t))>>Der Fehler kommt aus der Quantisierung der Zeit mittels "trunc"
Aber die Rundung, die den Phasenjitter erzeugt, wurde schon erwähnt.
Das von Michael gepostete Dokument
http://www.analog.com/static/imported-files/tutorials/450968421DDS_Tutorial_rev12-2-99.pdf
finde ich sehr gut.
Dort wird auf Seite 19 unter der Überschrift
"The Effect of Truncating the Phase Accumulator on Spurious Performance"
sehr detailliert auf das Problem eingegangen.
Michael schrieb
>Geht man bei DDS automatisch von Gleitkommadarstellungen
Die Gleikommadarstellung eher nicht, sondern Festkommazahlen:
http://de.wikipedia.org/wiki/Festkommazahl