Digitaler LaPlace-Funktionsgenerator im FPGA
Ein digitaler Funktionsgenerator, basierend auf der Wellenformsynthese nach LaPlace / Fourier.
von Jürgen Schuhmacher
Funktionen
Auf der Basis von Sinuswellen werden komplexe Wellenformen in Echtzeit zusammengesetzt.
- Signalformen: Sinusgrundwelle + bis zu 7 Oberwellen, inzwischen erweitert auf 31
- Ausgangsfrequenz: von 0 Hz bis 25 MHz in Cyclone IV-chip (bei DDS)
- Ausgangsfrequenz: von 0 Hz bis 5 MHz in Cyclone IV-chip (bei VA-Oszillation)
- Amplitude +/-3V bei Verwendung der Beispiel-Plattform mit DACs in 3.3V-Technologie
Die Darstellung gelingt hier nur über direkte Ausgabe über VGA (Siehe Projekt VGA Core in VHDL, daher gibt es nur Screenshots). Alternativ würde ein mehrkanaliges Oszilloskop ausreichen, um die Signale zu scannen.
Erzeugung
Die Sinuswellen selbst wurden aufgrund der benötigten Genauigkeit in diesem Projekt aus einer interpolierten, mehrfach abgetasteten Sinustabelle (phase dithering) gemäß dem DDS-Prinzip gewonnen, nochmals gefiltert und in der Phase so verschoben, dass die frequenzabhängige Phasenverschiebung durch den Filter kompensiert wird und die ideale Addition korrekt gelingt. In einer späteren Version für Audio wurden selbstschwingende Oszillatoren auf der Basis der DGL zweiter Ordnung verwendet. Diese erfordern mehr Rechenaufwand, liefern aber besonders bei hohen Frequenzen den besseren Sinus. Für einfache Operationen weit unterhalb der Abtastfrequenz reicht eine Vervielfachung der Frequenz mittels Multiplikation und Bereinigung um den Gleichanteil. Diese Methode eignet sich auch für die Berechnung auf Mikrocontrollern.
Anwendungen
Das System wird als z.B. Testgenerator verwendet und dient u.a. zum design von komplexen Impulsen für Sonderanwendungen, die parametrierbare bandlimitierte Pulse benötigen oder als Klangsyntheseeinheit.
Beispiel bandbegrenzte Rechtecke
Durch geschickte Wahl der Parameter kann durch Einfügen von Oberwellen ein zunehmend besseres Rechteck gewonnen werden - auf Wunsch auch ohne die Überschwinger, die sich bei der klassischen Fourier-Entwicklung ergeben. Der erste Ansatz ist das Einfügen der ersten Oberwelle - beim Rechteck die dreifache Frequenz - mit theoretisch dem Faktor 0,125 gegenüber dem 1,125-fachen der Grundwelle. Der nächste theoretisch optimale Fall wäre die Hinzunahme der 5. Oberwelle mit: 1,2 x f1 + 0,24 * f3 + 0,048 * f5. Weiter habe ich gefunden: 1,0 x f1 + 0,215 * f3 + 0,055 * f5 + 0,0085 * f7.
Setzt man das fort gelangt man zu einem immer steileren Anstieg der Funktion mit flachem Verlauf im Maximalbereich. Funktionen dieser Art werden vereinzelt auch als "flat top functions" bezeichnet und als Fenster in der Signalverarbeitung oder zur direkten Ansteuerung von Leistungselektronik benutzt.
Siehe : Bandbegrenzte Rechtecke
Beispiel Wellenfeld
Bei Audio-Anwendung dient es bei der virtuellen Wave Table Synthese: Dabei werden mehrere Kanäle und damit Wellen gleichzeitig berechnet, dafür aber nur mit maximal 768ks/sec. Die finale Welle wird dann durch gewichtetes Addieren komplett in Echtzeit berechnet, statt sie (wie beim Original) aus Tabellenwerten zusammenzusetzen, die durch das Durchschreiten der Tabellen selektiert werden. Damit ist auch eine Wellenmodifikation im Frequenzbereich, statt nur im Zeitbereich möglich.