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?
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.
>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.
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.
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?
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.
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.
Vielen Dank für die Erklärungen. Welche Möglichkeiten hätten wir das zu umgehen?
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.
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.
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.
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.
Thomas R. schrieb: > jitter attenuating clock von SiLabs Interessantes Teil. Der kann sogar andere Frequenzen erzeugen, wie es scheint.
@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.
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".
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.
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.
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)?
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?
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.
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?
MAXIM hat z.B. solche Filter. Ein "Low-Cost, 30MHz, Triple-Channel HDTV Reconstruction Filter " könnte man z.B. mit 60MHz ansteuern.
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.
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
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.
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
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.
> Im Rahmen dessen bekommt man analog mit einem Komperator einen sehr > guten Rechteck. Den bekommt man digital aber noch besser, sage ich mal :-)
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.
"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.
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.
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?
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.
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?
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.
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.
Hallo G.H. Bist du in dem Projekt noch aktiv? Wurde das Gerät entwickelt?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.