GNU Radio Companion · Block
Tiefpass-Filter-Blöcke (Filter & Taps)
Low Pass Filter und Low Pass Filter Taps in GRC 3.10 — Funktionsweise, Parameter, Dimensionierung und die Filterung reeller und komplexer Signale.
GRC 3.10 bietet zwei eng verwandte Tiefpass-Blöcke, die auf der Funktion firdes.low_pass() basieren: Low Pass Filter ist der aktive Verarbeitungsblock (Filterentwurf + Signalverarbeitung), während Low Pass Filter Taps ein reiner Variablen-Block ist, der lediglich die Filterkoeffizienten (Taps) berechnet.
1. Beschreibung der Blöcke
Low Pass Filter (filter.fir_filter_*) ist ein kombinierter Block: Er berechnet beim Start des Flowgraphs die Filterkoeffizienten basierend auf den Grenzfrequenzen, der Übergangsbreite und dem gewählten Fenster und wendet diese direkt auf den durchlaufenden Signalstrom an. Details zu den mathematischen Grundlagen findest du im Artikel Tiefpassfilter.

Low Pass Filter Taps (firdes.low_pass() als GRC-Variable) führt exakt dieselbe mathematische Berechnung der Koeffizienten durch, besitzt aber keine Signal-Ein- oder Ausgänge. Er erzeugt ein Array (float_vector bzw. real_taps), das als Parameter an andere Blöcke übergeben werden kann (z. B. an einen Frequency Xlating FIR Filter).

2. Technischer Einsatz
- Wann „Low Pass Filter" (Block): Der Standardfall zur Rauschreduzierung, Kanalselektion oder Dezimierung direkt im Signalpfad. Wenn du ein Signal einfach von hochfrequenten Anteilen befreien willst, ist dies der richtige Block.
- Wann „Low Pass Filter Taps" (Variable): Wird benötigt, wenn der eigentliche Filtervorgang in einem anderen Block stattfindet, der Taps als Parameter erwartet. Typisches Beispiel ist der Frequency Xlating FIR Filter, welcher Frequenzverschiebung, Filterung und Dezimierung in einem einzigen Schritt vollzieht und ein fertiges Taps-Array als Input verlangt.
- Reelle Koeffizienten: Da ein Tiefpassfilter standardmäßig symmetrisch um $0\text{ Hz}$ liegt, sind die berechneten Taps immer reelle Zahlen (im Gegensatz zu asymmetrischen Bandpässen, die komplexe Taps erfordern).
3. Parameter und Dimensionierung
Beide Blöcke teilen sich die folgenden Kernparameter für den Filterentwurf:
| Parameter | Typ/Einheit | Bedeutung | Dimensionierungshinweis |
|---|---|---|---|
samp_rate |
Hz | Abtastrate des Eingangssignals | muss exakt mit der Rate des eingehenden Datenstroms übereinstimmen |
cutoff_freq |
Hz | Grenzfrequenz (3dB-Punkt) | Frequenzen oberhalb dieser Grenze werden gedämpft. Muss < samp_rate / 2 sein |
width (Transition Width) |
Hz | Übergangsbreite | Übergangsbereich vom Durchlass- zum Sperrbereich. Kleiner = steiler, bedeutet aber eine höhere Tap-Zahl und mehr Rechenleistung ($N \approx A_{sb}/(22 \cdot \Delta f/f_s)$) |
gain |
linear | Gesamtverstärkung des Filters | Standard ist 1.0 (keine Pegeländerung im Durchlassbereich) |
win (Window) |
Enum | Fensterfunktion | Hamming, Hann, Blackman, Rectangular oder Kaiser. Bestimmt die Nebensprechdämpfung (siehe Fensterfunktionen) |
beta |
— | Kaiser-Beta | nur bei Auswahl des Kaiser-Fensters aktiv; steuert den Kompromiss zwischen Flankensteilheit und Sperrdämpfung |
4. Ein- und Ausgänge
Der Low Pass Filter Taps-Block besitzt keine Anschlüsse. Für den Low Pass Filter-Verarbeitungsblock stehen folgende Typen zur Verfügung:
| FIR Type | Eingangstyp | Ausgangstyp | Taps-Art |
|---|---|---|---|
| Complex->Complex (Decimal) | complex | complex | reell (float) |
| Float->Float (Decimal) | float | float | reell (float) |
| Float->Complex (Decimal) | float | complex | reell (float) |
Hinweis zur Dezimation/Interpolation: Die Blöcke erlauben es, direkt beim Filtern eine Dezimation (Herabsetzen der Abtastrate) oder Interpolation (Erhöhen der Abtastrate) durchzuführen, was die Recheneffizienz erheblich steigert.
5. Weitere wichtige Aspekte
- Echtzeit-Anpassung: Über Callbacks wie
set_taps()können die Grenzfrequenz oder die Übergangsbreite zur Laufzeit verändert werden (z. B. durch einen QT GUI Range-Schieberegler). GNU Radio berechnet die Taps im Hintergrund neu, ohne dass der Datenstrom unterbrochen wird. - Grenzwerte: Setze die Übergangsbreite (
width) niemals zu klein an (z. B.< 10 Hzbei Megahertz-Abtastraten). Dies führt zu einer astronomisch hohen Tap-Zahl, die den Computer durch Überlastung zum Stillstand bringt.