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.
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.
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
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:
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:
- Für C auf ARM-Mikrocontrollern: CMSIS-DSP Bibliothek von ARM
- Konfiguration für STM32H563ZI: siehe Anhang B Ressourcen µC (STM32)
4.5.4 Grundbegriffe
Frequenzauflösung und Bins
Die Frequenzauflösung \(\Delta f\) bestimmt, wie fein das Frequenzspektrum aufgelöst wird:
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:
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:
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
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.
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.
| 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.
Dabei erfolgt die Multiplikation des Signals \(x[n]\) mit der Fensterfunktion \(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:
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 |
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









