Forum: FPGA, VHDL & Co. Universell programmierbarer DDS-Funktionsgenerator


von H. G. (Gast)


Lesenswert?

Auf der Basis dieses Projektes
Beitrag "Projekt: DDS basierter Funktionsgenerator mit AD5930"

möchte ich einen programmierbaren DDS bauen, mit beliebigen 
Signalformen, am Besten in einem FPGA.

Erste Frage: Woher den Takt nehmen? Vorgeschlagen wurde ein 
DDS-Baustein, zur Variablen Frequenzeinstellung, der auf einen zweiten 
DDS arbeitet, Ich hätte das gerne in einem FPGA mit frei 
programmierbarer Tabelle. Problem: Der FPGA läuft nicht jitterfrei mit 
jedem beliebigen Takt. Wie löst man das?

Zweite Frage: Es wird vorgeschlagen, für die zweite DDS / FPGA ein 
festes Verhältnis von Tastfrequenz und Signalfrequenz zu benutzen. Muss 
das unbedingt sein? Geht es gfs. mit doppelter Auflösung für die halbe 
Freuqenz? Wie interpoliert man die Tabelle?

von hp-freund (Gast)


Lesenswert?


von Helmut S. (helmuts)


Lesenswert?

hp-freund schrieb:
> So etwa?
>
> http://lukeb.members.sonic.net/arb_project/docs/arb_main_project.html

Also das ist kein DDS-Generator sondern ein reiner Arbitrary Waveform
Generator. Wenn jemand DDS will, dann passt das dort Gebotene nicht.

von J. S. (engineer) Benutzerseite


Angehängte Dateien:

Lesenswert?

>passt das Gebotene nicht
Sagen wir mal, es wäre der hintere Teil der Angelegenheit. Die DDS 
reduziert sich ja bei dieser Lösung auf nur die Tabelle und den Zähler. 
Die Arbeit steckt da eher in der GUI / Interface. Man muss die Punkte ja 
irgendwie reinkriegen. Ich mache es mit einer FPGA-GUI. "Punkte ziehen 
mit der Maus" :-)

Gerald H. schrieb:
> Problem: Der FPGA läuft nicht jitterfrei mit
> jedem beliebigen Takt. Wie löst man das?
Jitter ist in dem Fall weniger ein Problem, zumindest, wenn man den 
DDS-Teil in einer Bank laufen lässt und sonst nicht viel mitschaltet. 
Solange der eingehende Takt glatt ist, läuft das bestens. Das Problem 
ist etwas komplexer:

Das FPGA will eine Mindestfrequenz haben, wenn man über PLLs geht. Die 
wiederum vertragen keinen grossen Frequenzshift, also müsste man die 
PLLs jeweils passend umkonfigurieren und mehrere Bereiche schaffen. Das 
ist ein wenig unschön und führt zu einer Art Festfrequenzgenerator mit 
stufenförmiger Einteilung und etwas Variationsspielraum. So käme man 
aber mit z.B. 10-15 MHz Eingangstakt, auf z.B. 200-300 MHz Systemtakt 
für die DDS und damit zu (1:10) 30 MHz "guter" Sinusform, zuzüglich 
einiger ganzzahliger Oberwellen. Für die anderen Bereiche hiesse es 
PLL-Multiplier umjustieren. Die andere Option ist die, auf die PLL zu 
verzichten, dann bleibt es aber bei den maximal 10 MHz Eingangstakt, die 
man mit einer FPGA DDS gut erzeugen kann. Siehe Bild. Das ergibt eine 
limitierte Systemtaktfrequenz und damit wenige Tabellendurchläufe. Auf 
diese Weise sind 0....1MHz machbar.

Also wenn, dann DDS-Chip als Taktgeber von 0...500 MHz für den FPGA, 
dieser ohne PLL für "seinen" DDS-Teil.

>festes Verhältnis von Tastfrequenz und Signalfrequenz zu benutzen.
Um immer genau eine Stützstelle zu treffen und kein Phasenrauschen zu 
erzeugen.

> Geht es gfs. mit doppelter Auflösung für die halbe Freuqenz?
???

> Wie interpoliert man die Tabelle?
Gar nicht, macht der Ausgangsfilter. Bzw man kann leicht linear 
interpolieren, braucht dazu aber mindestens 2 Werte -> doppelten 
Ram-Anschluss (2x lesen oder parallel). Ich habe für mein Audioprojekt 
eine 4fach-Abtastung gebaut. (Asymetrischer Ram-Anschluss, Doppelzelle 
auslesen, so immer 4 Punkte sehend und dann in eine 
Interpolationspipeline werfen). Bringt aber nicht so sher viel mehr. Ein 
gutes Filter hintendrein macht dasselbe. Die Phasenverschiebung ist an 
der Stelle unwichtig.

von J. S. (engineer) Benutzerseite


Lesenswert?

Das größte Problem, das sich stellt, ist die Daten wieder aus dem FPGA 
zu bekommen. Intern hat man ja die Tabelle mit dem krummen Takt 
abgegrast und ausgelesen. Den kann man aber für geringe Frequenzen nicht 
mehr benutzen, um den DAC anzusteuern. Also heisst es, die Daten aus dem 
RAM per clock domain crossing an ein schnelle FPGA-unit zu geben, die 
den DAC treibt. Dann hat man denselben Phasenjitter, wie bei der echten 
DDS.

Machbar ist das nur mit einer händischen Interpolation der Daten und 
umrechnen auf die andere Zeitebene. Dazu brauchst Du ein 
Interpolationsfilter mit clock domain crossing. (Linksseitig 
interpolieren, Gleichung aufstellen, Zeitbezug herstellen, Zeit und 
Gleichung auf die rechte Seite rübersynchronisieren und abtasten.  Fürs 
Audio habe ich so ein Filter, dass hochgenau interpoliert, allerdings 
nur bei <100kHz, dafür 24 Bit. d.h. bei Deiner Applikation hast Du dann 
u.U. wieder verbogene Wellenformen.

So richtig schnell wird man leider nur mit einer Chiplösung, mit 
einprogrammierbarer Wellenform.

von Commtel @. (commtel)


Lesenswert?

Ich muß jetzt nochmal nachfragen wie das ist mit dem Jitter des FPGA s.

Folgende Situation: Ein Quarzoszillator, lassen wir ihn GPS unterstützt
sein(langzeit Sabi), taktet den FPGA. Die Tabelle im FPGA wird "sauber"
durchlaufen.Der angeschlossene z.b 14Bit D/A liefert Sinus.

An welcher Stelle kommt der Jitter?

von Helmut S. (helmuts)


Lesenswert?

Ganz einfach. Der Clock der den DAC taktet darf auf keinen Fall aus dem 
FPGA kommen. Der externe Taktgeneraror muss sowohl den FPGA takten als 
auch den DAC.

von J. S. (engineer) Benutzerseite


Lesenswert?

Der Jitter entsteht im Wesentlichen dadurch, dass der FPGA eine ganze 
Reihe von Funktionen leisten muss und zu unterschiedlichen Zeiten 
unterschiedlich viel schaltet. Der ein FPGA aus HF-Sicht ein sehr mieser 
Analogschaltkreis ist (weil auf Pegel nicht viel Wert gelegt wird) 
"hüpfen" die Ausgänge mit ihren Nachbar-Pins mit. Das gibt 
Pegelvariationen und damit auch bei steilen dy/dt (Taktflanken) ein 
gewisses dt. Das ist der Jitter.

von Commtel @. (commtel)


Lesenswert?

Vielen Dank für die Erklärungen.

Welche Möglichkeiten hätten wir das zu umgehen?

von Helmut S. (helmuts)


Lesenswert?

Gar keine. Der Clock der aus einem FPGA käme ist halt nur 2. Klasse. 
FPGA-Jitter macht aus dem 12bitDAC bei 100MHz dann halt quasi einen 
6bitDAC.

von H. G. (Gast)


Lesenswert?

Gut, sollte kein Problem sein, den DAC aus der DDS zu speisen. Was aus 
meiner Sicht noch offen ist: Kann man den FPGA ohne PLL betreiben?

Das würde dann eine Synchstufe zwischen FPGA und DAC erfordern.

Was noch offen wäre:
Tabelle im FPGA oder im externen RAM.

von Helmut S. (helmuts)


Lesenswert?

Am Ende musst du halt die setup und hold time vom DAC einhalten. Wie du 
das machst ist egal.

Möglichkeit 1
Die internen Timing-Möglichlkeiten des FPGAs nutzen.

Möglichkeit 2
Den Takt außen so verzögern, dass die Daten zum richtigen Zeitpunkt am 
DAC ankommen. Vielleicht reicht ja auch schon eine Invertierung des 
Taktes.

von Thomas R. (tinman) Benutzerseite


Lesenswert?

Commtel @msn schrieb:
> Vielen Dank für die Erklärungen.
>
> Welche Möglichkeiten hätten wir das zu umgehen?

z.b. ein jitter attenuating clock von SiLabs mit 0,3ps RMS phasenjitter
ist besten geeignet um den FPGA generierten clock zu bereinigen.

von Topingenieur (Gast)


Lesenswert?

Thomas R. schrieb:
> jitter attenuating clock von SiLabs
Interessantes Teil. Der kann sogar andere Frequenzen erzeugen, wie es 
scheint.

von H. G. (Gast)


Lesenswert?

@Thomas und Helmut

Komme ich mit dem Jitter Attenuator besser hin, als mit einer stabilen 
Clock, die FPGA und DAC speist?

Wenn der FPGA nicht zu schnell arbeitet (sagen wir maximal 300 MHz), 
dann dürfte doch der Jitter nich so gross sein, dass der FPGA keine 
Daten mehr in den Dac bekommt und es müsste sich eine Taktverschiebung 
finden lassen, dass der DAC gut "lesen" kann.

von Duke Scarring (Gast)


Lesenswert?

G. H. schrieb:
> Wenn der FPGA nicht zu schnell arbeitet (sagen wir maximal 300 MHz),
Wenn Du Deinen FPGA mit 150 MHz sauber takten kannst, dann ist das schon 
schnell...

Duke

P.S.: Ich finde die Lösung mit dem sauberen Takt besser, als den 
ominösen "Jitter Attenuator".

von Thomas R. (tinman) Benutzerseite


Lesenswert?

Duke Scarring schrieb:

>
> P.S.: Ich finde die Lösung mit dem sauberen Takt besser, als den
> ominösen "Jitter Attenuator".

so ominös wird es auch nciht sein wenn Xilinx es auf Virtex 6
boards benutzt. Andererseit wenn ich schon eine saubere takt quelle
habe und das design noch nicht steht wozu dann das ganze durch
FPGA und attenuator jagen wenn es direkt gehen kann - wenn aber
das design den clock erzeugen soll ist wiederum der attenuator
eine gute lösung.

von J. S. (engineer) Benutzerseite


Lesenswert?

Generell sicher, aber ich bin nicht so sicher, ob das "Entjttern" hier 
überhaupt klappen würdet. So, wie ich das Datenblatt verstehe, deckt ein 
Exemplar nur einen ganz bestimmten Frequenzbereich ab. Wenn das FPGA 
aber die Waveform generieren soll, muss es bis in tiefste Frequenzen 
hinab arbeiten. Das macht der Baustein gfs nicht mit oder muss 
umprogrammiert werden. Aus dem Grund fällt ja auch, wie oben 
beschrieben, die PLL beim FPGA weg oder muss auch umprogrammiert werden.

Ich sehe die einzige Möglichkeit eines kontinuierlichen Betriebs darin, 
wie üblich, Digitales und Analoges - bzw Funktion und Timing zu trennen. 
Will heissen: Das FPGA rechnet nur, macht aber kein Timing. Die 
Billiglösung, wie in meiner Grafik oben, funktioniert dann natürlich 
nicht und die Taktung läuft über einen DDS-Baustein, wobei ich ja beim 
FPGA die Chance habe, den internen Filter digital an die Sollfrequenz 
anzupassen. Die Genauigkeit der Phasen hängt davon allein vom Baustein 
ab.

Wenn das FPGA eine Tabelle von sagen wir 8192 Werten hält, muss/darf die 
DDS minimal/maximal 8kHz produzieren, um noch ein 1HZ Signal 
abzuspielen. Die sind sehr klein gegenüber einem Anti-Aliasing-filter 
nach dem Baustein, sodass man die digitalen Stufen sieht, wodurch eine 
Rasterung des Taktes entsteht.(Auflösung der DDS über Filtersteilheit 
umgerechnet in Analogstufen und über die Steilheit des Schmitt-Triggers 
in Phasensprünge). Eine 12 Bit DDS hätte 4k Stufen, der Phasenvortrieb 
läge bei 24 Bit - log(8192;2) = 11 Bit. Damit wäre die Phasenauflösung 
bestimmend. Es wäre also eine DDS mit genauerem Akku zu wählen, z.B. 32 
Bit, wobei dann die Auflösung des DAC massgeblich wäre. Die Frage ist, 
wie gesagt, wie der Schmitttrigger im Umgebungspunkt seines 
Schwellenwertes schaltet und was er "sieht". Bei einem 32 Bit Akku wäre 
die Auflösung der 8kHz ja 19 Bit.

> Synchronisation

Der Jitter im FPGA ist dann gar kein Problem. Man braucht nur 1 
Synchstufe = Register am Ausgang / FastIO-FFs in den Zellen. Man könnte 
theoretisch auch den DAC (sofern er eine PLL hat) die Daten abholen 
lassen, indem man ein >2stufiges FiFO spendiert, wie man das in den 
Fällen macht, wo ein FPGA einen stark jitternden Datenstrom am Eingang 
glätten muss, oder Daten für einen jitternde Folgeschaltung 
bereitstellen muss.

von H. G. (Gast)


Lesenswert?

Halten wir mal fest:

DDS-IC (welches?) mit analogem Filter (Grenzfrequenz ?), ohne 
hintendrein geschaltetem Taktbereinigungs-IC erzeugt Taktfrequenz 0..X 
und treibt FPGA (welches) direkt und parallel DAC.

FPGA hat keine PLL, erzeugt nur die Daten aus der Tabelle, interpoliert 
(wie ?) und gibt Daten aus. Benutzt wird eine Synchronstufe, damit der 
DAC arbeiten kann.

Welcher DAC wäre geeignet? Welches Filter kommt hinter den DAC?

Reicht ein Buffer hinter der DDS oder müessen es zwei Buffer sein, für 
DAC und FPGA getrennt? (Reflektionen)

Wo liegt die Tabelle? Externes RAM, oder im FPGA (teuer)?

von M.K. (Gast)


Lesenswert?

Gerald Hellinghaus schrieb:
> FPGA hat keine PLL,

Gibt das nicht Syntheseprobleme? Die Setup-Hold-Zeiten können mit einer 
PLL (Möglichkeit der Taktversschiebung) leichter eingehalten werden und 
das auch noch automatisch?

von J. S. (engineer) Benutzerseite


Lesenswert?

Gerald Hellinghaus schrieb:
> Wo liegt die Tabelle? Externes RAM, oder im FPGA (teuer)?

Kommt auf die Grösse an. Wie genau soll denn die DDS werden? Um 
Chip-Qualität zu erzielen, musst Du mit wenigstens mit 1.000 - 10.000 
Punkten rechnen, vorausgesetzt, die Frequenz passt exakt rein, so wie Du 
es planst und Du interpolierst kurvig / filterst gut.

16k würde ich schon vorsehen. Wenn Du in die einprogrammierbare Welle 
noch Harmonische rein haben möchtest, brauchts Du ein Vielfaches. Ein 
externes RAM wird daher sicher nötig. Das BRAM im FPGA kann man auc 
bedeutend sinnvoller nutzen, als nur zum Tabellen speichern.

von M.K. (Gast)


Lesenswert?

Juergen S. schrieb:
> Wenn Du in die einprogrammierbare Welle
> noch Harmonische rein haben möchtest

Pro Oberwelle würden mindestes Faktor 2 an Punkten benötigt. Ich täte in 
jedem Fall ein zusaätzliche RAM nehmen, sonst macht das Projekt keinen 
Sinn.

Gerald Hellinghaus schrieb:
> Welches Filter kommt hinter den DAC?
Gibt es für sowas eigentlich fertige Filter?

von Edi M. (Gast)


Lesenswert?

MAXIM hat z.B. solche Filter. Ein "Low-Cost, 30MHz, Triple-Channel HDTV 
Reconstruction Filter " könnte man z.B. mit 60MHz ansteuern.

von Weltbester FPGA-Pongo (Gast)


Lesenswert?

Juergen Schuhmacher schrieb:
> einprogrammierbare Welle
> noch Harmonische rein haben möchtest,

Ihr müsst dabei bedenken, dass eine größere Tabelle auch eine geringere 
Frequenz bedeutet! Oder, sie muss schneller angeschoben werden.

von Edi M. (Gast)


Lesenswert?

Noch ein Einwurf von mir: Für eine ähnliche APP brauche ich einen 
Filter, der bis 400 MHz geht und möglichst steil ist. Wer da was hätte 
...

Ansonsten noch der Tipp, wer nur SINUS,RECHTECK, DREIECK benötigt, kommt 
bis 15MHz mit einem Chip für ein paar Euro aus:

http://www.analog.com/en/rfif-components/direct-digital-synthesis-dds/ad9837/products/product.html

von W.S. (Gast)


Lesenswert?

E. M. schrieb:
> Ansonsten noch der Tipp..

Nee, das ist kein toller Tip: 16 MHz und 10 Bit Auflösung. Egal wie man 
es dreht und wendet, bei allen digitalen Signalerzeugungen kriegt man 
nicht das, was man sich erhofft hatte. Bei niederen Frequenzen 
Amplitudenstufen und bei hohen Frequenzen auch noch Zeitstufen dazu - 
und bei Rechteck+Sägezahn auch noch Jittern wenn man nicht höllisch 
aufpaßt.
Einzige Ausnahme: Sinuserzeugung (dank Filter).

Die DDS von AD legen ja schon einiges vor, das man diskret per CPLD oder 
FPGA so leicht nicht selber gebacken bekommt, aber für nen guten 
Funktionsgenerator ist m.E. immer noch die gute alte Analogtechnik das 
beste was es gibt. Allenfalls mit digitaler "Unterstützung" z.B. ne PLL, 
die die Sollfrequenz macht oder so.

Alles andere geht zwar irgendwie auch, aber man muß eben die Grenzen 
kennen und damit leben und sollte sich nicht schwarz ärgern, wenn dann 
doch nicht der Super-Funktionsgenerator dabei herauskommt. Ich habe den 
ursprünglichen Thread auch gelesen und bin mir sicher, daß dessen 
Verursacher sich lediglich über die vielen "Features" des AD5930 freuen 
will, wie z.B. "Zirp"-Impulsbetrieb und so. Für nen normalen 
Funktionsgenerator auf dem Basteltisch ist sowas eher unbrauchbar, aber 
da wird der Gute schon irgendwann von allein dahinterkommen.

Man sollte nie vergessen, daß eine ganze Reihe von IC's bei AD für ganz 
bestimmte Zwecke entworfen wurden und für alle anderen Zwecke mäßig oder 
garnicht brauchbar sind. Ich denke da z.B. an den AD5933, von dem ich 
mal dachte, daß man damit ein ordentliches RLC-Meter bauen kann. 
Pustekuchen, wer es versucht, landet in einem Sumpf von Dingen, die so 
wie gewollt nicht gehen.

W.S.

von branadic (Gast)


Lesenswert?

W.S. schrieb:
> Ich habe den
> ursprünglichen Thread auch gelesen und bin mir sicher, daß dessen
> Verursacher sich lediglich über die vielen "Features" des AD5930 freuen
> will, wie z.B. "Zirp"-Impulsbetrieb und so.

Es sei dir versichert, dass dem nicht so ist. Zumindest bisher bin ich 
mit dem was hinten heraus kommt sehr zufrieden.

W.S. schrieb:
> Für nen normalen
> Funktionsgenerator auf dem Basteltisch ist sowas eher unbrauchbar, aber
> da wird der Gute schon irgendwann von allein dahinterkommen.

Moderene Funktionsgeneratoren bis 20MHz arbeiten insgesamt auch nicht so 
viel anders als die Lösung mit AD5930.

branadic

von J. S. (engineer) Benutzerseite


Lesenswert?

W.S. schrieb:
> bei allen digitalen Signalerzeugungen kriegt man
> nicht das, was man sich erhofft hatte.
Soso!

> Bei niederen Frequenzen Amplitudenstufen
Wie man die beseitigt, habe ich im DDS Artikel erklärt

> und bei hohen Frequenzen auch noch Zeitstufen dazu -
Die digitale Technik hat eben ihre Grenzen. Innerhalb derer, bekommt man 
die Sinuswerte aber durchaus exkat (genug) geliefert.

Das Filtern ist digital meistens zielführender möglich, als analog.

> und bei Rechteck+Sägezahn auch noch Jittern wenn man nicht höllisch
> aufpaßt.
Den Jitter, so vorhanden, hat man auch im Sinus, dort wird er nur über 
den Filter in Amplitudenschwebungen umgeleitet. Im Rahmen dessen bekommt 
man analog mit einem Komperator einen sehr guten Rechteck.

von BB (Gast)


Lesenswert?

> Im Rahmen dessen bekommt man analog mit einem Komperator einen sehr
> guten Rechteck.
Den bekommt man digital aber noch besser, sage ich mal :-)

von Audiohans (Gast)


Lesenswert?

Mit welchen Güten plant ihr in eurem Projekt?

Wird es möglich sein, mit der Architektur auch Audio-Frequenzen zu 
erzeugen, die eine entsprechende Güte aufweisen? Ich denke da an 120dB.

von W.S. (Gast)


Lesenswert?

"Mit welchen Güten.."

wie bitte?

Versuche doch mal selbst, dir das auszurechnen.
Wieviel Bit an DAC-Auflösung braucht man für 120 dB Amplitudenauflösung?
Welche Taktfrequenz braucht man bei einem Audiosignal, wenn man von 
einem Sample zum nächsten nicht mehr als -120 dB Änderung akzeptieren 
will?

Wenn du einen sauberen NF-Sinusgenerator suchst, dann bau dir einen 
Wienbrückengenerator. Der ist - sauberen Aufbau vorausgesetzt - immer 
noch das Beste, was du bekommen kannst.

W.S.

von J. S. (engineer) Benutzerseite


Lesenswert?

W.S. schrieb:
> Wieviel Bit an DAC-Auflösung braucht man für 120 dB Amplitudenauflösung?
Im Prinzip 1 einziges Bit, wenn das Rekonstuktionsfilter gut genug ist. 
Die Frage ist nur, wie hoch man damit kommt, ohne in den unsauberen 
Bereich des Rekonstruktionsfilters zu kommen und wieviel Rauschen man 
dabei hat. Mit einem billigen FPGA auf 50MHz erzeuge ich Dir mit einer 
Standard PWM (ein Ausgang!) ohne irgendwelche Tricks locker 15kHz mit 16 
Bit Genauigkeit und zwar echten 16 Bit Genauigkeit bei vollem 
Frequenzgang mit 99dB SFDR! Mit einem schnöden 16 Bit DAC (wenn er denn 
mal mindestens 10 analoge Bit bis 20kHz kann) sind es mindestens 
statistische Faktor 256 (SQRT(16 Bit)) und damit z.B. schon >350kHz! Mit 
nichtlinearer Vorverzerrung erreicht man den vollen Faktor des DAC, 
vorausgesetzt, man hat den FPGA an einem sauberen OSC dran und das 
Phasenrauschen begrenzt einen nicht etwa unzulässig.

W.S. schrieb:
> Wienbrückengenerator. Der ist - sauberen Aufbau vorausgesetzt - immer
> noch das Beste, was du bekommen kannst.
Es ist das einfachst aufzubauende, sage ich mal, wenn es um einen 
ordentlichen Sinus geht, auf den man ein Filter abstimmen kann. Aber 
hier geht es ja um die Programmierbarkeit und einen weit einstellbaren 
Frequenzbereich. Da sieht es bei einer Wienkrücke schon nicht mehr so 
einfach aus. Da brauchst Du für einen Bereich von 0..fmax immer mehrere 
umschaltbare Filter, die auf Bereiche hin optimiert wurden und wenn das 
noch beiFM steuerbar sein soll, wird auch der Aufbau schwierig.

Ein wichtiger Unterschied ist zudem der, dass die Wienkrücke aufgrund 
der notwendigen Regelung der Amplitude immer schwingt, was eine DDS 
nicht notwendigerweise tut, da die Ampltudenregelung vom Phasenverhalten 
abgetrennt ist / sein kann. Was eben passiert, ist das Schweben des 
AA-Filters bei hohen Abtastraten nahe an der Fmax. Aber auch das gibt es 
einfache Abhilfe mittels geeignet ausgelegten Tabellen mit nichtbinären 
Indizes und trickreichem Shapen und Dithern der Phase.

Um die Frage zu beantworten:

Selbst mit einem lumpigen PLD kann man bei nur 8 Bit Ausgang und einer 
R2R Widerstandsleiter, die zunächst keine gleichmäßigen Stufen und eine 
Linearität von <30dB hat (bei -40dB Rauschen wegen der Digitalausgänge) 
am Ende 70-80dB Linearität und Rauschfreiheit bis 300kHz 
(Ultraschallapplikation) generieren, wenn man Relinearisiert und 
ordentlich vorprozessiert.

von Friedrich S. (fseuhs)


Lesenswert?

J. S. schrieb:
> Mit einem billigen FPGA auf 50MHz erzeuge ich Dir mit einer
> Standard PWM (ein Ausgang!) ohne irgendwelche Tricks locker 15kHz mit 16
> Bit Genauigkeit und zwar echten 16 Bit Genauigkeit bei vollem
> Frequenzgang mit 99dB SFDR!

Kannst Du ein bißchen ins Detail gehen wie Du das machst?

von J. S. (engineer) Benutzerseite


Lesenswert?

BB schrieb:
>> Im Rahmen dessen bekommt man analog mit einem Komperator einen sehr> guten 
Rechteck. Den bekommt man digital aber noch besser, sage ich mal :-)

Da liegt ein Missverständnis vor. Der analoge Komparator ist nötig, weil 
er NACH dem AA-Filter sitzt, welche im Prinzip jede Phasenlage haben 
kann und nicht mehr im Raster der digitalen DDS sitzt! Und so ganz 
einfach ist der Komparator auch nicht zu bauen, weil er etwaigen 
niederfrequenten Anteil (DC-anteil) ignorieren muss.


Friedrich Seuhs schrieb:
> Kannst Du ein bißchen ins Detail gehen wie Du das machst?
Normalerweise produzieren 50MHz im ungünstigsten Fall alle 65536 Takte 
ein 16-Bit-Sample -> 800Hz. Mit einem Filter auf 300 Hz kriegst du einen 
sehr guten Sinus unterhalb von 300Hz, wenn Du die Bandbreite nach unten 
begrenzt und ein Bandfilter einsetzt, das Dir das DC-Problem löst.

Wenn Du die PWM auf den Filter anpasst, indem sie um den eigentlichen 
Wert herumregelt, kannst Du mit einem entsprechend steilen 2. Filter 
glätten und mit der Frequenz höher gehen und so mit wesentlich weniger 
bits dieselbe analoge Güte erzeugen. Das FPGA muss das Verhalten der 
Filters mitrechnen und passend aktiv steuern. Das Ganze geht so Richtung 
nichtlineare Vorverzerrung. Wenn das Filter z.B. 40 dB Dämpfung bringt, 
reichen Dir ein 10-tel der Auflösung. Bei 1/8 hast Du schon Faktor 64 
gewonnen und kommst auf fast 20kHz. Das ist dieselbe Methode, wie ich es 
beim Dithern beschrieben habe, nur mit einem analogen Filter.

von Friedrich S. (fseuhs)


Lesenswert?

J. S. schrieb:
> wenn Du die Bandbreite nach unten
> begrenzt und ein Bandfilter einsetzt, das Dir das DC-Problem löst.

Ich bin kein Audio-Freak sondern beschäftige mich mit Messtechnik, daher 
ist der DC-Anteil für mich auch wichtig.

J. S. schrieb:
> Wenn Du die PWM auf den Filter anpasst, indem sie um den eigentlichen
> Wert herumregelt, kannst Du mit einem entsprechend steilen 2. Filter
> glätten und mit der Frequenz höher gehen und so mit wesentlich weniger
> bits dieselbe analoge Güte erzeugen.

J. S. schrieb:
> Das FPGA muss das Verhalten der
> Filters mitrechnen und passend aktiv steuern. Das Ganze geht so Richtung
> nichtlineare Vorverzerrung.

Der Filter ist wohl analog, diesen digital anzupassen scheint mir bei 
den Toleranzen der analogen passiven Komponenten auchh nicht gerade 
einfach zu sein. So nohne Tricks geht das ja wohl doch nicht?

Läuft das ganze nicht eher in die Richtung Sigma-Delta DAC?

von J. S. (engineer) Benutzerseite


Lesenswert?

Friedrich Seuhs schrieb:
> Läuft das ganze nicht eher in die Richtung Sigma-Delta DAC?
Könnte man sagen, ja. Sowas ist aber auch nur für low cost Anwendungen 
geeignet oder eben für geringe Grenzfrequenzen und Auflösungen tauglich.

Es gibt zu dem Thema - gerade im Bezug auf Audio - ein schönes paper von 
einer AES-Convention, das erklärt, wo die Schwächen und Grenzen der 
1-Bit Wandlung liegen und warum es z.B. für high tech adio nicht 
tauglich ist.

http://peufeu.free.fr/audio/extremist_dac/files/1-Bit-Is-Bad.pdf

Wenn man genau hinschaut, tritt die Problematik auch hier im DDS-Projekt 
auf.

Audiohans schrieb:
> Wird es möglich sein, mit der Architektur auch Audio-Frequenzen zu
> erzeugen, die eine entsprechende Güte aufweisen? Ich denke da an 120dB.

Ich habe eine FPGA DDS für Audio am Laufen und kann aus eine 65k-Tabelle 
mit einem Filter nochmal 30dB rausholen. Man kommt durchaus auf 120dB. 
Allerdings ist es so, dass man so richtig tolle Sinustöne im 
Audio-Synthesebereich nicht so recht verwenden kann, zumindest, wenn es 
um die Musik geht. Fürs Messen natürlich schon. Das Beispielprojekt 
läuft auf einem Cyclone mit einem Adapterboard, das mit 150MHz 12 Bit 
generiert. Mit einem guten Filter dahinter kommt man da auch schon hin.

Letzlich kommt es auf Deine Hardware an. Superschön filtern kostet 
richtig FPGA-Fläche und damit leider Geld :-)

Friedrich Seuhs schrieb:
> Ich bin kein Audio-Freak sondern beschäftige mich mit Messtechnik, daher
> ist der DC-Anteil für mich auch wichtig
Das ist ein wenig das Problem. Digital verrauschen und schön filtern , 
um bei niedrigen Frequenzen die Sprünge in der Tabelle zu tunneln, 
klappt nur mit entsprechend langen Filtern hoher Ordnungszahlen.

von FPGA-Vollprofi (Gast)


Lesenswert?

Gerald H. schrieb:
> Auf der Basis dieses Projektes
> Beitrag "Projekt: DDS basierter Funktionsgenerator mit AD5930"
>
> möchte ich einen programmierbaren DDS bauen, mit beliebigen
> Signalformen, am Besten in einem FPGA.
Das DDS-Verfahren eignet sich nur für Sinusfrequenzen, weil es ansonsten 
zu Phasensprüngen kommt. Beliebige Signalformen lassen sich damit nur 
erzeugen, wenn verschiedenen base band Oscillatoren generiert und deren 
Werte überlagert werden. Im Allgemeinen Fall liesse sich dass mit eine 
iFF anstellen, jenachdem mit unterschiedlicher Genauigkeit und Qualität.

von Martin K. (mkmannheim) Benutzerseite


Lesenswert?

Hallo G.H.  Bist du in dem Projekt noch aktiv? Wurde das Gerät 
entwickelt?

von J. S. (engineer) Benutzerseite


Lesenswert?

FPGA-Vollprofi schrieb im Beitrag #3393427:
> Das DDS-Verfahren eignet sich nur für Sinusfrequenzen, weil es ansonsten
> zu Phasensprüngen kommt. Beliebige Signalformen lassen sich damit nur
> erzeugen, wenn verschiedenen base band Oscillatoren generiert und deren
> Werte überlagert werden. Im Allgemeinen Fall liesse sich dass mit eine
> iFF anstellen, jenachdem mit unterschiedlicher Genauigkeit und Qualität.

Nur der Vollständigkeit halber sei erwähnt, dass man eine per DDS 
erzeugte Sinuswelle stark filtern und als PLL-Eingang verwenden kann, um 
einen Takt für eine weitere DDS zu erzielen, die dann durchaus beliebige 
Signalformen präzise und ohne Sprünge abarbeiten kann.

Beitrag "Re: Universell programmierbarer DDS-Funktionsgenerator"

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.