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.