www.mikrocontroller.net

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


Autor: Gerald H. (freiburger)
Datum:

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?
Autor: hp-freund (Gast)
Datum:

Autor: Helmut S. (helmuts)
Datum:

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

Also das ist kein DDS-Generator sondern ein reiner Arbitrary Waveform
Generator. Wenn jemand DDS will, dann passt das dort Gebotene nicht.
Autor: J. S. (Firma: Selbstständig) (engineer) Benutzerseite
Datum:
Angehängte Dateien:

>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.
Autor: J. S. (Firma: Selbstständig) (engineer) Benutzerseite
Datum:

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.
Autor: Commtel @msn (commtel)
Datum:

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?
Autor: Helmut S. (helmuts)
Datum:

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.
Autor: J. S. (Firma: Selbstständig) (engineer) Benutzerseite
Datum:

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.
Autor: Commtel @msn (commtel)
Datum:

Vielen Dank für die Erklärungen.

Welche Möglichkeiten hätten wir das zu umgehen?
Autor: Helmut S. (helmuts)
Datum:

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.
Autor: Gerald H. (freiburger)
Datum:

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.
Autor: Helmut S. (helmuts)
Datum:

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.
Autor: Thomas R. (tinman)
Datum:

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.
Autor: Topingenieur (Gast)
Datum:

Thomas R. schrieb:
> jitter attenuating clock von SiLabs
Interessantes Teil. Der kann sogar andere Frequenzen erzeugen, wie es
scheint.
Autor: Gerald H. (freiburger)
Datum:

@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.
Autor: Duke Scarring (Gast)
Datum:

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".
Autor: Thomas R. (tinman)
Datum:

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.
Autor: J. S. (Firma: Selbstständig) (engineer) Benutzerseite
Datum:

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.
Autor: Gerald H. (freiburger)
Datum:

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)?
Autor: M.K. (Gast)
Datum:

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?
Autor: J. S. (Firma: Selbstständig) (engineer) Benutzerseite
Datum:

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.
Autor: M.K. (Gast)
Datum:

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?
Autor: E. M. (elektromeister)
Datum:

MAXIM hat z.B. solche Filter. Ein "Low-Cost, 30MHz, Triple-Channel HDTV
Reconstruction Filter " könnte man z.B. mit 60MHz ansteuern.
Autor: Weltbester FPGA-Pongo (Gast)
Datum:

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.
Autor: E. M. (elektromeister)
Datum:

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-di...
Autor: W.S. (Gast)
Datum:

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.
Autor: branadic (Gast)
Datum:

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
Autor: J. S. (Firma: Selbstständig) (engineer) Benutzerseite
Datum:

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.
Autor: BB (Gast)
Datum:

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

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.
Autor: W.S. (Gast)
Datum:

"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.
Autor: J. S. (Firma: Selbstständig) (engineer) Benutzerseite
Datum:

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.
Autor: Friedrich Seuhs (fseuhs)
Datum:

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?
Autor: J. S. (Firma: Selbstständig) (engineer) Benutzerseite
Datum:

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.
Autor: Friedrich Seuhs (fseuhs)
Datum:

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?
Autor: J. S. (Firma: Selbstständig) (engineer) Benutzerseite
Datum:

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

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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel




Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder GIF-Format hochladen.
Siehe Bildformate

Mit dem Abschicken erkennst du die Nutzungsbedingungen an.

webmaster@mikrocontroller.netImpressumNutzungsbedingungenWerbung auf Mikrocontroller.net