4.8.2. Oszillatoren

Mit Hilfe eines solchen Phasors kann nun relativ einfach eine andere periodische Wellenform, wie beispielsweise ein Sinus generiert werden:

4.8.2.1. Generierung einer Sinusschwingung durch Rechnen

Abbildung 4.8. Generierung einer Siunusschwingung durch Rechnen

cos osc01

<<[[fig:cos-osc01.fig>> zeigt, wie eine Sinusschwingung durch Rechnen erzeugt wird: Der Ausgang des Phasors bildet den Eingang (die x-Werte) einer Cosinus Funktion. Der Ausgang der Cosinus Funktion ist dann bereits die gewünschte Schwingung. Dabei unterscheiden sich vetrschiedene Computermusiksysteme darin, wie der Cosinus berechnet wird: Bei pd ist der Eingang des Cosinus die Phase (Werte von 0..1), die eine volle Periode bedeuten. Bei anderen Systemen wird als Eingangswert der Phasenwinkel im Bogenmaß (0..2PI) erwartet. In diesem Fall, muss der Ausgang des Phasors zunächst bit 2PI=6.28 multipliziert werden, bevor die Cosinus Funktion berechnet wird.

4.8.2.2. Generierung einer Sinusschwingung durch Table-Lookup

Abbildung 4.9. Generierung einer Siunusschwingung durch Table-Lookup

cos osc02

???

zeigt eine andere Möglichkeit zur Erzeugung einer Sinusschwingung durch sogenanntes 'Table-Lookup'. In diesem Fall wird eine Tabelle (englisch 'table', in pd auch 'array' genannt) verwendet, die die Ergebnisse der Cosinusfunktion einer einzigen gesamten Periode enthält. Um eine möglichst feine Auflösung der Funktion zu erhalten, empfiehlt es sich, eine möglichst große Tabelle (beispielsweise mit 1024 Werten) zu verwenden.

Ein Oszillator wird nun dadurch erzeugt, dass man den Ausgang des Phasors mit der Größe der Tabelle multipliziert und dann den Tabellenwert ausliest, der diesem errechneten Index entspricht.

Da der errechnete Wert in den meisten Fällen nicht ganzzahlig ist und daher nicht genau auf einem Tabellenwert liegt, gibt es verschiedene Möglichkeiten, wie man vorgehen kann:

  1. Rundung

    Es wird der nächstliegende Tabellenwert ausgelesen (in pd wird dieses Verfahren von "tabread~" verwendet).

  2. Lineare Interpolation

    Es wird eine Linie durch die benachbarten Tabellenwerte gezogen, zwischen denen der errechnete Indexwert liegt und der y-Wert auf dieser Linie verwendet, der an der Position des errechneten Indexwertes liegt.

  3. Polynomiale Interpolation

    Es werden mehrere (meist 4) benachbarte Werte aus der Tabelle um den errechneten Indexwert verwendet und mit Hilfe eines speziellen Algorithmus wird eine möglichst ausgeglichene Kurve durch diese Werte gelegt. Der Kurvenwert an der Stelle des errechneten Wertes wird dann verwendet (in pd wird dies mit "tabread4~" realisiert).

Qualitativ ist das erste Verfahren am schlechtesten und das letzte Verfahren am besten, allerdings ist das erste Verfahren auch das schnellste Verfahren, während das letzte Verfahren rechenintensiver ist. Man kann die Nachteile des ersten Verfahrens allerdings auch durch ausreichend groß gewählte Tabellen kompensieren.

Das Verfahren durch Table-Lookup hat den Vorteil, dass man damit 'beliebige' periodische Wellenformen erzeugen kann. Nachteil ist unter Umständen eine geringere Flexibilität bei dynamischer Modulation des Klangs, da es schwer ist, die Wellenform zu verändern, während der Oszillator Töne produziert.

results matching ""

    No results matching ""