# 16b18b-Code

Der 16b18b-Code (auch 16b/18b-Code) ist ein 1999 von Albert Xavier Widmer entwickelter Leitungscode in der Telekommunikationstechnik. Es werden 16 Daten-Bits durch 18 Symbol-Bits kodiert. Es ist gleichanteilsfrei und eine einfache Taktrückgewinnung ist aus dem Datensignal möglich. Das Datenvolumen erhöht sich bei Codierung um 12,5 Prozent.
Ein anderer und deutlich effizienterer Code ist der 64b66b-Code mit 3 Prozent Overhead, welcher 64 Bits auf 66 Symbole abbildet und der 128b130b-Code mit 1,5 Prozent Overhead.

## Eigenschaften

Der 16b18b-Code benutzt zur Übertragung zweier Oktetts ein 18 Bit langes Symbol. Dabei werden folgende Eigenschaften erfüllt:

### Gleichspannungs­ausgleich

Die Anzahl der Einsen pro Symbol unterscheidet sich maximal um zwei von der Anzahl der Nullen. Dies ergibt drei Typen von Symbolen:
* 48620 neutrale (neutral disparity): gleiche Anzahl von „1“ und „0“, also neunmal „1“ und neunmal „0“
* 43758 positive (positive disparity): zehnmal „1“ und achtmal „0“
* 43758 negative (negative disparity): achtmal „1“ und zehnmal „0“
In einem Datenstrom treten damit „1“ und „0“ mit gleicher Wahrscheinlichkeit auf. Überträgt man nun eine „1“ als eine positive Spannung +U und eine „0“ als eine negative Spannung −U, so hat das kodierte Signal (bei gegebener Datenrate) eine untere Grenzfrequenz, d. h., über eine längere Bitfolge mittelt sich die Spannung heraus, so dass das Signal keinen Gleichspannungsanteil enthält. Dieser Gleichspannungsausgleich erlaubt zum Beispiel eine kapazitive oder induktive Kopplung von Sender und Empfänger.

### Maximale Länge gleicher Bits

Die maximale Länge gleicher Bits (maximum run length) wird durch entsprechende Auswahl der Symbole bei reiner Datenübertragung auf sieben beschränkt, d. h. spätestens nach sieben Takten wechselt der Pegel. Dies ermöglicht eine einfache Taktrückgewinnung aus dem Datensignal.

### Disparity

Der 16B18B-Encoder verarbeitet neben den Daten auch noch die Disparity. Damit wird dem Encoder mitgeteilt, ob es ein Symbol mit positiver oder negativer Disparity erzeugen soll und welche Disparity ein nachfolgendes Symbol haben soll. Hat ein Symbol negative Disparity, muss das folgende Symbol mit positiver Disparity erzeugt werden. Hat das Symbol neutrale Disparity, wird die Disparity-Information des vorherigen Symbols an das nachfolgende Symbol weitergeleitet. Damit wird sichergestellt, dass im gesamten Datenstrom jederzeit maximal drei 1 oder drei 0 zu viel ist und sich somit über ausreichend viele Symbole Gleichspannungsfreiheit einstellt. Folglich gibt es für jedes Eingangssymbol zwei mögliche Ausgangssymbole. Welches von beiden verwendet wird, hängt vom jeweiligen Vorgänger ab.

### K-Wörter

Neben den zweimal 65536 möglichen Datensymbolen gibt es noch ????mal ??? 18-Bit-Codewörter, welche ebenso wie die Datenwörter maximal sieben gleiche aufeinanderfolgende Bits und insgesamt maximal zehn Einsen bzw. zehn Nullen enthalten. Diese Symbole nennt man K-Wörter, welche für Steuerungsfunktionen in übergeordneten Protokollschichten verwendet werden können. Drei dieser K-Wörter haben ein Bitmuster, das nicht über Symbolgrenzen hinweg entstehen kann. Das heißt, die letzten Bits eines Symboles zusammen mit den ersten Bits eines nachfolgenden Symboles können niemals das Bitmuster eines dieser drei speziellen K-Wörter ergeben. Das nutzt man in seriellen Datenströmen, um den Anfang und das Ende eines Symboles wiederzuerkennen. Diese drei speziellen K-Wörter nennt man auch Komma-Wörter.

### Fehlererkennung

Da von den 262144 möglichen Kombinationen, welche sich mit 18 Bit darstellen lassen, nicht alle gültige Codewörter sind, ergibt sich die Möglichkeit, einige Bitübertragungsfehler zu erkennen. Allerdings können durch einzelne Bitfehler auch andere gültige Codewörter entstehen, womit eine zuverlässige Erkennung oder gar Korrektur von Übertragungsfehlern unmöglich ist. Daher wird meist zusätzlich eine Prüfsumme zusammen mit den Daten übertragen, um Bitübertragungsfehler mit höherer Zuverlässigkeit zu erkennen.

## Trivia

Es gibt noch einen anderen nicht-DC-freien 16B18B-Code, der eher mit dem 64b66b-Code verwandt ist.

## Anwendungen

Der 16b18b-Code findet u. a. in HDMI 2.1 Standard zur digitalen Bild- und Ton-Übertragung in der Unterhaltungselektronik Anwendung.

## Quellen

* IEEE Dokument