2. Zahlendarstellung und Codierungs- techniken 2.1

Werbung
2. Zahlendarstellung und Codierungstechniken
2.1 Maschineninterne Darstellung von Zahlen
und Zeichen
2.2 Fehlererkennende Codes
2.3 Fehlerkorrigierende Codes
Praktische Informatik II
© Prof. Dr. W. Effelsberg
2. Zahlendarstellung und Codierung
2.1 Maschineninterne Darstellung von
Zahlen und Zeichen
Alle Daten, die ein Digitalrechner speichert und verarbeitet, werden intern in Form von Bits dargestellt.
Frage: Wie werden die Datentypen aus den höheren
Programmiersprachen in Bitmuster abgebildet?
2-1
Praktische Informatik II
© Prof. Dr. W. Effelsberg
2. Zahlendarstellung und Codierung
2-2
Analoge Darstellung
Probleme der analogen Darstellung
In der analogen Darstellung repräsentiert der technische Parameter (z. B. eine Spannung) direkt den Wert
aus der Anwendung. Analoge Werte sind im Allgemeinen reelle Zahlen (Gleitkommawerte). Beispiel: Die
Spannung 1 V entspricht DM 1,00, die Spannung 2,4 V
entspricht DM 2,40. Analoge Größen können innerhalb
eines vorgegebenen Bereiches jeden beliebigen Wert
annehmen.
20
30
•
•
•
Genauigkeit der analogen Größe
Definitionsbereich der analogen Größe
Arithmetische Operationen auf analogen Größen
Wichtige Anwendungsbeispiele
• Audio im Telefonnetz und in der Unterhaltungselektronik
• Fernseh- und Videotechnik
40
10
Analogiegröße
0
α
α
Praktische Informatik II
© Prof. Dr. W. Effelsberg
2. Zahlendarstellung und Codierung
2-3
Praktische Informatik II
© Prof. Dr. W. Effelsberg
2. Zahlendarstellung und Codierung
2-4
Digitale Darstellung
Darstellung von Zahlen im Rechner
Die Darstellung von Werten erfolgt in Form von
Zahlen (lateinisch: “digitus“: der Finger; Abzählen
mit den Fingern).
Alle modernen Rechner arbeiten mit Dualzahlen (im
binären Zahlensystem).
Beispiel: der chinesiche Abakus (Rechenrahmen)
Praktische Informatik II
© Prof. Dr. W. Effelsberg
2. Zahlendarstellung und Codierung
2-5
Praktische Informatik II
© Prof. Dr. W. Effelsberg
2. Zahlendarstellung und Codierung
2-6
2.1.1 Logische Werte
2.1.2 Ganze Zahlen
Daten vom Typ “boolean“ (logische Daten) können nur
die Werte true oder false annehmen. Daher genügt im
Prinzip ein Bit. Häufig erfolgt aber eine Darstellung als
ein Byte, da das Byte die kleinste adressierbare und
damit direkt zugreifbare Einheit im Rechner ist.
Positive ganze Zahlen
Positive ganze Zahlen sind ein sehr häufiger Datentyp
in Anwendungsprogrammen (z. B. als Feldindex, Laufvariable in Schleifen), aber auch maschinenintern als
Speicheradresse usw.
Eine weitverbreitete Konvention ist, dass ein Byte mit
nur 0-Bits den Wert false darstellt, während ein Byte mit
mindestens einem 1-Bit dem Wert true entspricht. Besonders häufig wird dabei das erste Bit im Byte interpretiert, da der Prozessor dieses besonders leicht auf 0
oder 1 prüfen kann.
Die Darstellung erfolgt als Dualzahl (Zahl zur Zahlenbasis 2). Dabei entspricht jede Ziffernposition einer
Zweierpotenz (wie bei Dezimalzahlen jede Ziffernposition einer Zehnerpotenz entspricht).
Datentyp Bitstring
Manche höhere Programmiersprachen unterstützen
den Datentyp Bitstring. Dieser wird direkt auf eine
Folge von Bits im Speicher abgebildet. Dazu gibt es
dann eine semantische Erweiterung der Operatoren der
Aussagenlogik (¬, ∧, ∨, ...) auf Bitmuster, die dann
bitweise verknüpft werden.
Praktische Informatik II
© Prof. Dr. W. Effelsberg
2. Zahlendarstellung und Codierung
2-7
Praktische Informatik II
© Prof. Dr. W. Effelsberg
2. Zahlendarstellung und Codierung
2-8
Positive ganze Zahlen
Rechnen mit Dualzahlen
Arithmetische Operationen (Addition, Subtraktion,
Multiplikation, Division) werden im Dualsystem analog
zum Dezimalsystem ausgeführt.
Merke
Eine Multiplikation mit 2 entspricht einem "Linksshift"
der Dualzahl, eine Division durch 2 einem Rechtsshift.
Beispiel
1510 = 11112
Konvertierung
Dual → Dezimal:
Dezimal → Dual:
Ausmultiplizieren
fortgesetzte Division durch 2
und Notieren der Reste
Beispiel für ganze Zahlen im Hauptspeicher
Beispiel
3010 als Dualzahl
30:2
15:2
7:2
3:2
1:2
=
=
=
=
=
15 Rest 0
7 Rest 1
3 Rest 1
1 Rest 1
0 Rest 1
→ 3010 = 111102
Praktische Informatik II
© Prof. Dr. W. Effelsberg
2. Zahlendarstellung und Codierung
2-9
Praktische Informatik II
© Prof. Dr. W. Effelsberg
2. Zahlendarstellung und Codierung
2-10
Oktalzahlen
Hexadezimalzahlen (Sedezimalzahlen) (1)
Das Aufschreiben von langen Bitsrtings braucht viel
Platz und ist unübersichtlich. Deshalb wählt man häufig
eine Darstellung in Form von Oktalzahlen oder Hexadezimalzahlen (Sedezimalzahlen). Dabei ergeben
jeweils drei bzw. vier Bits eine Ziffer.
Bitstring
000
001
010
011
100
101
110
111
Oktalziffer
08
18
28
38
48
58
68
78
Beispiel
=
18110
=
=
2. Zahlendarstellung und Codierung
Da wir aus dem Dezimalsystem nur zehn Ziffern
kennen, müssen weitere sechs Ziffernbezeichner dazu
erfunden werden. Man wählt dazu die Großbuchstaben
A bis F.
Bitstring
Hexadezimalziffer
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111
0101101012
2 6 58
2*64 + 6*8 + 5
Praktische Informatik II
© Prof. Dr. W. Effelsberg
Jeweils vier Bits ergeben eine Hexadezimalziffer.
2-11
016
116
216
316
416
516
616
716
816
916
A
B
C
D
E
F
Praktische Informatik II
© Prof. Dr. W. Effelsberg
2. Zahlendarstellung und Codierung
2-12
Hexadezimalzahlen (Sedezimalzahlen) (2)
Negative ganze Zahlen
Beispiel
18110
=
=
=
Erste Idee
Wir wählen n-1 Bits für den Betrag als ganze Zahl und
ein Bit für das Vorzeichen.
1011 01012
B
Nachteile
• Die Null gibt es zweimal (+0, -0).
• Die Arithmetik wird durch Fallunterscheidungen
komplizierter.
516
11*16 + 5
Die oktale und hexadezimale Darstellung ist nicht nur
für Ganzzahlen, sondern auch für beliebige andere
Bitstrings gebräuchlich, z.B. zur Definition von BitstringKonstanten:
ALL-ONE
LEFT-HALF
DC
DC
Zweite Idee
Einerkomplement
Eine negative Zahl wird durch Invertieren aller Bits der
positiven Zahl desselben Betrages gebildet.
Nachteile
Immer noch zwei Nullen, immer noch komplizierte
Arithmetik
X'FF'
X'F0'
Dritte Idee
Zweierkomplement
Praktische Informatik II
© Prof. Dr. W. Effelsberg
2. Zahlendarstellung und Codierung
2-13
Praktische Informatik II
© Prof. Dr. W. Effelsberg
2. Zahlendarstellung und Codierung
2-14
Zweierkomplement (1)
Zweierkomplement (2)
Berechnung
Zweierkomplement = Einerkomplement +1
Die Darstellung auf dem Zahlenkreis veranschaulicht
die Ähnlichkeit von Addition und Subtraktion.
Beispiel für 3-Bit Zahlen:
210 = 0102
-210 = 1012 + 1 = 1102
Vorteile
• Vorzeichen immer noch am ersten Bit erkennbar
• Die Addition negativer Zahlen geschieht wie die
Addition positiver Zahlen! (beim Überschreiten der
Null geht der Übertrag verloren). Deshalb braucht
man nur noch eine Hardware-Schaltung!
• Subtraktion i - j durch Bildung des Zweierkomplements von j und Addition!
i - j = i + (-j)
Sehr einfach in Hardware zu bauen!
Praktische Informatik II
© Prof. Dr. W. Effelsberg
2. Zahlendarstellung und Codierung
2-15
Praktische Informatik II
© Prof. Dr. W. Effelsberg
2. Zahlendarstellung und Codierung
2-16
2.1.3 Gleitkommazahlen
Festkomma-Darstellung (fixed-point number)
Reelle Zahlen (Gleitkommazahlen, floating point numbers) kann man auf zwei Weisen darstellen: durch
Festlegen einer Konvention, wo im Maschinenwort man
sich die Kommastelle denkt (Festkommazahl, fixedpoint number) oder durch eine Repräsentation in Form
von Mantisse und Exponent.
•
•
Darstellung reeller Zahlen ohne Exponent
Festlegung einer festen Anzahl von Stellen vor und
nach dem Komma durch Konvention
VZ
Vorkomma-
Nachkommastellen
Beispiel
Darstellung und Addition:
19,125 =0 010011,001000
7,625 =0 000111,101000
+
26,75 =0 011010,110000
Umrechnung Dezimal x10 → Dual x2 für x10 < 1:
0,375
*2
0,750
*2
1,500
*2
1,000 (alle Nachkommastellen = 0 → Ende)
Ergebnis 0,37510 = 0,0112 (durch Ablesen von oben
nach unten)
Praktische Informatik II
© Prof. Dr. W. Effelsberg
2. Zahlendarstellung und Codierung
2-17
Praktische Informatik II
© Prof. Dr. W. Effelsberg
2. Zahlendarstellung und Codierung
2-18
Gleitkommazahlen
Beispiele für Gleitkommazahlen
Eine Gleitkommazahl werde in einem 32-Bit-Wort dargestellt mit 8 Bits für e und 24 Bits für m
Repräsentation der rellen Zahl in Form von Mantisse
und Exponent:
e
z=m*
ge
m
, m Mantisse, e Exponent.
m ist eine ganze Zahl mit gedachtem Komma vor der
ersten Stelle.
Man überlege sich, wie die arithmetischen Operationen
+, -, *, / in der obigen Gleitkomma-Darstellung ausgeführt werden!
e ist ganze Zahl.
Anmerkung 1
Beim Rechnen mit Gleitkommazahlen ist die Genauigkeit beschränkt, da die Länge der Mantisse beschränkt
ist. Es treten Rundungsfehler auf.
g ist die Basis. Sie gilt als implizit vereinbart und wird
nicht explizit dargestellt. Gebräuchlich sind g = 2 oder
g = 16. (IBM-Großrechner: g = 16)
Merke
m < 0:
e < 0:
Anmerkung 2
Sehr kleine Prozessoren unterstützen manchmal Gleitkommazahlen nicht in Hardware. Ihre Darstellung und
Operationen darauf müssen dann in Software durch
Unterprogramme des Laufzeitsystems realisiert werden. Üblich ist auch die Erweiterung des Rechners um
einen zusätzlichen Gleitkommaprozessor, die wesentlich zur Beschleunigung der Ausführung numerischer
Anwendungsprogramme beitragen kann.
negative reelle Zahl
reelle Zahl mit Betrag zwischen 0 und 1
Praktische Informatik II
© Prof. Dr. W. Effelsberg
2. Zahlendarstellung und Codierung
2-19
Praktische Informatik II
© Prof. Dr. W. Effelsberg
2. Zahlendarstellung und Codierung
2-20
Darstellung der Mantisse
Versetzte Darstellung des Exponenten
Problem: 0,510 lässt sich darstellen als 0,12 * 20
1
oder als 0,012* 2 etc.
•
•
Lösung: Eindeutigkeit der Darstellung durch
normalisierte Mantisse (Basis g = 2),
0
z.B.:
½ ≤ m < 1, d.h. 0,510 = 0,12 * 2
-1
1 ≤ m < 2, d.h. 0,510 = 1,02 * 2
Diese Darstellung wird auch als Biased- oder
Excess-Darstellung bezeichnet
Zum tatsächlichen Exponenten wird ein bestimmter
Wert (Bias) hinzuaddiert. Hat der Exponent n Bits,
n-1
so beträgt dieser Wert 2 .
Beispiel: Basis g = 2, Exponent e mit 6 Bits in ExcessDarstellung, normalisierte Mantisse m (1 ≤ m < 2) mit 6
Bits,Verwendung des hidden bit.
Werden normalisierte Mantissen vorausgesetzt, dann
ist das erste Bit immer gleich 0 bzw. 1 und braucht
nicht abgespeichert zu werden (sogenanntes “hidden
bit“).
0
2
7,7510 = 111,1102 = (-1) *1,1111002 * 2
Zu speichernder Exponent E = 2 + 2
Beispiel: Basis g = 2, Exponent e mit 6 Bits, normalisierte Mantisse m (1 ≤ m < 2) mit 6 Bits, hidden bit.
0
0 0 0 0 1 0
Exponent
Praktische Informatik II
© Prof. Dr. W. Effelsberg
2
Beispiel
-1
a = 0,510 = 1,02 * 2 = 0 011111 000000
2
b = 410 = 1,02 * 2 = 0 100010 000000
Ohne Excess-Darstellung wäre der Exponent von a
1111112 und von b 0000102 (Zweierkomplement).
1 1 1 1 0 0
Mantisse
2. Zahlendarstellung und Codierung
= 1000102
Vorteil dieser Darstellung: Falls für zwei Gleitkommazahlen a ≤ b gilt, so gilt das Gleiche für die (gewöhnliche) Dualdarstellung von a und b.
7,7510 = 111,1102 = (-1) *1,1111002 * 2
0
VZ
6-1
2-21
Praktische Informatik II
© Prof. Dr. W. Effelsberg
2. Zahlendarstellung und Codierung
2-22
Das IEEE-Gleitkommaformat (IEEE 754)
Genauigkeit
single precision
Vorzeichen (bits)
2.1.4 Zeichen (characters)
double precision
1 (0 = positiv, 1 = negativ)
Exponent (bits)
8
11
Fraction (= Mantisse
ohne hidden bit) (bits)
23 (hidden bit)
52 (hidden bit)
Gesamtbreite (bits)
32
64
Excess
127
1023
Exponent
-126 ... +127
-1022 ... +1023
Darstellung in fester Länge
Die Zuordnung von Bitmustern zu den darzustellenden
Zeichen nennt man einen Zeichencode. Zur Darstellung von Zeichen des Alphabets (Textzeichen, Sonderzeichen) gibt es internationale Standards. Diese
verwendet eine feste Anzahl von Bits für jedes Zeichen.
ASCII
Spezielle Werte (für einfache Genauigkeit, single):
Exponent e
Fraction f
Bedeutung
-127 (0...02)
0...02
±0
-127 (0...02)
≠ 0...02
0,... * 2
(denormale
Zahlen)
-126 ≤ e ≤ 127
f
1,f * 2
-128 (1...12)
0...02
±∞
-128 (1...12)
≠ 0...02
NaN (not a
number)
Praktische Informatik II
© Prof. Dr. W. Effelsberg
EBCDIC
-128
American Standard Code for Information
Interchange. Ursprünglich ein 7-BitCode, inzwischen als 8-Bit-Code
gebräuchlich, damit auch internationale
Zeichen (z. B. deutsche Umlaute)
aufgenommen werden können (IA5 =
International Alphabet Number 5).
Extended Binary Coded Decimal Interchange Code. Ein 8-Bit-Code, der auf
Großrechnern sehr weit verbreitet ist, vor
allem bei IBM
e
2. Zahlendarstellung und Codierung
2-23
Praktische Informatik II
© Prof. Dr. W. Effelsberg
2. Zahlendarstellung und Codierung
2-24
Darstellung von Zeichen (1)
ASCII-Codetabelle (7-Bit-Code)
Beide Codes enthalten
• druckbare Zeichen
– Ziffern
– Kleinbuchstaben
– Großbuchstaben
– Sonderzeichen (!, ?, $, ...)
• nicht druckbare Zeichen (Steuerzeichen)
– Wagenrücklauf, Zeilenvorschub, Tabulator,
Klingeln, etc.
• Gerätesteuerzeichen und Übertragungssteuerzeichen.
Praktische Informatik II
© Prof. Dr. W. Effelsberg
2. Zahlendarstellung und Codierung
Erste 3 Bits
x
0
1
0
nul
dle
1
s oh
dc1
2
s fx
3
2
3
4
5
6
7
0
@
P
`
p
!
1
A
Q
`
q
dc2
"
2
B
R
b
r
e tx
dc3
#
3
C
S
c
s
4
e ot
dc4
$
4
D
T
d
t
5
e nq
na k
%
5
E
U
e
u
6
a ck
s yn
&
6
F
V
f
v
7
be l
e tb
'
7
G
W
g
w
8
bs
can
(
8
H
X
h
x
9
ht
em
)
9
I
Y
i
y
A
lf
s ub
*
:
J
Z
j
z
B
vt
esc
+
;
K
[
k
{
C
ff
fs
,
<
L
\
l
|
D
cr
qs
-
=
M
]
m
}
E
so
rs
.
>
N
^
n
¬
F
si
us
/
?
O
_
o
de l
y
2-25
Praktische Informatik II
© Prof. Dr. W. Effelsberg
2. Zahlendarstellung und Codierung
2-26
ASCII: Bedeutung der Steuerzeichen
EBCDIC-Codetabelle
Abk.
Funktion
Funktion (Bede utung de s Ze iche ns )
NUL
S OH
S TX
ETX
EOT
ENQ
ACK
BEL
BS
HT
LF
VT
FF
CR
SO
SI
DLE
DC1-3
DC4
NAK
S YN
ETB
CAN
EM
SS
ES C
FS
GS
RS
US
SP
DEL
Null
S ta rt of he ading
S ta rt of te xt
End of te xt
End of tra ns mis s ion
Enquiry
Acknowledge me nt
Audible s ignal
Backs pa ce
Horizontal ta bulation
Line fe ed
Vertica l ta bula tion
Form fee d
Ca rrie r re turn
S hift out
S hift in
Da ta link e s ca pe
De vice control
De vice s top
Ne ga tive acknowle dgement
S ynchronous idle
End of tra ns mis s ion block
Ca nce l
End of medium
S ta rt of s pe cial s e quence
Es cape
File s epara tor
Group s e pa rator
Re cord s epara tor
Unit s e pa ra tor
S pa ce
De lete /Idle
Nichtige s (ungültige s ) Zeichen
Beginn de s Kopfe s (Tite ls )
Te xta nfa ng
Te xte nde
Ende de r Übe rtra gung
Anfra ge
Empfa ngs be s tä tigung
Akus tis che s S igna l
Rücks e tze n
Horizontale Eins tellung (Ta bula tor)
Ze ile nvors chub
Vertika le Eins te llung (Tabula tor)
Formularvors chub
S chre ibkopfrückla uf
Ums chaltung a us (Kle ins chre ibung)
Ums chaltung e in (Großs chreibung)
Ums chaltung von Te xt a uf S te ue rzeiche n
Einheite ns teuerung
Einheite nhalt
Ne ga tive Empfangs bes tätigung
S ynchronis ie rzeichen (Le e rlauf)
Ende eine s Übertra gungs blocke s
Aufhe bung
Ende für e in Me dium (Gerä t)
Beginn einer s pezie lle n Folge
Aus wa hl, Tre nnung, Ums cha ltung
Da te itre nnzeichen
Gruppe ntrennze iche n
S atztrennze iche n
Tre nnzeichen für e ine Informa tions einhe it
Zwis chenra um
Lös che n/ Le e rlauf
Praktische Informatik II
© Prof. Dr. W. Effelsberg
2. Zahlendarstellung und Codierung
2-27
Praktische Informatik II
© Prof. Dr. W. Effelsberg
2. Zahlendarstellung und Codierung
2-28
Beispiel für einen Code mit variabler Bitlänge
(1)
Zeichencodes mit variabler Bitlänge
Zeichencodes mit einer festen Anzahl von Bits haben
den gravierenden Nachteil, dass sie nicht optimal sind,
wenn die Häufigkeit der Zeichen in einem Text nicht
gleich verteilt ist. Man kann sich dann Codes überlegen, bei denen Zeichen je nach ihrer Häufigkeit mit
einer unterschiedlichen Anzahl von Bits dargestellt
werden. Die Codetabelle wird gemäß den Zeichenhäufigkeiten anwendungsabhängig gewählt
Vorteil
Im Mittel weniger Bits zur Darstellung der Anwendungsdaten. Verringert den Speicherbedarf und beschleunigt
den Datentransfer.
Nachteil
Zusatzaufwand zum Kodieren/Dekodieren zwischen
gebräuchlichen Darstellungen und dem Code mit
variabler Bitlänge. Parsing (Zerlegung der Zeichenkette
in die einzelnen Zeichen) wird komplizierter.
Praktische Informatik II
© Prof. Dr. W. Effelsberg
2. Zahlendarstellung und Codierung
2-29
Zeichen
Häufigkeit (%)
Code
Anzahl
der Bits
0
1
2
8
3
A
5
6
4
9
7
F
B
[leer]
D
E
Z
P
N
u
C
55.5
6.7
4.5
3.5
3.3
3.2
3.0
2.7
2.7
2.2
1.9
1.5
1.2
1.1
1.0
0.9
0.7
0.6
0.5
0.4
0.4
0
1000
1100
10010
10100
10101
10110
11100
11101
11110
100110
101110
111110
110110
110100
110101
1011110
1111110
1101110
10011110
10011100
1
4
4
5
5
5
5
5
5
5
6
6
6
6
6
6
7
7
7
8
8
Praktische Informatik II
© Prof. Dr. W. Effelsberg
2. Zahlendarstellung und Codierung
2-30
Beispiel für einen Code mit variabler Bitlänge
(2)
H
R
M
L
S
I
T
K
Y
X
G
J
O
Q
V
W
.
?
&
/
+
<
)
(
%
0.4
0.3
0.3
0.3
0.25
0.20
0.15
0.15
0.13
0.12
0.10
0.10
0.06
0.03
0.03
0.03
0.01
unter
0.001
Praktische Informatik II
© Prof. Dr. W. Effelsberg
10011101
10111110
11111110
11111111
11011110
100111110
110111110
110111111
1001111110
1001111111
1011111100
1011111101
10111111100
10111111101
10111111110
101111111110
1011111111110000
1011111111110001
1011111111110010
1011111111110011
1011111111110100
1011111111110101
1011111111110110
1011111111110111
1011111111111000
1011111111111001
8
8
8
8
8
9
9
9
10
10
10
10
11
11
11
12
16
16
16
16
16
16
16
16
16
16
2. Zahlendarstellung und Codierung
Beispiel für einen Code mit variabler Bitlänge
(3)
=
#
?
,
@
1011111111111010
1011111111111011
1011111111111100
1011111111111101
1011111111111110
1011111111111111
16
16
16
16
16
16
Mittlere Zeichenlänge im Code
0.555 * 1 + 0.112 * 4
+ 0.206 * 5 + 0.76 * 6
+ 0.018 * 7 + 0.24 * 8
+ 0.005 * 9 + 0.0045 * 10
+ 0.0017 * 11 + 0.0003 * 12
+ 0.0001 x 16
= 2.91 Bits pro Zeichen
Wesentlich weniger als die üblichen 8 Bits pro Zeichen!
2-31
Praktische Informatik II
© Prof. Dr. W. Effelsberg
2. Zahlendarstellung und Codierung
2-32
Der Huffman-Code
Huffman-Code: Beispiel
David Huffman hat einen Algorithmus zur Konstruktion
von optimalen Codes mit variabler Bitlänge angegeben. Mit diesem Algorithmus konstruierte Codes
bezeichnet man als Huffman-Codes.
Wahrscheinlichkeiten der Zeichen:
p(A) = 0.3; p(B) = 0.3; p(C) = 0.1; p(D) = 0.15; p(E) =
0.15
1. Bestimme die Auftrittshäufigkeiten der Zeichen und
schreibe sie an die Blattknoten eines aufzubauenden Binärbaums an.
2. Nimm die bisher unerledigten zwei Knoten mit den
geringsten Häufigkeiten und berechne deren
Summe.
3. Erzeuge einen Elternknoten für diese beiden und
beschrifte ihn mit der Summe. Markiere die Verzweigung zum linken Sohn mit 0, die zum rechten
Sohn mit 1.
4. Markiere die beiden bearbeiteten Knoten als erledigt. Wenn es nur noch einen nicht erledigten
Knoten gibt, sind wir fertig. Sonst weiter mit Schritt
2.
Praktische Informatik II
© Prof. Dr. W. Effelsberg
2. Zahlendarstellung und Codierung
Wahrscheinlichkeit
Kodierbaum
Algorithmus Erzeuge-Huffman-Code
2-33
1
1
Zeichen
Code
30%
A
11
30%
B
10
10%
C
011
15%
D
010
15%
E
00
60
0
100
1
1
25
40
0
0
0
Praktische Informatik II
© Prof. Dr. W. Effelsberg
2. Zahlendarstellung und Codierung
2-34
Huffman-Code: Optimalität
Beweisidee
Die Zeichen mit großen Häufigkeiten sind näher an der
Wurzel des Baumes und haben somit eine kürzere
Codewortlänge; deshalb ist es ein guter Code. Es ist
sogar der bestmögliche Code!
Mit Hilfe des gleichen Prozesses kann ein beliebiger
anderer Binärbaum konstruiert werden, doch ohne bei
jedem Schritt unbedingt die zwei Knoten mit dem kleinsten Gewicht auszuwählen. Mittels Induktion lässt sich
beweisen, dass keine Strategie zu einem besseren Ergebnis führen kann als die, bei der jeweils zuerst die
beiden kleinsten Gewichte ausgewählt werden.
Denn:
Die Länge einer kodierten Zeichenfolge ist gleich der
gewichteten äußeren Pfadlänge des Huffman-Baumes.
Die “gewichtete äußere Pfadlänge” eines Baumes ist
gleich der über alle äußeren Knoten gebildeten Summe
der Produkte des “Gewichts” (zugehöriger Häufigkeitszähler) mit der Entfernung von der Wurzel. Dies ist
offensichtlich eine Möglichkeit, die Länge der kodierten
Zeichenfolge zu berechnen; sie ist äquivalent zu der
über alle Buchstaben gebildeten Summe der Produkte
der Häufigkeit des Auftretens eines Buchstaben mit der
Anzahl der Bits bei jedem Auftreten.
Kein Baum mit den gleichen Häufigkeiten bei den
äußeren Knoten hat eine kleinere gewichtete äußere
Pfadlänge als der Huffman-Baum.
Praktische Informatik II
© Prof. Dr. W. Effelsberg
2. Zahlendarstellung und Codierung
2-35
Praktische Informatik II
© Prof. Dr. W. Effelsberg
2. Zahlendarstellung und Codierung
2-36
Dekodieren von Huffman-Codes (1)
Decodieren von Huffman-Codes (2)
Nahe liegend ist eine Dekodierung unter Verwendung
des Tries (eines speziellen Binärbaumes):
Als Alternative bietet sich die Verwendung einer Dekodiertabelle an.
1. Lies den Eingabestrom sequenziell und traversiere
den Trie, bis ein Blattknoten erreicht ist.
2. Gib bei Erreichen des Blattknotens das erkannte
Zeichen aus.
Erzeugung der Tabelle
Beobachtung
Die Eingabe-Bitrate ist konstant, aber die AusgabeZeichenrate ist variabel!
Hat das längste Codewort L Bits, so hat die Tabelle
2L Einträge.
Sei ci das Codewort für Zeichen si. ci habe li Bits. Wir
erzeugen 2L-li Einträge in der Tabelle, bei denen jeweils
die ersten li Bits = ci sind und die verbleibenden L-li Bits
alle möglichen Kombinationen annehmen.
An all diesen Adressen wird si als erkanntes Zeichen
eingetragen, zugleich wird li als Codewortlänge vermerkt.
Praktische Informatik II
© Prof. Dr. W. Effelsberg
2. Zahlendarstellung und Codierung
2-37
Praktische Informatik II
© Prof. Dr. W. Effelsberg
2. Zahlendarstellung und Codierung
2-38
Decodieren von Huffman-Codes (3)
Huffman-Code: Kommentare
Einsatz der Tabelle zur Dekodierung
1. Lies L Bits aus dem Eingabestrom in einen Puffer.
2. Benutze den Puffer als Adresse in der Tabelle und
gib das erkannte Zeichen si aus.
3. Entferne die ersten li Bits aus dem Puffer und ziehe
weitere li Bits aus dem Eingabestrom nach.
4. Weiter mit Schritt 2.
Beobachtung
Das Tabellenverfahren ist schnell.
•
•
•
•
Ein sehr guter Code für viele praktische Zwecke.
Allerdings nur geeignet, wenn die Häufigkeiten der
Zeichen a priori bekannt und immer gleich (oder
ähnlich) sind.
Variante: Ermittle die Häufigkeiten für jeden gegebenen Text neu und speichere/übertrage den Code
mit den Daten.
Ein (durchaus berechenbarer) Verlust entsteht dadurch, dass jedes Zeichen mit einer ganzen Zahl
von Bits kodiert werden muss und somit die Codelänge den Häufigkeiten nicht ganz (theoretisch optimal) angepasst werden kann. Verbesserung: arithmetische Kodierung (auf die wir hier nicht näher
eingehen).
Die Ausgabe-Zeichenrate ist konstant, aber die Eingabe-Bitrate ist variabel!
Praktische Informatik II
© Prof. Dr. W. Effelsberg
2. Zahlendarstellung und Codierung
2-39
Praktische Informatik II
© Prof. Dr. W. Effelsberg
2. Zahlendarstellung und Codierung
2-40
Fehlererkennung (1)
2.2 Fehlererkennende Codes
Definition “Fehler“: Die empfangene Information entspricht nicht der gesendeten.
Ein fehlererkennender Code ermöglicht dem Empfänger einer Nachricht festzustellen, dass es einen Übertragungsfehler gegeben hat.
Beispiel für Fehlererkennung: das Paritätsbit. Zu vier
Datenbits wird ein Paritätsbit hinzu gefügt. Bei gerader
Parität ist die Gesamtzahl der 1-Bits gerade, bei unge.
rader
Parität ungerade
Beispiel: Gerade Parität
Ein fehlererkorrigierender Code ermöglicht dem
Empfänger einer Nachricht festzustellen, wo in der
Nachricht es einen Übertragungsfehler gegeben hat;
der Empfänger kann den Fehler ohne erneute Übertragung reparieren.
Fehlererkennung und Fehlerkorrektur erfordern
Redundanz.
Wieviel Redundanz man braucht und wie man die redundanten Bits am besten generiert, ist Gegenstand der
Codierungstheorie.
Man vermutet schon: Fehlerkorrektur benötigt mehr
Redundanz als Fehlererkennung.
Praktische Informatik II
© Prof. Dr. W. Effelsberg
2. Zahlendarstellung und Codierung
2-41
Praktische Informatik II
© Prof. Dr. W. Effelsberg
2. Zahlendarstellung und Codierung
2-42
Fehlererkennung (2)
Fehlererkennung: Code-Beispiel
Der Sender berechnet das Paritätsbit und fügt es an die
Nachricht an. Der Empfänger berechnet das Paritätsbit
neu und vergleicht es mit dem übertragenen Paritätsbit.
Bei Abweichung erkennt er einen Fehler.
Wir betrachten einen Code, der oft in der Telekommunikation zur Übertragung von BCD-Zahlen (binary
coded decimals) verwendet wird: den 2-aus-5-Code
(auch 7-4-2-1-Code genannt).
Beispiel
2 aus 5 ⇒ nur zwei Einsen in 5 Bits
Ü bertragung der Zahl 7:
K anal:
E m pfang:
Test bei E m pfänger:
FE H LE R -E R K E N N U N G
E
01111
01011
01011
01011
Die Fehlererkennung erfolgt durch Geradzahligkeitsprüfung.
FE H LE R !
Æ #1 gerade ⇒ E = 0
E s m u ß ein en
F e hler ge ben !
E = P arity-B it oder P rüfbit!
Frage: Welche Arten von Übertragungsfehlern kann
man mit einem Paritätsbit erkennen? Wie mächtig ist
der Code?
Praktische Informatik II
© Prof. Dr. W. Effelsberg
2. Zahlendarstellung und Codierung
2-43
Praktische Informatik II
© Prof. Dr. W. Effelsberg
2. Zahlendarstellung und Codierung
2-44
Prinzip eines fehlerkorrigierenden Codes
2.3 Fehlerkorrigierende Codes
Eine Korrektur ist nur möglich, wenn man genau weiß,
wo der Fehler liegt. Das erfordert mehr Redundanz,
also mehr Bits pro Zeichen als die reine Fehlererkennung.
Ein fehlerkorrigierender Code ist stets auch ein fehlererkennender Code.
1. P o s:
a + c
a +
a c +
a 2a
2a
OK
b
b -
2. P o s:
a
FEHLER !
K o rre ktur: a, ... , a+ b, a -b
Praktische Informatik II
© Prof. Dr. W. Effelsberg
2. Zahlendarstellung und Codierung
2-45
Praktische Informatik II
© Prof. Dr. W. Effelsberg
2. Zahlendarstellung und Codierung
2-46
Hamming-Abstand (1)
Hamming-Abstand (2)
Hamming-Abstand d
Der Hamming-Abstand d zwischen zwei Codewörtern
c1, c2 ist die Anzahl der Bitpositionen, in denen sich die
beiden Codewörter unterscheiden.
Satz
Die Fähigkeit eines Codes, Fehler zu erkennen und
Fehler zu beheben, hängt von seinem HammingAbstand ab.
Erkenne e-Bit Fehler:
Ein Abstand von e + 1 wird benötigt
Beispiel
d(10001001,10110001) = 3
(Anzahl der Bits von c1 XOR c2 )
Behebe e-Bit Fehler:
Ein Abstand von 2e + 1 wird benötigt
Hamming-Abstand D eines vollständigen Codes C
D (C ) := min{d (c1 , c2 ), c1 , c2 ∈ C , c1 ≠ c2 }
Praktische Informatik II
© Prof. Dr. W. Effelsberg
2. Zahlendarstellung und Codierung
2-47
Praktische Informatik II
© Prof. Dr. W. Effelsberg
2. Zahlendarstellung und Codierung
2-48
Wieviel Redundanz braucht man?
Code-Beispiele
Fehlererkennender Code
Das Codewort bestehe aus m Zeichen-Bits.
Frage: Wieviele Prüfbits werden benötigt, um jeden 1Bit-Fehler beheben zu können?
n = m + r,
m Datenbits, r Redundanzbits
ƒ Es gibt 2m legale Zeichencodes.
Fehlerbehebender Code:
ƒ Pro Codewort muss es n illegale Codewörter im Ab-
stand von einem Bit geben.
ƒ 2n ist die Gesamtzahl der darstellbaren Codewörter.
(n+1)2m ≤ 2n = 2m+r
(n+1)
Code mit einem einzigen Paritätsbit (gerade oder ungerade)
=> Hamming-Abstand = 2
=> Erkennung eines 1-Bit-Fehlers ist möglich
(oder aller Fehler mit einer ungeraden Anzahl Bits)
Der Code besteht aus vier Codewörtern:
00000 00000, 00000 11111, 11111 00000, 11111 11111
=> Hamming-Abstand = 5
=> Korrektur von 2-Bit-Fehlern ist möglich
≤ 2r
(m + r + 1) ≤ 2r
Dies ergibt die untere Grenze für r.
Beispiel:
Beispiel 00000 00111 =>
2-Bit-Fehler
m=7
(8 + r) ≤ 2r
Praktische Informatik II
© Prof. Dr. W. Effelsberg
=>
00000 11111
nächstes Codewort
r≥4
2. Zahlendarstellung und Codierung
2-49
Praktische Informatik II
© Prof. Dr. W. Effelsberg
2. Zahlendarstellung und Codierung
2-50
Hamming-Code (1)
Hamming-Code (2)
Der Hamming-Code ersetzt jedes Datenwort von 4 Bits
durch ein Codewort mit 7 Bits. Für ein gegebenes
Datenwort
m1 m2 m3 m4
bilden wir das Codewort
c1 c2 c3 c4 c5 c6 c7.
Die ersten vier Bits c1c2c3c4 sind dieselben wie im
Datenwort. Die weiteren Bits werden wie Paritätsbits
berechnet:
c5 = Parität von c1 c2 c3
(c1 ⊗ c2 ⊗ c3)
c6 = Parität von c1 c3 c4
(c1 ⊗ c3 ⊗ c4)
c7 = Parität von c2 c3 c4
(c2 ⊗ c3 ⊗ c4).
Praktische Informatik II
© Prof. Dr. W. Effelsberg
2. Zahlendarstellung und Codierung
2-51
Insgesamt gibt es 16 Codewörter:
0000000
0001011
0010111
0011100
0100101
0101110
0110010
0111001
1000110
1001101
1010001
1011010
1100011
1101000
1110100
1111111
Praktische Informatik II
© Prof. Dr. W. Effelsberg
2. Zahlendarstellung und Codierung
2-52
Hamming-Code (3)
Hamming-Code (3)
Decodierung
Ist das empfangene Wort ein gültiges Codewort, wird
es akzeptiert. Ist es ungültig, so wird es zum nächsten
Nachbarn hin korrigiert. Alle 1-Bit-Fehler können
eindeutig korrigiert werden.
Beispiel
1010110
wird zu
1000110
Veranschaulichung
korrigiert (Abstand 1).
Codewort: fülle die Bit-Positionen c5, c6, c7 so aus, dass
jeder Kreis eine gerade Anzahl Einsen hat.
Das Codewort für
m1 m2 m3 m4 =
1 0 1 1
wird dann :
c1 c2 c3 c4 c5 c6 c7 =
1 0 1 1 0 1 0
Praktische Informatik II
© Prof. Dr. W. Effelsberg
2. Zahlendarstellung und Codierung
2-53
Praktische Informatik II
© Prof. Dr. W. Effelsberg
2. Zahlendarstellung und Codierung
2-54
Nachteil von fehlerkorrigierenden Codes
Großer Overhead (viel Redundanz), der auch im Falle
einer fehlerfreien Übertragung anfällt.
Praktische Informatik II
© Prof. Dr. W. Effelsberg
2. Zahlendarstellung und Codierung
2-55
Herunterladen