Next: Amplitude , Previous: Oszillatoren, Frequenz und Amplitude , Up: Oszillatoren, Frequenz und Amplitude , Home: Einführung in die Digitale Elektronische Klangsynthese

Einführung in die Digitale Elektronische Klangsynthese

5.8.2. Oszillatoren

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

  1. Generierung einer Sinusschwingung durch Rechnen
    cos-osc01.svg
    Abbildung 13: Generierung einer Sinusschwingung durch Rechnen

    Abb. 13 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..2*PI) erwartet. In diesem Fall, muss der Ausgang des Phasors zunächst bit 2*PI=6.28 multipliziert werden, bevor die Cosinus Funktion berechnet wird.

  2. Generierung einer Sinusschwingung durch Table-Lookup
    cos-osc02.svg
    Abbildung 14: Generierung einer Siunusschwingung durch Table-Lookup

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

Autor: Orm Finnendahl

Created: 2024-07-23 Di 10:41

Validate