Sinusgenerator mit IIR-Filter
Ein Sinusgenerator wird heute in digitaler Technik üblicherweise nach dem DDS-Verfahren aufgebaut. Näherungsverfahren für den Sinus sind noch eine vergleichbare Alternative sowie das Glätten eines Rechtecks oder Dreieicks mit einer Kette aus IIR-Filtern. Allen gemein ist eine Vorgabe der Frequenz in Form einer äusseren Anregung.
Funktionsübersicht
Weniger bekannt ist der Aufbau mit einem selbstschwingenden Filter, das lediglich aus den üblichen Bestandteilen Addierer, Multiplizierer und Zwischenspeicher besteht. Weder eine Sinustabelle, noch zeitraubende Iterationsschritte, wie beim CORDIC-Verfahren, sind hierfür erforderlich. Die gleichzeitige Nutzung von Sinus und Cosinus ist ohne zusätzlichen Aufwand möglich. Im Gegensatz zur DDS muss man allerdings die Amplitude stabilisieren.
Aufbau
Links vier Multiplizierer mit den Konstanten a...d, danach zwei Addierer und zwei Zwischenspeicher für eine Sampletaktperiode. Die beiden Ausgänge y1 und y2, im Buch Zustandsvariable genannt, haben je nach Oszillatortyp unterschiedliche Phasenverschiebungen. Für Sin/Cos-Oszillatoren muss sie 90 Grad betragen.
In der folgenden Tabelle sind die vier Konstanten a...d rechts mit der Hilfsvariablen k aufgelistet. Sie ergibt sich gemäß der vorletzten Spalte aus dem Winkel θ (kleines Theta), um den die Sinusschwingung pro Sampletakt weiterrückt.
Aus der gewünschten Sinusfrequenz ƒosz und der Samplefrequenz ƒsample folgt
- [math]\displaystyle{ \theta = \frac{f_\text{osz}}{f_\text{sample}}\cdot 360^\circ }[/math]
Die beiden Barkhausen-Bedingungen für Oszillatoren (Schleifenverstärkung = 1 und Phasendrehung = n*360°) lauten hier
- ad - bc = 1
- | a + d | < 2
Oszillatortyp | Multiplikationen | Gleiche Ampl. | Sin/Cos | k = | Matrix [a/b/c/d] |
---|---|---|---|---|---|
(b = –c) | (a = d) | ||||
biquad | 1 | ja | nein | 2·cos(θ) | [k / -1 / 1 / 0] |
Digital Waveguide* | 1 | nein | ja | cos(θ) | [k / k-1 / k+1 / k] |
Equi-ampl. staggered update | 2 | ja | nein | 2·sin(θ/2) | [1-k² / k / -k / 1] |
Quadrature staggered update | 2 | nein | ja | cos(θ) | [k / 1-k² / -1 / k] |
Coupled standard quadrature | 4 | ja | ja | sin(θ) | [√(1-k²) / k / -k / √(1-k²)] |
*) Der Typ "Digital Waveguide" ist patentiert, US-Pat.#5701393
Amplitudenregelung
Um ein Aufschaukeln oder Abklingen der Amplitude zu verhindern, kann man:
- Nach einigen Schwingungen den Anfangszustand wieder herstellen.[2] Das führt zu erhöhtem Jitter und funktioniert nur für ganzzahlige Bruchteile der Samplefrequenz.
- Die Amplitude mittels "Pythagoras" berechnen, damit y1 und y2 mit einem Korrekturfaktor multiplizieren. Es reicht aus[1], die Summe der Amplitudenquadrate zu berechnen, die Wurzelberechnung kann entfallen.
- Die Amplitude mittels einer einfachen AGC-Regelung permanent korrigieren.
Vergleich mit anderen Verfahren
Nachteile
Das Filter muss mit einer genügend grossen Anzahl von Zwischenpunkten berechnet werden, wenn es korrekt und genügend genau schwingen soll. Das Verfahren ist daher für technische Anwendungen meist nicht nutzbringend, da sich speziell in Hardware mit unwesentlich mehr Aufwand genauere Sinusdarstellungen mit erheblich höherer Grenzfrequenz - oder umgekehrt ähnlich gute Ergenisse mit wesentlich weniger Aufwand erzielen lassen und allesamt nicht unter dem "Amplitudenproblem" leiden.
Konkret bedarf es für einen Sinus mit <6% Abweichung lediglich der parabolischen Annäherung mittels x*(1-x) ohne jegliche Interpolation. Bei Nutzung einer Sinustabelle von 8x2 Werten für Sin/Cos und gegenseitiger Steigung für Interpolation lassen sich mit nachgeschaltetem IIR-Filter Frequenzen bis direkt an Nyquist/2 erreichen, die bereits auf 1% genau berechenbar sind. Für platzsparende Applikationen ist die Nutzung eines mit mehrfachen IIR-Filtern gerundeten Dreiecks empfehlenswert.
Vorteile
Eingesetzt werden kann das Filter immer dann, wenn die Genauigkeit der sinuswelle, speziell der Amplitude unerheblich ist und niedrige Frequenzen, sowie geringe Frequenzstabilität benötigt werden, wie bei der Erzeugung von simplen Audiosignalen. Auch dann, wenn viele Kanäle zu bedienen sind und der Zugriff auf Sinustabellen und Mehrfachfilter aufgrund der benötigten Speicher ineffektiv wird. Bei FPGAs und MCUs z.B. könnte zwar der Zugriff auf die Sinustabelle noch kanalweise alternierend erfolgen - die Glättung mit Mehrfach IIR-Filtern erfordert jedoch für jeden kanal mehrere Wertespeicher entsprechender Auflösung.
Einsatzgebiete
Musik
Optimal ist das Verfahren dann, wenn auf eine exakte und schnelle Amplitudenkorrektur verzichtet werden- und eine simple Regelung verwendet kann und sich die damit ergebende, natürliche Rückwirkung des Regelverhältens der Amplitudenkorrektur auf die Frequenz auch noch positiv auswirkt. Durch eine geschickte Amplitudenregelung, welche die frequenzbestimmenden Parameter die Gleichung geeignet dynamisch beeinflusst, wird die Welle sozusagen minimal beschleunigt oder gebremst, was einer geringen Frequenzmodulation gleichkommt. Auf diese Weise erzeugte Audiosignale sind "natürlicher" und musikalisch "lebendiger", insbesondere bei der Mischung mit anderen Signalen änhlicher Grundfrequenz, da die unschönen periodischen Interfrenzen unterbleiben, weil die Regelung zu einer langsamen und vor allem unkorrelierten Frequenzmodulation führt.
Technik
Das Verfahren des selbschwingenden Oszillators lässt sich dahingehend ausbauen, dass die abstrakten frequenzbestimmenden Parameter in die konkreten Werte für Dämpfung und Masse - sowie zustandsstimmenden Werte für Sinus/Cosinus-Werte in die Aspekte Geschwindigkeit und Weg konkretisiert werden, von denen sich wiederum die Beschleunigung ableiten lässt. Damit können sowohl externe Anfangsbedingungen wie Anfangsgeschwindigkeit und Anfangswert, als auch eine Beschleunigung zugeführt werden, womit eine Reihe von klassischen Feder-Masse-Dämpgungssystemen berechenbar wird. Durch Zusammenschaltung werden komplexe Gefüge in ihrem Verhalten simulier- und berechenbar, so bilden sich z.B. Oberschwingungen auf Wellen und Getrieben und deren Interaktion mit elektronischen Regelungen perfekt ab.
Thema im Forum
- iir Filter als Sinusgenerator
- Sinuserzeugung in VHDL
- FPGA Größe ausreichend für komplexen FM Synthesizer
Literatur
- ↑ 1,0 1,1 1,2 Streamlining Digital Signal Processing, Kapitel 33, S. 319-336 "Recursive Discrete-Time Sinusoidal Oscillators" (Übersicht über unterschiedliche Oszillatorschaltungen), ISBN 9781118278383
- ↑ Digital Filters and Signal Processing, S. 465-469 "Digital Oscillators and Synthesizers", ISBN 079239559X
3. Digitale Signalverarbeitung: Bausteine, Systeme, Anwendungen, S. 51-52 "Einfacher Sinus-Cosinus-Generator", ISBN 9783905681420
Weblinks
- Das Kapitel aus 1. als PDF auf der Webseite des Autors Clay Turner (IEEE Signal Processing Magazine, Mai 2003 S.103-111)