Kapitel 3Codes Damit Information in einem Rechner verarbeitet werden kann, muss sie in eine für den...

25
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. Definitionen 2. Codes zur Optimierung der Codelänge 3. Codes zur Fehlererkennung und Fehlerkorrektur 4. Beispiele

Transcript of Kapitel 3Codes Damit Information in einem Rechner verarbeitet werden kann, muss sie in eine für den...

Page 1: Kapitel 3Codes Damit Information in einem Rechner verarbeitet werden kann, muss sie in eine für den Rechner verarbeitbare Form transformiert werden. Dabei.

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.

Inhalt1. Definitionen

2. Codes zur Optimierung der Codelänge

3. Codes zur Fehlererkennung und Fehlerkorrektur

4. Beispiele

Page 2: Kapitel 3Codes Damit Information in einem Rechner verarbeitet werden kann, muss sie in eine für den Rechner verarbeitbare Form transformiert werden. Dabei.

3.1 Definitionen

… ein paar Definitionen .. Inhalt

1. Definition

2. Willkürliche Codes

3. Fano-Bedingung

4. Mittlere Wortlänge

5. Redundanz

Page 3: Kapitel 3Codes Damit Information in einem Rechner verarbeitet werden kann, muss sie in eine für den Rechner verarbeitbare Form transformiert werden. Dabei.

3.1.1 Definition: Code

Definition:Seien X,Y zwei Alphabete

Eine Codierung ist eine Abbildung C:XnYm 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 Xi

n aus C:XinYi

m ist m die Länge l(Xin) von C(Xi

n)(Zur Erinnerung: meist in n=1, d.h. die Codierung bildet ein jeweils ein Zeichen xi auf mehre Zeichen xi

m 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 XnYm).Ansonsten heißt der Code: Code unterschiedlicher Länge

Page 4: Kapitel 3Codes Damit Information in einem Rechner verarbeitet werden kann, muss sie in eine für den Rechner verarbeitbare Form transformiert werden. Dabei.

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:

Problem Dekodierung: 10111100100 = 101 11100 100 (aui)

101 11 100 100 (aoil)

z p h h * p c 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 = 2,17 L = 2,55

Page 5: Kapitel 3Codes Damit Information in einem Rechner verarbeitet werden kann, muss sie in eine für den Rechner verarbeitbare Form transformiert werden. Dabei.

3.1.3 Definition: Fano-Bedingung

Fano-Bedingung:Kein Codewort darf Anfang eines anderen Codewortes sein

Beispiel:

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 ?)

z c

A 101

E 01

I 100

O 11

U 11100

z c

A 00

E 10

I 010

O 11

U 011

Page 6: Kapitel 3Codes Damit Information in einem Rechner verarbeitet werden kann, muss sie in eine für den Rechner verarbeitbare Form transformiert werden. Dabei.

3.1.4 Definition: Mittlere Wortlänge

Codiert man die Zeichen eines Alphabetes binär (also mit Sequenzen eines 2-Zeichen-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 = p(xi) * l(xi) Beispiel

011100011yxxzyx

Code l p h p*h p*lx 1 1 0,5 1 0,5 0,5y 01 2 0.25 2 0,5 0,5z 00 2 0,25 2 0,5 0,5

H = 1,5 BitL = 1,5 Bit

Page 7: Kapitel 3Codes Damit Information in einem Rechner verarbeitet werden kann, muss sie in eine für den Rechner verarbeitbare Form transformiert werden. Dabei.

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)

Page 8: Kapitel 3Codes Damit Information in einem Rechner verarbeitet werden kann, muss sie in eine für den Rechner verarbeitbare Form transformiert werden. Dabei.

3.1.6 Redundanz – Beispiel

Beispiel

011100011

yxxzyx

Code l p h p*h p*l p h p*h p*lx 1 1 0,5 1 0,5 0,5 0,7 0,515 0,360 0,7y 01 2 0.25 2 0,5 0,5 0.2 2,322 0,464 0,4z 00 2 0,25 2 0,5 0,5 0,1 3,322 0,332 0,2

H = 1,5 Bit

L = 1,5 Bit

H = 1,156 Bit

L = 1,3 Bit

H = pi * hi = - pi * ld(pi) = 0,360+0,464+0,332 = 1,156

L = 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

Page 9: Kapitel 3Codes Damit Information in einem Rechner verarbeitet werden kann, muss sie in eine für den Rechner verarbeitbare Form transformiert werden. Dabei.

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.

Page 10: Kapitel 3Codes Damit Information in einem Rechner verarbeitet werden kann, muss sie in eine für den Rechner verarbeitbare Form transformiert werden. Dabei.

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)

Page 11: Kapitel 3Codes Damit Information in einem Rechner verarbeitet werden kann, muss sie in eine für den Rechner verarbeitbare Form transformiert werden. Dabei.

3.2.1 Vorgehen

Der Baum wird von oben nach unten mit den zwei Buchstaben (oder Buchstabengruppen) mit den jeweils kleinsten Wahrscheinlichkeiten schrittweise aufgebaut

seiP(A) = 0,16P(B) = 0,51P(C) = 0,09P(D) = 0,13P(E) = 0,11

P(B)=0,51

P(BCEAD)=1,0

1 0

P(CEAD)=0,49

1 0

P(D)=0,13 P(A)=0,16

P(AD)=0,29

1 0

P(C)=0,09 P(E)=0,11

P(CE)=0,2

1 0KodierungA = 000B = 1C = 011D = 001E = 010

Page 12: Kapitel 3Codes Damit Information in einem Rechner verarbeitet werden kann, muss sie in eine für den Rechner verarbeitbare Form transformiert werden. Dabei.

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, ... , n-Tupeln 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

A 0,80

B 0,20

z p

AA 0,64

AB 0,16

BA 0,16

BB 0,04

Produkt der Einzelwahrscheinlichkeiten(Annahme: Auftritt von A,B unabhängig)

z p

AAA 0,512

AAB 0,032

ABA 0,128

... ...

BBB 0,008

...

Page 13: Kapitel 3Codes Damit Information in einem Rechner verarbeitet werden kann, muss sie in eine für den Rechner verarbeitbare Form transformiert werden. Dabei.

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 L = 1,00

z p h h * p c l l * p

AA 0,64 0,64 0,41 0 1 0,64

AB 0,16 2,64 0,42 10 2 0,32

BA 0,16 2,64 0,42 110 3 0,48

BB 0,04 4,64 0,19 111 3 0,12

R = 0,12 H = 1,44 L = 1,56

Page 14: Kapitel 3Codes Damit Information in einem Rechner verarbeitet werden kann, muss sie in eine für den Rechner verarbeitbare Form transformiert werden. Dabei.

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

Page 15: Kapitel 3Codes Damit Information in einem Rechner verarbeitet werden kann, muss sie in eine für den Rechner verarbeitbare Form transformiert werden. Dabei.

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“)

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

Zeichen Binär mit even Parity@ 100 0000 1100 0000 := 1 + 1 = 2A 100 0001 0100 0001 := 1 + 1 + 0 = 2B 100 0010 0100 0010 := 1 + 1 + 0 = 2C 100 0011 1100 0011 := 1 + 1 + 1 + 1 = 4

Page 16: Kapitel 3Codes Damit Information in einem Rechner verarbeitet werden kann, muss sie in eine für den Rechner verarbeitbare Form transformiert werden. Dabei.

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.

Page 17: Kapitel 3Codes Damit Information in einem Rechner verarbeitet werden kann, muss sie in eine für den Rechner verarbeitbare Form transformiert werden. Dabei.

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

1-Bit-Fehler

2-Bit-Fehler

gültiges Codewort

„nur“ erkennbares Codewort

korrigierbares CodewortA B

Page 18: Kapitel 3Codes Damit Information in einem Rechner verarbeitet werden kann, muss sie in eine für den Rechner verarbeitbare Form transformiert werden. Dabei.

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

1-Bit-Fehler

2-Bit-Fehler

korrigierbares Codewort

A B

Page 19: Kapitel 3Codes Damit Information in einem Rechner verarbeitet werden kann, muss sie in eine für den Rechner verarbeitbare Form transformiert werden. Dabei.

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

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

P D D D P D P P...18

Page 20: Kapitel 3Codes Damit Information in einem Rechner verarbeitet werden kann, muss sie in eine für den Rechner verarbeitbare Form transformiert werden. Dabei.

3.3.6 Beispiel Hamming

zu kodieren: 1011 Prüfbit 1 (001)

relevant 011,101,111also Bit 3,5,7Summe = 3 Bit setzen

Prüfbit 2 (010)relevant 011,110,111also Bit 3,6,7Summe = 2 Bit löschen

Prüfbit 4 (100)relevant 101,110,111also Bit 5,6,7Summe = 2 Bit löschen

kodiert: 1010101

1 0 1 P 1 P 1

1 0 1 P 1 P P17

1 0 1 P 1 0 1

1 0 1 0 1 0 1

Page 21: Kapitel 3Codes Damit Information in einem Rechner verarbeitet werden kann, muss sie in eine für den Rechner verarbeitbare Form transformiert werden. Dabei.

3.3.7 Beispiel Hamming

Fehlerhafter Code: 1000101 Verfahren

prüfe alle Parity-Bits k = Summe der fehlerhaften

Bitnummern

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

01 0 0 1 0 117

1 0 1 0 1 0 1

Page 22: Kapitel 3Codes Damit Information in einem Rechner verarbeitet werden kann, muss sie in eine für den Rechner verarbeitbare Form transformiert werden. Dabei.

3.4 Beispiele

Anhand zweier Beispiele soll gezeigt werden, wie: die Natur, Gott (oder das fliegende Spaghetti-Monster) der Mensch

Information codiert

Inhalt1. Genetische Codierung

2. Bildcodierung

Page 23: Kapitel 3Codes Damit Information in einem Rechner verarbeitet werden kann, muss sie in eine für den Rechner verarbeitbare Form transformiert werden. Dabei.

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

Page 24: Kapitel 3Codes Damit Information in einem Rechner verarbeitet werden kann, muss sie in eine für den Rechner verarbeitbare Form transformiert werden. Dabei.

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)

16

)12(cos

16

)12(cos

7

0

7

04

1 vu

vyuxsccs

x y

yxvu

0 vu,für

2

1, vu cc

1,sonst bzw. vu cc

16

)12(cos

16

)12(cos

7

0

7

04

1 xy

vyuxsccs

x y

vuvu

Page 25: Kapitel 3Codes Damit Information in einem Rechner verarbeitet werden kann, muss sie in eine für den Rechner verarbeitbare Form transformiert werden. Dabei.

3.6 Zusammenfassung des Kapitels

Definitionen Codierung, Code, Vollständigkeit, Länge Eindeutigkeit Fano-Bedingung mittlere Wortlänge L = p(xi) * l(xi) Redundanz R = L - H Codierungsarten

Huffmann-Codierung Vorgehen Verbesserungen

Hamming-Codierung Beispiel ASCII Hamming-Distanz Fehlererkennung / -korrektur Hamming-Codierverfahren Beispiele

Beispiele Genetische Codierung Bildcodierung