Forum: Digitale Signalverarbeitung / DSP / Machine Learning DDS Grundlagenfrage


You were forwarded to this site from EmbDev.net. Back to EmbDev.net
von Michael W. (Gast)


Lesenswert?

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

von W.S. (Gast)


Lesenswert?

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.

von chris_ (Gast)


Lesenswert?

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

von chris_ (Gast)


Lesenswert?

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.

von Michael W. (Gast)


Angehängte Dateien:

Lesenswert?

@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)?

von chris_ (Gast)


Lesenswert?

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"

von chris_ (Gast)


Lesenswert?


von chris_ (Gast)


Lesenswert?

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. "

von Jürgen S. (engineer) Benutzerseite


Lesenswert?

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: Dithering

Michael 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.

von chris_ (Gast)


Lesenswert?

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.

von Michael W. (Gast)


Angehängte Dateien:

Lesenswert?

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

von Michael W. (Gast)


Lesenswert?

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.

von chris_ (Gast)


Lesenswert?

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

von Jürgen S. (engineer) Benutzerseite


Lesenswert?

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

von Michael W. (Gast)


Lesenswert?

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 ;-)

von chris_ (Gast)


Lesenswert?

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

von chris_ (Gast)


Lesenswert?

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

von chris_ (Gast)


Lesenswert?

>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 ;-)

von Michael W. (Gast)


Lesenswert?

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.

von Michael W. (Gast)


Lesenswert?

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?

von Jürgen S. (engineer) Benutzerseite


Lesenswert?

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.

: Bearbeitet durch User
von Detlef _. (detlef_a)


Lesenswert?

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

von chris_ (Gast)


Lesenswert?

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

von chris_ (Gast)


Lesenswert?

Michael schrieb
>Geht man bei DDS automatisch von Gleitkommadarstellungen
Die Gleikommadarstellung eher nicht, sondern Festkommazahlen:
http://de.wikipedia.org/wiki/Festkommazahl

von Jürgen S. (engineer) Benutzerseite


Lesenswert?

Hier ist dazu auch eine Menge gepostet worden:

Beitrag "Sinus über DDS erzeugen"
Beitrag "Nicht-Sinus DDS"

Speziell zu der Thematik der Phasensprünge hätte ich diese Grafik
http://www.96khz.org/oldpages/limitsofdds.htm

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.