Varicode
# Varicode

Varicode ist eine Entropiekodierung, das heißt, der Kode häufig vorkommender Zeichen ist kürzer als bei selteneren Zeichen – ähnlich dem Morsecode. Dadurch erhöht sich der Datendurchsatz. Varicode wird primär zur Datenübertragung auf Kurzwelle mit dem Modus PSK31 im Amateurfunkdienst verwendet. Varicode wurde 1997 von Peter Martinez (G3PLX) entwickelt um Text effizienter zu übertragen.

## Varianten

Ursprünglich wurde nur ASCII unterstützt, deutsche Umlaute waren z. B. nicht darstellbar. 1998 verwendeten erste Programme den 8-Bit-Code ISO 8859-1, wobei die neuen 128 Zeichen der Reihe nach aus dem Standard übernommen und nicht nach der Häufigkeit sortiert wurden. Mittlerweile unterstützen fast alle Programme zur (De-)Modulation von PSK31 / PSK63 256 Zeichen (8 Bit). Die digitale Betriebsart PSK31 und die schnellere Variante PSK63 verwenden zur Kompression der Nachrichten Varicode.

## Aufbau

Da die Kodes nur aus 0 und 1 bestehen, handelt es sich um einen Binärcode. Um die Fano-Bedingung zu erfüllen, wurden drei Regeln aufgestellt.

* Nach jeder Nachricht folgt „00“ als Trennzeichen.
* „00“ kommt in keiner Nachricht vor.
* Jede Nachricht beginnt mit einer „1“ und endet mit einer „1“.

Nach diesen Regeln wurden den häufigsten ASCII-Zeichen die kürzesten Kodes zugewiesen. Beginnend mit dem Leerzeichen, wobei die 1 vom Start und Ende zusammenfällt. Danach folgen „e“ (11), „o“ (111), „t“ (101) und hauptsächlich Kleinbuchstaben, anschließend Großbuchstaben, Zahlen, Sonder- und Steuerzeichen. Im Folgenden sind die primären Kodierungstabellen zusammengestellt:

| Varicode | Oct | Dec | Hex | Abkürzung | Beschreibung |
| - | - | - | - | - | - |
| 1010101011 | 000 | 0 | 00 | NUL | Null character |
| 1011011011 | 001 | 1 | 01 | SOH | Start of Header |
| 1011101101 | 002 | 2 | 02 | STX | Start of Text |
| 1101110111 | 003 | 3 | 03 | ETX | End of Text |
| 1011101011 | 004 | 4 | 04 | EOT | End of Transmission |
| 1101011111 | 005 | 5 | 05 | ENQ | Enquiry |
| 1011101111 | 006 | 6 | 06 | ACK | Acknowledgment |
| 1011111101 | 007 | 7 | 07 | BEL | Bell |
| 1011111111 | 010 | 8 | 08 | BS | Backspace |
| 11101111 | 011 | 9 | 09 | HT | Horizontal Tab |
| 11101 | 012 | 10 | 0A | LF | Line feed |
| 1101101111 | 013 | 11 | 0B | VT | Vertical Tab |
| 1011011101 | 014 | 12 | 0C | FF | Form feed |
| 11111 | 015 | 13 | 0D | CR | Carriage return |
| 1101110101 | 016 | 14 | 0E | SO | Shift Out |
| 1110101011 | 017 | 15 | 0F | SI | Shift In |
| 1011110111 | 020 | 16 | 10 | DLE | Data Link Escape |
| 1011110101 | 021 | 17 | 11 | DC1 | Device Control 1 (XON) |
| 1110101101 | 022 | 18 | 12 | DC2 | Device Control 2 |
| 1110101111 | 023 | 19 | 13 | DC3 | Device Control 3 (XOFF) |
| 1101011011 | 024 | 20 | 14 | DC4 | Device Control 4 |
| 1101101011 | 025 | 21 | 15 | NAK | Negative Acknowledgement |
| 1101101101 | 026 | 22 | 16 | SYN | Synchronous Idle |
| 1101010111 | 027 | 23 | 17 | ETB | End of Trans. Block |
| 1101111011 | 030 | 24 | 18 | CAN | Cancel |
| 1101111101 | 031 | 25 | 19 | EM | End of Medium |
| 1110110111 | 032 | 26 | 1A | SUB | Substitute |
| 1101010101 | 033 | 27 | 1B | ESC | Escape |
| 1101011101 | 034 | 28 | 1C | FS | File Separator |
| 1110111011 | 035 | 29 | 1D | GS | Group Separator |
| 1011111011 | 036 | 30 | 1E | RS | Record Separator |
| 1101111111 | 037 | 31 | 1F | US | Unit Separator |
| 1110110101 | 177 | 127 | 7F | DEL | Delete |

### Darstellbare Zeichen

| Varicode | Oktal | Dezimal | Hex | Zeichen |
| - | - | - | - | - |
| 1 | 040 | 32 | 20 | SP |
| 111111111 | 041 | 33 | 21 | ! |
| 101011111 | 042 | 34 | 22 | " |
| 111110101 | 043 | 35 | 23 | # |
| 111011011 | 044 | 36 | 24 | $ |
| 1011010101 | 045 | 37 | 25 | % |
| 1010111011 | 046 | 38 | 26 | & |
| 101111111 | 047 | 39 | 27 | ' |
| 11111011 | 050 | 40 | 28 | ( |
| 11110111 | 051 | 41 | 29 | ) |
| 101101111 | 052 | 42 | 2A | * |
| 111011111 | 053 | 43 | 2B | + |
| 1110101 | 054 | 44 | 2C | , |
| 110101 | 055 | 45 | 2D | - |
| 1010111 | 056 | 46 | 2E | . |
| 110101111 | 057 | 47 | 2F | / |
| 10110111 | 060 | 48 | 30 | 0 |
| 10111101 | 061 | 49 | 31 | 1 |
| 11101101 | 062 | 50 | 32 | 2 |
| 11111111 | 063 | 51 | 33 | 3 |
| 101110111 | 064 | 52 | 34 | 4 |
| 101011011 | 065 | 53 | 35 | 5 |
| 101101011 | 066 | 54 | 36 | 6 |
| 110101101 | 067 | 55 | 37 | 7 |
| 110101011 | 070 | 56 | 38 | 8 |
| 110110111 | 071 | 57 | 39 | 9 |
| 11110101 | 072 | 58 | 3A | : |
| 110111101 | 073 | 59 | 3B | ; |
| 111101101 | 074 | 60 | 3C | < |
| 1010101 | 075 | 61 | 3D | = |
| 111010111 | 076 | 62 | 3E | > |
| 1010101111 | 077 | 63 | 3F | ? |
| Varicode | Oktal | Dezimal | Hex | Zeichen |
| 1010111101 | 100 | 64 | 40 | @ |
| 1111101 | 101 | 65 | 41 | A |
| 11101011 | 102 | 66 | 42 | B |
| 10101101 | 103 | 67 | 43 | C |
| 10110101 | 104 | 68 | 44 | D |
| 1110111 | 105 | 69 | 45 | E |
| 11011011 | 106 | 70 | 46 | F |
| 11111101 | 107 | 71 | 47 | G |
| 101010101 | 110 | 72 | 48 | H |
| 1111111 | 111 | 73 | 49 | I |
| 111111101 | 112 | 74 | 4A | J |
| 101111101 | 113 | 75 | 4B | K |
| 11010111 | 114 | 76 | 4C | L |
| 10111011 | 115 | 77 | 4D | M |
| 11011101 | 116 | 78 | 4E | N |
| 10101011 | 117 | 79 | 4F | O |
| 11010101 | 120 | 80 | 50 | P |
| 111011101 | 121 | 81 | 51 | Q |
| 10101111 | 122 | 82 | 52 | R |
| 1101111 | 123 | 83 | 53 | S |
| 1101101 | 124 | 84 | 54 | T |
| 101010111 | 125 | 85 | 55 | U |
| 110110101 | 126 | 86 | 56 | V |
| 101011101 | 127 | 87 | 57 | W |
| 101110101 | 130 | 88 | 58 | X |
| 101111011 | 131 | 89 | 59 | Y |
| 1010101101 | 132 | 90 | 5A | Z |
| 111110111 | 133 | 91 | 5B | [ |
| 111101111 | 134 | 92 | 5C | \ |
| 111111011 | 135 | 93 | 5D | ] |
| 1010111111 | 136 | 94 | 5E | ^ |
| 101101101 | 137 | 95 | 5F | _ |
| Varicode | Oktal | Dezimal | Hex | Zeichen |
| 1011011111 | 140 | 96 | 60 | ' |
| 1011 | 141 | 97 | 61 | a |
| 1011111 | 142 | 98 | 62 | b |
| 101111 | 143 | 99 | 63 | c |
| 101101 | 144 | 100 | 64 | d |
| 11 | 145 | 101 | 65 | e |
| 111101 | 146 | 102 | 66 | f |
| 1011011 | 147 | 103 | 67 | g |
| 101011 | 150 | 104 | 68 | h |
| 1101 | 151 | 105 | 69 | i |
| 111101011 | 152 | 106 | 6A | j |
| 10111111 | 153 | 107 | 6B | k |
| 11011 | 154 | 108 | 6C | l |
| 111011 | 155 | 109 | 6D | m |
| 1111 | 156 | 110 | 6E | n |
| 111 | 157 | 111 | 6F | o |
| 111111 | 160 | 112 | 70 | p |
| 110111111 | 161 | 113 | 71 | q |
| 10101 | 162 | 114 | 72 | r |
| 10111 | 163 | 115 | 73 | s |
| 101 | 164 | 116 | 74 | t |
| 110111 | 165 | 117 | 75 | u |
| 1111011 | 166 | 118 | 76 | v |
| 1101011 | 167 | 119 | 77 | w |
| 11011111 | 170 | 120 | 78 | x |
| 1011101 | 171 | 121 | 79 | y |
| 111010101 | 172 | 122 | 7A | z |
| 1010110111 | 173 | 123 | 7B | { |
| 110111011 | 174 | 124 | 7C | | |
| 1010110101 | 175 | 125 | 7D | } |
| 1011010111 | 176 | 126 | 7E | ~ |

### Zeichenlängen

Beginnend mit dem Ein-Bit-Code „1“ können gültige Varicode-Werte gebildet werden, indem einem kürzerer Code ein „1“ oder „10“ vorangestellt wird. Somit ist die Anzahl der Codes der Länge n gleich der Fibonacci-Zahl Fn. Bei der Übertragung sind die Codes aufgrund des abschließenden Trennzeichens mit „00“ um zwei Bit länger.

ASCII-Zeichen sortiert nach der Länge im Varicode :

| Bits | Codes | ASCII-Zeichen |
| - | - | - |
| 1 | 1 | SP |
| 2 | 1 | e |
| 3 | 2 | o t |
| 4 | 3 | a i n |
| 5 | 5 | LF CR l r s |
| 6 | 8 | - c d f h m p u |
| 7 | 13 | , . = A E I S T b g v w y |
| 8 | 21 | HT ( ) 0 1 2 3 : B C D F G L M N O P R k x |
| 9 | 34 | ! " # $ ' * + / 4 5 6 7 8 9 ; < > H J K Q U V W X Y [ \ ] _ j q z | |
| 10 | 40 | NUL SOH STX ETX EOT ENQ ACK BEL BS VT FF SO SI DLE DC1 DC2 DC3 DC4 NAK SYN ETB CAN EOM SUB ESC FS GS RS US % & ? @ Z ^ ` { } ~ DEL |
