4.5 Signale im Frequenzbereich - DFT und FFT

Bislang haben wir Signale im Zeitbereich betrachtet, also wie sich ein Signal über die Zeit ändert. In diesem Kapitel wechseln wir die Domäne und betrachten Signale im Frequenzbereich.

4.5.1 Motivation und Grundidee

Viele Signale lassen sich besser analysieren und verstehen, wenn man sie im Frequenzbereich betrachtet. Zum Beispiel kann ein komplexes Audiosignal in seine einzelnen Frequenzkomponenten zerlegt werden, was bei der Klangbearbeitung oder Rauschunterdrückung hilfreich ist.

Oder es wird ein mechanisches System betrachtet, in dem Änderungen im Spektrum auf einen sich anbahnenden Defekt hinweisen können und so frühzeitig Wartungsmaßnahmen eingeleitet werden können.

Maschinenwartung

Ein weiterer wichtiger Anwendungsbereich ist die Doppler-Frequenzmessung, z.B. bei Radaranlagen oder Geschwindigkeitsmessgeräten. Hier wird die Frequenzverschiebung (Doppler-Shift) eines reflektierten Signals ausgewertet, um die Relativgeschwindigkeit des sich bewegenden Objekts zu bestimmen.

Die FFT ermöglicht es uns, die zeitlich veränderliche Frequenz eines Signals sichtbar zu machen. Im Spektrogramm ist zu erkennen, wie sich die Frequenz der Sirene über die Zeit ändert - von anfangs ~930 Hz (Annäherung) über 1000 Hz (Vorbeifahrt) bis ~1080 Hz (Entfernung). Ohne FFT könnten wir diese Frequenzänderung im Zeitsignal nicht direkt ablesen und auswerten.

Doppler Effekt

Die FFT wandelt das Zeitsignal in den Frequenzbereich um und macht damit die Doppler-Verschiebung quantitativ messbar - eine essenzielle Methode in der Signalverarbeitung für Radar, Ultraschall und Funktechnik.

4.5.2 Frequenzanteile und Spektrum

Signale als Überlagerung von Frequenzen

Jedes periodische Signal kann als Überlagerung (Summe) von Sinusschwingungen verschiedener Frequenzen dargestellt werden. Diese fundamentale Erkenntnis geht auf Jean-Baptiste Joseph Fourier zurück und ist die Grundlage der Fourier-Analyse.

Beispiel: Ein Rechtecksignal besteht aus:

  • Grundfrequenz \(f_0\)
  • Ungeradzahligen Harmonischen: \(3f_0, 5f_0, 7f_0, \ldots\)

Ein Rechtecksignal entsteht durch Überlagerung der Grundfrequenz und ihrer ungeradzahligen Harmonischen

Zeitbereich vs. Frequenzbereich

Ein Signal kann auf zwei Arten dargestellt werden:

Zeitbereich (Time Domain): - Zeigt, wie sich die Amplitude über die Zeit ändert - X-Achse: Zeit [s] - Y-Achse: Amplitude [V, A, ...] - Zeigt das "reale" Signal, wie es gemessen wird

Frequenzbereich (Frequency Domain): - Zeigt, welche Frequenzen im Signal enthalten sind - X-Achse: Frequenz [Hz] - Y-Achse: Magnitude (Amplitude der jeweiligen Frequenz) - Zeigt die "Zusammensetzung" des Signals

Zeit- vs. Frequenzbereich

Links: Signal im Zeitbereich. Rechts: Dasselbe Signal im Frequenzbereich (Spektrum)

Das Spektrum

Das Spektrum (auch Frequenzspektrum) eines Signals zeigt an, welche Frequenzanteile mit welcher Stärke (Amplitude) im Signal vorhanden sind.

Arten von Spektren:

Linienspektrum (diskretes Spektrum): - Periodische Signale - Besteht aus einzelnen Frequenzlinien - Beispiel: Sinuston, Rechtecksignal, Sägezahn

Kontinuierliches Spektrum: - Nicht-periodische oder transiente Signale - Energie ist über einen Frequenzbereich verteilt - Beispiel: Rauschen, Impuls, gesprochene Sprache

Harmonische und Grundfrequenz

Bei periodischen Signalen gibt es:

Grundfrequenz \(f_0\):

  • Die niedrigste Frequenzkomponente
  • Bestimmt die Periode des Signals: \(T = \frac{1}{f_0}\)

Harmonische (Obertöne):

  • Ganzzahlige Vielfache der Grundfrequenz: \(2f_0, 3f_0, 4f_0, \ldots\)
  • Bei manchen Signalformen nur geradzahlige (z.B. Dreieck) oder ungeradzahlige Harmonische (z.B. Rechteck)

Spektralkomponenten realer Signale

Reine Sinuswelle:

  • Nur eine Frequenz im Spektrum
  • Eine einzelne Linie bei \(f_0\)

Musik/Klang:

  • Grundton + Obertöne
  • Die Verteilung der Obertöne bestimmt die Klangfarbe (Timbre)

Sprache:

  • Kontinuierliches Spektrum mit charakteristischen Formanten (Resonanzfrequenzen)
  • Zeitlich veränderlich

Rauschen:

  • Breites, kontinuierliches Spektrum
  • Weißes Rauschen: alle Frequenzen gleich stark
  • Rosa Rauschen: Amplitude nimmt mit höherer Frequenz ab

Vibrationen in Maschinen:

  • Drehzahl und deren Harmonische
  • Lagerfrequenzen
  • Resonanzfrequenzen der Struktur

Praktischer Nutzen der Spektralanalyse

Fehlerdiagnose:

  • Abweichungen im Spektrum zeigen Defekte (z.B. Lagerschaden bei Maschinen)

Signalverarbeitung:

  • Filterung unerwünschter Frequenzen (z.B. 50 Hz Netzbrummen)
  • Rauschunterdrückung

Audioverarbeitung:

  • Equalizer arbeitet im Frequenzbereich
  • Kompression und Effekte

Kommunikationstechnik:

  • Frequenzmultiplex (mehrere Signale auf verschiedenen Frequenzen)
  • Modulationsanalyse

Amplitude, Phase und Leistung

Im Frequenzbereich sind für jede Frequenzkomponente drei Größen relevant:

Amplitude (Magnitude):

  • Stärke der jeweiligen Frequenzkomponente
  • Meist in Volt [V] oder normalisiert

Phase:

  • Zeitliche Verschiebung der Frequenzkomponente
  • In Grad [°] oder Radiant [rad]
  • Wichtig bei manchen Anwendungen (z.B. Audiosynthese)

Leistung (Power):

  • Quadrat der Amplitude: \(P \propto A^2\)
  • Wichtig bei Rauschanalyse (Power Spectral Density, PSD)

In der Praxis:

  • Für die meisten Anwendungen genügt die Betrachtung der Amplitude
  • Die Phase wird oft vernachlässigt (außer bei Rekonstruktion des Zeitsignals)

4.5.3 DFT und FFT

DFT steht für Diskrete Fourier-Transformation (engl. Discrete Fourier Transform) und ist ein mathematisches Verfahren, um ein zeitdiskretes Signal in seine Frequenzkomponenten zu zerlegen. Die DFT wandelt eine endliche Anzahl von Abtastwerten eines Signals in eine endliche Anzahl von Frequenzkomponenten um.

Die Formel der DFT lautet:

\[ X[k] = \sum_{n=0}^{N-1} x[n] \cdot e^{-j \frac{2 \pi}{N} k n} \quad \text{für } k = 0, 1, \ldots, N-1 \]

wobei:

  • \(X[k]\): die k-te Frequenzkomponente im Frequenzbereich
  • \(x[n]\): der n-te Abtastwert im Zeitbereich
  • \(N\): die Gesamtanzahl der Abtastwerte
  • \(j\): die imaginäre Einheit (\(j^2 = -1\))

FFT steht für Fast Fourier Transform (engl. Fast Fourier Transform) und ist ein effizienter Algorithmus zur Berechnung der DFT. Die FFT reduziert die Rechenkomplexität erheblich, indem sie die Berechnungen in kleinere Teile aufteilt und wiederholt anwendet.

Es gibt verschiedene FFT-Algorithmen, wobei der bekannteste der Cooley-Tukey-Algorithmus ist. Die Implementierung der FFT ist in vielen Programmiersprachen und Bibliotheken verfügbar:

4.5.4 Grundbegriffe

Frequenzauflösung und Bins

Die Frequenzauflösung \(\Delta f\) bestimmt, wie fein das Frequenzspektrum aufgelöst wird:

\[ \Delta f = \frac{f_s}{N} = \frac{1}{T} \]

wobei:

  • \(f_s\) = Sampling-Frequenz [Hz]
  • \(N\) = Anzahl der Samples
  • \(T\) = Messdauer [s]

Ein Bin ist ein einzelner Punkt im FFT-Spektrum. Die Frequenz von Bin \(k\) ist:

\[ f[k] = k \cdot \Delta f \]

Die Bin-Breite (Abstand zwischen benachbarten Bins) entspricht genau \(\Delta f\). Je kleiner \(\Delta f\), desto mehr Bins gibt es in einem bestimmten Frequenzbereich und desto feiner ist die Auflösung.

Wichtig: Eine feinere Auflösung erreicht man durch längere Messdauer \(T\) oder eine größere Anzahl Samples \(N\) (bei gleichem \(f_s\)).

Peak-Trennung

Um zwei Frequenzen \(f_1\) und \(f_2\) im Spektrum trennen zu können, muss die Frequenzauflösung \(\Delta f\) kleiner sein als ihr Abstand:

\[ \Delta f < |f_1 - f_2| \]

Die tatsächlich benötigte Auflösung hängt jedoch vom verwendeten Fenster (siehe Abschnitt 4.5.5) und der gewünschten Trennschärfe ab.

Qualitätsstufen der Trennung

Minimal erkennbar (ohne Fenster): $$ \Delta f < |f_1 - f_2| $$

Erkennbar (mit typischen Fenstern wie Hann): $$ \Delta f \leq \frac{|f_1 - f_2|}{2} $$ → Peaks sind sichtbar, aber überlappen noch

Sauber getrennt: $$ \Delta f \leq \frac{|f_1 - f_2|}{4} $$ → Deutliches Tal zwischen den Peaks

Optimal: $$ \Delta f \leq \frac{|f_1 - f_2|}{10} $$ → Peaks sind scharf und unabhängig voneinander

Rechenzeit

Beispiel

Zwei Signale bei \(f_1 = 50\) Hz und \(f_2 = 52\) Hz (Abstand = 2 Hz):

  • Minimal: \(\Delta f < 2\) Hz → \(T > 0.5\) s
  • Gut: \(\Delta f \leq 1\) Hz → \(T \geq 1\) s
  • Sauber: \(\Delta f \leq 0.5\) Hz → \(T \geq 2\) s
  • Optimal: \(\Delta f \leq 0.2\) Hz → \(T \geq 5\) s

FFT-Länge N

Die Länge \(N\) bezeichnet die Anzahl der Abtastwerte eines Signals, die für die DFT oder FFT verwendet werden. Eine größere Länge \(N\) führt zu einer höheren Frequenzauflösung, da mehr Frequenzkomponenten analysiert werden können.

Die Länge \(N\) ist bei der FFT typischerweise eine Potenz von 2 (z.B. 256, 512, 1024, 2048), da dies die Berechnungseffizienz des Cooley-Tukey-Algorithmus deutlich erhöht.

Typische Werte:

  • Echtzeit-Audio: \(N = 512\) oder \(1024\)
  • Spektralanalyse: \(N = 2048\) oder \(4096\)
  • Hochpräzise Messungen: \(N = 8192\) oder mehr

Zero-Padding

Zero-Padding bedeutet, Nullen an das Signal anzuhängen, bevor die FFT berechnet wird. Dadurch erhält man mehr Bins im Spektrum, was die Darstellung verbessert (glatterer Plot), aber nicht die echte Frequenzauflösung erhöht.

Beispiel:

  • Originalsignal: \(N = 256\), \(\Delta f = 3.9\) Hz
  • Mit Zero-Padding auf \(N = 1024\): \(\Delta f_{Darstellung} = 0.98\) Hz
  • Echte Auflösung bleibt: \(3.9\) Hz!

Zero-Padding ist nützlich für schönere Spektrum-Plots, ersetzt aber keine längere Messung.

Zero-Padding

Wie bereits in Kapitel 4.3 erwähnt, können Frequenzen oberhalb von \(f_{Nyquist}\) nicht korrekt erfasst werden und führen zu Aliasing (Frequenzverfälschung). Diese Aliase tauchen im Spektrum als unerwartete Frequenzkomponenten auf.

Rechenkomplexität (Big-O-Notation)

Die Big-O-Notation beschreibt, wie stark die Laufzeit (oder Speicherverbrauch) eines Algorithmus mit der Eingangsgröße wächst.

Rechenzeit

Notation Bedeutung Beispiel
O(1) konstant – dauert immer
gleich lange
Zugriff auf ein Array-Element
O(log n) logarithmisch – wächst langsam Binäre Suche
O(n) linear – doppelt so viele Daten
→ doppelt so lange
Schleife über n Elemente
O(n log n) leicht überlinear Effiziente Sortierverfahren, FFT
O(n²) quadratisch – doppelt so viele Daten
→ viermal so lange
Doppelte Schleife, naive DFT
O(2ⁿ) exponentiell – wächst extrem schnell Brute-Force-Suche

Visualisierung der Komplexität

Je größer \(n\) (Eingangsgröße), desto deutlicher werden die Unterschiede:

Komplexität n=10 n=100 n=1.000 n=10.000
O(1) 1 1 1 1
O(log n) 3 7 10 13
O(n) 10 100 1.000 10.000
O(n log n) 33 664 10.000 132.877
O(n²) 100 10.000 1.000.000 100.000.000
O(2ⁿ) 1.024 2¹⁰⁰ 2¹⁰⁰⁰ (unmöglich)

Legende: - \(n\) = Anzahl Eingangswerte (z.B. Samples) - Tabellenwerte = Ungefähre Anzahl Rechenschritte

Praktische Bedeutung für FFT

Die FFT ist mit O(n log n) deutlich effizienter als die direkte DFT-Berechnung mit O(n²):

Beispiel für \(N = 1024\) Samples: - DFT: \(1024^2 = 1.048.576\) Operationen - FFT: \(1024 \times \log_2(1024) = 1024 \times 10 = 10.240\) Operationen

Dies macht Echtzeitverarbeitung von Signalen erst praktisch möglich.

Weiteres Beispiel für \(N = 8192\) Samples (typisch für Audio-Spektralanalyse): - DFT: \(8192^2 = 67.108.864\) Operationen → ~67 ms bei 1 GFLOP/s - FFT: \(8192 \times 13 = 106.496\) Operationen → ~0.1 ms bei 1 GFLOP/s - Echtzeitfähig!

4.5.5 Fensterfunktionen

Die FFT geht davon aus, dass das Signal periodisch ist - also dass sich das analysierte Stück unendlich oft wiederholt. Wenn das Signal jedoch nicht genau eine ganzzahlige Anzahl von Perioden enthält, entstehen an den Übergängen Sprungstellen, die zu Spectral Leakage (Frequenzverschmierung) führen.

Um dies zu vermeiden, verwendet man Fensterfunktionen, die das Signal an den Rändern sanft auf Null abklingen lassen.

Fensterfunktion

Fensterfunktion

Dabei erfolgt die Multiplikation des Signals \(x[n]\) mit der Fensterfunktion \(w[n]\):

\[x_{windowed}[n] = x[n] \cdot w[n] \]

Die Fensterfunktion basiert auf Cosinus-Funktionen und abhängig vom gewählten Fenstertyp werden ein oder mehrere Cosinus-Terme mit unterschiedlichen Gewichtungen überlagert. Einfachere Fenster wie Hann verwenden nur einen Cosinus-Term, während komplexere Fenster wie Blackman oder Flattop mehrere harmonische Cosinus-Terme kombinieren, um bessere spektrale Eigenschaften zu erzielen.

Die Darstellung des Spektrums ändert sich durch die Wahl des Fensters erheblich:

Fensterfunktion

Fenstertypen im Vergleich

Aufgeführt sind einige gängige Fensterfunktionen mit ihren Eigenschaften:

Fenster Frequenz-
auflösung
Störungs-
unterdrückung
(Leakage)
Amplituden-
genauigkeit
Wann verwenden?
Rechteck Sehr gut Schlecht Mittel Nur bei ganzzahligen
Perioden (synchrone Abtastung)
Hann Gut Gut Mittel Standard-Wahl für die
meisten Anwendungen
Hamming Gut Sehr gut Mittel Spracherkennung, bessere
Störungsunterdrückung als Hann
Blackman Mäßig Sehr gut Gut Schwache Signale detektieren,
minimales Leakage
Flattop Schlecht Gut Sehr gut Amplitudenmessungen,
Kalibrierung, Leistungsmessung

Fenstertypen

Die Formeln der Fensterfunktionen sind wie folgt definiert:

Fenster Formel Hauptkeule Nebenkeule C Code
Rechteck w(n) = 1 2 bins -13 dB float32_t window = 1.0f;
Hanning (Hann) w(n) = 0.5 × (1 - cos(2πn/N)) 4 bins -32 dB float32_t window = 0.5f * (1.0f - cosf(2.0f * PI * i / FFT_SIZE));
Hamming w(n) = 0.54 - 0.46 × cos(2πn/N) 4 bins -43 dB float32_t window = 0.54f - 0.46f * cosf(2.0f * PI * i / FFT_SIZE);
Blackman w(n) = 0.42 - 0.5 × cos(2πn/N) + 0.08 × cos(4πn/N) 6 bins -58 dB float32_t window = 0.42f - 0.5f * cosf(2.0f * PI * i / FFT_SIZE) + 0.08f * cosf(4.0f * PI * i / FFT_SIZE);
Flat Top w(n) = 0.21558 - 0.41663 × cos(2πn/N) + 0.27726 × cos(4πn/N) - 0.08358 × cos(6πn/N) + 0.00695 × cos(8πn/N) 10 bins -90 dB See code below

Flat Top Window - C Code

float32_t a0 = 0.21557895f;
float32_t a1 = 0.41663158f;
float32_t a2 = 0.277263158f;
float32_t a3 = 0.083578947f;
float32_t a4 = 0.006947368f;

float32_t window = a0 
                 - a1 * cosf(2.0f * PI * i / FFT_SIZE)
                 + a2 * cosf(4.0f * PI * i / FFT_SIZE)
                 - a3 * cosf(6.0f * PI * i / FFT_SIZE)
                 + a4 * cosf(8.0f * PI * i / FFT_SIZE);

Hinweise zur Verwendung

  • n = aktueller Sample-Index (i im Code)
  • N = Gesamtanzahl Samples (FFT_SIZE im Code)

Faustregel

  • Wenn unsicher → Hann verwenden!
  • Für Amplitudenmessungen → Flattop
  • Für minimales Leakage → Blackman
  • Nur bei ganzzahligen Perioden → Rechteck

Trade-off verstehen

  • Gute Frequenzauflösung = Peaks sind schmal, nahe Frequenzen besser trennbar
  • Gute Störungsunterdrückung = Weniger Spectral Leakage, aber Peaks werden breiter
  • Gute Amplitudengenauigkeit = Gemessene Peak-Höhe entspricht echter Signal-Amplitude