InhaltVorheriges Kapitel Nächstes Kapitel

8 Zahlen und Codes

8.7 Codes

Mit dem Begriff "Kodierung" wird eine Vorschrift bezeichnet, die einen vorgegebenen Zeichenvorrat in einen neuen umwandelt. Es handelt sich um eine Abbildungsvorschrift, durch die eine neue Elementenmenge erzeugt wird.

Der Begriff "Code" hat die gleiche Bedeutung wie "Kodierung" (beide Begriffe sind synonym). Darüberhinaus wird aber mit "Code" auch der durch die Kodierung erzeugte, neue Zeichenvorrat gekennzeichnet, d.h. die Menge der Elemente selbst.


Abb.: 8.8: Kodierungsbeispiel:
Abbildung des Hexadezimalsystems in das Dualsystem.

Wie an den bereits bekannten Kodierungsbeispielen der polyadischen Zahlensysteme gesehen werden kann, sollten Kodierungen bzw. Codes bestimmte Grundeigenschaften mitbringen.
Die wichtigste dieser Eigenschaften ist die Eindeutigkeit der Zuordnung, d.h. daß jedes Element der Objektmenge auf nur ein Element der Bildmenge abgebildet wird. Für die Rückabbildung von der Bildmenge in die Objektmenge braucht diese Eigenschaft nicht zu bestehen, die Forderung nach einer umkehrbar eindeutigen Abbildung wird nicht gestellt.
Auf die umkehrbare Eindeutigkeit wird oftmals bewußt verzichtet, um eine Optimierung zu erhalten. Dies bedeutet z.B., daß mehrere Elemente der Objektmenge auf ein einziges Element der Bildmenge abgebildet werden können.




8.7.1 Kodierungsarten

Zur vollständigen Informationsverarbeitung reicht die Kodierung rein numerischer Daten nicht aus. Die Kodierung muß auch alphabetische Information erfassen.

Die Codes können daher in zwei Gruppen unterteilt werden:


Die alphanumerischen Codes dienen zur Darstellung von numerischer und nicht-numerischer Information (dazu gehören das Alphabet, Sonderzeichen wie '.' oder ',' und auch nicht druckbare Spezialzeichen, s.u.).

Es bestehen weitere Möglichkeiten, Codes zu charakterisieren. Codes können z.B. klassifiziert werden in


Einige dieser (sich nicht gegenseitig ausschließenden) Charakteristika sollen im folgenden näher erläutert werden.


8.7.2 Code-Eigenschaften

Stellenzahl n:

Binäre Codes (als Bildmenge) werden als Bitkombinationen realisiert. Die Stellenzahl n des Codes entspricht der Anzahl von Bits, die für die Kodierung vorgesehen ist. Die Zahl n definiert damit die Informationsbreite des Codes.

Codegewicht:

Als Gewicht g eines Codewortes wird die Anzahl der Stellen mit dem Wert "1" bezeichnet (Beispiel: g(0101) = 2, g(0000) = 0).

Gleichmäßigkeit:

Ein Code wird als gleichmäßig bezeichnet, wenn die Stellenzahl n für alle Werte gleichgroß (konstant) ist.

Nachrichtenmenge M:

Mit Hilfe dieser Stellenzahl m ergibt sich die maximal darstellbare Nachrichtenmenge, d.h. die maximale Zahl unterscheidbarer Codes, bei einem Binärcode zu:

M = 2m. (8.29)


Redundanz R:

Ist die darzustellende Anzahl von Codes kleiner als die maximale Nachrichtenmenge M, so ergibt sich eine Redundanz: es existieren mehr Bitkombinationen als zur Code-Realisierung notwendig sind.

Die Redundanz beschreibt also die Differenz zwischen der realisierbaren Nachrichtenmenge M und der tatsächlich realisierten Nachrichtenmenge N. Mathematisch ausgedrückt wird die Redundanz als Bit-Redundanz, d.h. als die Differenz zwischen der Stellenzahl m und der effektiv notwendigen Bitanzahl n.

Für n gilt damit die Beziehung:

N = 2n. (8.30)

Aus Gl. 8.29 und Gl. 8.30 folgt:

m = ld(M), n = ld(N) (8.31)
mit: ld = Logarithmus zur Basis 2.

Damit kann die Redundanz definiert werden als:

R = ld(M) ­ ld(N); (8.32)
also:
R = m ­ ld(N)  [Bits]

Da die Zahl N nicht notwendigerweise eine ganzzahlige Potenz von 2 sein muß, ergibt sich für die Redundanz im allgemeinen eine gebrochene Zahl.

Redundanz kann verwendet werden, um fehlererkennende bzw. fehlerkorrigierende Codes aufzubauen.

Beispiel 8.16: Redundanz eines dekadischen 4-Bit-Codes (BCD, s.u.)

R
=
m ­ ld(N),
=
4 - ld(10)
=
4 - 3,32 = 0,68
R
=
0,7 Bits.

Die Redundanz beträgt 0,7 Bits; zur Realisierung von 10 Codeworten wären (theoretisch) 3,3 Bits ausreichend.

Vollständigkeit:

Werden alle möglichen Bitkombinationen genutzt (N = M), wird der Code als vollständig bezeichnet. Ein vollständiger Code ist nicht redundant:

R = 0   .


Hammingabstand (Hamming-Distanz):

Der Hammingabstand h gibt die Anzahl der Stellen an, in denen sich zwei beliebige Worte eines Codes unterscheiden.

Für zwei Codeworte a = (a1,a2,...,an) und b = (b1,b2...,bn) kann h mit Hilfe der XOR-Funktion bestimmt werden:

(8.33)

( ist hierbei als ganze Zahl aufzufassen)

oder:.(8.34)

Stetigkeit:

Bei einem stetigen Code ist der Hammingabstand konstant über den gesamten Code.

für beliebige a,b mit ab.

Einschrittigkeit:

Gilt für einen stetigen Code, daß die Hammingdistanz h = 1 ist, wird der Code als einschrittig bezeichnet. Dies bedeutet, daß zwischen zwei beliebig gewählten benachbarten Codeworten sich nur ein einziger Bitwert ändert.

Code-Symmetrie:

Ein Code wird als symmetrisch bezeichnet, wenn die möglichen Codeworte symmetrisch um eine imaginäre Symmetrieachse (einen bestimmten Codewert) verteilt sind. Bei den tetradischen BCD-Codes (s.u.) ist eine Symmetrie bezüglich der Binärzahl 10002 wichtig, da in diesem Fall das Neunerkomplement besonders einfach gebildet werden kann. Arithmetische Operationen werden dadurch erleichtert.

Lexikografische Codes:

Codes werden als lexikografisch angeordnet bezeichnet, wenn die Codeworte in der Reihenfolge ihrer Dualwerte geordnet sind.

Lexikografisch sind z.B. der nBCD-Code und der Aiken-Code, nicht lexikografisch sind die Gray- und Glixon-Codes (s.u).

Selbstkomplementierende Codes:

Bei selbstkomplementierenden Codes entspricht das Neunerkomplement einer Dezimalzahl dem Einerkomplement der zugehörigen Dualzahl.


8.7.3 Numerische Codes

Die in Kap. 8.5.1 vorgenommene Einteilung in numerische und alphanumerische Codes kann weiter verfeinert werden. Die numerischen Codes können ihrerseits unterteilt werden:

Abb. 8.9: Klassifizierung der numerischen Codes.

Alle hier dargestellten Codes können weiterhin klassifiziert werden in:

Abb.: 8.10: Wortcodes und Zifferncodes.

Die Wortcodes nehmen hierbei eine wortweise Kodierung vor, wie sie z.B. von den Dualzahlen her bereits bekannt ist.
Im Gegensatz dazu wird bei den Zifferncodes die Dezimalzahl ziffernweise kodiert.
Zifferncodes haben den Vorteil einer einfacheren Kodierung, der allerdings mit einer größeren Redundanz erkauft wird: es existieren ungenutzte Bitkombinationen (nicht realisierte Codes).


8.7.4 Positionscodes

Bei den Positioncodes ist die Position der einzelnen Bits von Bedeutung, die allerdings nicht wie bei den polyadischen Zahlensystemen einer linearen Reihenfolge gehorchen muß.

Positionscodes können in zwei Gruppen unterteilt werden:


8.7.4.1 Bewertbare Codes

Die bewertbaren Codes folgen im Prinzip dem Bildungsgesetz Gl. 8.1:

.(8.1)

Die Gewichte Wi definieren diesen Codetyp als bewertbar (bzw. "wägbar").

Zu den bewertbaren Codes gehört ein Teil der unter dem Namen "BCD-Zahlen" zusammengefaßten Systeme. BCD-Zahlen entstehen durch ziffernweise Kodierung von Dezimalzahlen; im Gegensatz zur Kodierung als Dualzahl wird in diesem Fall also die Dezimalzahl zunächst in ihre einzelnen Dekaden (Koeffizienten) zerlegt, die dann einzeln kodiert werden.

Die Bezeichnung "BCD" soll diesen Vorgang zum Ausdruck bringen:

Das wichtigste BCD-Zahlensystem zieht zur Kodierung das Dualsystem heran und wird deshalb als nBCD-System bezeichnet:


Eine vorgegebene Dezimalzahl d3d2d1d0 wird also zur Kodierung als nBCD-Zahl ziffernweise in das Dualsystem konvertiert:


Abb. 8.11: Wandlung einer Dezimalzahl in eine BCD-Zahl

Beispiel 8.17:

3910 = 0011 1001BCD

In dieser Darstellung wurde bereits angenommen, daß die BCD-Zahl mit 4 Bits dargestellt wird. Dies ist die minimal notwendige Stellenzahl, da hiermit 24 = 16 unterschiedliche Zahlen kodiert werden können. Offensichtlich besteht ein Überschuß an Kodierungsmöglichkeit (s.o. "Redundanz"), da nur 10 Zahlenwerte vorliegen (0 - 9). Die nicht genutzten Codes sind die sogenannten Pseudotetraden (Pseudodekaden, Pseudodezimalen) des BCD-Codes (s. Kap. 2).

Die Redundanz des BCD-Codes im Vergleich zum reinen Binärcode zeigt sich auch im direkten Vergleich der Wertebereiche die vorliegen, wenn die gleiche Anzahl von Binärstellen vorausgesetzt wird.

Beispiel 8.18: Vergleich einer 16-stelligen Binär- und BCD-Zahl

Binärzahl (16 Bits)
15
0
                   

BCD-Zahl (4 Dekaden, Tetraden)
3
  
0
3
  
0
3
  
0
3
  
0
0 - 9
0 - 9
0 - 9
0 - 9

Für die Wertebereiche ergibt sich in diesen beiden Fällen:



In der folgenden Tabelle werden einige bewertbare 4-Bit-BCD-Codes (Tetradencodes) zusammengefaßt:

Code-Name
nBCD
7421
742-1
74-2-1
MBQ
Aiken
Gewicht
8 4 2 1
7 4 2 1
7 4 2-1
7 4-2-1
5 4 2 1
2 4 2 1
Dezimalwert
0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
1
0 0 0 1
0 0 0 1
0 0 1 1
0 1 1 1
0 0 0 1
0 0 0 1
2
0 0 1 0
0 0 1 0
0 0 1 0
0 1 1 0
0 0 1 0
0 0 1 0
3
0 0 1 1
0 0 1 1
0 1 0 1
0 1 0 1
0 0 1 1
0 0 1 1
4
0 1 0 0
0 1 0 0
0 1 0 0
0 1 0 0
0 1 0 0
0 1 0 0
5
0 1 0 1
0 1 0 1
0 1 1 1
1 0 1 1
1 0 0 0
1 0 1 1
6
0 1 1 0
0 1 1 0
1 0 0 1
1 0 0 1
1 0 0 1
1 1 0 0
7
0 1 1 1
1 0 0 0
1 0 0 0
1 0 0 0
1 0 1 0
1 1 0 1
8
1 0 0 0
1 0 0 1
1 0 1 1
1 1 1 1
1 0 1 1
1 1 1 0
9
1 0 0 1
1 0 1 0
1 1 0 0
1 1 1 0
1 1 0 0
1 1 1 1

Tab. 8.10 4-Bit-BCD-Codes

Beispiel 8.19:    (569)10 = (0101 0110 1010)7421


Der Aiken-Code (2421-Code) hat als besondere Eigenschaft die Selbstkomplement-Bildung; Neunerkomplement des Dezimalwertes und Einerkomplement des Dualwertes sind identisch:

a
Aiken-Code
9-a
Aiken-Code
1
0001
8
1110
3
0011
6
1100
5
1011
4
0100

Tab. 8.11: Beispiel für Selbstkomplementierung.

Ein weiterer stellenbewerteter aber nicht selbstkomplementärer 2421-Code, der dem Aiken-Code sehr ähnlich ist, wird in Tab. 8.14 wiedergegeben.

Die Bildung von bewertbaren BCD-Codes kann auch mit mehr als 4 Bits vorgenommen werden. Einige dieser nichttetradischen Codes werden in nachfolgender Liste wiedergegeben:

Code-Name
2-aus-5-
Code
51111
Biquinär-
Code
Ringzähler
Gewicht
74210
51111
50 43210
9876543210
Dezimalwert
0
11000
00000
01 00001
0000000001
1
00011
00001
01 00010
0000000010
2
00101
00011
01 00100
0000000100
3
00110
00111
01 01000
0000001000
4
01001
01111
01 10000
0000010000
5
01010
10000
10 00001
0000100000
6
01100
11000
10 00010
0001000000
7
10001
11100
10 00100
0010000000
8
10010
11110
10 01000
0100000000
9
10100
11111
10 10000
1000000000

Tab. 8.12: Nichttetradische BCD-Codes

2-aus-5-Code und Biquinär-Code:

Von den hier wiedergegebenen nichttetradischen Codes enthalten sowohl beim 2-aus-5- als auch beim Biquinär-Code sämtliche Codeworte genau 2 "1"-Werte. Diese regelmäßige Anordnung macht die automatische Fehlererkennung besonders einfach.
Beim Biquinär-Code kommt hinzu, daß diese beiden Einsen jeweils auf eine linke und eine rechte Gruppe verteilt werden, wodurch selbst Zweibitfehler zum Teil erkannt werden können.

51111-Code:

Der 51111-Code ist wie der Aiken-Code selbstkomplementierend (s.o.).

8.7.4.2 Anordnungscodes

Im Gegensatz zu den Positionscodes haben die Anordnungscodes kein einfaches mathematisches Bildungsgesetz und werden deshalb häufig direkt über die Codetabelle definiert.
Sie zeichnen sich aber durch besondere Eigenschaften aus, wie Symmetrie, Einschrittigkeit, einfache Realisierung, etc..

Zu den wichtigsten Anordnungscodes gehören die Gray-Codes, die als dekadische 4-Bit-Codes vorliegen und in erweiterter Form alle 16 möglichen 4-Bit-Codewörter nutzen.

Mathematisch kann der Gray-Code mit Hilfe der XOR-Funktion gebildet werden (s. Kap. 2), einfacher ist seine Darstellung mit Hilfe einer grafischen Bildungsmethode (siehe Abb. 8.12). Ausgehend von einer 0/1-Kombination wird durch wiederholtes Spiegeln der Ausgangsinformation und Hinzufügen von 0/1-Werten der vollständige Code aufgebaut:


Abb. 8.12: Bildung des Gray-Codes durch Spiegelung und Bit-Erweiterung.

Auf Grund dieses grafischen Bildungsgesetzes wird dieser Code auch als binärer Reflexcode (BRC) bezeichnet.

Der so gebildete Gray-Code ist vollständig und hat als weitere Grundeigenschaft die Einschrittigkeit, die auch aus dem KV-Diagramm entnommen werden kann:

Abb. 8.13: KV-Diagramm des vollständigen Gray-Codes.



Eine andere Darstellungsform des Codes bedient sich eines sogenannten Codelineals, in dem die einzelnen Bit-Positionen farblich gekennzeichnet werden:

n
d
c
b
a
Codelineal
0
0
0
0
0
    
1
0
0
0
1
    
2
0
0
1
1
    
3
0
0
1
0
    
4
0
1
1
0
    
5
0
1
1
1
    
6
0
1
0
1
    
7
0
1
0
0
    
8
1
1
0
0
    
9
1
1
0
1
    
10
1
1
1
1
    
11
1
1
1
0
    
12
1
0
1
0
    
13
1
0
1
1
    
14
1
0
0
1
    
15
1
0
0
0
    

Abb. 8.14: Codelineal des Gray-Codes.

Der hier gezeigte Code kann auch auf eine Dekade verkürzt werden, um BCD-Zahlen zu realisieren. Wie am obigen Codelineal gesehen werden kann, geht allerdings bei dieser Verkürzung die Einschrittigkeit beim Übergang von 910 auf 010 verloren; der neue Code ist nicht mehr zyklisch (bzgl. modulo 10).

Abhilfe schafft eine kleine Modifikation des Codes für die Zahl 910, wodurch die Einschrittigkeit wiederhergestellt wird. Der resultierende Code wird als Glixon-Code bezeichnet.

n
Gray-Code
Gray-Code
Glixon-Code
0
              
1
              
2
              
3
              
4
              
5
              
6
              
7
              
8
              
9
              
10
    
11
    
12
    
13
    
14
    
15
    

Abb. 8.15: Gray- und Glixon-Codes.

Die Einschrittigkeit macht den Gray- bzw. Glixon-Code besonders wichtig. Insbesondere bei meßtechnischen Anwendungen sind einschrittige Codes notwendig, um inkorrekte Meßergebnisse oder fehlerhafte Informationswandlungen (z.B. bei A/D-Umsetzung) zu vermeiden.

Der Vergleich mit dem Dualsystem zeigt dies besonders deutlich.

Zum Messen von Längen können Meßlineale eingesetzt werden, die im Prinzip den bereits eingeführten Codelinealen entsprechen. Winkel können mit Hilfe von ähnlich aufgebauten Winkelgebern bestimmt werden.

Abb. 8.16: Messung mit dem Codelineal

Bei Messung mit dem dualcodierten Lineal (Abb. 8.16 oben) ist der Übergang vom Wert 7 auf den Wert 8 besonders kritisch; alle Binärstellen ändern sich (h = 4). Wird die Abtastung z.B. mit einem optischen Sensor vorgenommen, kann nicht garantiert werden, daß alle Bitpositionen zur exakt gleichen Zeit wechseln. Schon auf Grund einer kleinen Leseverzögerung kann ein falscher Wert (z.B. "0") ermittelt werden.
Beim Gray-Code-Lineal (Abb. 8.16 unten) kann diese Fehlersituation nicht auftreten. Selbst bei zeitverzögerter Abtastung einzelner Bits ergibt sich kein Codesprung, so daß kein falscher Zwischenwert ausgegeben werden kann.

In Meßinstrumenten dieser Art werden also grundsätzlich einschrittige Codes realisiert.

Weitere wichtige Anordnungscodes werden in der nachfolgenden Tabelle wiedergegeben:

Dezimalwert
Exzeß-3
Reflex-
Exezeß-3
O'Brien I
Libaw-
Craig
0
0011
0010
0000
00000
1
0100
0110
0001
00001
2
0101
0111
0011
00011
3
0110
0101
0010
00111
4
0111
0100
0110
01111
5
1000
1100
1110
11111
6
1001
1101
1010
11110
7
1010
1111
1011
11100
8
1011
1110
1001
11000
9
1100
1010
1000
10000

Tab.8.13: Wichtige Tetraden- und Pentaden-Codes

Exzeß-3-Code (Stibitz-Code):

Der Exzeß-3-Code entsteht aus dem nBCD-8421-Code durch Addition des Zahlenwertes "3" (daher seine Bezeichnung). Dieser Code ist symmetrisch (vgl. Tab. 8.14) und enthält nicht die 0000- und 1111-Worte, was für nachrichtentechnische Zwecke von Vorteil ist (diese Bitkombinationen können bei technischem Fehlverhalten leicht auftreten, sie stellen in diesem Fall aber Pseudotetraden dar). Der Exzeß-3-Code ist außerdem selbstkomplementierend (s.o. Aiken-Code).

Libaw-Craig-Code:

Der Libaw-Craig-Code ist einschrittig und stetig; außerdem ist bei diesem Code die Bildung des Zehnerkomplements besonders einfach: der Dualcode wird in umgekehrter Richtung gelesen.

Zusammenfassung:

Zusammenfassend sollen die wichtigsten hier behandelten Codes in ihrer Zuordnung zum vollständigen 4-Bit-Dualcode aufgezeigt werden.
Diese Form der Anordnung erlaubt es in besonders einfacher Form, wichtige Grundeigenschaften der Codes zu ermitteln (Symmetrie, lexikografische Anordnung, etc.).

8421
(nBCD)
2421
unsym.
Aiken
Exzeß-3
White
Gray
(16 bit)
Glixon
0000
0
0
0
 
0
0
0
0001
1
1
1
 
1
1
1
0010
2
2
2
  
3
3
0011
3
3
3
0
2
2
2
0100
4
 
4
1
 
7
7
0101
5
  
2
3
6
6
0110
6
  
3
 
4
4
0111
7
  
4
4
5
5
1000
8
  
5
5
(15)
9
1001
9
  
6
6
(14)
 
1010
 
4
 
7
 
(12)
 
1011
 
5
5
8
7
(13)
 
1100
 
6
6
9
 
8
8
1101
 
7
7
 
8
9
 
1110
 
8
8
  
(11)
 
1111
 
9
9
 
9
(10)
 

Tab. 8.14: Wichtige 4-Bit-BCD-Codes

Bei den hier dargestellen 4-Bit-Codes handelt es sich um die bekanntesten. Anspruch auf Vollständigkeit kann schon deshalb nicht erhoben werden, weil die Zahl der theoretisch möglichen tetradischen Verschlüsselungen äußerst groß ist:

Bei einer Stellenzahl von 4 Bits gibt es für die Kodierung dezimaler Zahlen (mit 6 Pseudotetraden) insgesamt


Kombinationsmöglichkeiten. Die meisten dieser fast 3·1010 definierbaren Codes haben natürlich keine technische Bedeutung.

8.7.4.3 BCD-Arithmetik

Bei der Durchführung arithmetischer Operationen zeigen die verschiedenen BCD-Codes recht unterschiedliches Verhalten. Insbesondere müssen die Pseudotetraden berücksichtigt werden, d.h. es müssen Korrekturen an den (Zwischen-)Ergebnissen durchgeführt werden.

Die notwendigen Anpassungen z.B. bei einer Addition sind besonders einfach beim nBCD-Code sowie beim Exzeß-3- und Aiken-Code, die beide in einer engen Beziehung zueinander stehen:


Beispiel 8.20: Addition im nBCD-Code


        mit Übertrag          mit Pseudotetrade

      __________________     __________________

         810         1000        710        0111

      +  910         1001     +  610        0110

      __________________     __________________

      = 1710    0001 0001     = 1310        1101

              +      0110            +      0110     <--  Korrektur (+6)

            ____________            ___________

               0001 0111              0001 0011     <--  Endergebnis


Beispiel 8.21: Addition im Exzeß-3-Code


        mit Übertrag           ohne Übertrag

                              (Pseudotetrade)

      __________________     __________________

         410         0111        310        0110

      +  910         1100     +  410        0111

      __________________     __________________

      = 1310       1 0011     =  710        1101

              + 0011 0011            -      0011     <--  Korrektur (±3)

            ____________            ___________

               0100 0110                   1010     <--  Endergebnis

8.7.5 Zählcodes

Die Zählcodes sind sehr einfach aufgebaut. Um einen gegebenen Zahlenwert darzustellen, wird die entsprechende Anzahl von Einsen angegeben. Führende Bitpositionen werden durch Nullen aufgefüllt:

Dezimalwert
Zählcode
0
000000
1
000001
2
000011
3
000111
4
001111
.
.
.
.
.
.

Tab. 8.15: Binäre Codierung im Zählcode

Auch Zählcodes können als Wort- bzw- Zifferncode definiert werden.

Beim Wortcode wird die Stellenzahl bestimmt durch den größten darzustellenden Zahlenwert.

Beim Zifferncode wird jede einzelne Dezimalzahl in Form einer BCD-Zahl binär codiert.

Abb. 8.17: Wandlung einer Dezimalzahl in eine zählcodierte BCD-Zahl


Für jede Dezimalstelle sind also neun Bits notwendig:

Dezimalwert
Zählcode
0
000000000
1
000000001
2
000000011
3
000000111
.
.
.
.
.
.
8
011111111
9
111111111

Tab. 8.16: Codierung von BCD-Zahlen im Zählcode


InhaltVorheriges Kapitel Nächstes Kapitel