Die Regeln, nach denen unsere FT8-Station arbeitet, klingen in der Beschreibung, als hätte jemand sie sich überlegt und dann hingeschrieben. So war es nicht. Fast jede davon ist aus einem Irrtum entstanden, und ein guter Teil der Arbeit bestand darin, eigene Annahmen zu widerlegen — oft solche, die monatelang unwidersprochen im Betrieb liefen. Weil das der lehrreichere Teil ist, steht hier die Entwicklung der Reihe nach, mit den Fehlern statt nur mit den Ergebnissen.

Teil 2 von 2. Was die Station tut und warum, steht in Teil 1: FT8 ohne Bildschirm. Die Software ist frei verfügbar: github.com/simonsorcerer23/ft8-raspi.

Drei Entwicklungsphasen: Mai 109 Versionen Aufbau, Juni 57 Versionen Instrumentierung, September 70 Versionen Auswertung, dazwischen zwei ruhige Monate mit einem einzelnen Prüftag Ende Juli
236 Veröffentlichungen in vier Monaten, gedrängt in drei kurze Phasen. Die beiden ruhigen Monate dazwischen sind kein Stillstand — in ihnen entstanden die Daten, an denen im September fast alles scheiterte, was wir zu wissen glaubten.

Die Station lief in diesen Monaten einfach, machte QSOs und schrieb mit, was sie tat. Dass daraus einmal ein Problem werden würde, ahnte niemand.

Mai: eine Woche bis zur funktionierenden Station

Am Anfang stand das Naheliegende: den Transceiver über ein einziges USB-Kabel steuern, FT8 und FT4 senden und empfangen, ein QSO von CQ bis 73 selbsttätig führen, das Ergebnis ins Logbuch schreiben. Dazu eine Bedienoberfläche fürs Handy, eine Selbstaktualisierung und ein Wachhund, der den Dienst neu startet, wenn er hängt.

Nach wenigen Tagen lief die Station am Mast — und schon in derselben Woche kam der erste eigene Prüfdurchgang. Er förderte zutage, was man beim schnellen Bauen übersieht: Der Rapport wurde nicht ganz so gebildet, wie WSJT-X es tut. Der Sender fiel nach einem Zurücksetzen auf die alte Leistung zurück. Die Bandkennung stand fest verdrahtet auf dem ersten Eintrag der Konfiguration statt auf der Frequenz, auf der das Gerät tatsächlich stand — wer auf 15 m funkte, bekam QSOs auf 20 m ins Log geschrieben.

Das sind gewöhnliche Anfängerfehler eines jungen Programms. Der teuerste Irrtum dieser Phase steckte gar nicht im Code.

Klasse E darf nirgends. In der Prüfung, welche Lizenzklasse im Ausland funken darf, stand: „Klasse E ist nirgends CEPT-anerkannt.“ Das ist falsch. Klasse E ist CEPT-Novice nach ECC/REC (05)06 und darf in 23 Ländern arbeiten. Die Angabe war nicht nachgeschlagen, sondern plausibel geraten — und sie sperrte DO3XR wochenlang ohne jeden Grund vom Auslandsbetrieb aus. Die Korrektur brauchte dann eine richtige Recherche: 44 Einträge, konsolidiert aus CEPT T/R 61-01 und ECC/REC (05)06, gegengeprüft an der ARRL-Zusammenstellung für reisende Funkamateure.

Seitdem gilt für Fragen zu Recht, Lizenz und Sicherheit eine einfache Regel: Primärquelle oder gar nichts. Eine offene Lücke zu benennen ist besser, als sie mit falscher Präzision zu füllen — denn eine geratene Zahl sieht im Nachhinein genauso aus wie eine recherchierte.

Juni: messen lernen

Die Station lief, also wurde sie bequemer: ein Demo-Modus mit simuliertem Band, um Dinge auszuprobieren, ohne zu senden. Eine durchgehend zweisprachige Oberfläche. Ein Autopilot für den Bandwechsel.

Der folgenreiche Schritt dieser Wochen war unscheinbar und brachte zunächst überhaupt nichts: Jeder eigene Anrufversuch wurde ab sofort mit seinem Ausgang aufgeschrieben. Wen haben wir gerufen, wie stark war er, wie viele Mitbewerber hatte er, welches Auswahlkriterium gab den Ausschlag, wie ging es aus. Und zwar mit deutlich mehr Feldern, als damals irgendjemand brauchte. Die Begründung im Änderungsprotokoll lautet wörtlich: „alles JETZT sammeln statt in einer Woche“ — damit später nicht genau das eine entscheidende Feld fehlt.

Diese Entscheidung ist im Rückblick die wichtigste des ganzen Projekts. Jede Zahl, die heute eine Regel begründet, stammt aus diesen Spalten. Rückwirkend messen kann man nicht: Wer im September wissen will, wie oft im Juni ein Anruf ins Leere ging, hat entweder die Daten von damals — oder er hat sie nie.

Was dabei niemandem auffiel: Die Aufzeichnung lief zuverlässig. Angesehen hat sie sich drei Monate lang niemand. Die erste ernsthafte Auswertung kam im September, und sie widerlegte reihenweise Regeln, die seit Mai im Betrieb waren. Daten zu sammeln ist die eine Hälfte; sie anzusehen die andere — und die ist offenbar die schwerere.

30. Juli: ein einziger Tag, neun Reparaturen

Ein gezielter Durchgang durch die Ecken, die im Alltag nie ausgeführt werden. Neun Reparaturen an einem Tag, kein einziges neues Merkmal, keine neue Version.

Der unangenehmste Fund: Der Zugangsschlüssel für das Online-Logbuch landete im Klartext in einer öffentlichen Push-Meldung aufs Handy. Die verwendete Netzwerkbibliothek schreibt bei einem Fehler die vollständige Adresse in den Fehlertext, und der Schlüssel steht als Parameter in dieser Adresse. Die Meldung ging als Teil einer Statusmeldung nach draußen — und die Kanäle dieses Push-Dienstes sind öffentlich und ohne Anmeldung lesbar. Der Dienst antwortet bei falschem Schlüssel mit einer Fehlermeldung. Der Schlüssel wurde also genau dann veröffentlicht, wenn etwas nicht stimmte.

Zwei weitere Funde desselben Tages haben dieselbe Handschrift: Der ALC- und der Akku-Wächter waren seit jeher tot — verdrahtet, aber nie scharfgeschaltet. Und im Hintergrund laufende Schleifen, die abstürzten, taten das lautlos; die Station lief scheinbar weiter, nur ein Teil ihrer Aufgaben eben nicht mehr.

Die Lektion: Code, der nie ausgeführt wurde, ist keine Funktion, sondern eine Absichtserklärung. Alle neun Fehler saßen in Pfaden, die im Normalbetrieb nicht vorkommen — Fehlerbehandlung, Sonderfälle, Abbruchzweige, Wächter, die nur im Ausnahmefall greifen. Ein Wächter, der nie Alarm schlägt, sieht genauso aus wie einer, der funktioniert.

6. bis 8. September: besser hören

Bei FT8 entscheidet der Decoder darüber, wen man überhaupt zu Gesicht bekommt. Der Maßstab ist WSJT-X. Am Anfang fand unser Decoder auf Referenzaufnahmen 73 % dessen, was WSJT-X findet — also verpasste er gut ein Viertel der Stationen.

Die Kampagne dieser Tage brachte ihn über 88 % auf 98 %: durch das Herausrechnen lauter Nachbarsignale, durch ein zweites Fehlerkorrekturverfahren für schwache Signale, durch die Verteilung der Rechenarbeit auf alle vier Kerne — und schließlich dadurch, den Decoder von WSJT-X selbst als zweite Meinung im Hintergrund mitlaufen zu lassen. Jede einzelne Änderung wurde an denselben Referenzaufnahmen nachgezählt, damit „gefühlt besser“ nicht als Ergebnis durchgeht.

Parallel lief ein zweiter Tiefenaudit, und der fand etwas Ernsteres als alles Bisherige.

Der Zeitwächter prüfte die falsche Größe. In der Architekturdokumentation stand seit Monaten, dass vor jedem Sendedurchgang die Uhrzeit geprüft wird — FT8 verzeiht keine halbe Sekunde. Im Code wurde stattdessen geprüft, ob der GPS-Empfänger einen Fix hat. Das ist nicht dasselbe: GPS stellt auf diesem System die Uhr nicht, die Zeitsynchronisation läuft über das Netz. Unterwegs ohne Internet, auf einem Rechner ohne gepufferte Uhr, bedeutete das: Uhr läuft frei, Wächter meldet grün, die Station sendet im falschen Takt — also genau in dem Moment, in dem die Gegenstation selbst sendet.

Drei solcher Zusagen aus der Architekturdokumentation waren nie oder falsch verdrahtet. Seitdem gilt: Wenn die Dokumentation eine Zusage macht, muss ein Test sie prüfen. Sonst ist sie eine Notiz über gute Absichten.

9. September: der Ausfall

Der Raspberry Pi 4 stieg aus. Die Station zog auf einen Pi 5 um, der von einer SSD startet statt von einer Speicherkarte — Speicherkarten sind der übliche Verdächtige bei solchen Ausfällen.

Was dabei auffiel: Es gab kein Backup der Zugangsdaten und der Konfiguration. Das war Wochen vorher einmal bewusst so entschieden worden, mit dem Argument, alles sei ja schnell wieder eingerichtet. Beim tatsächlichen Ausfall stimmte das Argument dann nicht mehr. Eine Entscheidung, die im Ruhezustand vernünftig klingt, muss nicht im Ernstfall vernünftig sein — und der Ernstfall ist der einzige Moment, in dem sie zählt.

10. und 11. September: zwei Tage, an denen fast alles Geglaubte fiel

Die im Juni gebaute Aufzeichnung wurde zum ersten Mal ernsthaft ausgewertet. Das Ergebnis war unbequem.

Die ganze Auswahllogik lief überhaupt nicht

Die Station war so eingestellt, dass sie selbst CQ ruft und auf Anrufe antwortet. In dieser Betriebsart wird die Auswahl — die 22 Kriterien, die Gates, die ganze Feinarbeit aus Wochen — schlicht nie ausgeführt. Gemessen an einem einzigen Tag: über 3000 CQ-Rufe anderer Stationen im Band, null eigene Anrufversuche. Alle QSOs dieses Tages kamen über eingehende Anrufe.

Nach der Umstellung auf Anrufbetrieb: vier eigene Anrufe in sieben Minuten. Die Arbeit von Wochen war nicht falsch — sie wurde nur nie ausgeführt. Und weil die Station dabei ordentlich QSOs machte, fiel es nicht auf.

Die Empfangsabfrage pausierte seit Wochen

Die Station fragt beim PSK Reporter nach, wer ihr eigenes Rufzeichen gehört hat — die entscheidende Information bei schwachen Stationen. „CQ-Betrieb aktiv“ war einmal ein guter Grund, diese Abfrage ruhen zu lassen: Damals schlossen sich CQ-Rufen und gezieltes Anrufen gegenseitig aus, und wer nur CQ ruft, wählt niemanden aus.

Dann wurde beides zusammengelegt und lief gleichzeitig. Der Pausengrund blieb stehen — und traf ab da dauerhaft zu. Die Abfrage pausierte wochenlang, der Picker sah nie, wer uns hört, und verwarf deshalb jede schwache Station. In sieben Tagen Aufzeichnung: 520 Anrufversuche ohne Empfangsbeleg gegen 115 mit.

Die Wunschliste erreichte den Picker nie

Wer auf der Wunschliste steht — eine angekündigte DXpedition, ein fehlendes Land —, soll bevorzugt angerufen werden. Die Liste wurde befüllt, angezeigt, für Push-Meldungen ausgewertet. Gelesen hat sie bei der Auswahl niemand.

Dazu kam ein zweiter Effekt, der in dieselbe Richtung wirkte: Seltenes DX ist per Definition schwach und von Anrufern umlagert. Genau bei diesen Stationen griffen also alle Sparregeln gleichzeitig — Pile-up meiden, schwache Signale meiden, ungünstige Weltgegenden meiden. Die Liste war damit für exakt die Stationen wirkungslos, für die man sie überhaupt anlegt. Über sieben Tage rief Z68PX aus dem Kosovo 16-mal CQ, V51WH aus Namibia war 13-mal zu hören. Kein einziger Anrufversuch.

Sechzehn Stationen warteten vergeblich

Ein FT8-QSO hat einen festen Ablauf, an den sich in der Praxis kaum jemand hält. Wer vom Drehbuch abwich, wurde stillschweigend fallengelassen. Über sieben Tage schickten uns 16 Stationen eine Bestätigung, aus der nie ein QSO wurde: EA3GXK wiederholte seine 186-mal, CT1BFP 55-mal. Sie saßen jeweils am anderen Ende und warteten auf eine Antwort, die nie kam.

Im eigenen Protokoll stand in all diesen Fällen „Gegenstation verstummt“. Geschwiegen hatten wir.

Was diese Fehler gemeinsam hatten

An diesen beiden Tagen wurden sechsundzwanzig Reparaturen nötig, und ein guter Teil davon hatte dieselbe Form: eine Regel, deren Begründung eine spätere Änderung nicht überlebt hat.

  • Die Sperre für Rufer am äußeren Bandrand schützte ursprünglich das Senden — eine Antwort ganz unten im Band läuft in die Flanke des Sendefilters. Dann wurde die Antwortfrequenz frei wählbar, und dort wurde gar nicht mehr gesendet. Die Sperre hielt weiterhin Stationen zurück, deren Frequenz für unsere Aussendung längst keine Rolle mehr spielte: in fünf Tagen 1018 CQ-Rufe von 161 Stationen, darunter einer aus Grenada, der 51-mal vergeblich in der Empfangsliste stand.
  • Die kurze Sperrfrist nach einem QSO sollte verhindern, dass dieselbe Station auf anderen Bändern blockiert wird. Diese Frage war längst anders gelöst — die Sperrfrist unterscheidet die Bänder inzwischen selbst. Geblieben war ein Fenster von 30 Minuten, kurz genug für Doppel-QSOs mit derselben Station am selben Tag.
  • Die Prüfung, ob eine Station im selben Takt sendet wie wir, verglich gegen den falschen der beiden Zeitschlitze.
  • Die Informationen über Kontinent, Land und Standort der Kandidaten wurden aus den Decodes des vorigen Durchgangs gebaut. Weil FT8-Stationen abwechselnd senden, sind das größtenteils andere Stationen: An einem Tag waren nur 5,3 % der CQ-Rufer eines Durchgangs schon im vorigen zu hören. Für die tatsächlichen Kandidaten fehlte die Information also fast immer — und wo sie fehlt, lässt jedes darauf gebaute Gate durch.

Jede dieser Regeln war einmal richtig. Keine davon war noch richtig. Und das ist die eigentliche Einsicht aus vier Monaten: Begründungen altern schneller als Code — mit dem Unterschied, dass sich niemand beschwert, wenn sie abgelaufen sind. Ein Programm, dessen Annahme nicht mehr stimmt, stürzt nicht ab. Es arbeitet weiter und tut geduldig das Falsche.

Was daraus geworden ist

Gegen genau diesen Fehlertyp helfen keine besseren Vorsätze, sondern nur Sichtbarkeit. Drei Anzeigen machen seitdem im laufenden Betrieb sichtbar, was sonst niemand sieht:

  • Was jede Filterregel wegnimmt. Zwölf Stufen, jede mit eigenem Zähler. Eine Regel, die plötzlich alles wegfiltert, fällt sofort auf.
  • Wie voll die Datenquellen sind, auf die sich die Auswahl stützt. Das ist der heikelste Punkt: Eine Regel, die nie zählt, kann überflüssig sein — oder sie hat schlicht keine Daten. Diese beiden Fälle auseinanderzuhalten hat uns davor bewahrt, zehn Filterstufen zu löschen, die in Wahrheit nur leer liefen.
  • Wohin die Zeit fließt innerhalb der 15 Sekunden, von der Aufnahme bis zur Sendeentscheidung.

Und weil sich auch gut begründete Annahmen als falsch herausstellen, laufen die strittigen Regeln heute nicht mehr einfach so. Sie werden abwechselnd ein- und ausgeschaltet, und die Station zählt beide Varianten getrennt mit — derselbe Gedanke wie bei einem Medikamententest, nur mit Funkverbindungen. Zwei solche Vergleiche laufen zurzeit: die Wahl der Antwortfrequenz, und die Frage, ob es sich überhaupt lohnt, eine weit entfernte Station anzurufen, wenn sonst niemand zu hören ist.

Das ist auch der Grund, warum auf diesen Seiten so viele Zahlen mit Einschränkungen stehen. Eine Aussage wie „die freie Antwortfrequenz ist besser“ ist erst dann etwas wert, wenn dahinter steht, über wie viele Anrufe sie gemessen wurde — und was passiert, wenn man die Stichprobe verdoppelt. Ein Muster, das wir bei 16 Anrufen deutlich zu sehen glaubten, war bei 246 Anrufen spurlos verschwunden.

Was heute offen ist

Zum Schluss das, was noch niemand weiß — denn eine Projektgeschichte, die nur mit gelösten Problemen endet, wäre schon wieder eine geschönte.

Der bisher deutlichste Befund der Auswertung ist zugleich der unbequemste: Antwortet die gerufene Station, kommt das QSO in gut drei von vier Fällen zustande. Antwortet sie nicht, in keinem. Und rund zwei Drittel aller eigenen Anrufe bekommen nie eine Antwort. Die ganze Arbeit an den Abläufen — die 16 wartenden Stationen, die verpassten Bestätigungen, das Wiederaufnehmen abgebrochener Verbindungen — betraf damit die kleinere Hälfte des Problems. Der eigentliche Hebel liegt nicht darin, ein begonnenes QSO besser zu Ende zu bringen, sondern darin, von vornherein Stationen anzurufen, die uns hören können.

Wie das am besten geht, ist offen. Der Empfangsbeleg vom PSK Reporter ist der bislang beste einzelne Hinweis — Stationen mit Beleg antworten deutlich häufiger. Nur liegt für knapp zwei Drittel unserer Anrufe überhaupt kein Beleg vor, weder positiv noch negativ. Was man daraus macht, weiß die Station noch nicht. Sie wird es aufschreiben.

Fragen, Ideen oder Interesse am Nachbau: über das Impressum oder direkt über die Projektseite.