5.1.1Idee¶
Unter Fourier-Analysis versteht man das Darstellen von Funktionen und diskreten Signalen als Summe von Kreisfunktionen. Unter Kreisfunktionen verstehen wir hier Sinus-Funktionen, Cosinus-Funktionen und deren komplexwertige Entsprechungen (sie unten), jeweils mit unterschiedlichen Periodendauern.
Man kann zeigen, dass praktisch alle Funktionen und diskreten Signale ohne Informationsverlust eine solche Darstellung besitzen. Nur die Anteile der verschiedenen Kreisfunktionen bzw. Periodendauern unterscheiden sich von Fall zu Fall. Man spricht hier auch von der Frequenzdarstellung oder vom Frequenzspektrum einer Funktion oder eines diskreten Signals.
5.1.2Anwendungen¶
Die Fourier-Analysis findet in nahezu allen Bereichen von Naturwissenschaft und Technik Anwendung. Insbesondere in der Signalverarbeitung erlaubt sie das einfache Filtern von Signalen. Bei der Untersuchung von Schwingungsprozessen liefert sie wichtige Einsichten in die Vorgänge (erste Anwendungen fand die Fourier-Analysis bei der Vorhersage der Gezeiten). In der Strömungsmechanik können mittels Fourier-Analysis Lösungen von Strömungsgleichungen gefunden werden. In der Physik spielt sie eine zentrale Rolle, z.B. in der Quantenmechanik und im Kontext elektromagnetischer Wellen.
5.1.3Beispiel¶
Durch Messgeräte aufgenommene Signale enthalten praktisch immer einen gewissen Anteil Rauschen. Ist das Grundsignal verhältnismäßig glatt, kann das Rauschen mittels Fourier-Analysis leicht entfernt werden:
Transformiere das Signal in den Frequenzbereich.
Setze hohe Frequenzanteile auf Null.
Transformiere das Signal zurück in den Zeitbereich (oder Ortsbereich, je nach Kontext).
Source
import matplotlib.pyplot as plt
import numpy as np
rng = np.random.default_rng(0) # Zufallszahlengenerator
# Messzeitpunkte
t = np.linspace(0, 5, 200)
# Messwerte
x = np.exp(-2 * (t - 2.5) ** 2) - np.exp(-5 * (t - 1.5) ** 2)
# Rauschen (normalverteilt) und hochfrequentes Störsignal
x = x + 0.04 * rng.normal(0, 1, len(x))
x = x + 0.1 * np.sin(50 * t)
# Fourier-Transformation
trans = np.fft.rfft(x)
freq = np.fft.rfftfreq(len(t))
# Anteile hoher Frequenzen auf Null setzen
trans_filtered = trans.copy()
trans_filtered[10:] = 0
# inverse Fourier-Transformation
x_filtered = np.fft.irfft(trans_filtered)
# Plot des Signals vor dem Filtern
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(10, 3))
ax1.plot(t, x, '-')
ax1.set_xlabel('Zeit')
ax1.set_ylabel('Messwert')
ax1.set_yticks([])
ax1.set_title('Signal im Zeitbereich')
ax2.plot(freq, np.abs(trans), '-')
ax2.set_xlabel('Frequenz')
ax2.set_ylabel('Anteil im Signal')
ax2.set_yticks([])
ax2.set_title('Signal im Frequenzbereich')
plt.show()
# Plot des Signals nach dem Filtern
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(10, 3))
ax1.plot(freq, np.abs(trans_filtered), '-')
ax1.set_xlabel('Frequenz')
ax1.set_ylabel('Anteil im Signal')
ax1.set_yticks([])
ax1.set_title('Signal im Frequenzbereich (gefiltert)')
ax2.plot(t, x_filtered, '-')
ax2.set_xlabel('Zeit')
ax2.set_ylabel('Messwert')
ax2.set_yticks([])
ax2.set_title('Signal im Zeitbereich (gefiltert)')
plt.show()

5.1.4Varianten der Fourier-Transformation¶
Die Idee, Funktionen und diskrete Signale als Summen periodische Funktionen oder Signale darzustellen, lässt sich in verschiedener Weise umsetzen und auf verschiedene Typen von Funktionen und Signalen anwenden. Es gibt es nicht die eine Fourier-Transformation, sondern mehrere verschiedene. Zusätzlich kann ein und dieselbe Variante durch formal unterschiedliche, aber inhaltlich identische Formeln beschrieben werden. Folgende Varianten von Fourier-Transformationen werden wir behandeln:
Die kontinuierliche Fourier-Transformation (CTFT) transformiert eine auf definierte aperiodische Funktion in eine auf definierte Funktion.
Die Fourier-Transformation für periodische Funktionen transformiert eine auf periodische Funktion (oder eine auch einem Intervall definierte Funktion, die periodisch auf fortgesetzt wird) in eine Zahlenfolge, also in ein diskretes Signal.
Die diskrete Fourier-Transformation (DFT) transformiert ein endliches diskretes Signal in ein endliches diskretes Signal.
Quelle: wikipedia.org, Walter Dvorak, CC BY 3.0 (bearbeitet)
Im Kontext der Fourier-Analysis treten auch folgende Begriffe auf, die wir der Übersicht halber grob einordnen, aber nicht weiter verfolgen:
Die schnelle Fourier-Transformation ist ein spezielles Verfahren zur Berechnung der diskreten Fourier-Transformation. Es handelt sich also nicht um eine zusätzlich Transformationsart, sondern nur um eine konkrete Umsetzung der Transformation am Computer.
Als Fourier-Reihe wird das Ergebnis der Fourier-Transformation für periodische Funktionen bezeichnet.
Die Fourier-Transformation für zeitdiskrete Signale (DTFT) ist eine weitere, aber weniger bedeutende, Form der Fourier-Transformation. Sie überführt ein unendliches, nicht periodisches diskretes Signale in eine Funktion über .
5.1.5Komplexwertige Funktionen¶
Möchte man eine Funktion als Summe von Kreisfunktionen verschiedener Frequenz darstellen, so werden im Allgemeinen sowohl Sinus-Funktionen als auch Cosinus-Funktionen benötigt. Eine reine Sinus-Summe liefert stets eine ungerade Funktion, während eine reine Cosinus-Summe stets nur gerade Funktionen liefert.
Die parallele Handhabung von zwei Funktionensystemen (Sinus- und Cosinus-Funktionen unterschiedlicher Frequenzen) und entsprechender Anteile in der zu untersuchenden Funktion ist recht unhandlich. Deshalb werden Fourier-Transformationen praktisch immer mit Hilfe komplexer Zahlen dargestellt.
Wie werden also mit komplexwertigen Funktionen arbeiten. Die grafische Darstellung solcher Funktionen kann in einem dreidimensionalen Koordinatensystem erfolgen. Jedem Argument wird ein Punkt in der komplexen Zahlenebene zugeordnet.
Source
import numpy as np
import plotly.graph_objects as go
x = np.linspace(0, 6 * np.pi, 200)
u = np.cos(x)
v = np.sin(x)
fig = go.Figure()
fig.layout.margin = dict(l=0, r=0, b=0, t=0) # breiten Rand vermeiden
fig.add_trace(
go.Scatter3d(x=x, y=u, z=v, mode='lines', line_width=5)
)
fig.add_trace(
go.Scatter3d(x=x, y=u, z=-1.5 * np.ones_like(x), mode='lines', line_width=2, line_color='rgb(128,128,128)')
)
fig.add_trace(
go.Scatter3d(x=x, y=1.5 * np.ones_like(x), z=v, mode='lines', line_width=2, line_color='rgb(128,128,128)')
)
fig.update_layout(
scene_xaxis_title_text='x',
scene_yaxis_title_text='Re f(x)',
scene_zaxis_title_text='Im f(x)',
showlegend=False,
scene_camera_eye=dict(x=1,y=-1,z=1)
)
fig.show()Die Berechnung von Fourier-Transformationen macht ganz wesentlich von Integralen komplexwertiger Funktionen Gebrauch. Die Integration getrennt nach Real- und Imaginärteil:
Analog wird mit Ableitungen verfahren:
Die üblichen Ableitungsregeln gelten auch für komplexwertige Funktionen.