Varicode
Der selbstsynchronisierende Zeichencode hinter PSK31 — variable Codelänge je nach Häufigkeit, aber ganz ohne Start-/Stoppbits oder Rahmen-Overhead.
Varicode ist der Zeichencode, den Peter Martinez (Rufzeichen G3PLX) 1998 zusammen mit der Betriebsart PSK31 für den Amateurfunk entwickelte. Anders als der Baudot-Code mit seinen starren 5 Bit pro Zeichen nutzt Varicode variable Codelängen: Häufige Buchstaben bekommen kurze Codes, seltene lange — nach demselben Grundgedanken wie die Huffman-Kodierung in der Datenkompression. Die eigentliche Besonderheit steckt aber woanders: Varicode braucht keine Start- oder Stoppbits, um zu erkennen, wo ein Zeichen endet und das nächste beginnt.
1. Das Problem variabler Codelänge
Bei einem Code mit fester Länge wie Baudot ist immer klar, wo ein Zeichen endet: nach exakt 5 Bit. Bei variabler Codelänge ist das nicht mehr selbstverständlich — der Empfänger müsste eigentlich wissen, wie lang der aktuelle Code ist, um zu erkennen, wann das nächste Zeichen beginnt. Eine naheliegende Lösung wäre ein explizites Trennzeichen zwischen den Codes, so wie Leerzeichen zwischen Wörtern. Genau das macht Varicode — mit einem cleveren Trick, der das Trennzeichen unverwechselbar macht.
2. Die Konstruktionsregel
Jedes Varicode-Zeichen erfüllt zwei feste Regeln:
- Beginnt und endet immer mit einer 1.
- Enthält niemals zwei aufeinanderfolgende Nullen.
Als Trennzeichen zwischen zwei Zeichen dienen dagegen genau zwei aufeinanderfolgende Nullen (00). Weil Regel 2 dieses Bitmuster innerhalb eines gültigen Zeichens grundsätzlich ausschließt, ist die Doppelnull beim Empfang niemals mehrdeutig — sie kann nur die Grenze zwischen zwei Zeichen bedeuten, nie ein Teil eines Zeichens selbst sein. Der Empfänger muss also nicht mitzählen oder auf ein Startbit warten; er liest einfach Bit für Bit, und sobald zwei Nullen hintereinander auftauchen, ist das gerade gelesene Zeichen fertig. Diese Eigenschaft heißt Selbstsynchronisation.
| Zeichen | Code | Zeichen | Code | Zeichen | Code |
|---|---|---|---|---|---|
| Leerzeichen | 1 |
j | 111101011 |
s | 10111 |
| a | 1011 |
k | 10111111 |
t | 101 |
| b | 1011111 |
l | 11011 |
u | 110111 |
| c | 101111 |
m | 111011 |
v | 1111011 |
| d | 101101 |
n | 1111 |
w | 1101011 |
| e | 11 |
o | 111 |
x | 11011111 |
| f | 111101 |
p | 1111111 |
y | 1011101 |
| g | 1011011 |
q | 110111111 |
z | 111010101 |
| h | 101011 |
r | 10101 |
— | — |
| i | 1101 |
Zu erkennen: Die häufigsten Buchstaben im Englischen — e, t, a, o, i, n — haben mit 2 bis 4 Bit die kürzesten Codes, seltene Buchstaben wie q, j, x, z brauchen 8 bis 9 Bit. Ziffern und Satzzeichen sind mit 6 bis 10 Bit noch länger, weil sie im Fließtext seltener vorkommen als Buchstaben.
3. Simulator: Kodierung und Selbstsynchronisation live
Text kodieren, Bits kippen, Selbstsynchronisation beobachten
Text eingeben (Kleinbuchstaben und Leerzeichen unterstützt). Jedes Zeichen wird als eigene Bitgruppe eingefärbt, gefolgt von der Trenn-„00" (grau). Auf ein Bit klicken, um einen Übertragungsfehler zu simulieren — der Decoder liest den Strom als durchgehenden Bitstrom neu ein, exakt wie ein echter PSK31-Empfänger: sobald zwei Nullen hintereinander erscheinen, gilt das vorherige Zeichen als abgeschlossen.
4. Was passiert bei einem Bitfehler?
Ein gekipptes Bit in Varicode wirkt sich unterschiedlich stark aus, je nachdem wo es passiert:
- Bit innerhalb eines Zeichencodes gekippt: Meist wird daraus entweder ein anderes gültiges Zeichen (ein einzelner falscher Buchstabe) oder ein ungültiges Bitmuster ohne Eintrag in der Tabelle. In beiden Fällen bleibt der Fehler lokal begrenzt — die Zeichengrenzen selbst (die
00-Trenner) sind ja unverändert, also synchronisiert sich der Decoder beim nächsten Zeichen sofort wieder. - Eine „1" wird zu „0" direkt vor dem Trenner: Aus einer einzelnen Eins vor der Doppelnull wird eine dritte Null — der Decoder sieht dann effektiv eine längere Nullfolge und interpretiert die Zeichengrenze trotzdem korrekt (er reagiert ja schon bei den ersten zwei Nullen), verliert aber unter Umständen das letzte Bit des vorherigen Zeichens.
- Eine „0" wird zu „1" mitten im Trenner: Aus
00wird01oder10— der Decoder erkennt die Zeichengrenze an dieser Stelle nicht mehr und liest über die eigentliche Grenze hinweg weiter, bis zufällig die nächste echte Doppelnull auftaucht. Das verschmilzt zwei (oder mehr) Zeichen zu einem einzigen, oft nicht in der Tabelle vorhandenen Bitmuster.
Genau dieses Verhalten lässt sich im Simulator oben direkt ausprobieren — anders als beim Baudot-Code, wo ein einzelner Fehler in einem Umschalter beliebig viele nachfolgende Zeichen mitreißen kann, bleiben Varicode-Fehler in aller Regel auf ein bis zwei Zeichen begrenzt — ein Nebeneffekt der Selbstsynchronisation.
5. Praktischer Einsatz
PSK31 im Amateurfunk: Varicode ist untrennbar mit PSK31 verbunden, der von Peter Martinez (G3PLX) entwickelten und im Dezember 1998 vorgestellten Betriebsart für Tastatur-zu-Tastatur-Verbindungen auf Kurzwelle. Mit einer Symbolrate von 31,25 Baud und einer Bandbreite von nur rund 31–60 Hz ist PSK31 eine der schmalbandigsten digitalen Betriebsarten im Amateurfunk überhaupt — viele PSK31-Signale passen gleichzeitig in die Bandbreite eines einzigen SSB-Kanals.
BPSK31 vs. QPSK31: In der einfachen BPSK-Variante trägt jedes übertragene Bit direkt die Varicode-Information, ganz ohne zusätzlichen Fehlerschutz. Die QPSK-Variante ergänzt einen Faltungscode mit Viterbi-Decodierung für zusätzlichen Fehlerschutz — auf Kosten der Fähigkeit, die absolute Phasenlage ohne zusätzliche Referenz eindeutig zu bestimmen (bei BPSK ist das kein Problem, da nur zwei Phasenzustände existieren).
6. Grenzen
- Keine echte Fehlerkorrektur: Genau wie Baudot bietet reines (B)PSK31/Varicode selbst keinerlei Fehlerkorrektur — die QPSK-Variante behebt das über einen zusätzlichen Faltungscode, nicht über Varicode selbst.
- Empfindlich gegenüber Trenner-Fehlern: Wie in Abschnitt 4 gezeigt, kann ein Bitfehler ausgerechnet im
00-Trenner zwei Zeichen zu einem nicht dekodierbaren Bitmuster verschmelzen lassen — seltener und weniger folgenschwer als Baudots Umschaltfehler, aber nicht ausgeschlossen. - Sprachabhängige Effizienz: Die Codelängen sind auf die Buchstabenhäufigkeit im Englischen optimiert — in Sprachen mit anderer Buchstabenverteilung (z. B. Deutsch mit häufigerem „e", aber auch häufigen Umlauten außerhalb der Basistabelle) ist die mittlere Bit-pro-Zeichen-Effizienz nicht mehr optimal.