Forum: Mikrocontroller und Digitale Elektronik DDS Frage / Verständnis


von Frage (Gast)


Lesenswert?

Hallo zusammen ich habe einige Fragen zum verfahren des DDS.

Also DDS besitz einen Phasenakkumulator der quasi eine Periode darstellt 
(360°) und dies stellt der dar mit 2^n Werten, wobei n = die Anzahl an 
bis ist. Also habe ich 2^n / 360 Werte die eine Periode eines SIgnals 
darstellen. Soweit so gut, wenn ich nun mit einer Frequenz von 4MHz 
arbeiten sollte und mein n = 8 wäre, wäre doch meine niedrigste Frequenz 
zum darstellen eines Signals 4MHz / 2^8 = 15625Hz und meine Höchste 
Frequenz wäre 2MHz, da laut dem Abtasttheorem das darstellbare Signal 
maximal halb so groß (Frequenztechnisch gesehen) sein darf wie die 
maximale Frequenz. Liege ich damit soweit richtig?

Stellen wir uns nun vor, dass ich einen Sinus darstellen möchte. Wenn 
ich den Phasenakkumulator nun so einstelle, dass er nicht inkrementiert 
sonder sich verdoppelt oder sogar verdreifacht, erhöht sich ja auch die 
Frequenz mit der mein Sinus ausgegeben wird. Wie berechne ich da denn 
die Fehlerquote? Denn wenn ich die Schrittweite meines 
Phasenakkumulators erhöhe wird mein Sinussignal doch immer ungenauer 
oder täusche ich mich da?

Eine Weitere Frage ist folgende und zwar, das ja mein "Sinussignal" 
Zeitdiskret über einen DAC generiert wird, habe ich einen gestuften 
Sinus. Mir ist klar ich benötige einen Tiefpassfilter, der mein Signal 
glättet. Nehmen wir einfachheitshalber einen RC-Tiefpass-Filter. Wie 
muss ich den einstellen, um einen sauberen Sinus zu bekommen? Ändert 
sich das nicht von Frequenz zu Frequenz? Oder stelle ich meinen RC so 
ein, dass die Grenzfrequenz 2MHz beträgt? Hätte dies dann nicht eine 
Dämpfung von 3dB zufolge?

Danke im vorraus für die Hilfe

von Rudi D. (rulixa)


Angehängte Dateien:

Lesenswert?

http://www.elektronik-labor.de/AVR/DDSGenerator.htm

Diesen Artikel habe ich vor Jahren geschrieben. Viel Spaß.

von c-hater (Gast)


Lesenswert?

Frage schrieb:

> Also DDS besitz einen Phasenakkumulator der quasi eine Periode darstellt
> (360°) und dies stellt der dar mit 2^n Werten, wobei n = die Anzahl an
> bis ist. Also habe ich 2^n / 360 Werte die eine Periode eines SIgnals
> darstellen. Soweit so gut

Nein, das ist NICHT gut. Du arbeitest auf binärer Logik und die 
Erfindung der ollen Babylonier, einen Kreis in 360 Teile aufzuteilen, 
mag für deren Zwecke optimal gewesen sein, für deinen ist sie es mit 
Sicherheit nicht. Nimm' 256 oder 512 Teile. Das macht sehr vieles sehr 
viel einfacher (und vor allem auch: effizienter)...

> wenn ich die Schrittweite meines
> Phasenakkumulators erhöhe wird mein Sinussignal doch immer ungenauer
> oder täusche ich mich da?

Nö. Das haben diverse Herren vor weit mehr mehr als 100 Jahren schon in 
Formeln gegossen. Deren Namen waren Shannon und Nyquist (Reihenfolge 
ohne jegliche Wertung der jeweiligen Leistungen). Google-Futter: 
Abtast-Theorem.

von Mark S. (voltwide)


Lesenswert?

Und was die Stufen betrifft - diese erfolgen mit der Abtastfrequenz, 
unabhängig vom jeweiligen Betrag des Phasensprunges. Hier reicht also 
ein fest eingestellter Tiefpaß.

von Falk B. (falk)


Lesenswert?

Frage schrieb:

> maximal halb so groß (Frequenztechnisch gesehen) sein darf wie die
> maximale Frequenz. Liege ich damit soweit richtig?

Ja.

>
> Stellen wir uns nun vor, dass ich einen Sinus darstellen möchte. Wenn
> ich den Phasenakkumulator nun so einstelle, dass er nicht inkrementiert
> sonder sich verdoppelt oder sogar verdreifacht, erhöht sich ja auch die
> Frequenz mit der mein Sinus ausgegeben wird.

Nö, du würdest eine arg wilde Phasenmodulation machen, denn dein Phase 
würde stark nichtlinear ansteigen.

> Wie berechne ich da denn
> die Fehlerquote? Denn wenn ich die Schrittweite meines
> Phasenakkumulators erhöhe wird mein Sinussignal doch immer ungenauer
> oder täusche ich mich da?

Ich glaube, wir reden aneinander vorbei.
Du meinst vermutlich, wenn man die SCHRITTWEITE des Phasenakkus immer 
weiter erhöht, um höhere Frequenzen zu erzeugen, daß es dann immer 
weniger Stützstellen für den Sinus pro Periode gibt. Ja, das ist so. 
Aber die Wunder der Signalverarbeitung bewirken, daß bei einem korrekten 
Ausgangsfilter dennoch ein ziemlich sauberer Sinus rauskommt. Der 
Insider wird jetzt zwar EINSPRUCH rufen und was von Nebenlinien im 
Spektrum erzählen, aber das sind im wahrsten Sinne des Wortes erstmal 
Nebensächlichkeiten.

Im Extremfall von f_aus = 0,5 * f_DDS kommt auch ein astreiner Sinus 
raus, auch wenn der nur aus ZWEI Stützstellen pro Periode besteht! 
Unglaublich aber wahr! Denn man kann durch passende Filterung aus einem 
Rechtecksignal einen astreinen Sinus gleicher Frequenz machen!

> Eine Weitere Frage ist folgende und zwar, das ja mein "Sinussignal"
> Zeitdiskret über einen DAC generiert wird, habe ich einen gestuften
> Sinus. Mir ist klar ich benötige einen Tiefpassfilter, der mein Signal
> glättet.

Rekonstruktionsfilter.

> Nehmen wir einfachheitshalber einen RC-Tiefpass-Filter. Wie
> muss ich den einstellen, um einen sauberen Sinus zu bekommen?

Passend zu deiner Taktfrequenz der DDS. Mit einem einfachen RC-Filter 
kommst du nicht mal ansatzweise an f_DDS/2 ran, bestenfalls f_DDS/10 
oder weniger. Denn so ein einfacher Tiefpaß hat eine viel zu flache 
Filterkurve, um die Oberwellen des DACs passend zu glätten bzw. zu 
filtern.

> Ändert
> sich das nicht von Frequenz zu Frequenz?

Nein, das ist konstant und nur vom konstanten Takt deiner DDS abhängig. 
Genauso wie die Filter in jedem Audiogerät, dort ist die 
DAC-Ausgabefrequenz auch fest, z.B. die klassischen 44,1kHz des 
CD-Standards oder die 96kHz der modernen Dolby-Systeme (jetzt haut mich, 
ich bin kein Audioexperte ;-)

> Oder stelle ich meinen RC so
> ein, dass die Grenzfrequenz 2MHz beträgt?

So in etwa, nur daß 3dB Dämpfung bei f_DDS/2 ein "bisschen" zu wenig 
sind ;-)

von Axel S. (a-za-z0-9)


Lesenswert?

Frage schrieb:

> Also DDS besitz einen Phasenakkumulator der quasi eine Periode darstellt
> (360°) und dies stellt der dar mit 2^n Werten, wobei n = die Anzahl an
> bis ist.

Die Anzahl Bits im Phasenakkumulator. Ja.

> Also habe ich 2^n / 360 Werte die eine Periode eines SIgnals
> darstellen.

Nein. Du hast 2^n Werte für eine Periode.

> Soweit so gut, wenn ich nun mit einer Frequenz von 4MHz
> arbeiten sollte und mein n = 8 wäre, wäre doch meine niedrigste Frequenz
> zum darstellen eines Signals 4MHz / 2^8 = 15625Hz und meine Höchste
> Frequenz wäre 2MHz, da laut dem Abtasttheorem das darstellbare Signal
> maximal halb so groß (Frequenztechnisch gesehen) sein darf wie die
> maximale Frequenz. Liege ich damit soweit richtig?

Ja. Allerdings macht man den Phasenakkumulator in der Praxis viel 
breiter. Z.B. 32 Bit. Und man muß auch nicht alle 32 Bit davon für die 
Lookup-Tabelle des Ausgangssignals nutzen, sondern nur z.B. die obersten 
12 Bits.

> Stellen wir uns nun vor, dass ich einen Sinus darstellen möchte. Wenn
> ich den Phasenakkumulator nun so einstelle, dass er nicht inkrementiert
> sonder sich verdoppelt oder sogar verdreifacht

Dann kriegst du aber keinen Sinus als Ausgangssignal. Für eine bestimmte 
(feste) Ausgangsfrequenz mußt du den Phasenakkumulator in jedem 
Zeitschritt (bei deinen 4MHz also alle 250ns) um einen bestimmten 
(festen!) Wert erhöhen. Für den Wert 1 bekommst du in deinem Beispiel 
15.625kHz. Für den Wert 2 wären es 31.25kHz usw. Offensichtlich kannst 
du mit einem derart kurzen Phasenakkumulator nur Frequenzen im Raster 
von 15125Hz "anfahren".

Aber mit z.B. 32 Bit hättest du selbst bei 100MHz Basistakt eine 
Auflösung um die 23mHz (Millihertz).

> Wenn wenn ich die Schrittweite meines
> Phasenakkumulators erhöhe wird mein Sinussignal doch immer ungenauer
> oder täusche ich mich da?

Du täuschst dich nicht. Wobei "ungenauer" etwas schwammig ist. Du 
bekommst immer weniger Stützstellen. Bei der Rekonstruktion des 
Sinus-Signals spielt aber der Ausgangsfilter (vulgo: 
Rekonstruktionsfilter) eine wesentliche Rolle. Mit einem idealen Filter 
reichen 2 Stützstellen pro Periode. Real wird man eher 10 haben wollen. 
Zumindest wird dann der Filteraufwand geringer.

von Egon D. (Gast)


Lesenswert?

Frage schrieb:

> Soweit so gut, wenn ich nun mit einer Frequenz von
> 4MHz arbeiten sollte und mein n = 8 wäre, wäre doch
> meine niedrigste Frequenz zum darstellen eines Signals
> 4MHz / 2^8 = 15625Hz

Nein.
Die Phasenberechnung erfolgt i.d.R. mit deutlich größerer
Wortlänge, als man zum Adressieren der Sinustabelle braucht.
Diese Nachkomma-Stellen bewirken, dass z.B. abwechselnd
1 oder 2 Schritte in der Tabelle weitergegangen wird -- im
Mittel sind das also 1.5 Schritte.
Man kann auch Schritte wiederholen, so dass fast beliebig
niedrige Frequenzen möglich sind.


> und meine Höchste Frequenz wäre 2MHz, da laut dem
> Abtasttheorem das darstellbare Signal maximal halb so
> groß (Frequenztechnisch gesehen) sein darf wie die
> maximale Frequenz. Liege ich damit soweit richtig?

Theoretisch ja.
Praktisch kommt man mit vernünftigem Aufwand ungefähr
bis fs/3; das wären im Beispiel 1.3MHz.


> Stellen wir uns nun vor, dass ich einen Sinus darstellen
> möchte. Wenn ich den Phasenakkumulator nun so einstelle,
> dass er nicht inkrementiert sonder sich verdoppelt oder
> sogar verdreifacht, erhöht sich ja auch die Frequenz mit
> der mein Sinus ausgegeben wird.

Hat Falk schon erklärt: Den Phasenakku verdoppeln ist nicht
sinnvoll. Was geht: Das Phasenincrement verkleinern oder
vergrößern -- das gibt dann eine Frequenzmodulation.


> Wie berechne ich da denn die Fehlerquote? Denn wenn ich
> die Schrittweite meines Phasenakkumulators erhöhe wird
> mein Sinussignal doch immer ungenauer oder täusche ich
> mich da?

Im Prinzp richtig.
Praktisch macht das nicht viel aus, weil der Frequenzhub
in der Regel nicht so groß ist.


> Eine Weitere Frage ist folgende und zwar, das ja mein
> "Sinussignal" Zeitdiskret über einen DAC generiert wird,
> habe ich einen gestuften Sinus.

Ja.


> Mir ist klar ich benötige einen Tiefpassfilter, der mein
> Signal glättet. Nehmen wir einfachheitshalber einen
> RC-Tiefpass-Filter. Wie muss ich den einstellen, um einen
> sauberen Sinus zu bekommen?

So, dass alles oberhalb fs/2 (=2MHz) ausreichend unterdrückt
wird.


> Ändert sich das nicht von Frequenz zu Frequenz?

Nein -- das ist ja der Supertrick beim DDS. Der Takt bleibt
ja immer gleich, deswegen bleiben die Störungen im großen
und ganzen auch immer gleich. Dass sich die Nutzfrequenz
ändert, spielt keine große Rolle.


> Oder stelle ich meinen RC so ein, dass die Grenzfrequenz
> 2MHz beträgt?

Nein: Du konstruierst das Filter so, dass es bei 2MHz
ausreichend dämpft, also z.B. 60dB (=1:1000). Die
Grenzfrequenz liegt dann bei... was weiss ich... 1.2MHz.
Die höchste nutzbare Frequenz ist dann vielleicht 1.0MHz.

(Die konkreten Zahlen sind aus der Luft gegriffen, um
das Prinzip zu erklären. Die Größenordnung stimmt aber.)


> Hätte dies dann nicht eine Dämpfung von 3dB zufolge?

Klar.
Nyquist ist Theorie -- die gilt unter der Annahme eines
beliebig steilen Filters. Das gibt es aber nicht, daher
muss man von der Nyquist-Frequenz einen Sicherheitsabstand
halten, wenn man eine vernünftige Signalqualität haben will.

von c-hater (Gast)


Lesenswert?

Falk B. schrieb:

> Im Extremfall von f_aus = 0,5 * f_DDS kommt auch ein astreiner Sinus
> raus, auch wenn der nur aus ZWEI Stützstellen pro Periode besteht!
> Unglaublich aber wahr!

OMG

Was passiert, wenn die Stützstellen (mehr oder weniger zufällig) gerade 
bei 1/4Pi und 3/4Pi liegen (im Falle einer Cos-Tabelle) oder bei 0 und 
1/2Pi (im Falle einer Sin-Tabelle)?

Lass' dich begraben. Du bist nicht in der Lage auch nur einfachste 
Zusammenhänge zu begreifen und proaktiv zu berücksichtigen.

Klar, das ist der Grenzfall und dementsprechend was besonderes. Wenn man 
aber vorgibt, dass er geschehen darf, dann hat man, verdammt noch mal, 
auch EXPLIZIT dafür zu sorgen, das auch dann noch das Erwartete 
passiert und kann nicht einfach rumtröten, dass es unweigerlich schon 
passieren wird. Das zeugt von dramatischer Inkompetenz...

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.