Frequency Xlating FIR Filter

Mischer, Tiefpassfilter und Dezimierung in einem einzigen Block — Funktionsweise, Parameter und Ein-/Ausgänge.

1. Beschreibung des Blocks

Der Frequency Xlating FIR Filter (filter.freq_xlating_fir_filter_*) verschiebt ein Signal per Mischung auf eine neue Mittenfrequenz, filtert es anschließend mit einem FIR-Tiefpass und dezimiert es — alles in einem einzigen, optimierten Verarbeitungsschritt. Er ist der Standardblock zur Kanalselektion aus einem breitbandigen Empfangssignal, etwa im USB-Sprachempfänger, wo er die Empfangsfrequenz festlegt und das gewünschte Seitenband heraustrennt.

Frequency Xlating FIR Filter Block in GRC mit den Parametern Decimation, Taps, Center Frequency und Sample Rate sowie den Ports in, freq und out

Die drei Schritte laufen in fester Reihenfolge ab: Zuerst wird das Signal um center_freq gemischt (die Zielfrequenz landet dabei auf 0 Hz), danach mit den übergebenen taps tiefpassgefiltert und schließlich um den Faktor decim dezimiert. Diese Kombination ersetzt eine sonst nötige Kette aus Rotator, Low Pass Filter und Keep 1 in N durch einen einzigen Block.

2. Technischer Einsatz

  • Kanalselektion aus breitbandigem Empfang: Typischer Einsatzfall ist ein SDR, das einen großen Frequenzbereich am Stück empfängt (z. B. per RTL-SDR oder USRP), aus dem ein einzelner, schmalbandiger Kanal herausgefiltert und gleichzeitig auf eine niedrigere, praktikable Abtastrate heruntergerechnet wird.
  • Alternative zur Hardware-Abstimmung: Statt den HF-Tuner neu einzustellen, kann bei ausreichender Empfangsbandbreite auch softwareseitig innerhalb des bereits empfangenen Spektrums retuned werden — nützlich, wenn mehrere Kanäle gleichzeitig aus einem einzigen breitbandigen Datenstrom extrahiert werden sollen.
  • decim=1: Auch ohne Ratenänderung sinnvoll einsetzbar, wenn nur gemischt und gefiltert werden soll, die Abtastrate aber erhalten bleiben muss.

3. Parameter und Dimensionierung

Parameter Typ/Einheit Bedeutung Dimensionierungshinweis
decim (Decimation) int Dezimierungsfaktor Ausgangsrate = samp_rate / decim; decim=1 für reines Retuning ohne Ratenänderung
taps Vektor (reell oder komplex, je nach Typ) FIR-Tiefpass-Koeffizienten typischerweise per Low Pass Filter Taps (firdes.low_pass()) erzeugt; Grenzfrequenz und Übergangsbreite bestimmen Selektivität und Tap-Zahl (siehe FIR-Filter)
center_freq (Center Frequency) Hz Frequenz, die auf 0 Hz gemischt wird entspricht der gewünschten Empfangs-/Zielfrequenz relativ zur Mittenfrequenz des Eingangssignals
samp_rate (Sample Rate) Hz Abtastrate des Eingangssignals muss exakt mit der tatsächlichen Eingangsrate übereinstimmen

4. Ein- und Ausgänge

Port Richtung Typ Bedeutung
in Eingang complex, float oder int16 (je nach gewählter Blockvariante) zu verschiebendes/filterndes Signal
freq Eingang (Message, optional) PMT setzt center_freq zur Laufzeit über eine Nachricht statt über einen Callback — praktisch, wenn die Retune-Frequenz aus einer message-basierten Blockkette kommt (z. B. von einem AFC-Regelkreis) statt über einen GUI-Regler
out Ausgang immer complex gemischtes, gefiltertes und dezimiertes Signal, unabhängig vom Eingangstyp

Über set_center_freq()/center_freq() und set_taps()/taps() lassen sich Mittenfrequenz und Taps auch als GRC-Callbacks binden, sodass sich beide Werte über GUI-Elemente (z. B. einen QT GUI Range-Regler) zur Laufzeit ändern lassen, ohne den Flowgraph neu zu starten.

5. Weitere wichtige Aspekte

Ausgang immer komplex: Unabhängig davon, ob der Eingang reell (float/int16) oder bereits komplex ist, liefert der Block immer ein komplexes Ausgangssignal — die Mischung erzeugt zwangsläufig eine komplexe Basisbanddarstellung.

Gruppenlaufzeit nach Retuning beachten: Nach einer Änderung von center_freq (per Callback oder über den freq-Port) braucht der interne Filter etwas, bis sich das Signal eingeschwungen hat. Als Faustregel gilt die Gruppenlaufzeit len(taps) // 2 Samples — im Block-Test sind das bei 241 Taps 120 Samples.