Decimating & Interpolating FIR Filter
Die beiden generischen FIR-Filter-Blöcke in GRC 3.10 — Filterung kombiniert mit ganzzahliger Dezimierung bzw. Interpolation, Parameter und Ein-/Ausgänge.
GRC 3.10 bietet zwei generische FIR-Filter-Blöcke, die dieselben Tap-Vektoren wie Low Pass Filter Taps oder andere firdes-Blöcke entgegennehmen, aber im Gegensatz zu diesen keine eigene Grenzfrequenz oder Fensterfunktion kennen — sie wenden ausschließlich die übergebenen Taps an und ändern dabei zusätzlich die Abtastrate.
1. Beschreibung der Blöcke
Decimating FIR Filter (filter.fir_filter_*) filtert den Eingangsstrom mit den übergebenen Taps und gibt dabei nur jedes decim-te gefilterte Sample aus. Er ist die generische Variante des dezimierenden Anteils, den auch der Frequency Xlating FIR Filter intern nutzt — nur ohne die zusätzliche Frequenzverschiebung.

Interpolating FIR Filter (filter.interp_fir_filter_*) macht das Gegenteil: Er fügt zwischen den Eingangssamples interp − 1 Nullen ein, bevor er filtert, und erhöht so die Abtastrate um den Faktor interp. Das Filter unterdrückt dabei die durch die Nullen erzeugten Spiegelspektren (Images) oberhalb der ursprünglichen Nyquist-Grenze.

2. Technischer Einsatz
- Decimating FIR Filter: Einsatz, wenn Filterung und Ratenreduktion gebraucht werden, aber keine Frequenzverschiebung — z. B. zur reinen Kanalbandbreitenbegrenzung vor einer Weiterverarbeitung mit niedrigerer Rate.
- Interpolating FIR Filter: Einsatz vor einer Signalquelle mit höherer erforderlicher Abtastrate, etwa vor einem DAC/Sender, der eine höhere Rate erwartet als im restlichen Flowgraph verarbeitet wird. Das Filter glättet dabei zugleich die durch die Interpolation eingefügten Nullen heraus.
- Taps kommen von außen: Beide Blöcke entwerfen selbst keinen Filter — die Taps müssen über einen separaten Taps-Block (z. B. Low Pass Filter Taps) oder direkt als Python-Liste übergeben werden.
3. Parameter und Dimensionierung
| Parameter | Typ/Einheit | Bedeutung | Dimensionierungshinweis |
|---|---|---|---|
decim (nur Decimating) |
int | Dezimierungsfaktor | Ausgangsrate = Eingangsrate / decim |
interp (nur Interpolating) |
int | Interpolationsfaktor | Ausgangsrate = Eingangsrate × interp |
taps |
Vektor (reell oder komplex, je nach Typ) | Filterkoeffizienten | von einem Taps-Block oder manuell übergeben; bestimmt Durchlassbereich und Übergangsbreite (siehe FIR-Filter) |
samp_delay (Sample Delay) |
int, Standard 0 |
informiert GNU Radio über die vom Filter verursachte Verzögerung | in der Regel auf Standard belassen; nur relevant, wenn nachgeschaltete Blöcke die Verzögerung für die Auswertung von Stream-Tags kennen müssen |
4. Ein- und Ausgänge
| Type-Variante | Eingangstyp | Ausgangstyp | Taps-Art |
|---|---|---|---|
| Complex->Complex (Complex Taps) | complex | complex | komplex |
| Complex->Complex (Real Taps) | complex | complex | reell |
| Float->Complex (Complex Taps) | float | complex | komplex |
| Float->Float (Real Taps) | float | float | reell |
| Float->Short (Real Taps) | float | short | reell |
| Short->Complex (Complex Taps) | short | complex | komplex |
Beide Blöcke besitzen je einen einzelnen Stream-Eingang und -Ausgang, keine Message-Ports.
5. Weitere wichtige Aspekte
Live-Anpassung der Taps: Über den Callback set_taps() lassen sich die Filterkoeffizienten zur Laufzeit austauschen, z. B. wenn ein vorgeschalteter Taps-Block seine Parameter über einen QT-GUI-Regler ändert. Decimation bzw. Interpolation selbst sind dagegen nur beim Bau des Flowgraphs festlegbar, nicht zur Laufzeit änderbar.
Reine Ratenänderung ohne Filterung: Für eine Dezimierung oder Interpolation ohne Filterwirkung (z. B. reines Sample-Auslassen) sind Keep 1 in N bzw. eine Rational Resampler-Konfiguration mit einfachen Taps die geeigneteren, einfacheren Blöcke.
FIR-Filter (Grundlagen)
Wie Taps aus Grenzfrequenz und Übergangsbreite bestimmt werden.
Tiefpass-Filter-Blöcke
Erzeugt die Taps, die Decimating/Interpolating FIR Filter als Parameter erwarten.
Frequency Xlating FIR Filter
Kombiniert dieselbe Dezimierungsfilterung zusätzlich mit einer Frequenzverschiebung.
Keep 1 in N
Einfache Ratenreduktion ohne Filterwirkung, als Alternative für unkritische Fälle.