Audio Source Test: Spektrum direkt, über Log Power FFT und über den rohen FFT-Block

Derselbe Audio-Source-Output wird direkt in einem QT GUI Frequency Sink, über den Log Power FFT Block und über den rohen FFT-Block angezeigt — der Vergleich zeigt, was Log Power FFT tatsächlich bündelt und wo sein Mehrwert gegenüber dem manuellen Nachbau liegt.

Dieser Test verbindet den Audio Source Block mit drei unterschiedlichen Anzeigepfaden und vergleicht die Ergebnisse, um die Funktion des Log Power FFT Blocks nachzuvollziehen.

Aufbau des Flowgraphs

Der Audio Source Block (Sample Rate 32 kHz) speist drei parallele Zweige:

  1. Direkt in einen QT GUI Frequency Sink (FFT Size 1024, Center Frequency 0 Hz, Bandwidth 32 kHz).
  2. Über einen Log Power FFT Block (Sample Rate 32 kHz, FFT Size 1.024k, Reference Scale 2, Frame Rate 30, Average Off, FFT Shift On) in einen QT GUI Vector Sink (Vector Size 1.024k, X-Axis Start Value −16k, X-Axis Step Value 31.25, Ref Level 0).
  3. Über den rohen FFT-Block, manuell nachgebaut aus den Einzelschritten, die Log Power FFT intern bündelt: Stream to Vector (vlen 1.024k) → FFT (FFT Size 1.024k, Blackman-Harris-Fenster, Shift On) → Complex to Mag² (Vector Length 1.024k) → Log10 (n=10, k=0, Vector Length 1.024k) → einen weiteren QT GUI Vector Sink mit denselben Achsenparametern wie Zweig 2.

Flowgraph: Audio Source zu Frequency Sink, Log Power FFT und rohem FFT-Pfad

Vergleich der Spektren

Vergleich der Spektren

Links das Spektrum des direkt angeschlossenen Frequency Sink, rechts das Spektrum über den expliziten Log Power FFT-Block mit anschließendem Vector Sink. Beide zeigen denselben Signalinhalt — zwei Spitzen um ±5 kHz sowie einen schmalen Ausschlag bei 0 Hz — und die identische dB-Skalierung von −140 bis −40 dB. Diese Übereinstimmung ist kein Zufall, sondern der eigentliche Beweis: Der Frequency Sink berechnet sein Spektrum intern über exakt dieselbe Kette (FFT → Betragsquadrat → Log-Skalierung), die im Log Power FFT-Block explizit als eigener Block nachgebaut ist (siehe Log Power FFT).

Die sichtbaren Unterschiede erklären sich dadurch, wer die Anzeige übernimmt, nicht durch unterschiedliche Signalverarbeitung:

Merkmal Links: Frequency Sink (direkt) Rechts: Log Power FFT + Vector Sink
Max-Hold-Kurve (Olive) vorhanden — der Sink führt intern eine eigene Max-Hold-Statistik über mehrere Frames fehlt — der Vector Sink zeigt nur die aktuell eintreffenden Werte (Data 0), ohne eigene Trace-Logik
Mittelung/Glättung über Regler „Avg" direkt in der GUI einstellbar müsste im Log Power FFT Block selbst über Average/Avg Alpha konfiguriert werden (hier bewusst „Off")
Fensterfunktion, FFT-Größe, Trigger live in der GUI wählbar (Blackman-Harris, 1024, Trigger „Free") einmalig als Blockparameter festgelegt, keine Laufzeit-Umschaltung über eine Anzeige
Frequenzachse automatisch in kHz beschriftet, berechnet aus Sample Rate/Center Frequency des Sinks rein numerisch — die Achse muss manuell über X-Axis Start Value (−16k) und X-Axis Step Value (samp_rate/fft_size = 32000/1024 ≈ 31.25) kalibriert werden
Pegelwerte (dB) identisch zum rechten Spektrum identisch zum linken Spektrum

Was das über den Log Power FFT Block zeigt

Der Frequency Sink ist eine „Black Box": Er zeigt ein fertiges Spektrum, verrät aber nicht, wie es zustande kommt. Der Vergleich mit dem separat aufgebauten Log Power FFTVector Sink-Pfad macht sichtbar, dass hinter dem Sink kein Geheimnis steckt, sondern derselbe Signalverarbeitungsschritt, den man auch selbst mit einem einzelnen Block nachbauen kann.

Der Preis dafür: Alles, was der Frequency Sink „kostenlos" mitliefert — Max/Min-Hold, Mittelungsregler, automatische Frequenzbeschriftung — übernimmt bei der expliziten Variante entweder der Log Power FFT-Block selbst (über seine Parameter) oder muss von Hand am Vector Sink eingestellt werden. Dafür liefert der explizite Pfad reine, headless auswertbare dB-Werte in einem Vektor — genau das, was für automatisierte Tests statt Sichtkontrolle gebraucht wird (siehe Testen mit GRC).

Der dritte Zweig: der rohe FFT-Pfad

Der dritte Zweig zerlegt Log Power FFT in seine vier Einzelschritte — Stream to VectorFFTComplex to Mag²Log10 — und macht dieselbe Vektor-Sink-Anzeige daraus. Werden Fenster (Blackman-Harris), vlen/fft_size (1024) und die Log-Formel exakt nachgebaut, ist die Kurvenform mit den beiden anderen Spektren identisch: gleiche Peaks bei ±5 kHz, gleiche Form. Signalverarbeitungstechnisch unterscheiden sich die drei Zweige also gar nicht — Log Power FFT ist kein eigener Algorithmus, sondern nur eine fertige Verdrahtung derselben Schritte.

Ein Unterschied bleibt trotzdem messbar: Ohne die ref_scale-Korrektur, die Log Power FFT automatisch vornimmt, liegt der Nullpunkt der dB-Skala im rohen Pfad (Log10 mit k=0) einige dB neben dem von Log Power FFT — die im Artikel Log Power FFT (Abschnitt 5) gemessene Verschiebung durch die Fensterleistungs-Normierung fehlt hier, muss also bei Bedarf selbst kalibriert werden.

Wo liegt dann der Anwendungsfall für Log Power FFT?

Wenn die Mathematik identisch ist, liegt der Nutzen von Log Power FFT nicht in der Signalverarbeitung, sondern darin, was der Block abnimmt:

Aufwand beim manuellen Nachbau (Zweig 3) Was Log Power FFT stattdessen liefert
Vier Blöcke mit konsistentem vlen/fft_size verdrahten — eine häufige Fehlerquelle ein einziger Block, ein Parameter fft_size
Ausgaberate ist fix an samp_rate/fft_size gekoppelt frame_rate-Parameter dezimiert automatisch auf eine Ziel-Bildrate, unabhängig von fft_size
Mittelung erfordert einen zusätzlichen single_pole_iir_filter-Block eingebaute Mittelung über average/avg_alpha
dB-Nullpunkt muss selbst kalibriert werden automatische ref_scale-Korrektur für Fenster- und FFT-Größen-Effekte

Über die reine GUI-Anzeige hinaus ist der resultierende float-Vektorstrom auch die Grundlage für automatisierte, nicht-visuelle Auswertungen: Energiedetektion/Spectrum Sensing (Schwellwert auf bestimmten Bins), Träger- bzw. Peak-Suche (argmax über den Vektor), Störer-/Interferenzerkennung, Feature-Extraktion für eine nachgelagerte Klassifikation, sowie headless-Verifikation von Filterdämpfungen per assert statt Sichtkontrolle (siehe Testen mit GRC). Die QT-GUI-Anzeige ist damit nur ein möglicher Abnehmer dieses Datenstroms, nicht der einzige Zweck des Blocks.