FT8 mit dem SDR-Shield
Bisher konnte ich nur mit meinem SSB-Transceiver FT8-QSOs fahren.
Mein Ziel war aber, auch mit einem Eigenbau-QRP-Transceiver auf der
Basis des SDR-Shield FT8 zu machen. Den Start gab mir die
JTEncode-Bibliothek von Jason Milldrum (https://github.com/etherkit/JTEncode).
Damit ist die Sache im Prinzip ganz einfach: Man stellt den
message-Text bereit, der dann mit jtencode.ft8_encode in den tx_buffer
übersetzt wird. Dieser enthält dann Hexzahlen, von denen jedes Nibble
für eine von acht Frequenzen steht. Sie liegen 6.25 Hz auseinander,
sodass insgesamt eine Bandbreite von 50 Hz belegt wird. Alle 159 ms
wird die Frequenz auf den nächsten Schritt geändert.
void encodeFT8()
{
char message2[] = "DM7RO DL7JD RR73";
char call[] = "DK7JD";
char loc[] = "JO31";
symbol_count = FT8_SYMBOL_COUNT; // From the library defines
tone_spacing = FT8_TONE_SPACING;
tone_delay = FT8_DELAY;
jtencode.ft8_encode(message, tx_buffer);
digitalWrite (txOn,1); //Relais
digitalWrite (keyOut,1); //keyOut
si5351.output_enable(SI5351_CLK2, 1);
si5351.output_enable(SI5351_CLK1, 0); //RX off
delay (500);
for(int i = 0; i < symbol_count; i++)
{
si5351.set_freq((freqFT8 * 100) + (tx_buffer[i] * tone_spacing), SI5351_CLK2);
delay(tone_delay);
if (digitalRead(key) == 0) break; //Abbruch mit Morsetaste
if (Serial.available()) break;
}
// Turn off the output
si5351.output_enable(SI5351_CLK2, 0);
si5351.output_enable(SI5351_CLK1, 1); //RX on
digitalWrite (txOn,0); //Relais
digitalWrite (keyOut,0); //keyOut
delay (1500);
}
Schwieriger war die sinnvolle Steuerung aus einem eigenen Programm.
Wenn man WSJT-X mit einem SSB-Sender benutzt, wird ja der Zeitablauf
mit den vorbereiteten Nachrichten automatisiert. Nun aber ist der
Empfang vom Senden getrennt. Ich muss also die Nachrichten selbst
zusammenstellen und das genaue Timing einhalten.
Zu diesem Zweck habe ich mein vorhandenes VB-Abstimmprogramm um die
nötigen FT8-Elemente erweitert. Ein CQ-Ruf startet dann zum Beginn
einer Viertelminute, also bei 0 s, 15 s, 30 s oder 45 s. Das
funktioniert auch sehr gut, wie man an den Empfangsberichten im Bild
ganz oben sehen kann. Offensichtlich kann man mir zwei bis fünf Watt
sehr gut arbeiten.
Schwieriger
wird es, wenn eine Station antwortet. Ich muss dann ihr Rufzeichen aus
dem Empfangsprogramm in mein TX-Programm kopieren und außerdem das SNR
einstellen. Ein paar QSOs habe ich damit hinbekommen, aber es war sehr
holperig. Bei umfangreichen Tests ist mit erst klar geworden, dass ich
nur eine maximale Textlänge von 13 Zeichen verwenden darf. Dass WSJT-X
scheinbar auch längere Nachrichten verschickt, liegt an eine
ausgefeilten Komprimierung. Eine Nachricht wie "RA2AL DK7JD R13"
hat ja schon 15 Zeichen. Tatsächlich verwendet FT8 drei Datenblöcke für
beide Rufzeichen und den Lacator (bei mir JO31). Deshalb müssen die
Leerzeichen nicht mit übertragen werden. Und Zusätze wie der Rapport
"R-17" oder der Gruß "RR73" werden im Hintergrund jeweils in einen
besonderen Lacotor umgesetzt, wo mit hoher Wahrscheinlichkeit nie ein
Sender stehen wird.
Meine eigenen Nachrichten sind aber auf Volltext mit maximal 13 Zeichen
begrenzt. Das gibt schon mal Probleme mit Rufzeichen von mehr als 5
Zeichen Länge. Und Rapporte unter 0 dB scheitern am Minuszeichen, ein
Zeichen zu viel. Ich habe mir viel Mühe gegeben, die Nachrichten so
weit zu kürzen, dass es gerade noch geht. Aber dabei stoße ich immer
wieder auf automatische Abläufe auch beim Empfangen, die meine
Nachricht dann unterdrücken oder verstümmeln. Aus dem Grunde hat noch
kein Funkfreund meinen Gruß mit 73 sehen können. Fazit: Es funktioniert
zwar, aber noch nicht so wie es sollte.
Der erste Versuch
ist meist nicht genug.
(Ing. Dietrich Drahtos)
Aber ich habe schon eine neue Idee, wie es gehen könnte...