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.

Symmetrisches Spektrum des reellwertigen Eingangssignals

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

Zentriertes Spektrum nach dem Frequency-Xlating-FIR-Filter

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.

Amplitudensprünge im Zeitbereich nach der Quadratur-Demodulation

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

Spektrum des demodulierten Signals vor der Tiefpassfilterung

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.

Gefiltertes Signal im Zeitbereich nach dem Tiefpassfilter

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.

Digitalisierte 0/1-Bitfolge nach dem Bit Slicer

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:

GNU-Radio-Flowgraph der gesamten DDK9-Verarbeitungskette

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).