SITOR-B / NAVTEX Testsignal mit Arduino und Funktionsgenerator erzeugen

Dieser Artikel zeigt wie man gültige NAVTEX Testsignale mit einem Arduino und einem Funktionsgenerator generieren kann. Der Arduino übernimmt die Zeichenkodierung nach CCIR476, die Implementierung der SITOR-B Protokolls inklusive Vorwärtsfehlerkorrektur und das Erzeugen von Synchronisations- und Steuerzeichen. Ein einfacher Funktionsgenerator dient als FSK-Modulator auf 518 kHz +- 85 Hz, wo das generierte Signal von einem NAVTEX-Empfänger empfangen werden kann.

Einleitung

Eigentlich war meine Absicht einen Artikel zur Reparatur eines „NAV4 Navtex“ Empfängers vom Hersteller ICS Electronics posten. Das Gerät lag längere Zeit defekt in in meinen Bastelkisten herum. Die Reparatur gestaltete sich jedoch ziemlich langweilig. Nach einem Abgleich des Eingangsfilters funktionierte das Gerät auf Anhieb sofort wieder. Bei der Reparatur zeigte sich allerdings ein anderes Problem: NAVTEX Sender senden nach einem festen Zeitplan. Daher musste ich bis zu 4 Stunden auf die nächste Aussendung vom Deutschen Wetterdienst (DWD) warten. Diese Wartezeit hat sich nicht mit meiner Ungeduld vertragen. So entstand dieses Projekt zur Generierung eigener NAVTEX Testsignale.

NAV4 Navtex Empfänger von ICS Electronics

NAV4 Navtex Empfänger von ICS Electronics

NAVTEX (NAVigational TEleX) ist ein internationaler Dienst zur Verbreitung nautischer und meteorologischer Warnnachrichten. Verschiedene Stationen, unter Anderem der DWD, senden auf 490 kHz und 518 kHz regelmäßig wichtige Informationen für die Schifffahrt aus. Obwohl NAVTEX ein sehr alter Standard ist, gehören NAVTEX Empfänger immer noch zur Ausrüstungspflicht für bestimmte Schiffe unter dem SOLAS-Abkommen (SOLAS = Safety of Life at Sea). NAVTEX Sender senden CCIR476 kodierte Zeichen mit einer Symbolrate von 100 Baud. Da NAVTEX auf dem SITOR (SImplex Teletype Over Radio) B Protokoll aufbaut, ist dank Vorwärtsfehlerkorrektur (kurz FEC, von englisch Forward Error Correction) eine gewisse Robustheit auch bei schwierigen Funkbedingungen gegeben.

CCIR476 Zeichenkodierung

CCIR476 ist eine 7-Bit Zeichenkodierung, die in diversen Funkprotokollen verwendet wird. SITOR, AMTOR und das auf SITOR-B aufgesetzte NAVTEX verwenden ie CCIR476 Zeichenkodierung. Da in einem gültigen Zeichen exakt 4 von den insgesamt 7 Bits ‚1‘ sind, ist eine einfache Fehlererkennung möglich. Da beim SITOR-B / NAVTEX Protokoll jedes Zeichen zweifach gesendet wird, ist damit auch eine Fehlerkorrektur möglich. Dazu aber später mehr. Da es sich bei AMTOR oder konkreter AMTOR-B (auch AMTOR-FEC genannt) um die Amateurfunkvariante von SITOR-B handelt, bin ich davon ausgegangen, dass es für die notwendige CCIR476 Zeichenkodierung sicher eine Arduino-Bibliothek gibt. Doch diese Annahme stellte sich schnell als falsch heraus. Die gute Nachricht für Alle, die auch Verwendung für eine CCIR476-Bibliothek haben: Meine CCIR476 Bibliothek für Arduino [1] ist jetzt entweder direkt über den Bibliotheksmanager in der Arduino-IDE oder auf GitHub [2] verfügbar.

CCIR476 Bibliothek in der Bibliotheksverwaltung der Arduino-IDE

CCIR476 Bibliothek in der Bibliotheksverwaltung der Arduino-IDE

CCIR476 verwendet – genau wie der bei RTTY verwendete Baudot-Code – zwei verschiedene Zeichentabellen; Eine Tabelle für Buchstaben und eine zweite Tabelle für Ziffern/Zeichen. Die Umschaltung zwischen den beiden Tabellen erfolgt durch Steuerzeichen. Die von mir geschriebene Bibliothek sucht in beiden Tabellen nach dem gewünschten ASCII-Zeichen und übersetzt dieses in das korrespondierende CCIR476 Zeichen. Dabei erkennt die Software, ob es sich dabei um Buchstaben oder Ziffern/Zeichen handelt. Sollte ein Wechsel zwischen den beiden Tabellen notwendig werden, werden die entsprechenden Steuerzeichen in den Bitstrom eingefügt.

SITOR-B und NAVTEX Protokoll

Die Internationale Fernmeldeunion, ITU, ist eine gute Anlaufstelle auf der Suche nach Spezifikationen für ältere Funkprotokolle. Auf der Website der ITU wurde die ITU Empfehlung M.476-5 mit dem Titel „Direct-printing telegraph equipment in the maritime mobile service“ gefunden [3]. In diesem Dokument werden sämtliche Details von SITOR-A und SITOR-B beschrieben.

Die Kurzfassung: Eine Übertragung wird durch die abwechselnde Aussendung von 2 Steuerzeichen, Phasing Signal 1 und Phasing Signal 2, eingeleitet. Jedes Zeichen wird insgesamt 2-mal ausgesendet. Zwischen der Erstaussendung eines Zeichens und der Wiederholung liegen genau 4 anderen Zeichen. Die Aussendung wird durch 3-malige Aussendung des „Phasing Signal 1“- Steuerzeichens beendet.

Das Dokument der ITU beschreibt die Vorwärtsfehlerkorrektur wie folgt:

The station sending in the collective or in the selective B-mode (CBSS or SBSS) emits each character twice: the first transmission (DX) of a specific character is followed by the transmission of four other characters, after which the retransmission (RX) of the first character takes place, allowing for timediversity reception at 280 ms time space;

Übersetzt in Code für den Arduino sieht die Vorwärtsfehlerkorrektur mit Zeichenwiederholung nach 4 anderen Zeichen wie folgt aus:

void SITOR_Transmit_FEC(byte SYM)
{      
     Transmit_SYMBOL(SYMBOL_BUFFER_1);
     SYMBOL_BUFFER_1 = SYMBOL_BUFFER_2;
     SYMBOL_BUFFER_2 = SYMBOL_BUFFER_3;
     SYMBOL_BUFFER_3 = SYM;  
     Transmit_SYMBOL(SYMBOL_BUFFER_3);  
}

NAVTEX verlangt darüber hinaus, dass jede NAVTEX-Nachricht mit den Zeichen „ZCZC“ eingeleitet und mit den Zeichen „NNNN“ beendet wird. Nach dem einleitenden „ZCZC“ wird zudem eine Meldungskennung, bestehend aus Senderkennung, Meldungsart und einer laufenden, 2-stelligen Nummer, ausgesendet. Mein Beispielcode verwendet die Meldungskennung „SA00“. Dabei steht das „S“ für den DWD-Sender in Pinneberg, „A“ für eine Navigationswarnung und die Seriennummer „00“ hat einen Sonderstatus als besonders dringliche Meldung.

Testaufbau und Ergebnisse

Der Beispielcode wurde kompilliert und auf einen Arduino Uno gebrannt. Sobald man eine Betriebsspannung an den Arduino anlegt, generiert dieser eine CCIR476 kodierte, dem SITOR-B und NAVTEX Protokoll entsprechende Testnachricht. Diese Testnachricht steht mit der korrekten Bitrate von 100 Baud am Pin 2 des Arduino’s als digitaler Bitstrom zur Verfügung.

NAVTEX Bitstrom am Pin 2 des Arduino Uno

NAVTEX Bitstrom am Pin 2 des Arduino Uno

Dieser Bitstrom wurde dann über die „Aux In/Out“-Buchse einem Siglent 1032X Funktionsgenerator zugeführt. Der Funktionsgenerator wurde auf eine Frequenz von 517,915 kHz eingestellt. Die eingebaute Funktion zur FSK-Modulation wurde aktiviert, die Modulationsquelle auf „Extern“ gesetzt und die FSK Sprungfrequenz auf 518,085 kHz eingestellt.

Ein Siglent 1032X wurde als FSK-Modulator für das generierte SITOR-B / NAVTEX Testsignal verwende

Ein Siglent 1032X wurde als FSK-Modulator für das generierte SITOR-B / NAVTEX Testsignal verwendet

Das Testsignal aus dem Funktionsgenerator wurde direkt in den Antenneneingang vom NAVTEX Empfänger geführt. Der Arduino wurde neu gestartet und kurze Zeit später begann die „SBY“ LED am NAVTEX Empfänger zu blinken. Kurze Zeit darauf begann der Thermodrucker damit die übermittelte Testnachricht fehlerfrei auszudrucken.

Erfolgreicger Empfang des NAVTEX Testsignales auf einem NAVTEX Empfänger

Empfang des NAVTEX Testsignales auf einem NAVTEX Empfänger

Bonusmaterial

Wenngleich eine Funktion zur FSK-Modulation auf den meisten, modernen Funktionsgeneratoren ziemlicher Standard ist, habe ich ebenso erfolgreich einen Si5351A-Taktgenerator verwendet um das NAVTEX Testsignal FSK-moduliert um 518 kHz zu generieren. Der entsprechende Sketch hierfür findet sich ebenso im Beispielordner der CCIR476 Bibliothek oder direkt hier.

Folgendes, kurzes Video zeigt den Testaufbau in Aktion:

Zusammenfassung

Dieses Projekt zeigt, dass es manchmal sehr lehrreich sein kann mehrere Tage Arbeit zu investieren um wenige Stunden Wartezeit zu umgehen. Hätte ich einfach nur die 4 Stunden auf die nächste Aussendung vom DWD gewartet, hätte ich niemals so viel über CCIR476, SITOR-B oder NAVTEX gelernt. Ebenso wenig hätte ich gelernt wie man eigene Bibliotheken schreibt und wie diese in die Bibliotheksverwaltung der Arduino-IDE aufgenommen werden. Manchmal kann Ungeduld zusammen mit etwas Kreativität interessante Wege eröffnen.

Links and Sources:

[1] CCIR476 Arduino library, GitHub: https://github.com/AI5GW/CCIR476

[2] CCIR476 Arduino library, arduino.cc: https://www.arduino.cc/

[3] ITU recommendation M.476-5, ITU: https://www.itu.int/

One thought on “SITOR-B / NAVTEX Testsignal mit Arduino und Funktionsgenerator erzeugen

  1. Hallo,
    Herzlichen Dank für die Erläuterungen. Ich stehe vor dem selben Problem. Zu, einem will ich auch einen NAVTEX Empfänger reparieren, zum anderen, baue ich gerade auch einen. Ich habe mit einen FPGA Testsender aufgebaut und war mir nicht sicher ob ich dasITU Protokoll richtig verstanden habe.
    Viele Grüße
    Jörg

Leave a comment

Ihre E-Mail-Adresse wird nicht veröffentlicht.