ELECTRIC OPRPHEUS ACADEMY
TUTORIAL COMPLEX AUDIO
Motto: "Der Musiker ist dem Mathematiklehrer entlaufen", sagt
Adorno. Kann sein, dann aber bitte auch dem Musiklehrer, sag ich.
Vorbemerkung
An kaum einem anderen mathematischen Thema scheiden sich die Geister so
sehr, wie an dem der complexen Zahlen. Die Menschheit scheint in zwei
Teile gespalten: die einen, die das verstehen; die anderen, die das nie
verstehen werden (oder wollen).
Die sensiblen Musiker/innen, verschont man gerne mit solchen Sachen (siehe
Motto). Dennoch meine ich: Wer sich unter A,B,C Töne vorstellen kann,
sollte es ohne grössere Schwierigkeit auch unter 1,2,3 können
(noch besser: unter 0,1,2). Und wer in der Lage ist, den Flächeninhalt
seines Wohnzimmers zu berechnen, um den Quadratmeterpreis der Miete zu
überprüfen, sollte auch in der Lage sein, zu verstehen, was
complexe Zahlen sind ...
Einleitung
Jede reelle Zahl lässt sich bekanntlich als Punkt auf einer Geraden
darstellen, 0 in der Mitte, links die negativen Zahlen, rechts die positiven.
Genauso lässt sich jede complexe Zahl als Punkt auf einer Fläche
darstellen, 0 in der Mitte, waagrecht der 'reelle' Anteil (x-Achse), senkrecht
der 'imaginäre' Anteil (y-Achse). Mehr ist nicht dran ! - wiewohl
die algebraischen Implikationen, die sich daraus ergeben, Generationen
von Mathematikern beschäftigt haben.
Carl Friedrich Gauss (1777-1855), der an der Entwicklung der
complexen Algebra massgeblich beteiligt war, bemerkte einmal: die complexen
Zahlen seien vielleicht bloss deshalb so schwer zu verstehen, weil ihre
Benennungen ('complex', 'reell', 'imaginär') so unglücklich
gewählt sind.
C.F.Gauss (Wiki Commons)
Wie wahr ! Die 'imaginären' Zahlen sind nicht minder real wie die
'reellen' ! Dennoch behalte ich die Bezeichnungen bei, weil sie sich weltweit
eingebürgert haben. (Auf Deutsch schreibe ich aber complex stets
mit 'c', wenn das Zahlenformat gemeint ist).
Nun könnte man einwenden: Das ist schon wieder so eine Erfindung
weltfremder Akademiker, mit der man Schüler quält, wie Kinder
aus gutem Haus, die gar nicht Klavier spielen wollen, mit Beethoven und
Chopin.
Weit gefehlt ! - Wenn man Dinge des Alltags erklären oder beschreiben
will, begegnet einem die complexe Darstellung auf Schritt und Tritt.
[Eigentlich erstaunlich, dass die grosse Finanzwelt das noch nicht
entdeckt hat. Andererseits aber auch gut so. Möge sie doch bis zu
ihrem hoffentlich baldigen Ende ihr Adam Riese-Alphabet zelebrieren.]
Nehmen wir ein einfaches Pendel: Es wird einmal in Bewegung gesetzt und
ist ab da sich selbst überlassen. Seine Energie nimmt von der Initiierung
an kontinuierlich ab. Die Art der Energie wechselt dabei aber ständig.
Hat das Pendel seinen tiefsten Punkt erreicht, dann ist seine 'potentielle'
Energie (die der Lage) gleich 0, während seine 'kinetische' Energie
(die der Bewegung) ein Maximum aufweist, denn das ist der Moment, in dem
seine Geschwindigkeit am grössten ist. Ist das Pendel an einem Umkehrpunkt
angelangt, dann ist seine kinetische Energie gleich 0 (die Geschwindigkeit
kehrt sich in diesem Moment von einer Richtung in die andere um), dafür
zeigt aber die potentielle Energie ein Maximum.
Die Energie selber, ist, wie gesagt, konstant (oder nimmt von einem Moment
zum anderen geringfügig ab) - ihre Richtung ändert sich
zyklisch ! Complex.
Auch in elektrischen Netzwerken gibt es solche Vorgänge: der Wechsel
der Energie in einem Schwingkreis, einem Oszillator, einem Filter. Kein
geringerer als Charles Proteus Steinmetz (1865-1923) hat die
complexe Anschauung in die Elektrotechnik eingeführt. Über den
genialen Elektroingenieur sind viele Anekdoten im Umlauf (man kann sie
im Netz nachlesen). Hier ein rares Foto: Einstein, Tesla, Steinmetz (rechts
vorne):
(Quelle: Wiki Commons)
Zur Beschreibung einer complexen Zahl benötigen wir demnach zwei
Zahlenwerte, die Koordinaten des Zahlenpunktes in der Ebene. Rechtwinkelige
Koordinaten (auch 'karthesische' Koordinaten, oder 'xy-Darstellung').
Alternativ dazu gibt es die Darstellung in Polarkoordinaten ('rphi-Darstellung')
durch den Abstand des Punktes vom Nullpunkt (Radius) und einen Winkel
(Phase).
Letztere ist gerade für die musikalische Anwendung von immenser Bedeutung.
Somit wären wir endlich beim Thema.
complex audio
Wir wissen was ein Sinuston ist, wir wissen, wie eine Sinusschwingung
aussieht. Ganz einfach, weil uns das vertraut ist. Nichtsdestoweniger
eine ziemlich komplizierte Wellenform. Man versuche einmal so eine Welle
händisch zu zeichnen, oder mit Schablonen, wie die Illustratoren
der alten Akustiklehrbücher, die nicht selten unbeholfene Kurven
aus Halbkreisen zusammengebastelt haben !
Warum ist gerade diese komplizierte Wellenform für uns gehörsmässig
die einfachste Schwingungsform, die es gibt ? - warum nicht ein Rechteck,
ein Dreieck, oder sonst etwas grafisch Einfacheres ??
Ganz einfach, weil sie auf die elementarste geschlossene Bewegung in der
Ebene zurückzuführen ist: eine Kreisbewegung mit konstanter
Geschwindigkeit.
Ihr Abstand zum Nullpunkt, ihr Radius, ist in jedem Moment konstant (wir
nehmen ihn als Lautstärke wahr); ihre Drehgeschwindigkeit ist in
jedem Moment konstant (wir hören sie als Frequenz).
Was aber, wenn die Drehung in die andere Richtung geht ? - Hört sich
genauso an ! Auch die Projektion auf die eine Achse ist genauso wie vorher,
die Projektion auf die andere Achse ist invers (umgepolt). Man spricht
daher auch von 'positiven' und 'negativen' Frequenzen, die gehörsmässig
zunächst tatsächlich nicht unterscheidbar sind.
Wahrnehmbare Phänomene entstehen erst, wenn sich solche positiven
und negativen Frequenzen überlagern. Dann haben wir es nämlich
mit Verstärkungen und Auslöschungen in verschiedenen Achsen
der Ebene zu tun. (Zweikanal-stereo lässt sich so deuten, wie wir
später sehen werden).
Umgekehrt betrachtet kann man sagen:
Jedes mono-Signal lässt sich als Kombination von links- und
rechtsdrehenden Frequenzen mit der jeweils halben Amplitude interpretieren.
In der einen Achse ergänzen sie sich zu dem vorgegebenen Verlauf,
in der anderen Achse löschen sie sich perfekt aus.
* * *
An einem Beispiel:
sfload monosound.wav
view.
FFT
opt
view.
Die Fouriertransformation davon:
Waren es zuvor 1/4 Million samples in der Zeitebene, so haben wir nun 1/4 Million Frequenzen im Spektrum (lineare Darstellung) - davon eine Hälfte linksdrehend , die andere Hälfte rechtsdrehend.
Ganz links bei 0hz beginnend bis zur Mitte (Grenzfrequenz 22050hz) die positiven Frequenzen; ab da gespiegelt bis ganz rechts (wieder 0hz) die negativen Frequenzen.
Sieht man sich die Zahlenwerte an (hotkey 'n'), dann sieht man eindeutig, dass die Amplituden der positiven und die der entsprechenden negativen Frequenzen gleich sind. (Lediglich der Imaginärteil ist invertiert, 'conjugiert complex').
Setzt man nun eine Bufferhälfte 0, z.B. die rechte (upper), alle negativ drehenden Frequenzen, dann müsste man zu dem ursprüngliche rein reellen mono-Signal die imaginäre Komponente rekonstruieren können. So ist es auch. Im VASP script:
clear.u "lösche die obere (=rechte)
Bufferhälfte
FFT- "Rücktransformation
opt
view.
Obere Bufferhälfte gelöscht:
Rücktransformation:
Der reelle Teil (grau) bleibt unverändert; der neue Imaginärteil
(rot) enthält alle Frequenzen um 90 Grad phasenverschoben - sozusagen
den cosinus zu jedem sinus jeder Frequenz.
In der x/y-Darstellung zeigt sich folgende complexe Bewegung (ein Ausschnitt
von 100ms):
Damit haben wir eine 'Hilbert-Transformation' durchgeführt, benannt
nach dem deutschen Mathematiker David Hilbert (1862-1943).
David Hilbert (foto Wiki Commons)
Die Hilbert-Transformation erlaubt sozusagen die Rekonstruktion des Imaginärteiles
einer Schwingung, von der ursprünglich nur der reelle Teil gegeben
ist. (Sie unterscheidet sich von unserer Methode step by step nur durch
einen Amplitudenfaktor und durch die Sonderbehandlung der Offset 0hz und
der Grenzfrequenz). Abgespeichert wird das wie ein stereo-Signal:
links Realteil, rechts Imaginärteil.
Für unsere Ohren klingen die beiden Komponenten weitgehend gleich.
Zusammen bilden sie eine zweidimensionale Bewegung in der Zeit - eben
eine complexe Schwingung.
Selbstverständlich geht das in VASP auch in einem Schritt:
sfload sus.wav
HILB
view.
* * *
Schön und gut, aber wozu das alles ?
Viele Effekte, Transformationen oder Modulationen arbeiten intern complex;
viele sind anders gar nicht durchführbar; manche funktionieren complex
besser als reell. Analytische Prozesse, wie Hüllkurven- oder Peak-Detektoren,
arbeiten complex wesentlich zuverlässiger und genauer. Nichtzuletzt
sind alle spektralen Phänomene nur complex verständlich, wenn
man die Zusammenhänge von Frequenz und Zeit ihrem Wesen nach erfassen
will.
Ein Muss für DSP-Programmierer; sehr zu empfehlen für Benutzer
von Software, die genauer wissen wollen, was sie erwarten und was sie
verlangen können; eine enorme Bereicherung für die experimentelle
Klangbearbeitung.
In VASP arbeiten die meisten Routinen complex (manche können wahlweise
complex oder reell ausgeführt werden). In diesem Sinne sind alle
wichtigen Register grundsätzlich zweikanalig ausgeführt.
* * *
Die oben beschriebene Hilbert-Transformation benutzt eine ganzheitliche
FFT, um in die Frequenzebene zu gelangen, in der die Auslöschung
der negativen Frequenzen stattfindet. Das ist in einem Realtime-Kontext
natürlich nicht möglich. Anstelle der Hilbert-Transformation
verwendet man hier ein 'Allpass-Filter', ein Filter, das - wie der Name
schon sagt - alle Frequenzen gleichermassen durchlässt, aber mit
bestimmten Phasenverschiebungen. Es hat einen input und zwei outputs.
Alle Frequenzen im zweiten output sind zu denen im ersten genau 90 Grad
phasenverschoben.
[Achtung: Das ist keine Zeitverschiebung, kein delay ! - Wenn man
es so sehen will, dann könnte man höchstens
sagen, dass jede Frequenz ein anderes delay hat.]
Ganz genaugenommen erhält das Signal im einen output -45 Grad Phasenverschiebung,
im anderen +45 Grad - zueinander eben die benötigten 90 Grad.
Auch so ein Filter ist in VASP verfügbar:
sfload monosound.wav
hilb "Hilbert allpass
Dieses Filter ist ein 6-poliger Allpass mit den Koeffizienten nach Bernie
Hutchins.
[Man kann diesem Mann nicht genug danken ! Filtertheorie hin, Filtertheorie
her - Design von guten, effizienten IIR-Filtern erfordert neben Fachkenntnis
auch ein gerüttelt Mass an Erfahrung und Intuition. Hutchins, ein
Lehrer für Elektrotechnik, hat so um 1975 diese Koeffizienten veröffentlicht,
nachdem Harald Bode und Bob Moog bereits Ende der 60er einen frequency
shifter mit so einem, allerdings viel einfacherem Filter vorgestellt hatten.
(Ich verwendete einen 'Bode Frequencyshifter' in den 70ern. Das darin
eingebaute analoge Allpassfilter kam an das von Hutchins erweiterte nicht
heran. Georg Danczul - der dem Kreis der E.O.A. kein Unbekannter mehr
ist - hat mir damals einen Shifter mit wesentlich genaueren analogen Filterbänken
nachgebaut). Wer sich für Analogelektronik interessiert, sollte sich
jedenfalls Bernie Hutchins' ELECTRONOTES nicht entgehen lassen: http://electronotes.netfirms.com
]
So ein IIR-Filter, egal ob analog oder digital, ist nicht phasenlinear
und hat einen 'lag' - ein kurze Zeitverzögerung (in diesem Falle
2 bis 3 samples). Das heisst, das Originalsignal bleibt nicht exakt erhalten,
sondern wird durch ein anderes, allerdings sehr ähnliches ersetzt.
Da führt kein Weg daran vorbei.
Anders in VASP: Hier ist das Filter bidirektional ausgeführt. Das
Original bleibt im linken Kanal (Realteil) exakt erhalten und der rechte
Kanal bekommt die 90°-Phasenverschiebung. Wie auch bei manchen anderen
Filtern lässt sich die Bidirektionalität probehalber auch aufheben,
durch vorangestellte - und =.
=hilb bidirektional (default)
-hilb unidirektional
Hier das Spektrum des Filters. Blau: die positiven Frequenzen, rot: die
negativen.
Man sieht, der Frequenzgang der positiven Frequenzen ist praktisch linear,
der der negativen verschwindet, ausser in den Bereichen unterhalb von
15hz und oberhalb von 15khz. (Nicht wundern über die 6db Anhebung
der blauen Kennlinie - das hat seine Richtigkeit).
Das VASP script für obigen Versuch:
size=18
set 10000s:512 "Preisfrage:
Warum gerade eine Amplitude 512 ?
hilb
FFT
viewspec (blue)
mirr
viewspec+ (red)
Wäre das Filter völlig perfekt, sowie die spektrale Operation
HILB, dann wäre die rote Kennlinie nicht vorhanden, alle negativen
Frequenzen hätten die Amplitude 0. Für ganz heikle Fälle,
vor allem extrem tiefe Signale, ist HILB zu empfehlen.
stereo als complex betrachtet
In der Rundfunktechnik verwendet man, seit stereo gesendet wird, einen
sogenannten 'Phasenkorrelator'. Das ist ein Oszilloskop, an dem man sieht,
wie die Phasen im Stereosignal insgesamt liegen. Die Faustregel ist: Es
soll alles möglichst in der Hauptdiagonale (von links unten nach
rechts oben) pendeln. Dann ist es auch mit Monogeräten halbwegs verlustfrei
anhörbar. Liegen starke Anteile in der anderen Diagonale, dann muss
man mit Auslöschungen rechnen.
Die xy-Grafik in VASP ist im Grunde so ein Phasenkorrelator, nur langsamer,
sodass man die Entwicklung der complexen Wellen nachvollziehen kann. (hotkey
'b' für die schnelle Variante, 'x' für die langsame)
|
|
|
|
Ein normales, mit zwei Mikrofonen aufgenommenes Signal sieht in der
xy-Darstellung etwa so aus:
Complex betrachtet, ist das ein Gemisch aus positiv drehenden und negativ
drehenden Kreisbewegungen unterschiedlicher Frequenz. (Was 'positiv' und
was 'negativ' ist, ist Definitionssache. Üblicherweise bezeichnet
man die Drehrichtung gegen den Uhrzeigersinn als 'positiv').
Mit VASP kann man das Gemisch trennen:
alf (alias filter), ein modifizierter Hilbert Allpass, filtert die positiven
Frequenzen heraus und unterdrückt die negativen; alf- macht genau
das Gegenteil.
Zusammengenommen bilden sie wieder das Original.
|
+ |
|
= |
|
'Aliasfilter' heisst die Routine eben deshalb, weil man im complexen
Bereich die 'Aliasfrequenzen' 1. Ordnung an der entgegengesetzten Drehrichtung
erkennt. (Die Aliasfrequenzen 2. Ordnung haben dummerweise wieder dieselbe
Drehrichtung, usw.).
Die Routine ist aber auch noch in einem anderen Modus verfügbar:
alf.split
Dabei wird der Realteil der positiven Frequenzen in den linken Kanal gelegt,
der Realteil der negativen Frequenzen in den rechten. Das Ergebnis ist
ein modifiziertes stereo-Panorama. Das lässt sich auch mehrmals wiederholen
und es ergibt immer wieder neue stereo-Situationen. Hier das script:
size=20
sfload frank.wav
hilb
alf.split
ovp
alf.split
ovp
alf.split
ovp
alf.split
ovp
............
Das sollte man sich nach Möglichkeit im Kopfhörer anhören.
Ausgangsklang ist die Aufnahme einer Blasmusikkapelle, die ich mit 2 Mikrofonen
von meinem Fenster aus gemacht habe. In der Folge ändert sich die
Panoramaaufspaltung, es ändern sich subtile Bewegungsrichtungen,
manchmal auch die Positionen der Reflexionen an den Häuserwänden.
complex audio in VASP
Wie bereits erwähnt, arbeiten nahezu alle Routinen in VASP grundsätzlich
complex. Es wird aber ein bewusster Umgang damit erwartet. Das heisst,
wenn man mit rein reellen Klängen arbeitet (mono, nicht complex aufbereitet),
passiert auch etwas - unter Umständen aber nicht das, was man erwartet.
Am Beispiel frequency-shift:
sfload monosound.wav
fshift 1000hz
Die Operation wird complex ausgeführt, das Resultat ist aber nichts anderes als die altbekannte Ringmodulation mit den bekannten zwei Seitenbändern, die die typische Rauigkeit bewirken. (Unnötigerweise ist dann im anderen Kanal auch noch eine Phasenverschiebung davon ...). Zur linearen Frequenzverschiebung, dem eigentlichen frequency-shift, wird es erst, wenn man das mono-Signal complex aufbereitet:
sfload monosound.wav
hilb
fshift 1000hz
oder:
sfload complexsound.wav
fshift 1000hz
Eine Liste der Routinen, die complex aufbereitete Signale benötigen,
ist alleine schon deshalb sinnlos, weil es fast alle sind. Nicht zuletzt
nennt man ein Signal das nur Frequenzen einer Drehrichtung enthält,
ein 'analytical signal', weil es die Grundlage für eine Vielzahl
von Klanganalysen ist.
complexes Spektrum
Das Spektrum eines Klanges, auch wenn dieser nur mono, also rein reell
ist, ist immer complex. Man kann den Versuch machen:
sfload monosound.wav
FFT
clear.y
FFT-
view.
Was kommt da raus ? - Schritt für Schritt:
Das Gemisch eines Klanges mit seiner Zeitumkehrung ! (Egal, ob dieser
Klang selber mono oder stereo wäre.
[Es gibt eine reele FFT, meistens RFT oder RFFT genannt. Ein verbreiteter
Irrtum unter Programmierern ist, dass diese ein rein reelles Spektrum
liefere. Keineswegs ! Man erspart sich bloss die Berechnung der oberen
Bufferhälfte des Spektrums, weil die im Falle eines mono-Klanges
symmetrisch identisch zur ersten ist.]
Auch in VASP gibt es eine RFFT. Diese ist in so einem Fall einfach doppelt
so schnell, dafür bleibt die obere Hälfte im Spektrum leer.
Man kann sie mit einem nachfolgenden symm.cjg rekonstruieren.
Wie wir wissen, kann das Spektrum als eingenständiger Klang betrachtet
und als solcher gehört und verwendet werden. Dieser Klang ist in
jedem Fall complex. er besteht für gewöhnlich aus einem Gemisch
aus links- und rechtsdrehenden Frequenzen. Für viele Spektrale Operationen
ist es aber von Vorteil, wenn nur Frequenzen einer Drehrichtung enthalten
sind. (Damit hier kein Knopf im Hirn entsteht: Was wir im Spektrum als
Frequenzen hören, sind in der Zeitebene Zeitpunkte, einzelne Samples
- und umgekehrt >> SPILLING THE BEANS #9 Dellenhammer & Beulenhammer).
Um ein solchermassen 'analytisches Spektrum' zu erhalten, brauchen wir
nichts weiter tun, als die zweite Bufferhälfte in der Zeitebene leer
lassen, oder löschen durch clear.u (das ist sozusagen die triviale
Methode einer Hilbert-Transformation im Spektrum).
Ein berühmtes Beispiel einer complexen Operation im Spektrum ist
der sogenannte Faltungshall (convolution). Dabei werden die Spektren zweier
Klänge moduliert, das heisst, sample für sample multipliziert.
Und natürlich ist diese Multiplikation complex, sonst käme eine
Verhallung in beiden Zeitrichtungen raus ...
Hier das VASP script für die convolution zweier beliebiger Klänge.
(Es ist lediglich darauf zu achten, dass im Buffer Platz dafür ist,
denn das Ergebnis ist so lange, wie beide Klänge zusammen):
A:
sfload klang1.wav
FFT
B:
sfload klang2.wav
FFT
vmul
FFT-
vmul ist eine solche complexe Multiplikation des Inhaltes (Vektors) im einen Buffer mit dem im anderen Buffer. Natürlich lässt sich das auch als Macro schreiben: CONV. In der ausformmulierten Form besteht aber die Möglichkeit, noch ins Spektrum einzugreifen, etwa den typisch matten Klang einer convolution durch einen Compressor boost zu korrigieren.
A:
sfload klang1.wav
FFT
B:
sfload klang2.wav
FFT
vmul
boost 1.5,10hz
FFT-
(1.5 ist der Kompressionsfaktor; die 10hz daneben haben nichts mit den
spektralen Frequenzen zu tun, sie sind eine Filtereinstellung für
den Hüllkurvendetektor, der in boost verwendet wird).
complex audio in AMP
So wie man sich bei den alten analogen Effektgeräten (dem Bode-Frequencyshifter beispielsweise) nicht darum kümmern musste, dass sie intern complex arbeiten, so muss man das auch bei den AMP Kernmodulen (objects) nicht. Alle Module, die complex arbeiten, haben standardmässig ein Allpassfilter eingebaut. Sie erhalten einen mono-input und liefern einen mono-output, wenn nicht explizit anders deklariert.
i1=monosound.wav (m)
k1=fshift (m,*i1)
out=test.wav (m,*k1)
Das ginge explizit auch so (der doppelte Stern ist ein complexer patch):
i1=monosound.wav (m)
k1=hilb (*i1)
k2=fshift (m,**k1)
out=test.wav (m,*k2)
oder so:
i1=complexsound.wav (s)
k1=fshift (m,**i1)
out=test.wav (m,*k1)
oder so, wenn man ein complexes Resultat erhalten möchte:
i1=monoklang.wav (m)
k1=fshift (c,*i1)
out=test.wav (2:2,*k1)
Im Grunde muss man sich in AMP nicht darum kümmern und es gibt auch
keine complexen Parameter (sie können aber, wenn wer will und sich
auskennt, complex verknüpft werden).
Hat man mehrere Module hintereinandergeschaltet, die intern complex arbeiten,
dann ist es allerdings ungeschickt, wenn man immer wieder die complexe
Ebene verlässt und in jedem Modul erneut ein Allpassfilter strapaziert.
Da ist es besser, man deklariert den output der betreffenden Module complex.
Hier das vollständige script mit einem Phasenbeschleuniger (spin)
und dem Frequencyshifter (fshift) mit nachgeschaltetem Aliasfilter (.alf)
i1=monoklang.wav (m)
k1=spin (c,*i1) "liefert
complexen output durch c
k2=fshift.alf (m,**k1) "übernimmt complexen
output durch **
out=test.wav (m,*k2) "liefert aber
wieder einen mono output
seg=1
dur: 10
k1.rate: 4
k2.freq: 1000
* * *
Somit steht dem Abenteuer complex audio nichts mehr im Wege ...
akueto
G.R.
(c) Günther Rabl 2011-13
Mathematischer Anhang
Eine kurze Übersicht über die complexe Algebra für Leute,
die selber programmieren wollen. Wie die meisten wissen, programmiere
ich in FORTRAN (und habe aus guten Gründen auch nicht vor zu einer
anderen Sprache zu wechseln). In FORTRAN gibt es von Anbeginn an den Datentyp
complex, der genauso behandelt werden kann, wie jeder andere Datentyp
auch. Alle complexen Rechenoperationen werden so maschinennahe wie möglich
ausgeführt. Man benötigt keine functions dazu und muss keine
Bibliotheken einbinden. Wenn A,B und C complexe Zahlen sind, dann kann
ich ohne weiteres schreiben:
A = B + C
A = B * C
sogar
A = B ** C (die FORTRAN Schreibweise für A istgleich B hoch C)
Dennoch ist es gut zu wissen, wie die Zusammenhänge sind.
C,D .... complexe Zahlen
x,y,a,b ... reelle Zahlen
i ..... das Symbol für imaginär i=√-1
R ..... der Radius oder Absolutbetrag (reell)
φ ..... der Winkel phi (reell)
π ..... die Zahl pi (3.14159...)
n ..... eine beliebige ganze Zahl
i = √-1
i2 = -1
(-i)2 = -1
log(i) = π/2 ±2nπ (zyklisch)
C = x+iy; D=a+ib
C' = cjg(C) = x-iy "conjugiert complex"
C+D = (x+a) + i(y+b)
C*D = (x*a-y*b) + i(x*b+y*a)
C/D = C*D'/|D|2 = ((x*a+y*b)+i(y*a-x*b))/(a2+b2)
R = |C| = √(x2+y2)
φ = arccos(x/R) = arcsin(y/R) = arctan2(y,x)
C = R * (cosφ+isinφ) = R * eiφ
log(C) = log(R) + iφ
exp(C) = eR*cosφ * eiR*sinφ
√C = √R * eiφ/2
CD = eD*log(C) = exp((a*log(R)-b*φ)+i(a*φ+b*R))
Zusammenhang von Kreisfunktionen und Hyperbelfunktionen:
sin(iφ) = isinh(φ)
cos(iφ) = cosh(φ)
sinh(iφ) = isin(φ)
cosh(iφ) = cos(φ)
sinh(φ) = (eφ-e-φ)/2
cosh(φ) = (eφ+e-φ)/2
tanh(φ) = (eφ-e-φ)/(eφ+e-φ)
Einige dieser Funktionen, wie zum Beispiel die complexe Wurzel und der
complexe Logarithmus haben bekanntlich unendlich viele Lösungen.
Allerdings hat der pfiffige Leonhard Euler (1707-1783) schon
vor 250 Jahren eine Kontroverse zwischen Leibnitz und Bernoulli
bereinigt, indem er den Nachweis erbrachte, dass auch der Logarithmus
von positiven reellen Zahlen unendlich viele Lösungen hat - aber
nur eine einzige reelle daruntern. log(x) = log(x) + i2nπ,
wobei n eine beliebige ganze Zahl ist und die bekannte reelle Lösung,
wenn n=0 ist.
Im Kontext gibt es aber immer eine naheliegende Lösung, wenn man
davon ausgeht, dass die Differenz der Phasen zweier benachbarter samples
nicht grösser als π und nicht kleiner als -π sein darf. Dadurch
sind auch so schöne Effekte möglich, wie die Mittelwert-Modulationen
vmerge.rms und vmerge.gmean
vmerge.rms C = √(A2+B2)
vmerge.gmean C = √(A*B)
Ausprobieren !
Wer einen der Meisterkurse absolviert hat oder den Einführungskurs
VASP/AMP, hat auch ein unscheinbares Programm namens UC erhalten ('universal
calculator'). Das ist ein 'Taschenrechner', der reell, complex und auch
in Primquotienten betrieben werden kann. Die Umschaltung dafür ist
!R, !C und !PQ
Alle sind in RPN ('reverse polish notation'). Die will ich hier nich lang
und breit erklären, nur soviel:
Wenn man auf einem normalen Taschenrechner schreiben würde
5
+
7
=
dann schreibt man das in RPN
5
enter
7
enter
+
Desgleichen
5; +; 7; +; 3; +; 2; =
kann man in RPN schreiben:
5; enter; 7; enter; 3; enter; 2; enter; +; +; +
Complexe Zahlen gibt man mit underscore _ ein.
5+i2 schreibt man einfach 5_2
Auch die Eingabe in Polarkoordinaten ist möglich.
3(cos(45°)+isin(45°)) schreibt man 3_45deg
oder 3_0.7854rad