Projekte
DDK9-RTTY-Demodulation
Wettersignale des Deutschen Wetterdienstes per FSK und Baudot-Code demodulieren.
Dieser Artikel beschreibt die Demodulation der Wetterdienst-Signale des Senders DDK9 mittels Software Defined Radio. Die Übertragung nutzt das F1B-Protokoll mit folgenden Eigenschaften:
- Modulation: Frequency Shift Keying (FSK) mit Mark-/Space-Zuständen
- Frequenzhub: 450 Hz zwischen den Zuständen
- Symbolrate: 50 Baud (20 ms pro Bit)
- Codierung: ITA2/Baudot-Code (5-Bit-Zeichen mit Start-/Stopp-Bit)
Demodulationsprozess
Signalaufbereitung: Die ursprüngliche WAV-Datei enthält reellwertige Samples. Da ein reelles Signal keinen Imaginärteil besitzt, ist sein Spektrum stets symmetrisch um 0 Hz — zu erkennen an den beiden gespiegelten Peaks.

Frequenzverschiebung: Der Frequency-Xlating-FIR-Filter verschiebt das Signal zur Zentrierung ins Basisband und wendet dabei bereits eine erste Kanalfilterung an.

Quadratur-Demodulation: wandelt Frequenzänderungen in Amplitudenänderungen um. Die Gain-Berechnung lautet:
Gain = samp_rate / (2π × Δf)
wobei Δf = 225 Hz (die Hälfte des Frequenzhubs) entspricht. Im Zeitbereich zeigt sich das Ergebnis als (noch verrauschter) Sprung zwischen den beiden Amplitudenniveaus für Mark und Space.

Rauschfilterung (vorher): Vor der eigentlichen Tiefpassfilterung zeigt das Spektrum des demodulierten Signals noch deutliches Rauschen außerhalb des Nutzbandes.

Rauschfilterung (nachher): Ein Tiefpassfilter mit 50 Hz Grenzfrequenz entfernt dieses Rauschen. Eine Dezimierung um Faktor 10 reduziert zugleich die Abtastrate entsprechend. Im Zeitbereich ist das gefilterte Signal bereits deutlich glatter.

Bit-Extraktion: der Bit Slicer wandelt das analoge Signal in ein binäres Ausgangssignal um. Der Symbol-Sync-Block synchronisiert die Abtastung, sodass genau ein Sample pro Bit entsteht.

Aufbau eines Baudot-Frames
Jedes Zeichen besteht aus:
- Startbit: immer 0 (Space), 20 ms Dauer
- Datenbits: fünf Bit mit der eigentlichen Information, 100 ms gesamt
- Stoppbit: immer 1 (Mark), 30 ms Dauer (1,5-fache Normaldauer)
Die variable Stoppbit-Dauer verursacht einen Zeitversatz, der eine sorgfältige Synchronisation erfordert.
Decoder-Implementierung
Die vollständige Verarbeitungskette vom WAV File bis zum Binary Slicer sieht im GNU Radio Companion wie folgt aus:

Der bereitgestellte Python-Decoder verarbeitet den Bitstrom über eine Zustandsmaschine:
- erkennt 0→1-Übergänge zur Identifikation von Startbits
- sammelt 5-Bit-Codes in LSB-first-Reihenfolge
- verwaltet Shift-Zustände für Buchstaben vs. Ziffern
- ordnet Codes der ITA2-Zeichentabelle zu
Testergebnisse
Der Decoder gibt erfolgreich meteorologische Daten aus, inklusive Frequenzangaben und Synchronisationsmustern (RYRY-Sequenzen, die ursprünglich der Synchronisation mechanischer Fernschreiber dienten).