#17 WAVESHAPING

ELECTRIC OPRPHEUS ACADEMY
SPILLING THE BEANS #17 WAVESHAPING

distortion

Der Terminus 'wave shaping' geht angeblich auf J.C.Risset zurück und wird als 'nichtlineare Verzerrung' beschrieben. Schön und gut - aber was wäre denn 'lineare Verzerrung' ? Ganz einfach: eine Lautstärkeänderung, ein 'scaling', ein 'gain'. Alles andere ist Amplitudenverzerrung.
Klar, wenn ich ein bestimmte Wellenform über einen Verzerrer schicke, kommt eine typisch andere, deformierte Wellenform heraus. In den wenigsten Fällen ist die resultierende Wellenform pegelunabhängig. Ich würde daher vorschlagen diese Methode einfach Verzerrung (distortion) zu nennen und uns den Begriff 'wave shaping' für andere Ansätze aufbewahren.
In VASP und AMP gibt es eine Sammlung von ungefähr 40 Arten von Verzerrung: umkehrbahre, nicht umkehrbare, Sättigungen, Spiegelungen, modulative, nach Standardfunktionen, nach Sonderfunktionen ....
Sie alle zeichnen sich durch eine typische Amplitudenkennlinie aus, die in den meisten Fällen je nach gain anders ausschaut. Diese Kennlinie zeigt an, welche Amplitude herauskommt, wenn man eine bestimmte Amplitude hineinschickt.
Ich versuche hier eine Sytematik der Verzerrungstypen.

signed power

Ich beginne mit der fundamentalsten, 'signed power', eine Potenzierung der Amplitude unter Beibehaltung des Vorzeichens (positive bleiben positiv, negative negativ).
±Aneu = ±Ax
wobei x ein beliebiger Faktor (Exponent) sein kann. Ist der Faktor >1, haben wir es mit Potenzen zu tun; ist er <1, mit Wurzeln; ist er genau =1, bleibt die Amplitude unverändert.
Dieser Verzerrungstyp, dist.spow in VASP und AMP, hat zwei bedeutende Eigenschaften: Erstens ist er reversibel. dist.spow 2 kann durch dist.spow 0.5 exakt rückgängig gemacht werden. Diese Umkehrbarkeit findet man bei anderen Typen mehr oder weniger auch. Einzigartig ist, dass die Art der Verzerrung pegel-unabhängig ist. Egal, auf welchem Pegel sie angewendet wird: die resultierenden Pegelveränderungen insgesamt können drastisch sein, die Verzerrung ist immer dieselbe.
Das sind tyische Kennlinen davon. (Man muss sie sich in beiden Richtungen fortgesetzt denken, rechts oben für Amplituden >1, links unten gespiegelt für negative Amplituden):



Kennlinien, nicht Wellenformen. Wendet man sie auf einen Sinuston (mit Amplitude 1) an, ergeben sich folgende Wellenformen:


schwarz: sinus, rot: dist.spow 4


rot: dist.spow 0.25

Diesen Verzerrertypus verwendete ich sytematisch bei meiner Arbeit an ATEM (Werke 3, ccr403). Ich benutzte dazu einen 'Quadrierer', ein modifizierter Ringmodulator, und einen 'Radizierer', ein Analogrechenbauteil (beides Einzelstücke, Sonderanfertigungen von Georg Danczul). In diesem Stück sind die Verzerrungsgrade ein wichtiger Teil der Komposition.
[Wir besorgten uns die hochpräzisen Analogrechenbauteile als Warenmuster, den einzeln zu kaufen gab es die nicht. Georg ging in seinem Perfektionismus soweit, dass er die Platinen im Backofen 'künstlich altern' liess, damit sie stabiler wurden]

Eine kurze Abschweifung: dbx

Eines der ersten noise-reduction Syteme für Tonbänder von dbx verwendete solche Funktionen, allerdings auf Hüllkurvenebene. Das aufzunehmende Signal wurde durch einen Radizierer codiert und bei der Wiedergabe durch einen Quadrierer entcodiert. Angenommen ein Signal hätte maximal -60db, dann wurde es durch die Codierung auf -30db angehoben. Dazu kam dann das unvermeidliche Bandrauschen von ca. -70db. Bei der Entcodierung erhielt das Signal wieder seine ursprünglichen -60db, das Bandrauschen, an den ruhigen Stellen, -140db. (Abgekürzt erklärt! Natürlich war da noch eine Menge Elektronik drin, vor allem Korrekturfilterungen, etc.)
[Ich hatte dbx für alle Bandmaschinen: 8-kanal, 4-kanal, stereo - und war von Anfang an begeistert über diese, nie dagewesene Dynamik. Was man damals allerdings nicht wusste: Solcherart codierte Tonbänder sind nur schwer lagerbar, der Magentismus verändert sich über lange Zeiträume und dann hört man das Bandrauschen als 'Pumpen' (breathing). Nichtsdestowenig liess sich das Gerät, bei Umgehung der Korrekturfilter, auch als Kompressor und Expander einsetzen.]
Ein Hüllkurven-Kompressor/Expander nach solchen Funktionen ist in VASP als boost verfügbar, in der Zeitebene wie auch im Spektrum.

Sättigungen

Sättigung (saturation) nennt man ein Amplitudenverhalten, bei dem die Amplitude über einen Grenzwert nicht hinauskommt. Im Gegensatz zum digitalen Limit, gibt es hier aber keinen Knick (wie der digitale Plafond), sondern die Kennlinie nähert sich asymptotisch dem Grenzwert.
[Man kennt das von den Tonbändern. Deren Charakteristik ist weitgehend linear, über einer bestimmten Amplitude beginnen sie zu verzerren. Es war durchaus ein Stilmittel, die Aufnahme etwas in die Sättigung zu treiben, wodurch der Klang etwas verzerrt, aber eben tatsächlich 'satter' wurde.]
Kleine Amplituden bleiben praktisch unverändert, grössere werden in Richtung Limit verzerrt. In der Sammlung von VASP und AMP sind drei Varianten verfügbar:
dist.hsat   hyperbolische Sättiung
dist.tsat    tangentiale Sättigung
dist.erf      nach einer komplizierten Funktion 'error function'


dist.hsat


dist.tsat

Ganz besonders die hyperbolische Sättigung kann ich wärmstens empfehlen. Für Material mit diffusem Spektrum (wo es mehr um Impuls als um Tonhöhen geht), leistet sie wahre Wunder: Harte Attacks, Explosionen, Schüsse, Blitz und Donner ...
Im Gegensatz zu Limitern, die mit der Pegelbegrenzung auch die Energie reduzieren, geht dabei die Energie in die Verzerrung und somit nicht verloren.
Beim CD-Mastern hab ich die Funktion immer wieder verwendet, zum Beispiel der Böllerschuss in AINT' THERE TV (ccr302).

Hinweisen möchte ich auch auf die Umkehrfunktion dist.hsat-
Sie ist nicht einfach zu handhaben. Wenn man Glück hat, kann man
damit aber Übersteuerungen von Aufnahmen auf Tonband oder Cassette korrigieren.

Spiegelungen

Spiegelnde Verzerrungen nenne ich solche, bei denen die Amplitude ab einem bestimmten Scheitelwert wieder zurückgenommen wird. Die klassischen Gitarreverzerrer sind von dem Typ. In VASP sind zwei davon digital nachgestellt:


dist.fuzz0, .fuzz1

Die Amplitude geht nach dem Grenzwert wieder gegen 0 (und bleibt darüberhinaus 0). Da aber auch die Wellen extrem hoher Pegel immer wieder durch den Scheitelpunkt müssen, bleibt der Pegel darüber stets vollausgesteuert, lediglich die Verzerrung ändert sich. Man kennt das von den verzerrten Gitarrentönen, die lange auf einem Pegel gleichsam stehenbleiben, bevor sie verklingen

[Es wäre eine eigne Untersuchung wert, wie solche Verzerrer die Harmonik der Rockmusik beeinflusst haben: weg von den Dreiklängen, hin zur Quartenharmonik ...]
Es findet sich noch ein Dutzend weiterer spiegelnder Verzerrungen in VASP (siehe Manual). Sie sind nicht umkehrbar.

Modulierende Verzerrungen

So nenne ich Verzerrungen, die über einem bestimmten Pegel zu oszillieren beginnen und somit Modulation ins Spiel bringen. Sie sind weder pegelunabhängig noch umkehrbar. Dazu gehört dist.cproj (circular projection), eine der energiereichsten Verzerrungen, die ich kenne. Ich verwendete sie gelegentlich für tiefe Ausklänge, zum Beispiel in meiner umstrittenen Neuvertonung von Barockarien BELCANTO.

dist.cproj mit verschiedenen gains: 1, 2, 16

Ähnlich, aber subtiler, ist die Cosinus-Automodulation dist.cosmod


Verzerrungsgrade 0 (linear),1,4,8

Katharina Klement verwendete sie in ihren 13 MINIATUREN (Miniatur 12, KALK 01) mit Klavierakkorden.

Nicht so drastisch, aber auch modulierend sind Kennlinien nach einigen Sonderfunktionen, wie Fresnel-, oder Sinusintegral.


dist.fresnelc


dist.sinint

Für letztere würde die Veränderung der Wellenform so aussehen:


(rot: Sinuston, schwarz: Verzerrung durch dist.sinint)

Das VASP-script dazu:

gen.sin 150hz
dist.sinint 8

Selbstverständlich ist Verzerrung auf alles anwendbar, nicht bloss auf Sinustöne, und erzeugt dann die typischen Kombinationstöne; in diesem Fall auch Modulationen durch das Überschwingen bei grösseren Amplituden.
In VASP können diese Verzerrungen auf den linken und rechten Kanal getrennt angewendet werden, auf den complexen Radius (rdist) sowie auf die instantaneous frequency (fdist).

Frei definierbare Kennlinien

Wie man Wellenformen konstruieren kann, so könnte man auch Kennlinien willkürlich konstruieren, oder zeichnen, oder aus einzelnen, nichtlinearen Elementen zusammensetzen. Eine Konkordanz der Grafik mit den akustischen Auswirkungen darf man aber nicht erwarten. Freilich kann man Kennlinien, wie auch Wellenformen interpretieren lernen. Wie das wirklich klingt, weiss man aber erst, wenn man es ausprobiert.

Anmerkung:
Alle hier vorgestellten Kennlinien sind symmetrisch hinsichtlich negativer Amplituden. Das muss nicht so sein. Unter ubdist (unbalanced distortion) findet man in VASP auch einige unsymmetrische, zu denen auch die typische Verzerrung in Röhrengeräten gehört.


* * *


complexes wave shaping

Zum eigentlichen wave shaping gelangt man, wenn man von complexen Wellen ausgeht.
Eine Sinusschwingung, als Kreisbewegung betrachtet, lässt sich durch zwei Parameter beschreiben: die Amplitude (das ist der Radius der Kreisbewegung) und die Frequenz (das ist die Geschwindigkeit der Kreisbewegung). Zusammen bilden sie das, was man einen 'Phasor' nennt. In der Fachwelt nennt man das auch 'instantaneous amplitude' und 'instantaneous frequency' - momentane Amplitude und momentane Frequenz. Letzteres nicht ganz zu Unrecht, da das bei einfachen Klängen (Sinustönen und langsam veränderlichen sinusoidalen Tönen) tatsächlich dem entspricht, was wir als Frequenz wahrnehmen. Bei Gemischen und beliebigen Klängen ist das nicht mehr so einfach. In solchen Fällen ist der Phasor in jedem Moment ein anderer. Dennoch ist das eine der wichtigsten Darstellungen bei der Bearbeitung von Klangmaterial (ein 'Geheimtipp' sozusagen).

Andersherum:
Gesetzt der Fall, wir hätten einen hochpräzisen Sinusgenerator mit zwei Steuereingängen, einen für Frequenz und einen für Amplitude. Wir nehmen einen beliebigen Klang. Wie müssten die Steuerdaten aussehen, damit der Generator exakt diesen, beliebigen Klang reproduziert ?
Die Antwort ist einfach: So einen Generator haben wir seit Jahrzehnten; die Steuerdaten gewinnen wir durch eine Konvertierung eines complexen Signales in besagte zwei Komponenten. In VASP ist das die Operation rdphi (Konvertierung in Radius und Delta-Phase) und rdphi- (Rückkonvertierung).
[Was man mit dieser rdphi-Darstellung alles machen kann, wird Thema des heurigen Meisterkurses sein]

Durch die Analyse erhalten wir also die Steurdaten für Amplitude und Frequenz. In der Resynthese wenden wir diese Steuerdaten auf einen Sinusgenerator an. Die Analyse muss in jedem Fall complex erfolgen; für die Resynthese können wir auch einen rein reellen Sinusgenerator verwenden, wenn wir kein complexes Ergebnis brauchen.
Das Prinzip des wave shapings (manche nennen es wave shape synthesis) beruht nun ganz einfach darauf, dass man für die Resynthese jede beliebige andere Wellenform heranziehen kann, egal, ob reell oder complex.
Da gibt es zunächst die Standards, die man bereits von den Analog-Synthesizern und Messgeneratoren kennt. (Ihre Benennung orientiert sich daran, welche Wellenform man erhält, wenn das Ausgangssignal ein Sinus ist). In VASP und AMP sind das:

waveshape.saw
waveshape.tri
waveshape.sq
waveshape.rect
waveshape.imp
waveshape.altimp
waveshape.lem

Sägezahn
Dreieck
Quadrat
Rechteck
Nadelimpuls
alternierender Nadelimpuls
Lemniskate (Achterschleife)

Die klassischen Wellenformen muss ich, glaube ich, nicht weiter erklären. Dreieck und Rechteck gestatten auch eine kontinuierliche Einstellung des Tastverhältnisses (duty pulse factor). Dazu kommt noch die Lemniskate, bei der die Kreisbewegung des complexen Sinus durch eine Achterschleife ersetzt wird. (Siehe: SPILLING THE BEANS #7 'Achterbahn').

Eine technische Anmerkung:
Bei der Resynthese durch runde Wellenformen gibt es nicht viele Probleme. Bei kantigen (und das sind praktisch alle klassischen, vom Sägezahn bis zum Nadelimpuls) schon ! Praktisch alle Wellenformen, deren Grundperiode nicht ein ganzzahliges Vielfaches der digitalen Rasterung ist, geraten unsauber - also ganz besonders höhere Grundfrequenzen. Das fängt aber bei 400hz schon an !
Da hilft nur eines: oversampling. In VASP und AMP werden solche Wellenformen daher standardmässig mit mindestens 4-fachem oversampling und entsprechender Nachfilterung generiert.

register

Natürlich könnte man Wellenformen beliebig gestalten und tables anlegen. Es läuft aber darauf hinaus, dass man Dutzende oder Hunderte von samples oder Parameter händisch setzen muss.
Dem gegenüber empfehle ich eine Methode, bei der man Teiltöne zusammenfasst. Ich nenne sie 'register', nach dem Vorbild eines Orgelregisters. Dabei gibt es 3 Parameter: Der Anteil des Grundtones, der Anteil der geraden Obertöne und der Anteil der ungeraden (ausser dem Grundton).
Grundlage davon ist wieder die, oben bereits erwähnte, Lemniskate sowie zwei Ableitungen davon, die schärfere Spektren erzeugen.

register.lem
register.vlem
register.alem

Dreifache Registrierung nach Lemniskate
... nach der Ableitung der Lemniskate (velocity)
... nach der zweiten Ableitung (acceleration)

(Solche dreiteiligen Register sind übrigens auch an mehreren Stellen im Flötenmodell fmpipe eingebaut: für den eigentlichen Ton, den Labialton und für das Grundgeräusch des Rohres).

Steuerdaten

Gehen wir einen Schritt weiter und machen uns frei von der Vorstellung, dass man eine Wellenform durch eine andere ersetzen müsse. Sehen wir die beiden analytischen Komponenten (momentane Amplitude und momentane Kreisfrequenz) als reine Steuersignale, wie bereits eingangs beschrieben.
Was hindert uns daran, diese Steuersignale auf beliebige Parameter anzuwenden ? - Auch wenn es nur Parameter sind, die phänomenologisch Tonhöhencharakter haben, sind die Möglichkeiten grenzenlos.
Dazu muss man die Steuerdaten eventuell etwas umformen.
[Auch das wird Thema des nächsten Meisterkurses werden.]

Sehen wir uns diese Daten einmal näher an. Hier der Ausschnitt eines complex aufbereiteten Klanges:


(xy-Darstellung, schwarz: Realteil, rot: Imaginärteil)

So sieht derselbe Ausschnitt nach der Konvertierung durch rdphi aus:


(rdphi-Darstellung, schwarz: Radius, rot: delta-Phase)

Der Radius ist klar: Er ist die Wurzel aus den Quadraten von Realteil und Imaginärteil, die complexe Amplitude. Die Kreisfrequenz hat durchwegs kleine, meist positive Werte mit gelegentlichen positiven und auch negativen Spitzen (spikes).
Ihr Bereich liegt zwischen +pi und -pi. (Daher die Übersteuerung in der Darstellung, deren Bereich zwischen +1 und -1 liegt).
Vergleicht man die spikes mit dem Radius, dann erkennt man auf einen Blick, dass sie hauptsächlich dort auftreten, wo der Radius eine Senke zeigt oder gegen 0 geht - also dort, wo die Bewegung in der x/y-Ebene knapp am Nullpunkt vorbeigeht.
Derselbe Ausschnitt in der x/y-Ebene:


(x/y-Darstellung, waagrecht: Realteil, senkrecht: Imaginärteil)

An den äusseren Bögen sieht man sehr schön die Winkelgeschwindigkeit, nämlich der Winkel von einem sample zum nächsten. Die schwarzen Linien sind die Radien (complexen Amplituden) der samples. Im Zentrum liegen diese Durchgangspunkte, an denen die Phase grössere Sprünge macht, die sich in der delta-Phase als spikes zeigen. Für die Resynthese darf man sie keinesfalls weglassen (das hätte ungewollte Verzerrungen zur Folge), aber in Hinblick auf Steuerdaten sind sie nicht signifikant, meistens sogar störend.
Es gibt mehrere Methoden, mit solchen spikes umzugehen. Eine klassische ist die Anwendung eines Medianfilters. Derselbe Ausschnitt gefiltert:



Anmerkung:
So ein Medianfilter ist kein Filter im eigentliche Sinn. Seine hauptsächliche Verwendung findet es in der Bildbearbeitung, wenn es darum geht, störende einzelne Pixels zu eliminieren. Seine Wirkungsweise beruht darauf, dass immer eine Gruppe benachbarter samples verglichen wird und das mittlere daraus genommen. (Nicht der Mittelwert, dann wäre es nämlich ein Tiefpassfilter - das mittlere, wenn man die Gruppe sortiert).
In diesem Fall war es median.y11 - nur im rechten Kanal mit einer Breite von 11 samples. (Bei einer Mindestbreite von 3 könnte man nur einzelne Nadelimpulse abfangen).

aperiodische Wellenformen

Was kann man mit solchen Daten, sofern sie entsprechend aufbereitet sind, alles steuern ?
Zunächst einmal alle Arten von Generatoren, auch solche, die keine periodische Wellenform haben, wie zB. die Pseudomembran (gen.psm).
Dann verschiedene Typen von Rauschen, ganz besonders die durch FM generierten (fmnoise.peak, fmnoise.band).
Filter, die steuerbar sind (lp, hp, bp, notch).
Und natuerlich Oszillatoren, zB. die physikalischen Modelle (osc.chord, osc.bar, osc.xbar, .nail, .rod, .ring ...).

Dazu müssen die Steuerdaten, wie gesagt aufbereitet werden. Zum Beispiel durch hugo ('hardly understandable genuin oscillator), ein eigener analytischer Osziallator, der aber auch Steuerdaten für beliebige andere Oszillatoren liefern kann.
Das wird das Hauptthema des nächsten Meisterkurses sein.

i1=gelassen.wav
k1=hugo.tri (*i1)
out=test.wav (m,*k1)
seg=1
dur: 3
k1.amoll: .004
k1.fmoll: .004
k1.cof: 700
k1.tast: 0.2


akueto,
G.R.


(c) Günther Rabl, 2013