In den bisherigen Teilen haben wir uns mit der Fourier-Analyse reeller Signale beschäftigt. Dabei haben wir rotierende Zeiger unterschiedlicher Frequenzen addiert und die Projektion des Summenzeigers ergab unser zeitabhängiges Signal (s. Teil 1).
Der Summenzeiger hat dabei recht komplizierte Kurven in der komplexen Ebene beschrieben (s. speziell Teil 2). In diesem Teil stellen wir nun die Frage, wie wir geschlossene, ebene Kurven in eine Summe von rotierenden Zeigern verwandeln können.
Einfache Beispiele für solche Kurven sind Lissajous-Figuren wie in Abb. 1 gezeigt. Wir betrachten dabei die Bahnkurve eines Punktes, dessen x– und y-Koordinaten allgemeine Sinus-Funktionen der Zeit t sind. Wenn der Quotient der beiden Frequenzen rational ist, sind die Bahnen geschlossen – und damit periodisch.

Lissajous-Figuren
Interpretieren wir die x– bzw. y-Koordinate eines bewegten Punktes als Real- bzw. Imaginärteil eines komplexen Zeigers, erhalten wir das komplexe Signal
,
das für geschlossene Kurven periodisch ist. Nachdem Real- und Imaginärteil rein reelle und periodische Funktionen sind, können wir deren Fourier-Koeffizienten
berechnen. Aufgrund der Linearität des Integrals gilt weiter
Wir erhalten also direkt die Fourier-Koeffizienten unseres komplexen Signals.
Im Gegensatz zu reellen Signalen gilt jetzt aber im Allgemeinen
Wir können uns also nicht mehr auf das einseitige Spektrum – sprich komplexe Amplituden – beschränken, sondern müssen negative Frequenzen mitberücksichtigen. Negative Frequenzen bedeuten aber einfach, dass der Zeiger im Uhrzeigersinn rotiert. Mit einer positiven Frequenz rotiert er gegen den Uhrzeigersinn.
In unserem Signal aus Abb. 1 ist das Frequenzverhältnis ganzzahlig. Deshalb legt die kleinere Frequenz die Grundfrequenz
fest und damit auch die Periodendauer
.
Unser Signal ist die Summe zweier allgemeiner Sinus-Funktionen:
.
Im Spektrum können daher nur die Frequenzen und
vorkommen. D.h., außer für k = ±1 und k = ±2 müssen alle Fourier-Koeffizienten gleich 0 sein. Die exakte Rechnung ergibt
Ich lasse die schneller rotierenden Zeiger gerne um die langsameren rotieren. Deshalb sind alle Fourier-Koeffizienten so sortiert wie oben gezeigt. Mit diesen Koeffizienten ergibt sich für unser Signal die Animation in Abb. 2.

Abb. 3 zeigt das zweiseitige Spektrum der Fourier-Koeffizienten der Lissajous-Figur aus Abb. 2. In diesem Fall merkt man nur in den Phasen (und da auch nur für k = 2).

Die Wikipedia-Seite über Lissajous-Figuren listet noch viele interessante Frequenz-Verhältnisse auf. Für nicht-ganzzahlige, aber rationale Frequenzverhältnisse können wir die Grundfrequenz und damit die Periodendauer wie bei den Schwebungen in Teil 5 bestimmen.
Ptolemäisches Weltbild und Kepler’s Ellipsen
Eine weitere, recht einfache Lissajous-Figur ist eine Ellipse. Ihre Standard-Parameterform ist
Real- und Imaginärteil haben also dieselbe Frequenz, sind aber phasenverschoben. Die Amplituden a und b sind die Längen der Ellipsen-Halbachsen. Die Exzentrizität e der Ellipse ist
.
Dividieren wir das durch die große Halbachse (bei uns a), erhalten wir die numerische Exzentrizität
.
Die Ellipse in Abb. 4 hat die Halbachsen und
, und damit die Exzentrizität
bzw.
.

Bei einer Periodendauer von beträgt die Grundfrequenz
. Mit demselben Argument wie oben können nur bei
Fourier-Koeffizienten herauskommen, also bei
. Die konkrete Rechnung ergibt
.
Interessanterweise ergeben zwei aufeinander abrollende Kreise eine Ellipse, wenn ihre Radien das Verhältnis
haben.
Das entsprechende Spektrum zeigt Abb. 5. Würde sich der Planet im statt gegen den Uhrzeigersinn drehen, wären und
vertauscht.

Im ptolemäischen (geozentrischen) Weltbild wurden alle Planetenbahnen mithilfe von Epizykeln (und weiteren Tricks) beschrieben. Für eine Ellipse braucht man nur einen Hauptkreis (Deferent) und einen Epizykel. Wunderbar, wir sind glücklich – oder?
Ein Planet bewegt sich zwar näherungsweise in einer Ellipse um die Sonne, aber nicht so, wie es in Abb. 4 gezeigt ist. Die dunklen Punkte in Abb. 4 zeigen jeweils gleiche Zeitabstände an. In der Nähe der Brennpunkte bewegt sich der Zeiger etwas langsamer als am Ende der kleinen Halbachsen.
Tatsächlich bewegt sich ein Planet in der Nähe der Sonne (eines Brennpunkts) schneller als weit weg von der Sonne (anderer Brennpunkt). Das ist das berühmte 3. Keplersche Gesetz, das auf der Drehimpulserhaltung beruht. Es gilt:
Bei Bahnkurven geht es nicht nur um die Form der Kurve, sondern es ist auch wichtig, wann das Objekt wo ist.
(Das sollte jeder beim Überqueren von Bahngleisen beherzigen!)
Ich habe keine Parametrisierung der Ellipse gefunden, die den Drehimpuls erhalten würde. Deshalb habe ich die entsprechenden Bewegungsgleichungen numerisch gelöst (Details im Anhang unten) und dann die Fourier-Transformation durchgeführt. Das Ergebnis ist die Animation in Abb. 6.

Man sieht an der Bewegung des roten Summenzeigers sehr schön, wie der Planet in der Nähe der Sonne schneller wird und nach seinem »Vorbeiflug« wieder langsamer. Auch die dunklen Punkte, die alle wieder im Zeitabstand 0.2 s gezeigt sind, verdeutlichen das sehr gut.
Wie die Abb. 6 zeigt braucht es jetzt mehr als zwei Kreise. Obwohl die Kreisradien relativ schnell gegen 0 gehen (s. Abb. 7), musste ich bis k = ±55 (±13.75 Hz) summieren, damit der ganz rechte Punkte der Ellipse erreicht wurde. Die Asymmetrie zwischen positiven und negativen Frequenzen ergibt sich wieder durch den gewählten Umlaufsinn.

Unsere Ellipse hat schon eine relativ große Exzentrizität von . Die zu Keplers Zeiten bekannten Planeten haben viel kleinere Exzentrizitäten. Für die Erde hat man z.B.
gemessen und für den Mars
. Beide Bahnen könnte man mit freiem Auge fast nicht von einem Kreis unterscheiden.
Entsprechend braucht man im ptolemäischen Weltbild nicht ganz so viele Epizykel wie in Abb. 6 gezeigt. Allerdings ist Abb. 6 von einem ruhenden Beobachter außerhalb des Sonnensystems gesehen. Aus Sicht der Erde muss man die Epizykel der Erdbahn und der Planetenbahn kombinieren.
Beliebige geschlossene Kurven
Wie sieht es mit anderen geschlossenen Kurven, also periodischen komplexen Signalen aus?
Eines der bekanntesten Beispiele ist das Video Ptolemy and Homer (Simpson), in dem eine beliebte Zeichentrickfigur mit rotierenden Zeigern gezeichnet wird. Wer dieses Video gesehen hat weiß, dass praktisch keine Einschränkungen existieren – zumindest für zusammenhängende und geschlossene Kurven. Man kann den Stift zwar nicht absetzen, aber problemlos einen Teil der Kurve hin- und wieder zurückfahren.
Als künstlerisch Minderbegabter habe ich erst gar nicht versucht Homer Simpson zu zeichnen; meine Zeichenkünste kamen mit der Blume in Abb. 8 an ihre Grenzen. Gezeichnet (eher programmiert) habe ich sie mit Bézierkurven in Asymptote. Weil die Blume nicht durch eine bekannte Funktion beschrieben werden kann, müssen wir für die Berechnung der Zeiger auf die Diskrete Fourier-Transformation aus Teil 6 zurückgreifen.

Dazu müssen wir die Kurve in eine Menge von Punkten umwandeln, wie es im rechten Teil von Abb. 8 gezeigt ist. Das kann man händisch machen, oder dem Computer überlassen. Wie wir gleich sehen werden, braucht es sehr viele Punkte – die zweite Alternative ist also empfehlenswert.
Nach der Wahl einer Periodendauer T haben die N Punkte jeweils den Zeitabstand . Wenn sie nicht auch denselben Längenabstand haben, läuft der Summenzeiger mal schneller, mal langsamer. Das ist kein prinzipielles Problem und könnte sogar gezielt eingesetzt werden. Die Periodendauer T selber sollte so gewählt werden, dass sich eine angenehme Animation der Zeiger ergibt.
Mit dem folgenden MATLAB/Octave-Code können nun die Zeiger berechnet werden. Hier kommt die Periodendauer T nirgendwo vor; die benötigen wir erst beim tatsächlichen Zeichnen der Zeiger.
% das komplexe Signal sn = [0.11-1.87i,0.055217-1.70265i, ... % 124 Punkte ausgelassen -0.055793-1.697763i,-0.000949-1.867389i]; N = length(sn); % Fourier-Koeffizienten berechnen Sk = fft(sn)/N; % nach dem Schema k = 0, 1, -1, 2, -2, 3, -3, ... % sortieren kmax = 2*63+1; sortedSk = complex(zeros(1, kmax)); % MATLAB beginnt bei 1 zu zählen sortedSk(1) = Sk(1); for k = 2:2:kmax sortedSk(k) = Sk(k/2 + 1); sortedSk(k + 1) = Sk(N - k/2 + 1); end % für Asymptote aufbereitet speichern fout = fopen('Sk.txt', 'w'); fprintf(fout, 'pair[] Sk = {(%.8e,%.8e),\n', ... real(sortedSk(1)), imag(sortedSk(1))); for k = 2:2:(kmax - 1) fprintf(fout, ' (%.8e,%.8e), ', ... real(sortedSk(k)), imag(sortedSk(k))); fprintf(fout, '(%.8e,%.8e)', ... real(sortedSk(k + 1)), ... imag(sortedSk(k + 1))); if k ~= kmax - 1 fprintf(fout, ',\n'); else fprintf(fout, '};\n'); end end fclose(fout);
Wie schon oben erwähnt, hätte ich die Zeiger gerne in der Reihenfolge k = 0, ±1, ±2, … Der fft-Befehl liefert sie aber in der Reihenfolge k = 0, 1, 2, 3, …, -3, -2, -1. Deshalb sortiere ich sie um, bevor sie in die Datei »Sk.txt« geschrieben werden. Sie sind so formatiert, dass Asymptote direkt damit arbeiten kann.
Aus N Messwerten erzeugt die DFT auch N Fourier-Koeffizienten. Abzüglich des konstanten Mittelwerts bleiben von den 128 Punkten aus Abb. 8 noch 127 rotierende Zeiger übrig. Ich hätte jedoch gerne immer Paare mit plus/minus derselben Frequenz, wodurch sich die Zahl auf 63 Paare reduziert. Das Ergebnis der Rechnung zeigt die Animation in Abb. 9.
Das Ergebnis ist schon ganz anschaulich, speziell die Blattspitzen und andere Ecken kommen jedoch noch nicht ganz heraus. Mehr können unsere 128 Punkte aber nicht liefern.
Um auf Nummer Sicher zu gehen, habe ich den Computer die Koordinaten von 4096 äquidistanten Punkten ermitteln lassen und daraus die DFT berechnet. Mit den ersten ±300 Fourier-Koeffizienten ergibt sich die Animation in Abb. 10. Die rote Kurve zeichnet die grüne fast perfekt nach.
Abb. 11 zeigt das zweiseitige Spektrum der Fourier-Koeffizienten der Animation aus Abb. 10. Obwohl die Amplituden ab etwa ±3 Hz (k = ±45) fast 0 sind, wurde in Abb. 10 die Summe bis ±300 gebildet, damit die Spitzen und Ecken halbwegs vernünftig herauskommen.

Auch wenn es vielleicht ungewohnt ist, die Blumenkurve und Abb. 11 enthalten exakt dieselbe Information.
Was die automatische Umwandlung von gezeichneten Kurven in Punktmengen betrifft, hat der Nutzer anderstood auf Mathematica StackExchange ein paar Ideen gezeigt. Perfekt ist das Ergebnis aber noch nicht.
Diskussion
Kurven sind 1-dimensional, weil wir entlang ihnen nur vor/zurück gehen können. Dennoch füllen sie eine 2-dimensionale Ebene. Wir werden uns bald mit 2- und mehr-dimensionalen Fourier-Transformationen beschäftigen. (Als Teaser ein Beitrag zu Schwingungen und Wellen im Raum.) Vorher wird es aber voraussichtlich ein paar Posts zu 3D-Computergraphik geben.
Anhang
Um die zeitabhängige Position eines Planeten auf einer Kepler-Ellipse zu erhalten, müssen wir wegen der Gravitation die Bewegungsgleichungen
mit lösen. Der Stern steht dabei im Koordinatenursprung, ist also im Vergleich zu Abb. 4 um die Exzentrizität e nach links geschoben.
Wie man das numerisch recht einfach machen kann, hat Richard Feynman schon relativ zu Beginn seiner Lectures gezeigt. Für eine bessere Genauigkeit habe ich die Integration mit Mathematica gemacht.
Aber wie bekommen wir eine Ellipse mit vorgegebenen Halbachsen a und b und vorgegebener Periodendauer T? Zunächst gilt nach dem 3. Keplerschen Gesetz, dass das Produkt aus Gravitationskonstante G und Sternmasse M gleich
ist (wenn der Stern viel schwerer als der Planet ist). Im Prinzip legen wir mit der großen Halbachse und der Periodendauer die Sternmasse fest. Zusätzlich brauchen wir noch passende Anfangsbedingungen, z.B. starten wir in sonnennächster Position (Perihel) senkrecht nach oben. Die Bahngeschwindigkeit in diesem Punkt ist
,
weil der Abstand zu Sonne beträgt. Insgesamt sind die Anfangsbedingungen:
Mathematica ermittelt zunächst für x und y je eine Interpolationsfunktion. Daraus habe ich dann 4096 Punkte in gleichen Zeitabständen berechnen lassen und ihre x-Koordinaten wieder um e nach rechts geschoben.
Mit dem Befehl Fourier[Punkte, FourierParameters -> {-1, 1}] berechnet Mathematica dann die diskrete Fourier-Transformation dieser Punkte. Die optionalen FourierParameters musste ich verwenden, weil Mathematica sonst Hin- und Rücktransformation durch dividiert. Wir haben aber immer nur bei der Hintransformation durch N dividiert.
Natürlich sortiert Mathematica die Fourier-Koeffizienten wieder anders als MATLAB/Octave oder wie ich sie gerne hätte. Mathematica hat die Reihenfolge k = 0, -1, -2, -3, …, 3, 2, 1.
Eine Animation des Logos meiner Schule mit als Fourier-Reihe findet sich in Teil 9b.