GDI Kapitel 3 2007-04

Werbung
Kapitel 3 Codes
 Damit Information in einem Rechner verarbeitet werden kann, muss sie in
eine für den Rechner verarbeitbare Form transformiert werden. Dabei kann
man sich beliebig ungeschickt anstellen.
Dieses Unterkapitel beschreibt, wie eine solche Transformation funktionieren
kann, welche Möglichkeiten man dabei hat und gibt ein Maß für die Qualität
einer Transformation an.
 Inhalt
1.
2.
3.
4.
Definitionen
Codes zur Optimierung der Codelänge
Codes zur Fehlererkennung und Fehlerkorrektur
Beispiele
3.1
Definitionen
 … ein paar Definitionen ..
 Inhalt
1.
2.
3.
4.
5.
Definition
Willkürliche Codes
Fano-Bedingung
Mittlere Wortlänge
Redundanz
3.1.1 Definition: Code
 Definition:
Seien X,Y zwei Alphabete
 Eine Codierung ist eine Abbildung C:XnYm aller n-Tupel aus X nach m-Tupel aus
Y.
 oft ist n=1
 oft ist X,Y = {0,1}
 Die Worte aus Ym werden Code genannt.
 Die Umkehrrelation C-1 bezeichnet man als Dekodierung
 Definition:
Ein Code heißt vollständig, wenn alle Wörter aus Xn mit Hilfe des Codes
abgebildet werden können.
 Definition:
Für ein Wort Xin aus C:XinYim ist m die Länge l(Xin) von C(Xin)
(Zur Erinnerung: meist in n=1, d.h. die Codierung bildet ein jeweils ein Zeichen
xi auf mehre Zeichen xim ab)
 Definition:
Ein Code heißt Code gleicher Länge, wenn die Anzahl der Symbole auf die ein
Wort abgebildet wird, für alle Worte gleich ist
(also: l(Xn)=m konstant für alle XnYm).
Ansonsten heißt der Code: Code unterschiedlicher Länge
3.1.2 Definition: Eindeutigkeit
 Definition:
Ein Code heißt eindeutig, wenn C-1 injektiv ist, ansonsten heißt er mehrdeutig
 Codes sollten also (meist) so beschaffen sein, dass sie bei der Decodierung
eindeutig sind.
 Gegenbeispiel:
z
p
l
l*p
A
0,2
2,32
0,46 101
3
0,60
E
0,3
1,74
0,52 01
2
0,60
I
0,2
2,32
0,46 100
3
0,60
O
0,25
2,00
0,50 11
2
0,50
U
0,05
4,32
0,22 11100
5
0,25
R=L-H=0,38
h
h*p
H = 2,17
c
L = 2,55
 Problem Dekodierung:
 10111100100
=
101 11100 100
101 11 100 100
(aui)
(aoil)
3.1.3 Definition: Fano-Bedingung



Fano-Bedingung:
Kein Codewort darf Anfang eines anderen Codewortes sein
Beispiel:
z
c
z
c
A
101
A
00
E
01
E
10
I
100
I
010
O
11
O
11
U
11100
U
011
Die Fano-Bedingung ist hinreichend aber nicht notwendig
 hinreichend:
Wenn die Fano-Bedingung erfüllt ist, ist der Code eindeutig
 nicht notwendig: Auch eine Codierung, die die Fano-Bedingung nicht erfüllt kann eindeutig
sein.
Beispiel: a  1, b  10

Anmerkung: Eine Betrachtung der Fano-Bedingung macht „eigentlich“ nur Sinn bei Codes
unterschiedlicher Länge (warum ?)
3.1.4 Definition: Mittlere Wortlänge
 Codiert man die Zeichen eines Alphabetes binär (also mit Sequenzen eines 2Zeichen-Alphabetes, z.B. 0 und 1) , so versteht man unter der mittleren
Wortlänge L eines Codes die mit den Auftrittswahrscheinlichkeiten gewichtete
Summe der Längen l(xi) der den einzelnen Symbole entsprechenden
Codewörtern
L = S p(xi) * l(xi)
 Beispiel
x
y
z
Code
1
01
00
l
1
2
2
p
0,5
0.25
0,25
h
1
2
2
p*h
0,5
0,5
0,5
p*l
0,5
0,5
0,5
011100011
yxxzyx
H = 1,5 Bit
L = 1,5 Bit
3.1.5 Definition: Redundanz
 Die mittlere Wortlänge eines Binärcodes ist immer größer oder gleich dem
mittleren Informationsgehalt.
 Die Differenz zwischen mittlerer Wortlänge und mittlerem Informationsgehalt
wird als Redundanz R des Codes bezeichnet:
R=L-H
 Die Redundanz bezogen auf die Wortlänge nennt man relative Redundanz r:
r=R/L
 Redundanz ist also ein Maß für die Qualität einer Kodierung (insofern die
Länge eines Codes als Qualität angesehen wird)
3.1.6 Redundanz – Beispiel
 Beispiel
x
y
z
Code
1
01
00
l
1
2
2
p
0,5
0.25
0,25
h
1
2
2
p*h
0,5
0,5
0,5
p*l
0,5
0,5
0,5
p
0,7
0.2
0,1
h
0,515
2,322
3,322
p*h
0,360
0,464
0,332
011100011
H = 1,5 Bit
H = 1,156 Bit
yxxzyx
L = 1,5 Bit
L = 1,3 Bit
H = S pi * hi = - S pi * ld(pi)
= 0,360+0,464+0,332 = 1,156
L = S pi * li
= 0,7+0,4+0,2 = 1,3
R =L-H
= 1,3 - 1,156 = 0,144
r =R/L
= 0,144 / 1,3 = 0,111
p*l
0,7
0,4
0,2
3.1.7 Codierungsarten
 Die Entropiekodierung
 kodiert ungeachtet der zugrundliegenden Information und betrachtet die zu
komprimierten Daten als “reine” Bitsequenz (also nur die Syntax).
 es werden nur (informationstheoretische) Redundanzen eliminiert, es geht keine
Information verloren.
 unterschiedliche Kompressionsquoten bei unterschiedlichen zu komprimierenden
Daten.
 Die Quellenkodierung
 ist abhängig von den zu kodierenden Informationen (daher: Quellcodierung). und
verwendet dazu die Semantik der zu kodierenden Information.
 eliminiert für das “Ziel” (z.B. den Menschen) definierte Redundanzen und ist (meist)
verlustbehaftet.
 Spezifika der Informationen können dadurch gut genutzt werden und man erreicht
eine wesentlich bessere Kompressionsraten bei "akzeptabler" Qualität.
3.2
Huffman-Codierung
 Oft ist es wichtig, einen Code möglichst kurz zu gestalten
 aus Gründen der Speicherplatzoptimierung
 aus Gründen der Übertragungskapazitäts-Optimierung
 …
 Idee
 Häufige Symbole – kurze Codes, Seltene Symbole – lange Codes
 Kodierung
 Die Häufigkeit des Auftretens der Bitmuster (Bytes) wird bestimmt
 Die am häufigsten auftretenden Bytes werden mit kurzen Bitfolgen (Huffmann-Code)
kodiert
 Der Huffmann-Code wird zur Kodierung der Bitfolge verwendet
 Dekodierung
 Dekodierer besitzt identischen Huffmann-Code (oder bekommt die
Zuordnungstabelle explizit übertragen)
 Dekodierer setzt den Huffmann-Code in Bytefolge um
 Die Huffmann-Codierung generiert einen vollständigen, eindeutigen Code
unterschiedlicher Länge (der die Fano-Bedingung erfüllt)
3.2.1 Vorgehen
 Der Baum wird von oben nach unten mit den zwei Buchstaben (oder
Buchstabengruppen) mit den jeweils kleinsten Wahrscheinlichkeiten schrittweise
aufgebaut
sei
P(A) = 0,16
P(B) = 0,51
P(C) = 0,09
P(D) = 0,13
P(E) = 0,11
P(C)=0,09
P(E)=0,11
1
0
P(D)=0,13
1
P(CE)=0,2
1
0
P(AD)=0,29
1
P(B)=0,51
P(A)=0,16
0
P(CEAD)=0,49
0
P(BCEAD)=1,0
Kodierung
A = 000
B=1
C = 011
D = 001
E = 010
3.2.2 Verbesserung
 Codierung ist optimal, wenn sich die Wahrscheinlichkeiten der Zeichen
„geschickt“ ergeben
 „geschickt“ sind Wahrscheinlichkeiten mit negativen 2er-Potenzen.
 Durch Betrachtung (und Codierung) von Zeichenpaaren, -drillingen, ... , nTupeln können solche „geschickten“ Wahrscheinlichkeiten gefunden werden
 Die Redundanzen lassen sich sogar beliebig verkleinern, weil die
Einzelwahrscheinlichkeiten von n-Tupeln beliebig klein werden und dadurch immer
„geschickter“ kombiniert werden können.
 Beispiel:
z
p
z
p
z
p
A
0,80
AA
0,64
AAA
0,512
B
0,20
AB
0,16
AAB
0,032
BA
0,16
ABA
0,128
BB
0,04
...
...
BBB
0,008
Produkt der Einzelwahrscheinlichkeiten
(Annahme: Auftritt von A,B unabhängig)
...
3.2.3 Beispiel für Tupelbildung
 Beispiel
z
p
h
h*p
c
l
l*p
A
0,80
0,32
0,26
0
1
0,80
B
0,20
2,32
0,46
1
1
0,20
R = 0,26
H = 0,72
z
p
AA
0,64
0,64
AB
0,16
BA
BB
R = 0,12
h
L = 1,00
h*p
l
l*p
0,41 0
1
0,64
2,64
0,42 10
2
0,32
0,16
2,64
0,42 110
3
0,48
0,04
4,64
0,19 111
3
0,12
H = 1,44
c
L = 1,56
3.3
Hamming-Codierung
 Manchmal ist es wichtig, Fehler in einem Code zu erkennen und ggf. zu
korrigieren. (z.B. bei der Übertragung)
 Idee
 Gezielter Einsatz von Redundanz
 Nicht alle möglichen Codeworte sind daher gültig
 Kodierung
 Dem Code werden zusätzliche Bits hinzugefügt.
 Die Werte der zusätzlichen Bits stehen in Bezug zu den ursprünglichen Bits
 Beispiel aus der natürlichen Sprache
 “Ich studiere in Gießer” – Fehler kann erkannt und behoben werden
 “Ich liebe rich” – Fehler kann erkannt, aber nicht behoben werden
3.3.1 Beispiel ASCII
 Paritätsbit bei der 7-bit ASCII-Codierung
 wähle das 8te Bit so, dass immer eine gerade Anzahl von Bits gesetzt ist (gerade
Anzahl = „even parity“, ungerade Anzahl = „odd parity“)
Zeichen
@
A
B
C
Binär
100 0000
100 0001
100 0010
100 0011
mit even Parity
1100 0000 :=
1+1=2
0100 0001 :=
1+1+0=2
0100 0010 :=
1+1+0=2
1100 0011 := 1 + 1 + 1 + 1 = 4
 erhält man eine Nachricht mit ungerader Anzahl, so weiß man, dass
(mindestens) ein Bit verkehrt ist.
 man weiß allerdings nicht welches
 man weiß auch nicht, ob nicht mehr als ein Bit verkehrt ist
 man weiß bei richtigem parity-Bit auch nicht, ob nicht mehr als 1 Bit verkehrt ist
 Idee: den „Abstand“ gültiger Worte so groß wie nötig wählen
3.3.2 Hamming-Distanz
 Definition:
Der Hamming-Abstand (die Hamming-Distanz D) zwischen zwei Wörtern
ist die Anzahl der Stellen, an denen sich zwei Worte gleicher Länge
unterscheiden.
 Beispiel: Hamming-Abstand von 1100 0000 (A) und 0100 0001 (B) = 2
 Definition:
Der Hamming-Abstand (die Hamming-Distanz D) eines Codes ist der
minimale Hamming-Abstand zwischen zwei beliebigen Wörtern des Codes.
 Beispiel: Hamming-Abstand von ASCII (mit even parity) = 2
 Einige Konsequenzen:
 Codes mit Hamming-Distanz = 0 sind nicht eindeutig
 Bei Codes mit Hamming-Distanz = 1 kann das „Kippen“ eines Bits zu einem
anderen gültigen Codewort führen (muss nicht)
 Bei Codes mit Hamming-Distanz = 2 kann ein Ein-Bit Fehler erkannt werden.
3.3.3 Fehlererkennung
 Fehler, bei denen höchstens D-1 Bits gestört sind, können sicher erkannt
werden
 einige andere Fehler können, müssen aber nicht unbedingt erkannt werden können.
(genau dann, wenn die Hamming-Distanz zwischen zwei Wörtern eines Codes
größer als die Distanz des Codes ist)
 Fehler werden erkannt, wenn ein Codewort ungültig ist
gültiges Codewort
„nur“ erkennbares Codewort
A
korrigierbares Codewort
B
1-Bit-Fehler
2-Bit-Fehler
3.3.4 Fehlerkorrektur
 Fehler, bei denen höchsten (D-1)/2 Bits gestört sind, können sicher korrigiert
werden
 einige andere Fehler können, müssen aber nicht korrigiert werden können
(genau dann, wenn die Hamming-Distanz zwischen zwei Wörtern eines Codes
größer als die Distanz des Codes ist)
 Falsches Codewort wird dem „nächstmöglichen“ Codewort (d.h. dem mit der
minimalen Distanz) zugeordnet.
gültiges Codewort
korrigierbares Codewort
A
B
1-Bit-Fehler
2-Bit-Fehler
3.3.5 Hamming
 Idee
 Jedes Prüfbit stellt die gerade Parität einer gewissen Menge von Bits (einschließlich
sich selbst) sicher
 Jedes Datenbit kann in mehreren dieser Mengen einbezogen sein
... P D D D P D P P
8
1
 Die Hamming-Methode
 Es werden an der 1,2,4,8,... Stelle Prüfbits eingeführt
 Jedes Prüfbit hat damit in seiner dualen Stellennummer genau eine Stelle mit einer
1 (1,2,4,8,... = 1,10,100,1000,...)
 Alle Stellen im Wort, die an derselben Stelle eine 1 haben (und an den anderen 1
oder 0) werden aufsummiert
 1  001,011,101,111, ... also 1,3,5,7, ... Stellen
 10  010,011,110,111, ... also 2,3,6,7, ... Stellen
 100  100,101,110,111, ... also 4,5,6,7, ... Stellen
 Das entsprechende Parity-Bit wird als even-parity Bit gesetzt
 Die Hamming-Methode generiert einen eindeutigen, vollständigen Code
gleicher Länge
3.3.6 Beispiel Hamming
 zu kodieren: 1011
 Prüfbit 1 (001)
relevant 011,101,111
also Bit 3,5,7
Summe = 3  Bit setzen
 Prüfbit 2 (010)
relevant 011,110,111
also Bit 3,6,7
Summe = 2  Bit löschen
 Prüfbit 4 (100)
relevant 101,110,111
also Bit 5,6,7
Summe = 2  Bit löschen
1 0 1 P 1 P P
7
1
 kodiert: 1010101
1 0 1 0 1 0 1
1 0 1 P 1 P 1
1 0 1 P 1 0 1
3.3.7 Beispiel Hamming
 Fehlerhafter Code: 1000101
 Verfahren
 prüfe alle Parity-Bits
 k = Summe der fehlerhaften
Bitnummern
1 0 0 0 1 0 1
7
1
 k gibt die Nummer des gestörten Bits
an (nur bei 1-Bit Fehler zuverlässig)
 Hier:





Bit1 prüft 3,5,7: falsch
Bit2 prüft 3,6,7: ok
Bit4 prüft 5,6,7: falsch
k=1+4=5
 Bit5 muss getauscht werden
1 0 1 0 1 0 1
3.4
Beispiele
 Anhand zweier Beispiele soll gezeigt werden, wie:
 die Natur, Gott (oder das fliegende Spaghetti-Monster)
 der Mensch
Information codiert
 Inhalt
1. Genetische Codierung
2. Bildcodierung
3.4.1 Genetische Codierung
 Beim Menschen ist die Desoxyribonukleinsäure (DNS, engl. DNA) der Träger
der genetischen Information und Hauptbestandteil der Chromosomen.
 Die DNS ist ein kettenförmiges Polymer aus Nukleotiden, die sich in ihren
Stickstoffbasen unterscheiden (Thymin/Cytosin bzw. Adenin/Guanin,)
 das Alphabet des Codes ist also:
{Thymin, Cytosin, Adenin, Guanin,} oder auch { T, C, A, G }
 Je drei aufeinanderfolgende Basen bilden ein Wort
 Es gibt also pro Wort 43 = 64 Kombination
 die Wortlänge ist also ld(64) bit = 6 bit




Ein Gen enthält etwa 200 Worte
Ein Chromosom enthält ca. 104 bis 105 Gene
Die Anzahl der Chromosomen pro Zellkern ist beim Menschen 46
Die pro Zellkern gespeicherten Daten haben damit ein Volumen von
6 bit * 200 * 105 * 46 = 55200 bit * 105  5 * 109 bit *  109 Byte = 1 GByte
2.2.3 Bildcodierung
Datenkompression bei der Bildcodierung (z.B. JPEG, MPEG, …) durchläuft
typischerweise vier Schritte:
1. Datenaufbereitung
 erzeugt eine geeignete digitale Darstellung der Information
 Bsp.: Zerlegung eines Bildes in Pixelblöcke
2. Datenverarbeitung
 erster Schritt der Kompression, z.B. Transformation aus dem Zeitbereich in den
Frequenzbereich (z.B. durch Discrete Cosinus Transformation – DCT)
3. Quantisierung
 Gewichtung der Amplituden und Zuordnung zu Quantisierungsstufen (nicht
notwendigerweise linear)
4. Entropiekodierung
 verlustfreie Kompression (z.B. durch Huffmann-Codierung)
(2 x  1)u
(2 y  1)v
s
cucv  syx cos
cos
16
16
x 0 y 0
7
7
(2 x  1)u
(2 y  1)v
1
sxy  4  cucvsvu cos
cos
16
16
x 0 y 0
7
1
vu 
4
7
1
für u, v  0
2
bzw. sonst cu , cv  1
cu, cv 
3.6
Zusammenfassung des Kapitels
 Definitionen






Codierung, Code, Vollständigkeit, Länge
Eindeutigkeit
Fano-Bedingung
mittlere Wortlänge
Redundanz
Codierungsarten
 Huffmann-Codierung
 Vorgehen
 Verbesserungen
 Hamming-Codierung





Beispiel ASCII
Hamming-Distanz
Fehlererkennung / -korrektur
Hamming-Codierverfahren
Beispiele
 Beispiele
 Genetische Codierung
 Bildcodierung
L = S p(xi) * l(xi)
R=L-H
Herunterladen