Varicode

Verfahren der Entropiekodierung

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 Bearbeiten

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 Bearbeiten

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 Bearbeiten

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 Bearbeiten

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

Literatur Bearbeiten

Weblinks Bearbeiten