FFT (Fast Fourier Transformation)
Wie der FFT-Block ein Signal vom Zeitbereich in den Frequenzbereich umwandelt, und was die wichtigsten Parameter bedeuten.
1. Beschreibung des Blocks
Der FFT-Block (fft.fft_vxx) wandelt ein Signal aus dem Zeitbereich in den Frequenzbereich um. Er implementiert den Fast-Fourier-Transform-Algorithmus, eine effiziente Methode zur Berechnung der Diskreten Fourier-Transformation (DFT). Das Ergebnis zeigt, welche Frequenzanteile mit welcher Stärke (Amplitude und Phase) im Eingangssignal vorhanden sind.
Der Block arbeitet blockweise: Er nimmt einen Vektor von fft_size Samples entgegen und liefert einen ebenso langen Vektor komplexer Werte zurück, wobei jeder Wert im Ausgabevektor einem Frequenz-„Bin" entspricht — der von diesem Bin repräsentierten Energie- und Phaseninformation im analysierten Eingangsblock.
2. Technischer Einsatz
Der FFT-Block ist der Kernbaustein jeder Spektralanalyse — er wird typischerweise vor einer Anzeige (QT GUI Frequency Sink, Waterfall) oder vor einer frequenzbereichsbasierten Weiterverarbeitung eingesetzt. Für eine reine Anzeige ist meist der komfortablere Log Power FFT-Block (log. Leistungsspektrum inkl. Fensterung und Mittelung in einem Schritt) ausreichend; der rohe FFT-Block ist die richtige Wahl, wenn die komplexen Frequenzbin-Werte selbst weiterverarbeitet werden sollen (z. B. Frequenzbereichsfilterung, Kanalisierung).
3. Parameter und Dimensionierung
| Parameter | Typ/Einheit | Bedeutung | Dimensionierungshinweis |
|---|---|---|---|
type (Input Type) |
Enum | Eingangstyp: Complex oder Float | Complex für IQ-Basisbandsignale; Float für reelle Eingangssignale (nutzt die Symmetrie der FFT reeller Signale) |
fft_size (FFT Size) |
Integer | Anzahl Samples pro FFT-Block, zugleich Anzahl der Frequenz-Bins | Zweierpotenzen (1024, 2048, 4096, …) für die effizientesten Algorithmen; größer = feinere Frequenzauflösung, aber höhere Rechenlast und Latenz |
forward (Forward/Reverse) |
Enum | Vorwärts-FFT (Zeit→Frequenz) oder inverse FFT (Frequenz→Zeit) | i. d. R. „Forward"; „Reverse" nur für Signalsynthese aus Frequenzkomponenten oder bestimmte Filterentwürfe |
window (Window) |
Real Vector | Fensterfunktion, die vor der Transformation auf die Eingangsdaten angewendet wird | reduziert spektrales Lecken (Spectral Leakage); Details und Vergleich in Fensterfunktionen |
shift (Shift) |
Enum | ob die DC-Komponente (0 Hz) in die Mitte des Ausgabevektors verschoben wird | „Yes" für die übliche, symmetrische Spektrumdarstellung (negative/positive Frequenzen um die Mitte); nur bei komplexem Eingang relevant |
nthreads (Num Threads) |
Integer | Anzahl paralleler Threads für die FFT-Berechnung | > 1 nur bei sehr großen fft_size-Werten und Mehrkernsystemen sinnvoll |
4. Ein- und Ausgänge
| Ein-/Ausgang | Typ | Vektorlänge |
|---|---|---|
| Eingang | Complex oder Float (je nach type) |
fft_size |
| Ausgang | Complex | fft_size |
Der Ausgang ist unabhängig vom Eingangstyp stets komplex, da sowohl Amplitude als auch Phase jedes Frequenz-Bins ausgegeben werden.
5. Weitere wichtige Aspekte
Live-Parameteränderung: set_window(...) und set_nthreads(...) erlauben eine Anpassung zur Laufzeit, ohne den Flowgraph neu bauen zu müssen.
Frequenzauflösung vs. Zeitauflösung: Eine größere fft_size erhöht die Frequenzauflösung ($\Delta f = f_s / \text{fft\_size}$), verschlechtert aber die zeitliche Auflösung, da ein längerer Signalabschnitt in einen einzigen FFT-Block einfließt — ein klassischer Kompromiss bei der Wahl der Blockgröße (siehe auch die reale FFT-Auflösungs-Falle, die bei der Hubmessung im RTTY/FSK-Test beschrieben ist).
Verwandter Block: Log Power FFT bündelt FFT, Betragsbildung, Logarithmierung und Mittelung in einem Schritt und ist für reine Anzeigezwecke meist die praktischere Wahl.