Seite 1 von 2

OSZILLATOREN [3] WAVETABLES

Verfasst: 19. August 2012, 15:31
von Rampensau
Rampensau hat geschrieben:Aber bis zur endgültigen Reife (in Reaktor) wird wohl noch einige Zeit ins Land verstreichen, weil mich noch andere Forschungen quälen.
http://www.youtube.com/watch?v=N036oZdpCrA
Edit: Hehe, eigentlich sollte ich mich für mein Gelaber schämen. Ich bin aber stolz darauf, was bei dem Projekt in so kurzer Zeit auf die Beine gestellt wurde.
Beim Dreh des Videos war ich so perplex, dass ich kaum etwas Vernünftiges erzählen konnte. Es hat sich aber gezeigt, dass man bei der Programmierung von DSPs genau auf die Erfahrungen zurückgreifen kann, die man über die Jahre in Reaktor-Core gesammelt hat. ;)

Hiermit will ich hier eine bewährte Methode einführen, komplexe Wellenformen zu generieren, ohne aufwendige Berechnungen durchführen zu müssen. Dieser Abschnitt wird etwas einfacher zu verdauen und ist nicht so Mathe-lastig, wie der Vorherige.

Wavetables

1. Zielbestimmung
2. Grundbegriffe
3. Wellenformen
4. Interpolation
5. Waveshaping, Phase-Distortion

1. Zielbestimmung

Hierbei möchte ich mich auf die einfachste Form der Wavetable-Synthese beschränken und lediglich (angelehnt an das Core-Handbuch) die Wellenform durch Auslesen einer Lookup-Table erzeugen. Man wird sehen, dass das Prinzip des Waveshapings hier Anwendung findet (wie auf Seite 1, 2: Taylor). Nur bei der Wavetable liegen die berechneten Datenpunkte bereits vor und müssen nicht erst aufwendig erzeugt werden.
Tiefer kann und möchte ich zunächst nicht in die Wavetable-Synthese eingehen. Das ist ein weites Feld von Möglichkeiten und Freiheiten und irgendwie hat jeder eine andere Anschauung zur Wavetable-Synthese.
Aber das Grundprinzip ist stets: Es werden Signale generiert, indem Datenpunkte aus Tabellen ggf. neu zusammengesetzt werden. Wir wollen nun lediglich die Grundwellenformen synthetisieren, indem wir sie Wert für Wert aus Tabellen herauslesen. Dabei werden wir entdecken, das wir alles, was dafür notwendig ist, schon (fast) programmiert haben.

Anders als das Core-Hanbuch möchte ich auch eine Lösung zur Interpolation der Tabellenwerte vorstellen. Am Ende will ich noch auf einige Punkte eingehen, die stets (in gängigen Bereichen) für Verwirrung sorgen und immer eng mit der Wavetable-Synthese verbunden geglaubt werden. ;)

Re: OSZILLATOREN [3] WAVETABLES

Verfasst: 21. August 2012, 19:10
von Rampensau
2. Grundbegriffe

Wavetable
wavetable.jpg
Eine Wavetable ist erst einmal nicht mehr und nicht weniger als eine Tabelle, die Datenpunkte einer oder mehrerer Wellenformen enthält. Ich möchte mich aber nicht lange mit Begrifflichkeiten auseinandersetzen. Ich will nur ein paar Grundsteine legen, die beim ersten Lesen nicht komplett verstanden werden müssen, aber die beim ersten Kontakt mit Wavetables auch im Bezug zu Reaktor und evtl. bei der Modellierung oder Realsierung eines Problems durchaus behilflich sein könnten. Hierzu möchte ich zunächst generalisieren. Das Instrumentarium bei der Arbeit mit Wavetables ist ein relativ simples und wird durchaus auch in anderen Anwendungsbereichen eingesetzt. Das Prinzip der Wavetable kann man so verallgemeinern, dass man von einem Vektor oder auch einer Matrix spricht, anstatt von einer Tabelle.
vector.jpg
Dieses Modell einer diskreten Funktion als Vektor entspricht viel mehr der Modellvorstellung eines kontinuierlichen Funktionsraumes als eine Wavetable. So lässt sich auch vieles was in kontinuerlichen Räumen möglich ist, auf die Wavetable, also auf die Funktion als Vektor übertragen. So entpuppt sich bspw. das Integral eines Produktes zweier Funktionen (höhere Mathematik, schwer zu lösen) als Skalarmultiplikation zweier Vektoren (einfache Vektoroperation, einfach zu lösen). Diese Überlegung wird bspw. später bei der Implementierung einer FFT eine Rolle spielen.
Eine Wavetable mit N Samples stellt also ein Vektor mit endlich vielen, also N Elementen (oder Dimensionen :D ) dar. Dieser Vektor lässt sich, im Gegensatz zu einer kontinuierlichen Funktion (welche letztendlich auch ein Vektor im kontinuierlichen Raum darstellt), wunderbar (abhängig vom vorhanden Speicherplatz und der Bitbreite des CPU) auf dem Computer darstellen und in einem Speicher legen.

LUT (Lookup Table)

Wir können aber noch weiter verallgemeinern. In dem wir nicht mehr in diesem Vektor Funktionswerte speichern, sondern andere Informationen. In jedem Fall werden diese durch individuelle Adressen referenziert. (Lookup)
Wir könnten auch eine Befehlskodierung mit solch einer Tabelle realisieren. Bei einer 4-Bit CPU lassen sich so Prozessor-Befehle implementieren, die in ihrem Steuerregister weit mehr als nur 4 Bit bewegen. Die (in diesem Fall max. 16) Befehle werden lediglich mit Hilfe dieser 4 Bit adressiert.
4Bit Rechner LUT.jpg
Es macht wirklich Spaß, so eine Umkodierungs-Logik zu basteln. Die Moral von der Geschichte ist eine Einsparung im Aufwand, bei der Berechnung oder Steuerung, etc. So lassen sich z.B. die Ergebnisse aufwändiger Algorithmen in Lookup Tables sichern, und immer wieder aufrufen, ohne die Berechnung erneut durchzuführen. Das bringt einen schon sehr weit. Aber wie bei jeder tollen Sache bringt es nicht nur Vorteile mit sich. So wird man mitunter, durch die "endgültige" Diskretisierung der Funktionswerte noch weiter beschränkt in der Bandbreite. Die Funktionswerte sind wie in Stein gemeisselt. Aber dazu später mehr.

(Bilder und Beispiele folgen)

Re: OSZILLATOREN [3] WAVETABLES

Verfasst: 22. August 2012, 04:22
von herw
Ich liebe Mathematik :D ::kaffee::

Dieses Thema wollte ich schon seit Jahren angehen, habe es aber immer wieder auf später verschoben; jetzt habe ich auch ohne Aufwand dank deiner Mühe die Muße dazu!

Nettes Video übrigens!

Re: OSZILLATOREN [3] WAVETABLES

Verfasst: 24. August 2012, 01:14
von Rampensau
herw hat geschrieben:Ich liebe Mathematik :D ::kaffee::

Dieses Thema wollte ich schon seit Jahren angehen, habe es aber immer wieder auf später verschoben; jetzt habe ich auch ohne Aufwand dank deiner Mühe die Muße dazu!

Nettes Video übrigens!
Ich hab erst durch Reaktor meine Leidenschaft für die Mathematik wieder entdeckt. Am liebsten hätte ich hier im Forum so ne kleine Mathe-Ecke. :roll:
Muss aber nicht sein...

Ich denke, morgen wird schon mal was Feines gebastelt. Ich gehe jetzt erstmal schlafen..

Grüße
Benni

Re: OSZILLATOREN [3] WAVETABLES

Verfasst: 24. August 2012, 05:31
von herw
Rampensau hat geschrieben:
herw hat geschrieben:Ich liebe Mathematik :D ::kaffee::
[...]
Ich hab erst durch Reaktor meine Leidenschaft für die Mathematik wieder entdeckt. Am liebsten hätte ich hier im Forum so ne kleine Mathe-Ecke. :roll:
Muss aber nicht sein...
[...]
Grüße
Benni
gute Idee ::kaffee:: ich denke darüber nach

PS: sehr gute Idee! ich werde ein REATOR-Mathematik-Unterforum einrichten; einige Themen fallen mir spontan ein; man hätte auf diese Art ein REAKTOR-spezifisches Nachschlagewerk

Re: OSZILLATOREN [3] WAVETABLES

Verfasst: 25. August 2012, 23:23
von Rampensau
herw hat geschrieben:[...]ich werde ein REATOR-Mathematik-Unterforum einrichten[...]
dort könnte man dann auch viele Grundlagen wie Differential-, Integralrechnung, komplexe Zahlen, usw. anhand von Reaktor behandeln. So für Mathe-Noobs, die ernsthaft mit DSP rummachen wollen. :roll:
Man könnte ja auch andere Probleme mit Reaktor modellieren, die erstmal nichts mit DSP zu tun haben. Da könnte man schon sehr interessante Dinge aufbereiten.

Re: OSZILLATOREN [3] WAVETABLES

Verfasst: 25. August 2012, 23:43
von Rampensau
Array/ Table
Table.jpg
Reaktor Core besitzt Module, welche den Zugriff auf "Tabellen" auf einfache Weise ermöglichen. Die Module lassen im Grunde genommen nur einspaltige Tabellen zu, also Vektoren, aber man kann sich mehrdimensionale Speicherbereiche, also Tabellen mit mehreren Spalten und Zeilen (Matrizen, wenn man so will) aus nur einem Array oder einer Table basteln, wenn man die Adressierung der einzelnen Zeilen entsprechend berechnet. Aber das ist ein triviales Problem... Zunächst behandeln wir nur eindimensionale Arrays/ Tabellen.

Im Gegensatz zum Array, lässt sich die Tabelle nur mit Daten beschreiben, indem man eine Datei mit Datenpunkten hineinlädt, oder die Einträge per Hand hineinschreibt. Das Array lässt sich nur über die OBC-Verbindung beschreiben. Da die Wellenformen schon in Form von Textdateien vorliegen, lohnt sich der Einsatz der Table. (siehe oben)

Um mal auf ein sehr verwandtes Thema zu verweisen:
http://www.reaktor-forum.de/viewtopic.php?f=9&t=918
Dort finden sich ein paar Beispiele zur Verwendung der Arrays im Zusammenhang mit Wavetables.

Adressierung

Nun können die Datenpunkte auf verschiedene Weisen, d.h. bspw. in einer bestimmten Reihenfolge herausgelesen werden.
Es gibt verschiedene Adressierungs-Verfahren, die durchaus Verwendung finden, wofür DSPs bereits digitale Schaltungen besitzen, um die Software zu entlasten.
Beispiel: Bit-Reversed-Adressierung
Das Resultat der FFT ist durch den Butterfly-Algorithmus ein Satz Harmonischer in einer sehr merkwürdigen Reihenfolge. Die korrekte Reihenfolge lässt sich wiederherstellen, in dem man die Indizes der Harmonischen binär darstellt und deren Bits umkehrt. (Die Berechnung der Bit-Umkehr ist relativ aufwendig. Diese lässt sich ebenfalls durch den Einsatz von Tabellen vereinfachen). Solch eine Bit-Umkehr-Logik wird von Texas Instruments als FFT-Beschleuniger beworben.
Beispiel: Modulo-Adressierung
Modulo.png
So kann man zirkulare Speicherbereiche erzeugen. D.h. Wenn ein Eintrag mit einer Adresse über dem verfügbaren Adressraum abgefragt werden soll, wird die Adresse in den gültigen Bereich geklappt. Das kann man sich wie eine Modulo-Operation vorstellen. So kann man bspw. eine Wellenform in einem Array als periodische Funktion ansehen und behandeln.

Soviel erstmal zu den Grundbegriffen. Im Folgenden widmen wir uns im Detail dem Aufbau eines Wavetable-Oszillators... In Core...

Periodische Wellenformen

Verfasst: 26. August 2012, 23:56
von Rampensau
3. Wellenformen

Die Wahl der Anzahl der Datenunkte pro Wellenform hängt sicherlich vom Anwendungsfall ab.Im Core-Tutorial besitzt die Sinuswellenform 1001 Datenpunkte, also eine ungerade Anzahl an Datenpunkten bzw. Samples.
odd.jpg
Das ist sicherlich eine gute Wahl. Der Sinus beginnt mit einer Nullstelle und endet auch mit einer Nullstelle. Für eine lineare Interpolation ist das sogar günstig. Nicht ohne Grund wählen wir aber eine gerade Anzahl an Datenpunkten. Genauer, eine Potenz zur Basis 2. Also 2^3, 2^4, usw. Wir wählen 256 Samples. Da dies bspw. auch eine Potenz zur Basis 4 oder 16 ist. Diese Anzahl lässt sich dann effizient mit einer Radix-2, -4, oder gar -16-FFT auswerten.
Nun sollte aber nicht die "komplette" Periode durch die 256 Samples dargestellt werden.
falsch.jpg
Eine solche Darstellung birgt ein paar Nachteile. Man kann sehen, dass die Datenpunkte der Halbzyklen unerwartet "unsymmetrisch" sind. Besser, jedoch erstmal befremdlich ist folgende Darstellung:
besser.jpg
Die Symmetrieachse liegt auf dem 1. Datenpunkt, also der ersten Nullstelle der Sinuswelle. Es scheint nun Information zu fehlen. Aber eine periodische Fortsetzung erscheint mit dieser Version sinnvoller, da bei obiger zwei Nullstellen aufeinander treffen würden. Man könnte diese Wellenform auch nur durch ihre erste Viertelperiode komplett beschreiben. Der Informationsgehalt bleibt der selbe.

Basiswellenformen

Verfasst: 27. August 2012, 00:03
von Rampensau
Die Basiswellen lassen sich einfach mit wenigen Formeln mit einem Tabellenkalkulationsprogramm erstellen.
calc.jpg
Es sollte jedenfalls bereits die sin-Funktion implementiert sein. Dann könnte man bspw. pseudocodemäßig die Datenpunkte der Sinuswelle folgendermaßen erstellen:
sinarray.jpg
Hierbei sind die Funktionen einfach nur auf die gewünschte Periode abzubilden. Hier im Beispiel der Sinus. In dem sinarray werden während der for-Schleife N Datenpunkte abgelegt, die eine Sinus-Periode darstellen.
Man sollte beachten, dass Reaktor Dezimalpunkte verlangt und keine Kommata. Durch Kommata können die Listeneinträge (in Textdateien) getrennt werden.
waveforms_256dp.zip

Re: OSZILLATOREN [3] WAVETABLES

Verfasst: 27. August 2012, 01:51
von Rampensau
Den Grundstein bilden vier Tables, also je Wellenform und das Size-Modul, welches an eine der vier Tables (der selben Größe) angeschlossen werden kann.
Das Size-Modul liefert an seinem Ausgang die Größe des Arrays, sprich die Anzahl der Datenpunkte N.
read.jpg
In diese 4 Tables werden die Textdateien gespeichert. Die Navigation ist einfach über den Property-Manager.
Load.jpg
Zum Auslesen des Arrays existiert zudem bereits ein Core-Makro "Read []".
JedeTable wird durch ihr eigenes Read-Makro mit jeder Samplerate-Clock ausgelesen.
Ab jetzt kommt zu der Oszillatorgrundform sogesehen nichts Neues mehr. Ein paar Dinge sollen hier jedoch nochmal näher beleuchtet werden.


Wavetable.ens

Re: OSZILLATOREN [3] WAVETABLES

Verfasst: 28. August 2012, 18:11
von Rampensau
Phasengenerator

Zum Auslesen der Tabelle benötigen wir nur einen Phasengenerator. Dieser erzeugt eine Rampen- oder Sägezahnfunktion, die die Einträge der Tabelle im Sinne der Modulo-adressierung von 0 bis N-1 abzählt.
Der Phasengenerator wird leicht modifiziert. Seine Schrittweite und Amplitude hängt nun nicht mehr allein von der Tonhöhe und der Samplerate ab, sondern auch von der Länge des Arrays, also der Anzahl der Samples N.
phase.jpg
Zu beachten ist lediglich, dass der Phasengenerator nicht mit ganzen Zahlen rechnet, sehr wohl aber Einträge der Tabelle mit ganzzahligen Indizes adressiert.
Es wird dem Speicherbereich immer das Sample entnommen, welchen Index dem momentanen Wert des Phasengenerators am nächsten ist.
Okay, neu ist auch die Modulooperation. Sie führt nun das Wrapping durch. Es soll auch die Modulo-Adressierung etwas verdeutlichen.
Grundform.jpg
Man sieht leicht, wie die Rampenfuntkion und der entstehende Sinus zusammenhängen. Die im Phasengenerator erzeugte Rampenfuntkion nimmt die Werte der Sinusfunktion an.
Mit ein wenig Phantasie ist das bereits Waveshaping, wie bei den Taylorreihen zuvor. Man sieht aber auch schnell, besser, man hört es, dass der Sinus aus der Tabelle weit weniger Werte, also nur N Werte annehmen kann, als ein berechneter Sinus. Was sich in einem unangenehmen Rauschen bemerkbar macht, aber auch dazu wieder später.
Wavetable Grundform.ens

Re: OSZILLATOREN [3] WAVETABLES

Verfasst: 28. August 2012, 22:15
von Rampensau
Pitch to Frequency

Zur Eingabe der Tonhöhe muss das Midisignal noch in die korrespondiere Frequenz umgerechnet werden. Genau das macht ja das P2F-Makro.

Die zu Grunde liegende Formel ist es jedoch Wert, mal genauer betrachtet zu werden. Mit folgender Formel lässt sich das Makro übersetzen:
p2f_math.png
Diese vereinfachte Form bezieht sich auf die Frequenz bei dem Midi-Wert 0. Man könnte auch eine andere Frequenz als Referenz wählen. Z.B. f_lin = 440Hz bei der Midi-Note p_log = 69. Dann steht im Exponent nicht mehr p_log, sondern p_log - p_ref. und mit statt f(0) wird der Wurzelwert mit f(69) = 440Hz skaliert. Die entstehende Formel lässt sich mit Hilfe von Potenzgesetzen auch umschreiben.
p2f_ratio.png
Diese Formel beschreibt ein Verhältnis der eingebenen Tonhöhe zu der Referenztonhöhe mit einer Art Dreisatz.
Man könnte diese Formel nun beliebig manipulieren. Nimmt nun statt der 12. eine n. Wurzel, so verdoppelt sich die Frequenz nicht alle 12 Halbtonschritte, sondern alle n. Schritte, also mit dem eingestellten Intervall. Oder man zieht die Wurzel aus der 3. Dann verdreifacht sich die Frequenz mit jedem n. Schritt, anstatt sich zu verdoppeln. Eine andere Modifikation könnte den Referenzton 440Hz auf eine andere Midinote legen, wenn man für p_ref den entsprechenden Wert setzt und f_ref = 400Hz so belässt. So lässt sich die Stimmung schon sehr frei temperieren.
Temperierungsformel.png
Nebenbei: Der Term "12. Wurzel aus 2" ist genau das Verhältnis der Frequenz eines Halbtonschrittes zur Nächsten.

Re: OSZILLATOREN [3] WAVETABLES

Verfasst: 29. August 2012, 04:48
von herw
Rampensau hat geschrieben:[...]
Man könnte diese Formel nun beliebig manipulieren. Nimmt nun statt der 12. eine n. Wurzel, so verdoppelt sich die Frequenz nicht alle 12 Halbtonschritte, sondern alle n. Schritte, also mit dem eingestellten Intervall. Oder man zieht die Wurzel aus der 3. Dann verdreifacht sich die Frequenz mit jedem n. Schritt, anstatt sich zu verdoppeln. Eine andere Modifikation könnte den Referenzton 440Hz auf eine andere Midinote legen, wenn man für p_ref den entsprechenden Wert setzt und f_ref = 400Hz so belässt. So lässt sich die Stimmung schon sehr frei temperieren.
[...]
Nebenbei: Der Term "12. Wurzel aus 2" ist genau das Verhältnis der Frequenz eines Halbtonschrittes zur Nächsten.
Die Variation der Schrittweite ist sehr spannend. Nicht alle Schrittweiten geben wieder „schöne” Intervalle. Die nächsten guten Unterteilungen sind 19 und 31.
Ich habe mal auf meinem alten Yamaha Keyboard DX11 die 19er Einteilung gewählt. Es ergibt sich eine sehr gute Näherung an die reine Stimmung. Sehr interessant sind die Terzen, neben der reineren Dur-Terz gibt eine helle und eine dunkle Mollterz. Die Akkorde klingen für unsere Ohren etwas fremd aber sehr „schön”. Das lässt sich in REAKTOR ziemlich einfach realisieren. Nur die Bedienung über eine herkömmliche Tastatur ist natürlich etwas umständlich, so dass man nicht immer live einspielen kann, sondern in einem Host (Cubase oder Logic) über eine virtuelle Tastatur „komponieren muss”. Aber das Aha-Erlebnis lohnt sich.
Das Gesetz, dass sich eine Oktave bei Verdoppelung der Frequenz ergibt, auf eine Verdreifachung zu verändern, habe ich noch nicht ausprobiert, ich meine mich daran zu erinnern, dass Wendy (Walter) Carlos sich damit beschäftigt hat. Das ist sicherlich ebenfalls spannend.
Hier ist der Link zu ihrer Homepage: http://www.wendycarlos.com
Unter recources kann man tuning-Tabellen downloaden, aber in REAKTOR ist das ja viel einfacher und komfortabler über direkte Berechnung. Die Homepage ist äußerst umfangreich und lesenswert. Sie beschäftigt sich in der Manier alter Allround-Wissenschaftler auch mit der Untersuchung von Farbwahrnehmungen auf neuen Monitor-Displays oder geht auf das Erstellen von Weltkarten ein. Einfach toll zu lesen an stillen Abenden.
Hier ist ein Link zu einem realen Instrument, das 53 Schritte für eine Oktave besitzt: http://www.wendycarlos.com/photos/bosanquet53.jpg und hier noch mehr keyboards: http://www.h-pi.com/eop-keyboards.html
(Leider sind die Bilder urheberrechtlich geschützt, so dass ich nur die Links angeben kann.)
aber hier kann ich aus dem Jahr 1965 ein mikrotonales Xylophon zeigen:
Harry Partch.jpg
Quelle: http://de.wikipedia.org/wiki/Mikrotonale_Musik, (Quadrangularus Reversum, Harry Partch)

ciao herw

Re: OSZILLATOREN [3] WAVETABLES

Verfasst: 29. August 2012, 13:42
von Rampensau
herw hat geschrieben:[...]Die Variation der Schrittweite ist sehr spannend. Nicht alle Schrittweiten geben wieder „schöne” Intervalle. Die nächsten guten Unterteilungen sind 19 und 31.
Ich habe mal auf meinem alten Yamaha Keyboard DX11 die 19er Einteilung gewählt.[...]
Nicht wahr? Im Verbund mit der FM finde ich eine freie Temperierung auch sehr interessant. Gerade die anderen Modifikationen finde ich reizend in Hinblick auf die Möglichkeiten in einem Modular, andere Klangparameter zu temperieren, vllt sogar mit verschiedenen Einstellungen,...
herw hat geschrieben:[...]Nur die Bedienung über eine herkömmliche Tastatur ist natürlich etwas umständlich[...]
Ja, das stimmt leider. Hier sollte man auf die von dir erwähnten Keyboards umsteigen.
Sowas gibts ja sogar schon als MIDI-Controller:
Harmonic Table

oder als Ribbon-Controller:
Haken-Continuum
in niedlich

Re: OSZILLATOREN [3] WAVETABLES

Verfasst: 29. August 2012, 14:36
von Rampensau
Die Temperierungsformel,.. nein... Der Temperierungssatz wäre ein schönes erstes Thema für das Mathe-Board. :D

4. Interpolation

Es gibt viele Techniken, Funktionswerte einer diskreten Funktion zu interpolieren. Das Ziel ist lediglich zwischen den vorhanden Funktionswerten weitere Funktionswerte zu erzeugen. Ein einfaches Beispiel ist eine lineare Interpolation, die wir uns im Folgenden noch näher anschauen werden.
2-punkt.jpg
Diese bezieht sich auf 2 Punkte. Man kann sagen 2-Punkt-Interpolation. Die interpolierten Delays in der Core-Library besitzen jeweils eine 2-Punkt und eine 4-Punkt-Interpolation. Ein komplexeres Beispiel findet man in DA-Convertern in Form eines FIR-Filters mit einer Länge von M. Hierbei werden jeweils zwischen zwei Datenpunkten M weitere erzeugt. Der DA-Converter des DSP (genauer DSC: Digital Signal Controller) im obigen Video besitzt ein solches 256-stufiges FIR-Filter. Was nichts anderes als eine gleitende Sinc-Interpolation ist, die sich auf die letzten 256 Eingangssamples bezieht.
sinc-interpol.jpg
Die Sinc-Interpolation lässt sich auf Arrays in Reaktor Core gut durch Iteration implementieren. Ein anderes Beispiel sind Spline-Kurven. Hier müssen noch Randbedingungen an die Interpolierende und ihre Ableitung gestellt werden.

Lineare Interpolation
gerade.jpg
Der grundsätzliche Gedanke ist, eine Tangente an zwei aufeinanderfolgende Funktionswerte zu legen, quasi die Ableitung zu bilden. Diese Tangente ist eine lineare Funktion, also eine Gerade mit der Grundform: y(x) = m*x + n, wobei m der Anstieg und n der y-Achsenabschnitt der Geraden ist. Da ich gerne generalisiere, sagen wir y(x) = ax + b. Diese Gerade stellt dann die Interpolierende zwischen den beiden Funktionswerten dar. Diese Interpolation lässt sich einfach konstruieren, wenn man bedenkt, dass es im Endeffekt nur eine Überblendung zwischen den zwei Datenpunkten ist. Diese Implementierung kann man auch in den 2p-Delays in Core wiederentdecken.
Günstiger ist jedoch die Interpolation mit einer Geradengleichung, die sich auf die zwei Punkte bezieht. Diese 2-Punkte-Form der Geradengleichung, welche die Lösung eines einfaches Gleichungssystems ist, spart immerhin eine Multiplikation im Gegensatz zu der Überblendung.