11.10.2013 Aufrufe

Codierung

Codierung

Codierung

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

Datenverarbeitung I<br />

d=3<br />

Kanal Störung<br />

<strong>Codierung</strong><br />

Code<br />

c = [1101] c(x) = x 3 + x 2 + 1<br />

<strong>Codierung</strong><br />

Kanalcodierung<br />

1001111100100011100<br />

parity<br />

Vorlesung Datenverarbeitung 1 WS 2005/2006 Dr.-Ing. Stefan Freinatis<br />

Vorschrift für die eindeutige Zuordnung von Zeichen<br />

eines Zeichenvorrats (Alphabet I) zu den Zeichen<br />

eines anderen Zeichenvorrates (Alphabet II).<br />

Beispiel Morsecode: Alphabet I Alphabet II<br />

a<br />

b<br />

c<br />

... ...<br />

Vorlesung Datenverarbeitung 1 WS 2005/2006 Dr.-Ing. Stefan Freinatis


<strong>Codierung</strong><br />

Beispiel ASCII: Alphabet I<br />

...<br />

Alphabet II<br />

...<br />

97 a<br />

Alphabet I Alphabet II<br />

1<br />

2<br />

3<br />

...<br />

<strong>Codierung</strong><br />

001<br />

010<br />

011<br />

...<br />

98<br />

99<br />

...<br />

b<br />

c<br />

...<br />

Beispiel Binärcode<br />

8421-Code, 3 Bit<br />

Vorlesung Datenverarbeitung 1 WS 2005/2006 Dr.-Ing. Stefan Freinatis<br />

Aufgabe der <strong>Codierung</strong> ist die Darstellung von Daten<br />

in eine für den jeweiligen Zweck geeignete Form.<br />

Zwecke können sein:<br />

• Repräsentation von Daten<br />

ggf. mit möglichst geringer Anzahl von Zeichen (Komprimierung)<br />

• Verarbeitung von Daten<br />

z.B. Digitalrechner, Bildverarbeitung, ..., ggf. mit Fehlerkorrektur.<br />

• Verschlüsselung von Daten<br />

• Übertragen von Daten<br />

Anpassung an Übertragungsweg, ggf. mit Sicherung<br />

Vorlesung Datenverarbeitung 1 WS 2005/2006 Dr.-Ing. Stefan Freinatis


<strong>Codierung</strong><br />

<strong>Codierung</strong>sarten<br />

Unterscheidung nach Aufgabengebiet<br />

• Quellencodierung (source coding)<br />

Reduktion von Redundanz (Datenkompression), z.B. *.zip.<br />

Reduktion von Irrelevanz (Datenreduktion), z.B. MP3 (Musik, Sprache).<br />

• Kanalcodierung (channel coding)<br />

Gezieltes Einbringen von Redundanz zur Fehlersicherung (Fehlererkennung<br />

oder Fehlerkorrektur), z.B. Hamming-Code, CRC.<br />

• Leitungscodierung (line coding)<br />

Anpassung der Daten an die physikalischen Eigenschaften des<br />

Übertragungsweges (Kabel, Funk, Lichtwellen, Infrarot, ...).<br />

Beispiel: Leitungscodes (NRZ, ... ) oder Modulationsarten (QAM, ...).<br />

<strong>Codierung</strong><br />

Vorlesung Datenverarbeitung 1 WS 2005/2006 Dr.-Ing. Stefan Freinatis<br />

Datenübertragung (Nachrichtenübertragung)<br />

Quelle<br />

Senke<br />

Quellencodierung<br />

Sender<br />

Empfänger<br />

Quellendecodierung<br />

Kanalcodierung<br />

Kanaldecodierung<br />

Leitungscodierung<br />

Kanal<br />

Leitungsdecodierung<br />

Vorlesung Datenverarbeitung 1 WS 2005/2006 Dr.-Ing. Stefan Freinatis<br />

Störung


<strong>Codierung</strong><br />

Kanalcodierung<br />

Sicherung der Daten gegen Fehler (Störungen). Fehler sollen möglichst<br />

erkennbar sein, oder sogar korrigierbar.<br />

Grundprinzip jeder Fehlersicherung<br />

Hinzufügen von Redundanz zur ‚Nutzlast (payload)‘<br />

Aufgabe der Kanalcodierung<br />

Nutzlast<br />

Bildung einer Gesamtmenge von Codeworten. Aufteilung dieser<br />

Menge in zugelassene und nicht-zugelassene Codeworte.<br />

zugelassene<br />

Codeworte<br />

<strong>Codierung</strong><br />

Fehler<br />

nicht-zugelassene<br />

Codeworte<br />

Vorlesung Datenverarbeitung 1 WS 2005/2006 Dr.-Ing. Stefan Freinatis<br />

Unter Fehler verstehen wir ein oder mehrere verfälschte<br />

Bits in einem Codewort (oder Datenwort). Ursache sind<br />

Störungen irgendwelcher Art auf dem Weg vom Sender<br />

zum Empfänger.<br />

„Anzahl Fehler“ in einem Codewort = Anzahl verfälschter<br />

(umgekippter) Bits in dem Codewort.<br />

Gesendet: 1011<br />

Empfangen: 1101<br />

2 Fehler<br />

Vorlesung Datenverarbeitung 1 WS 2005/2006 Dr.-Ing. Stefan Freinatis<br />

Redundanz


<strong>Codierung</strong><br />

Sicherung durch Paritätsbit<br />

Jedem Datenwort wird ein zusätzliches Bit zugefügt (das<br />

Paritätsbit), so dass das neue Codewort vereinbarungsgemäß<br />

entweder<br />

• gerade Parität<br />

• oder ungerade Parität hat.<br />

Parität: „Ist die Anzahl Einsen in einem Codewort<br />

eine gerade Zahl oder eine ungerade?“<br />

Beispiele:<br />

<strong>Codierung</strong><br />

00: Parität ist gerade (even parity)<br />

01011: Parität ist ungerade (odd parity)<br />

Vorlesung Datenverarbeitung 1 WS 2005/2006 Dr.-Ing. Stefan Freinatis<br />

Sichern Sie die 4 Datenworte (Nutzlast) durch Anfügen eines<br />

Paritätsbits auf gerade Parität.<br />

Nutzlast:<br />

00<br />

01<br />

10<br />

11<br />

Neue Codeworte:<br />

000<br />

011<br />

101<br />

110<br />

Wie lautet die Menge der gültigen (zugelassenen) Codeworte, wie<br />

lautet die Menge der ungültigen (nicht-zugelassenen) Codeworte?<br />

Gültige Codeworte: {000, 011, 101, 110}<br />

Ungültige Codeworte: {001, 010, 100, 111}<br />

Paritätsbits<br />

Vorlesung Datenverarbeitung 1 WS 2005/2006 Dr.-Ing. Stefan Freinatis


Grundbegriffe <strong>Codierung</strong><br />

Codewort<br />

Binärwort zur gesicherten Übertragung. Besteht aus Informationsbits<br />

(Nutzlast) und zugefügter Redundanz (Prüfbits).<br />

c Ein beliebiges Codewort, [c n-1 , ... , c o ]<br />

n Anzahl Bits des Codewortes (Codewortlänge)<br />

k Anzahl Informationsbits<br />

n-k Anzahl Prüfbits<br />

Codewort enthält Informationswort u und Prüfwort p.<br />

Informationswort und Prüfwort m üssen nicht unbedingt ‚hintereinander‘<br />

angeordnet sein, sie können auch ineinander verzahnt sein.<br />

Vorlesung Datenverarbeitung 1 WS 2005/2006 Dr.-Ing. Stefan Freinatis<br />

Grundbegriffe <strong>Codierung</strong><br />

Code<br />

Ein Code ist eine Menge bestimmter Codeworte. Die<br />

Menge umfasst die „zugelassenen (gültigen)“ Codeworte.<br />

Man spricht bei den nicht-zugelassenen Codeworten ebenfalls von „Codeworten“.<br />

zugelassene<br />

Codeworte<br />

Code<br />

nicht-zugelassene<br />

Codeworte<br />

Blockcode<br />

Ein (n,k)–Blockcode C ist ein Code bestehend aus n-stelligen<br />

Codeworten. Alle Codeworte in C haben k Informationsbits.<br />

Anzahl Worte: N = 2 n . Anzahl gültige Codeworte: K = 2 k .<br />

Vorlesung Datenverarbeitung 1 WS 2005/2006 Dr.-Ing. Stefan Freinatis


Grundbegriffe <strong>Codierung</strong><br />

Gewicht (weight)<br />

Gewicht = Anzahl „Einsen“ im Codewort.<br />

w<br />

∑ −<br />

=<br />

=<br />

1 n<br />

ci<br />

i 0<br />

Beispiel: w(1011) = 3<br />

Hamming-Abstand (Hamming distance)<br />

Anzahl Stellen (Bitpositionen), in denen sich zwei Codeworte<br />

x und y voneinander unterscheiden.<br />

d ( x, y)<br />

= w(<br />

x ⊕ y)<br />

⊕ = XOR (bitweise)<br />

Vorlesung Datenverarbeitung 1 WS 2005/2006 Dr.-Ing. Stefan Freinatis<br />

Grundbegriffe <strong>Codierung</strong><br />

Mindest Hamming-Abstand<br />

Der kleinste festgestellte Hammingabstand zwischen den<br />

Codeworten eines Codes C.<br />

d min = min( d(<br />

ci,<br />

c j ) | ci<br />

, c j ∈ C,<br />

i ≠<br />

j)<br />

Idealerweise haben alle Codeworte eines Codes untereinander<br />

den gleichen Hammingabstand.<br />

Vorlesung Datenverarbeitung 1 WS 2005/2006 Dr.-Ing. Stefan Freinatis


<strong>Codierung</strong><br />

Fehlererkennung<br />

Das Auftreten eines Fehlers kann erkannt werden, wenn<br />

das empfangene Codewort ein ungültiges Codewort ist.<br />

⇒ Für eine Fehlererkennung muss der Mindest-Hammingabstand<br />

zwischen den Codeworten (den gültigen) mindestens 2 sein,<br />

um „Platz“ für ungültige Codeworte zu schaffen.<br />

<strong>Codierung</strong><br />

Fehlerkorrektur<br />

d=2<br />

= gültiges Codewort<br />

= ungültiges Codewort<br />

Vorlesung Datenverarbeitung 1 WS 2005/2006 Dr.-Ing. Stefan Freinatis<br />

Ein Fehler kann korrigiert werden, wenn bekannt ist,<br />

welches Bit fehlerhaft ist.<br />

⇒ Für eine Fehlerkorrektur muss das ungültige Codewort eindeutig<br />

einem gültigen Codewort zugeordnet werden können.<br />

Der Mindest-Hammingabstand muss mindestens 3 sein.<br />

d=3<br />

= gültiges Codewort<br />

= ungültiges Codewort<br />

Vorlesung Datenverarbeitung 1 WS 2005/2006 Dr.-Ing. Stefan Freinatis


<strong>Codierung</strong><br />

Anzahl erkennbarer Fehler<br />

F e<br />

= d min −1<br />

Anzahl korrigierbarer Fehler<br />

F k<br />

F k<br />

min −1<br />

=<br />

2<br />

d<br />

d<br />

=<br />

2<br />

min −<br />

1<br />

<strong>Codierung</strong><br />

für d (Hammingabstand) ungerade<br />

für d (Hammingabstand) gerade<br />

Vorlesung Datenverarbeitung 1 WS 2005/2006 Dr.-Ing. Stefan Freinatis<br />

Darstellung Code im Coderaum<br />

Hier: n = 3, k = 2<br />

100<br />

110<br />

000<br />

111<br />

010<br />

101<br />

Hammingabstand d = 2<br />

Ein Einzelfehler kann erkannt werden.<br />

001<br />

011<br />

= gültiges Codewort<br />

= ungültiges Codewort<br />

Vorlesung Datenverarbeitung 1 WS 2005/2006 Dr.-Ing. Stefan Freinatis


<strong>Codierung</strong><br />

Darstellung Code im Coderaum<br />

Hier: n = 3, k = 1<br />

100<br />

110<br />

000<br />

111<br />

<strong>Codierung</strong><br />

Korrigierkugel<br />

010<br />

101<br />

Hammingabstand d = 3<br />

Ein Einzelfehler kann korrigiert werden,<br />

ein Doppelfehler kann erkannt werden.<br />

001<br />

011<br />

= gültiges Codewort<br />

= ungültiges Codewort<br />

Vorlesung Datenverarbeitung 1 WS 2005/2006 Dr.-Ing. Stefan Freinatis<br />

Die Korrigierkugel um ein gültiges Codewort c i enthält alle ungültigen<br />

Codeworte, die ‚näher‘ (Hammingabstand) an c i liegen als an jedem<br />

anderen gültigen Codewort. 000<br />

Die Korrigierkugel um 000<br />

enthält 100, 010 und 001.<br />

Die Korrigierkugel um 111<br />

enthält 110, 101 und 011.<br />

100<br />

110<br />

111<br />

010<br />

101<br />

001<br />

011<br />

Vorlesung Datenverarbeitung 1 WS 2005/2006 Dr.-Ing. Stefan Freinatis


<strong>Codierung</strong><br />

Eine Korrigierkugel sollte sich nicht mit anderen Korrigierkugeln über-<br />

schneiden. Sie umschließt unter dieser Bedingung Z Codeworte eines<br />

n-stelligen Codes mit der Fehlererkennung F k .<br />

Anzahl Codeworte pro Kugel:<br />

1<br />

0 =<br />

⎛n⎞<br />

⎜ ⎟<br />

⎝ ⎠<br />

Das gültige Codewort (Zentrum der Kugel)<br />

⎛n<br />

⎞<br />

⎜ ⎟ = n<br />

⎝1⎠<br />

Die Nachbarkugeln mit d = 1 zum Zentrum<br />

... usw.<br />

<strong>Codierung</strong><br />

Perfekter Code<br />

Z<br />

= K F<br />

∑<br />

i = 0<br />

⎛<br />

⎜<br />

⎝<br />

n<br />

i<br />

⎞<br />

⎟<br />

⎠<br />

100<br />

110<br />

000<br />

111<br />

010<br />

101<br />

Vorlesung Datenverarbeitung 1 WS 2005/2006 Dr.-Ing. Stefan Freinatis<br />

Ein Code heißt dichtgepackt oder perfekt wenn alle N=2 n Worte<br />

von den Korrigierkugeln ohne Überschneidung erfasst werden.<br />

Dann ist:<br />

k<br />

2 =<br />

2<br />

Z<br />

n<br />

bzw.<br />

Z<br />

F<br />

K<br />

= ∑<br />

i = 0<br />

⎛n⎞<br />

⎜ ⎟<br />

⎝ i ⎠<br />

n−<br />

k<br />

Die Gleichung beschreibt die so genannte Hammingschranke für<br />

perfekte Codes. Sie gibt an, wieviel Kontrollbits n-k für eine<br />

Fehlerkorrektur F k mindestens aufgewendet werden müssen<br />

Vorlesung Datenverarbeitung 1 WS 2005/2006 Dr.-Ing. Stefan Freinatis<br />

=<br />

2<br />

001<br />

011


<strong>Codierung</strong><br />

Hammingschranke<br />

Bei einem nicht-perfekten Code gilt allgemein:<br />

Z<br />

F<br />

K<br />

= ∑<br />

i=<br />

0<br />

⎛n⎞<br />

⎜ ⎟<br />

⎝ i ⎠<br />

≤<br />

ld(x) = logarithmus dualis<br />

2<br />

n−k<br />

bzw.<br />

ld ( Z ) ≤ n − k<br />

log( x)<br />

ln( x)<br />

ld ( x)<br />

= =<br />

log( 2)<br />

ln( 2)<br />

Vorlesung Datenverarbeitung 1 WS 2005/2006 Dr.-Ing. Stefan Freinatis<br />

Hammingcode <strong>Codierung</strong><br />

(7, 4)-Hammingcode<br />

n = 7 (Anzahl Bits gesamt)<br />

k = 4 (Anzahl Informationsbits)<br />

⇒ n-k = 3 (Anzahl Prüfbits)<br />

Die drei Prüfbits sind Paritätsbits. Sie befinden sich an den<br />

Positionen 2 i , also hier 1, 2, 4. D = Informationsbit, C = Prüfbit.<br />

Position<br />

Bedeutung<br />

7<br />

111<br />

D4<br />

6<br />

110<br />

D3<br />

5<br />

101<br />

D2<br />

Achtung! Positionen werden ab 1 gezählt, nicht ab 0. The least significant bit is at position 1.<br />

4<br />

100<br />

C3<br />

3<br />

011<br />

D1<br />

2<br />

010<br />

C2<br />

1<br />

001<br />

C1<br />

Vorlesung Datenverarbeitung 1 WS 2005/2006 Dr.-Ing. Stefan Freinatis<br />

Beispiel 1


Hammingcode <strong>Codierung</strong><br />

Prüfschema (<strong>Codierung</strong> / Encoding)<br />

Die Prüfbits ergänzen zu gerader Parität.<br />

C1: sorgt für gerade Parität über Bits an Positionen xx1 (binär),<br />

also Bits 1, 3, 5, 7. Codierschema: C1 = Bit 3 ⊕ Bit 5 ⊕ Bit 7.<br />

C1 prüft also D1, D2, D4 und sich selber<br />

C2: sorgt für gerade Parität über Bits an Positionen x1x (binär),<br />

also Bits 2, 3, 6, 7. Codierschema: C2 = Bit 3 ⊕ Bit 6 ⊕ Bit 7.<br />

C2 prüft also D1, D3, D4 und sich selber<br />

C3: sorgt für gerade Parität über Bits an Positionen 1xx (binär),<br />

also Bits 4, 5, 6, 7. Codierschema: C3 = Bit 5 ⊕ Bit 6 ⊕ Bit 7.<br />

C3 prüft also D2, D3, D4 und sich selber<br />

Vorlesung Datenverarbeitung 1 WS 2005/2006 Dr.-Ing. Stefan Freinatis<br />

Hammingcode <strong>Codierung</strong><br />

<strong>Codierung</strong> (Encoding)<br />

Beispielhafte Nutzlast: u =<br />

Position<br />

Bedeutung<br />

Codewort<br />

7<br />

111<br />

D4<br />

0<br />

6<br />

110<br />

D3<br />

D4<br />

0<br />

D3<br />

1<br />

D2<br />

0<br />

C3 = Bit 5 ⊕ Bit 6 ⊕ Bit 7 = 0 ⊕1 ⊕0 = 1<br />

1<br />

5<br />

101<br />

D2<br />

0<br />

4<br />

100<br />

C3<br />

C1 = Bit 3 ⊕ Bit 5 ⊕ Bit 7 = 1 ⊕0 ⊕0 = 1<br />

C2 = Bit 3 ⊕ Bit 6 ⊕ Bit 7 = 1 ⊕1 ⊕0 = 0<br />

1<br />

3<br />

011<br />

D1<br />

D1<br />

1<br />

Vorlesung Datenverarbeitung 1 WS 2005/2006 Dr.-Ing. Stefan Freinatis<br />

1<br />

2<br />

010<br />

C2<br />

0<br />

1<br />

001<br />

C1<br />

1


Hammingcode <strong>Codierung</strong><br />

Decodierung (Decoding)<br />

Empfangenes Wort: 0101101<br />

Position<br />

Bedeutung<br />

Codewort<br />

7<br />

111<br />

D4<br />

0<br />

6<br />

110<br />

D3<br />

1<br />

5<br />

101<br />

D2<br />

C3‘ = Bit 4 ⊕ Bit 5 ⊕ Bit 6 ⊕ Bit 7 = 1 ⊕0 ⊕1 ⊕0 = 0<br />

0<br />

4<br />

100<br />

C3<br />

1<br />

3<br />

011<br />

D1<br />

Vorlesung Datenverarbeitung 1 WS 2005/2006 Dr.-Ing. Stefan Freinatis<br />

1<br />

2<br />

010<br />

C2<br />

C1‘ = Bit 1 ⊕ Bit 3 ⊕ Bit 5 ⊕ Bit 7 = 1 ⊕1 ⊕0 ⊕0 = 0<br />

C2‘ = Bit 2 ⊕ Bit 3 ⊕ Bit 6 ⊕ Bit 7 = 0 ⊕1 ⊕1 ⊕0 = 0<br />

Hammingcode <strong>Codierung</strong><br />

Decodierung (Decoding)<br />

Empfangenes Wort: 0001101<br />

Position<br />

Bedeutung<br />

Codewort<br />

7<br />

111<br />

D4<br />

0<br />

6<br />

110<br />

D3<br />

0<br />

5<br />

101<br />

D2<br />

C3‘ = Bit 4 ⊕ Bit 5 ⊕ Bit 6 ⊕ Bit 7 = 1 ⊕0 ⊕0 ⊕0 = 1<br />

0<br />

4<br />

100<br />

C3<br />

1<br />

3<br />

011<br />

D1<br />

0<br />

1<br />

001<br />

C1<br />

1<br />

Syndromvektor<br />

Vorlesung Datenverarbeitung 1 WS 2005/2006 Dr.-Ing. Stefan Freinatis<br />

1<br />

2<br />

010<br />

C2<br />

C1‘ = Bit 1 ⊕ Bit 3 ⊕ Bit 5 ⊕ Bit 7 = 1 ⊕1 ⊕0 ⊕0 = 0<br />

C2‘ = Bit 2 ⊕ Bit 3 ⊕ Bit 6 ⊕ Bit 7 = 0 ⊕1 ⊕0 ⊕0 = 1<br />

0<br />

1<br />

001<br />

C1<br />

1<br />

Syndromvektor<br />

000 = Everything is ok<br />

110 = 6 decimal = Bit 6 is wrong! (single fault<br />

assumption)


Hammingcode <strong>Codierung</strong><br />

Syndromvektor<br />

Der Syndromvektor C3‘C2‘C1‘ gibt die Position des<br />

verfälschten Bits an.<br />

Position 000 = kein Fehler<br />

Syndromvektor<br />

C1‘ = Bit 1 ⊕ Bit 3 ⊕ Bit 5 ⊕ Bit 7<br />

C2‘ = Bit 2 ⊕ Bit 3 ⊕ Bit 6 ⊕ Bit 7<br />

C3‘ = Bit 4 ⊕ Bit 5 ⊕ Bit 6 ⊕ Bit 7<br />

Aber Vorsicht, das gilt nur bei Einzelfehlerannahme! Bei<br />

einem Doppelfehler ‚irrt‘ der Syndromvektor.<br />

Vorlesung Datenverarbeitung 1 WS 2005/2006 Dr.-Ing. Stefan Freinatis<br />

Hammingcode <strong>Codierung</strong><br />

Decodierung (Decoding)<br />

Empfangenes Wort: 0001100 (gesendet wurde 0101101)<br />

Position<br />

Bedeutung<br />

Codewort<br />

7<br />

111<br />

D4<br />

0<br />

6<br />

110<br />

D3<br />

0<br />

5<br />

101<br />

D2<br />

C3‘ = Bit 4 ⊕ Bit 5 ⊕ Bit 6 ⊕ Bit 7 = 1 ⊕0 ⊕0 ⊕0 = 1<br />

0<br />

4<br />

100<br />

C3<br />

1<br />

3<br />

011<br />

D1<br />

Vorlesung Datenverarbeitung 1 WS 2005/2006 Dr.-Ing. Stefan Freinatis<br />

1<br />

2<br />

010<br />

C2<br />

C1‘ = Bit 1 ⊕ Bit 3 ⊕ Bit 5 ⊕ Bit 7 = 0 ⊕1 ⊕0 ⊕0 = 1<br />

C2‘ = Bit 2 ⊕ Bit 3 ⊕ Bit 6 ⊕ Bit 7 = 0 ⊕1 ⊕0 ⊕0 = 1<br />

0<br />

1<br />

001<br />

C1<br />

0<br />

Syndromvektor<br />

Syndrom vector is ‚in error‘. Claims bit 7 to be<br />

faulty, but it was bit 6 and bit 1 (double fault)


Hammingcode <strong>Codierung</strong><br />

Eigenschaften des (7,4)-Hammingcodes<br />

• Hammingdistanz d min = 3<br />

d =3<br />

min<br />

• Anzahl erkennbarer Fehler: 2<br />

• Anzahl korrigierbarer Fehler: 1<br />

• Ist ein systematischer Code (ist zudem perfekt)<br />

Quellwort und Pr üfwort sind systematisch innerhalb des Codewortes angeordnet<br />

Aufpassen: Entweder kann 1 Fehler korrigiert werden oder es können bis zu 2 Fehler<br />

erkannt werden. Nicht beides gleichzeitig! Betriebsmodus des Empfängers entscheidet.<br />

Vorlesung Datenverarbeitung 1 WS 2005/2006 Dr.-Ing. Stefan Freinatis<br />

Algebraische Strukturen <strong>Codierung</strong><br />

Axiome für die „Gruppe“ (Group)<br />

• Die Summe von zwei Elementen a ⊕bist definiert und<br />

ergibt wieder ein Element der Gruppe.<br />

• Für die Summe gilt (a ⊕b)⊕c = a ⊕(b ⊕c).<br />

Assoziativität<br />

• Es existiert ein Null-Element für die Addition. Für jedes<br />

beliebige a gilt: a ⊕0=a.<br />

• Jedes Element a besitzt ein inverses Element für die<br />

Addition, so dass a ⊕a -1=0.<br />

Vorlesung Datenverarbeitung 1 WS 2005/2006 Dr.-Ing. Stefan Freinatis


Algebraische Strukturen <strong>Codierung</strong><br />

Axiome für den „Ring“ (Ring)<br />

Es gelten die Axiome der Gruppe. Zus ätzlich gilt:<br />

• Die Summe ist kommutativ: a ⊕b = b ⊕a<br />

• Das Produkt zweier Elemente a ⊗bist definiert und<br />

ergibt wieder ein Element der Gruppe.<br />

• Für das Produkt gilt (a ⊗b)⊗c = a ⊗(b ⊗c).<br />

Assoziativität<br />

• Ferner gilt: a ⊗(b ⊕c) = (a ⊗b) ⊕(a ⊗c).<br />

Distributivität<br />

Vorlesung Datenverarbeitung 1 WS 2005/2006 Dr.-Ing. Stefan Freinatis<br />

Algebraische Strukturen <strong>Codierung</strong><br />

Axiome für den „Körper“ (Feld) (field)<br />

Es gelten die Axiome des Rings. Zusätzlich gilt:<br />

• Das Produkt ist kommutativ: a ⊗b = b ⊗a<br />

• Es existiert ein Eins-Element für die Multiplikation. Für<br />

jedes beliebige a gilt: a ⊗1=a.<br />

• Jedes Element a ≠0 besitzt ein inverses Element für<br />

die Multiplikation, so dass a ⊗a -1=1.<br />

Eine Menge M = {0, 1, ... K-1} stellt in Verbindung mit der Modulo-K-Rechnung<br />

einen Körper dar, wenn K eine Primzahl ist. Dieser Körper heißt auch Galois -<br />

Feld (GF). Wenn M = {0, 1} GF(2). Wir arbeiten hier mit GF(2), Binärcodes.<br />

Vorlesung Datenverarbeitung 1 WS 2005/2006 Dr.-Ing. Stefan Freinatis


Algebraische Strukturen <strong>Codierung</strong><br />

Galois-Feld GF(2) = {0, 1}<br />

• Addition<br />

⊕ 0 1<br />

0 0 1<br />

1 1 0<br />

Es gibt keinen Übertrag (no carry)<br />

• Null-Element der Addition: 0<br />

• Inverses Element der Addition: Jedes Element ist zu<br />

sich selbst invers: 1+1=0, 0+0=0.<br />

Die „Addition“ in GF(2) entspricht<br />

dem logischen XOR.<br />

Vorlesung Datenverarbeitung 1 WS 2005/2006 Dr.-Ing. Stefan Freinatis<br />

Algebraische Strukturen <strong>Codierung</strong><br />

Galois-Feld GF(2) = {0, 1}<br />

• Produkt<br />

⊗ 0 1<br />

0 0 0<br />

1 0 1<br />

• Eins-Element der Multiplikation: 1<br />

Das „Produkt“ in GF(2) entspricht<br />

dem logischen AND.<br />

• Inverses Element der Multiplikation: 1<br />

Das gilt natürlich nicht für die 0, siehe Körper.<br />

Vorlesung Datenverarbeitung 1 WS 2005/2006 Dr.-Ing. Stefan Freinatis


Codeklassen <strong>Codierung</strong><br />

Blockcodes<br />

Gruppencodes<br />

(= Linearcodes)<br />

Zyklische Codes<br />

Systematisch<br />

Vorlesung Datenverarbeitung 1 WS 2005/2006 Dr.-Ing. Stefan Freinatis<br />

Codeklassen <strong>Codierung</strong><br />

Systematische Codes<br />

Systematisch<br />

Ein Code Blockcodes ist systematisch wenn sich die Informationsbits<br />

(Nutzlast) und die Prüfbits an festgelegten Positionen<br />

innerhalb des Codewortes befinden. Die Nutzlast kann<br />

dann einfach Gruppencodes ‚entnommen‘ werden.<br />

Bei nicht-systematischen Codes benötigt man eine<br />

Zuordnungstabelle „Nutzlast ↔ Codewort“.<br />

Zyklische Codes<br />

Blockcode<br />

Ein (n,k)–Blockcode ist ein Code bestehend aus n-stelligen<br />

Codeworten. Alle Codeworte haben k Informationsbits.<br />

Vorlesung Datenverarbeitung 1 WS 2005/2006 Dr.-Ing. Stefan Freinatis


Codeklassen <strong>Codierung</strong><br />

Gruppencode<br />

Systematisch<br />

Ein Gruppencode Blockcodes erfüllt die Axiome einer algebraischen<br />

Gruppe. Die Linearkombination von Codeworten ergibt<br />

wieder ein Codewort. Wird auch Linearcode genannt.<br />

Gruppencodes<br />

In der Literatur findet man auch die Bezeichnung linearer Blockcode.<br />

Zyklische Codes<br />

Ein Gruppencode Zyklische ist Codes zyklisch wenn die zyklische Verschiebung<br />

(Rotation) jedes beliebigen Codewortes<br />

wieder ein Codewort ergibt.<br />

Vorlesung Datenverarbeitung 1 WS 2005/2006 Dr.-Ing. Stefan Freinatis<br />

Gruppencode <strong>Codierung</strong><br />

Beispiel für einen nicht-systematischen Code<br />

Hier ein nicht-systematischer Gruppencode<br />

Quellwort u Codewort c<br />

000 1110100<br />

001 0000000<br />

010 0100111<br />

011 1010011<br />

100 0011101<br />

101 0111010<br />

110 1001110<br />

111 1101001<br />

Der Code ist nicht systematisch. Man<br />

kann anhand des Codewortes nicht<br />

erkennen, welches Quellwort ‚dahinter<br />

steckt‘.<br />

Der Code ist linear. Die Addition zweier<br />

Codeworte ergibt wieder ein Codewort.<br />

Vorlesung Datenverarbeitung 1 WS 2005/2006 Dr.-Ing. Stefan Freinatis<br />

Beispiel 2


Gruppencode <strong>Codierung</strong><br />

Generatormatrix<br />

Ein (n, k)–Gruppencode kann durch eine k x n Generator-<br />

matrix G definiert werden. Die Zeilenvektoren von G<br />

heißen Generatorworte. Die Generatorworte sind linear<br />

unabhängig voneinander.<br />

Erzeugung eines Codewortes: c = u • G<br />

Mit u = Quellwort (k Bit)<br />

G = Generatormatrix (k x n)<br />

c = erzeugtes Codewort (n Bit)<br />

Vorlesung Datenverarbeitung 1 WS 2005/2006 Dr.-Ing. Stefan Freinatis<br />

Gruppencode <strong>Codierung</strong><br />

Beispiel Erzeugung eines Codewortes: c = u • G<br />

011<br />

u<br />

1101001<br />

1010011<br />

1110100<br />

G<br />

= 0100111<br />

Vorlesung Datenverarbeitung 1 WS 2005/2006 Dr.-Ing. Stefan Freinatis<br />

c


Gruppencode <strong>Codierung</strong><br />

Beispiel Erzeugung eines Codes: C = U • G<br />

000<br />

001<br />

010<br />

011<br />

100<br />

101<br />

110<br />

111<br />

U = Quellwortmatrix (2 k x k)<br />

1101001<br />

1010011<br />

1110100<br />

=<br />

G = Generatormatrix (k x n)<br />

0000000<br />

1110100<br />

1010011<br />

0100111<br />

1101001<br />

0011101<br />

0111010<br />

1001110<br />

Beispiel 3<br />

C = erzeugte Codewortmatrix (2 k x n)<br />

Vorlesung Datenverarbeitung 1 WS 2005/2006 Dr.-Ing. Stefan Freinatis<br />

Gruppencode <strong>Codierung</strong><br />

Der erzeugte Code ist linear.<br />

Die Addition zweier Codeworte<br />

ergibt wieder ein Codewort.<br />

Der erzeugte Code ist<br />

systematisch.<br />

Das mag auf den ersten Blick nicht<br />

erkennbar sein, ist aber so ☺.<br />

u = [u 2 u 1 u 0 ]<br />

c = [.. .. .. u 2 u 0 u 1 ..]<br />

Quellwort u Codewort c<br />

000 0000000<br />

001 1110100<br />

010 1010011<br />

011 0100111<br />

100 1101001<br />

101 0011101<br />

110 0111010<br />

111 1001110<br />

u = [u 2 u 1 u 0 ]<br />

Vorlesung Datenverarbeitung 1 WS 2005/2006 Dr.-Ing. Stefan Freinatis


Gruppencode <strong>Codierung</strong><br />

Anmerkung<br />

Die Definition eines systematischen Codes schreibt lediglich vor, dass<br />

sich die Quellwortbits immer an den gleichen festen Positionen innerhalb<br />

der Codeworte befinden. Bei einen systematischen Code kann man das<br />

Quellwort – bildlich gesprochen – aus dem Codewort ‚herausziehen‘. Wie<br />

Nutzlast und Prüfbits innerhalb des Codewortes angeordnet sind, spielt<br />

keine Rolle — Hauptsache, sie lassen sich systematisch trennen.<br />

Der Hammingcode aus Beispiel 1 ist ein systematischer Gruppencode.<br />

In der Literatur findet sich gelegentlich die Auffassung, dass bei einem<br />

systematischen Code Quellwort und Prüfwort je en bloc angeordnet sein<br />

sollen (und nicht gemischt).<br />

Diese en bloc-Anordnung werden wir hier als „klar-systematisch“<br />

bezeichnen.<br />

Vorlesung Datenverarbeitung 1 WS 2005/2006 Dr.-Ing. Stefan Freinatis<br />

Gruppencode <strong>Codierung</strong><br />

Erzeugung eines klar-systematischen Gruppencodes<br />

Die Generatormatrix für einen systematischen Code besteht aus k Ein-<br />

heitsvektoren (Spaltenvektoren) und n-k Prüfvektoren (Spaltenvektoren).<br />

Durch die k Einheitsvektoren werden die Quellwortbits 1:1 in feste<br />

Positionen des Codewortes kopiert.<br />

Für einen klar-systematischen Code werden die k Einheitsvektoren zu<br />

einer Einheitsmatrix I zusammengefasst. Die Prüfstellenvektoren<br />

werden zu einer Prüfstellenmatrix P zusammengefasst. Nutzlast und<br />

Prüfbits werden dadurch nebeneinander (en bloc) angeordnet.<br />

Aufbau Generatormatrix: G = [ I P ] oder G = [ P I ].<br />

Mit I = Einheitsmatrix (k x k)<br />

P = Prüfstellenmatrix (k x (n-k))<br />

G = Generatormatrix (k x n)<br />

Vorlesung Datenverarbeitung 1 WS 2005/2006 Dr.-Ing. Stefan Freinatis


Gruppencode <strong>Codierung</strong><br />

Beispiel: Erzeugung eines (7,4)-Hammingcodewortes<br />

Hier [I P] Schema<br />

u = Quellwort (1 x k)<br />

0101<br />

I = Einheitsmatrix (k x k)<br />

1000 111<br />

0100 110<br />

0010 101<br />

0001 011<br />

G = Generatormatrix (k x n)<br />

= 0101101<br />

Bei diesem Hammingcode sind die Prüfstellen en bloc hinter dem<br />

Informationswort angeordnet: c = [u p].<br />

c = Codewort (1 x n)<br />

P = Prüfstellenmatrix (k x (n-k))<br />

Vorlesung Datenverarbeitung 1 WS 2005/2006 Dr.-Ing. Stefan Freinatis<br />

Gruppencode <strong>Codierung</strong><br />

Decodierung eines klar-systematischen Gruppencodes<br />

Die Decodierung (genauer: die Kontrolle der Prüfbits) erfolgt mittels<br />

einer Prüfmatrix H:<br />

s = c • H T<br />

Mit s = Syndromvektor (1 x (n-k))<br />

c = empfangenes (Code)wort (1 x n)<br />

H = Prüfmatrix ((n-k) x n)<br />

H T = Transponierte Prüfmatrix (n x (n-k))<br />

Jedes gültige Codewort c erzeugt den Nullvektor s = 0.<br />

nächste Seite<br />

Vorlesung Datenverarbeitung 1 WS 2005/2006 Dr.-Ing. Stefan Freinatis


Gruppencode <strong>Codierung</strong><br />

Prüfmatrix<br />

Die Prüfmatrix H setzt sich zusammen aus der transponierten Prüf-<br />

stellenmatrix P T und einer Einheitsmatrix I n-k der Größe (n-k) x (n-k).<br />

Beispiel:<br />

G = [ I P ] =<br />

1000 111<br />

0100 110<br />

0010 101<br />

0001 011<br />

H = [ P T I n-k ] =<br />

H = [ P T I n-k ]<br />

1110 100<br />

1101 010<br />

1011 001<br />

H T =<br />

111<br />

110<br />

101<br />

011<br />

100<br />

010<br />

001<br />

Vorlesung Datenverarbeitung 1 WS 2005/2006 Dr.-Ing. Stefan Freinatis<br />

Gruppencode <strong>Codierung</strong><br />

Beispiel: Decodierung eines (7,4)-Hammingcodewortes<br />

c = empfangenes Wort (1 x n)<br />

0101101<br />

111<br />

110<br />

101<br />

011<br />

100<br />

010<br />

001<br />

= 000<br />

H T = Transponierte Prüfmatrix (n x (n-k))<br />

s = Syndromvektor (1 x (n-k))<br />

Vorlesung Datenverarbeitung 1 WS 2005/2006 Dr.-Ing. Stefan Freinatis


Gruppencode <strong>Codierung</strong><br />

0101101<br />

111<br />

110<br />

101<br />

011 = 000<br />

100<br />

c =[u3u2u1u0 p2p1p0 ]<br />

010<br />

001<br />

s =[s2s1 s0 ]<br />

Fortsetzung Beispiel ...<br />

Paritätsprüfungsschema:<br />

s 2 = u 3 ⊕ u 2 ⊕u 1 ⊕ p 2 (definiert durch Spalte 1 von H T )<br />

s 1 = u 3 ⊕ u 2 ⊕u 0 ⊕ p 1 (definiert durch Spalte 2 von H T )<br />

s 0 = u 3 ⊕ u 1 ⊕u 0 ⊕ p 0 (definiert durch Spalte 3 von H T )<br />

Vorlesung Datenverarbeitung 1 WS 2005/2006 Dr.-Ing. Stefan Freinatis<br />

Gruppencode <strong>Codierung</strong><br />

Beispiel: Decodierung eines (7,4)-Hammingcodewortes<br />

Hier fehlerhaftes (ungültiges) Codewort empfangen<br />

001101 0<br />

111<br />

110<br />

101<br />

011<br />

100<br />

010<br />

001<br />

= 110<br />

= 6 dezimal<br />

Bitte beachten: Der Syndromvektor zeigt auf das verfälschte Bit in der<br />

Zählweise „Niederwertigstes Bit an Position 1“ ! Er zeigt hier auf c 5 .<br />

Vorlesung Datenverarbeitung 1 WS 2005/2006 Dr.-Ing. Stefan Freinatis


Gruppencode <strong>Codierung</strong><br />

Eigenschaften der Prüfmatrix H<br />

• H ist eine (n-k) x n Matrix<br />

• H T ist eine (n x (n-k)) Matrix<br />

• Ein gültiges Codewort erzeugt den Nullvektor:<br />

c • H T = 0 für c ∈ C.<br />

• Für ein ungültiges Codewort c ∉ C gilt: c • H T ≠ 0.<br />

• G und H T sind zueinander orthogonal.<br />

Vorlesung Datenverarbeitung 1 WS 2005/2006 Dr.-Ing. Stefan Freinatis<br />

Gruppencode <strong>Codierung</strong><br />

Eigenschaften eines Gruppencodes<br />

• Jedes Codewort ist eine Linearkombination von<br />

Generatorworten (Zeilen) der Generatormatrix G.<br />

• Der Code besteht aus allen Linearkombinationen<br />

der Generatorworte aus G.<br />

• Die Addition zweier Codeworte ergibt wieder<br />

ein Codewort.<br />

• Der Nullvektor ist immer im Code enthalten.<br />

• Ein Gruppencode kann systematisch oder<br />

nicht-systematisch sein.<br />

Vorlesung Datenverarbeitung 1 WS 2005/2006 Dr.-Ing. Stefan Freinatis


Polynome <strong>Codierung</strong><br />

Polynomdarstellung von Codeworten<br />

Ein Codewort c (Vektor) kann durch ein Polynom c(x) dargestellt<br />

werden. Der Grad des Polynoms wird hier mit s bezeichnet.<br />

c = [c n-1, ... , c o ]<br />

c(<br />

x)<br />

=<br />

0<br />

i<br />

∑ci ⋅ x<br />

i = n−1<br />

Beispiele: c = [1101] c(x) = x 3 + x 2 + 1 s = 3<br />

c = [000] c(x) = 0 s = n.a.<br />

c = [010] c(x) = x s = 1<br />

Vorlesung Datenverarbeitung 1 WS 2005/2006 Dr.-Ing. Stefan Freinatis<br />

Polynome <strong>Codierung</strong><br />

Sei a(x) = x 3 + x 2 + 1, b(x) = x 2 + 1<br />

a(x) ⊕ b(x) = x3 + x2 + x2 + 1 + 1<br />

= x3 Addition<br />

a(x) ⊗ b(x) = x5 + x4 + x3 + x2 + x2 + 1<br />

= x5 + x4 + x3 Multiplikation<br />

+ 1<br />

a(x) ÷ b(x)<br />

Division<br />

⊕ 0 1<br />

0 0 1<br />

1 1 0<br />

⊗ 0 1<br />

0<br />

0 0<br />

1 0 1<br />

x 3 + x 2 + 1 ÷ x 2 + 1 = x + 1<br />

x 3 + x<br />

x 2 + x + 1<br />

x 2 + 1<br />

x (Rest)<br />

Vorlesung Datenverarbeitung 1 WS 2005/2006 Dr.-Ing. Stefan Freinatis


Polynome <strong>Codierung</strong><br />

Irreduzibilität<br />

Ein Polynom ist irreduzibel (nicht spaltbar) wenn es sich nicht in<br />

Teilpolynome zerlegen lässt. Ähnlich wie bei Primzahlen ist ein<br />

irreduzibles Polynom nicht ohne Rest durch ein anderes Polynom<br />

teilbar.<br />

c(x) = x 3 + x + 1 ist irreduzibel<br />

c(x) = x 2 + x ist reduzibel = x · (x + 1)<br />

Alle Polynome, die keine 1 besitzen, sind auf jeden Fall reduzibel, weil sie<br />

durch x teilbar sind (x kann ausgeklammert werden).<br />

Vorlesung Datenverarbeitung 1 WS 2005/2006 Dr.-Ing. Stefan Freinatis<br />

Polynome <strong>Codierung</strong><br />

Periode<br />

Die Periode r eines Polynoms c(x) ist der kleinste Wert r für den<br />

gilt: Das Polynom x r + 1 ist ohne Rest durch c(x) teilbar.<br />

Bestimmung Periode: Mit r = s beginnen* und Division<br />

x r + 1 ÷ c(x)<br />

durchführen. Wenn ein Rest verbleibt: r = r + 1. Solange fortfahren bis<br />

Division ohne Rest. r gibt dann die Periode von c(x) an.<br />

Beispiel: Das Polynom x 3 + x + 1 hat die Periode r = 7, denn x 7 +1 ist<br />

ohne Rest durch x 3 + x + 1 teilbar: x 7 + 1 ÷ x 3 + x + 1 = x 4 + x 2 + x + 1.<br />

* Nur bei irreduziblen Polynomen, sonst mit r =1 beginnen.<br />

Vorlesung Datenverarbeitung 1 WS 2005/2006 Dr.-Ing. Stefan Freinatis


Polynome <strong>Codierung</strong><br />

Primitivität<br />

Sei c(x) ein Polynom vom Grad s. Sei r die Periode des Polynoms.<br />

Das Polynom c(x) ist primitiv wenn gilt:<br />

2 s – 1 = r<br />

Man sagt auch, das Polynom sei ‚maximalperiodisch‘. Ein<br />

primitives Polynom ist immer auch irreduzibel.<br />

Beispiel: Das Polynom x 3 + x + 1 hat s = 3 und r = 7.<br />

Wegen 2 3 – 1 = 7 ist das Polynom primitiv.<br />

Vorlesung Datenverarbeitung 1 WS 2005/2006 Dr.-Ing. Stefan Freinatis<br />

Polynome <strong>Codierung</strong><br />

Polynombeispiele:<br />

c(x) = x 6 + x 3 + 1<br />

Irreduzibel. Grad s = 6. Periode r = 9. Nicht primitiv.<br />

c(x) = x 4 + x 3 + x 2 + x + 1<br />

Irreduzibel. Grad s = 4. Periode r = 5. Nicht primitiv.<br />

c(x) = x 4 + x + 1<br />

Irreduzibel. Grad s = 4. Periode r = 15. Primitiv.<br />

Vorlesung Datenverarbeitung 1 WS 2005/2006 Dr.-Ing. Stefan Freinatis


Zyklische Codes <strong>Codierung</strong><br />

Zyklische Codes<br />

Zur Erzeugung von zyklischen Codes werden Generator-<br />

polynome verwendet.<br />

Die verwendeten Generatorpolynome müssen primitiv sein.<br />

Zyklische Eigenschaft nämlich nur wenn r (Periode) = n (Codewortlänge)<br />

Für einen zyklischen (n, k)–Code benötigt man ein<br />

Generatorpolynom mit Grad s = n-k und Periode r = n.<br />

Prinzip der Fehlererkennung<br />

Das Codewort muss ohne Rest durch das Generatorpolynom<br />

teilbar sein. Fehlerkorrektur mit Hilfe einer Syndromtabelle.<br />

Vorlesung Datenverarbeitung 1 WS 2005/2006 Dr.-Ing. Stefan Freinatis<br />

Zyklische Codes <strong>Codierung</strong><br />

Zwei Verfahren zur Generierung zyklischer Codes<br />

• „Matrixmultiplikation“<br />

Erzeugt in der Regel einen nicht -systematischen Code.<br />

• „Divisionsmethode“<br />

Aufwendiger, erzeugt aber einen klar-systematischen Code.<br />

Für die folgenden Ausführungen wird dieses Generatorpolynom<br />

verwendet:<br />

Generatorpolynom: g(x) = x 3 + x + 1, s = 3, r = 7<br />

Wort: g = [1011]<br />

Vorlesung Datenverarbeitung 1 WS 2005/2006 Dr.-Ing. Stefan Freinatis


Zyklische Codes <strong>Codierung</strong><br />

Nicht-systematische zyklische Codes<br />

Beispiel: Konstruktion eines zyklischen (7,4)–Gruppencodes<br />

n = 7, k = 4, n–k = 3<br />

Mit dem Wort g = [1011] wird eine k x n Generatormatrix mit<br />

Bandstruktur erzeugt.<br />

G =<br />

1011000<br />

0101100 0010110 0001011<br />

Erzeugung des Codes durch: C = U • G (siehe nächste Seite).<br />

Vorlesung Datenverarbeitung 1 WS 2005/2006 Dr.-Ing. Stefan Freinatis<br />

Zyklische Codes <strong>Codierung</strong><br />

Quellwort u Codewort c<br />

Beispiel 4<br />

0000 0000000<br />

0001 0001011<br />

0010 0010110<br />

0011 0011101<br />

Der Code ist zyklisch. Die Rotation eines<br />

Codewortes ergibt wieder ein Codewort.<br />

0100 0101100<br />

0101 0100111<br />

0110 0111010<br />

0111 0110001<br />

1000 1011000<br />

Das heißt aber nicht, dass man nur durch<br />

Rotation eines beliebigen Codewortes alle<br />

anderen Codeworte erhält.<br />

1001 1010011<br />

1010 1001110<br />

1011 1000101<br />

Der Code ist linear (sowieso, weil Gruppencode).<br />

Der Code ist aber nicht systematisch.<br />

1100 1110100<br />

1101 1111111<br />

1110 1100010<br />

1111 1101001<br />

Jedes Codewort c(x) ist durch g(x) ohne<br />

Rest teilbar.<br />

Vorlesung Datenverarbeitung 1 WS 2005/2006 Dr.-Ing. Stefan Freinatis


Zyklische Codes <strong>Codierung</strong><br />

Systematische zyklische Codes<br />

Hier Erzeugung eines Codewortes für Quellwort u =[0101] bzw. u(x) = x 2 + 1<br />

Schritt 1<br />

Das Quellpolynom u(x) wird mit x n-k multipliziert. Dadurch<br />

werden ‚hinten‘ n-k freie Stellen geschaffen.<br />

u´(x) = u(x) · x n-k = (x 2 + 1) · x 3 = x 5 + x 3<br />

u´ =[0101000]<br />

Die Multiplikation entspricht einer Verschiebung des Quell-<br />

wortes u um n-k Stellen nach links. An den niederwertigsten<br />

Positionen ist jetzt Platz für Prüfbits.<br />

Vorlesung Datenverarbeitung 1 WS 2005/2006 Dr.-Ing. Stefan Freinatis<br />

Zyklische Codes <strong>Codierung</strong><br />

Schritt 2<br />

Das Polynom u´(x) wird durch das Generatorpolynom g(x)<br />

dividiert. Das Restpolynom r(x) wird zu u´(x) addiert. Daraus<br />

entsteht das Codewort c(x).<br />

c(x) = u´(x) + r(x)<br />

x 5 + x 3 ÷ x 3 + x + 1 = x 2<br />

x 5 + x 3 + x 2<br />

x 2 = r(x) = Rest r =[100]<br />

⇒ c(x) = x 5 + x 3 + x 2<br />

c =[0101100]<br />

Vorlesung Datenverarbeitung 1 WS 2005/2006 Dr.-Ing. Stefan Freinatis


Zyklische Codes <strong>Codierung</strong><br />

Beispiel 5<br />

Schritte 1 und 2 müssen jetzt für alle an-<br />

deren 15 Quellworte durchgeführt werden.<br />

Schließlich ergibt sich der Code wie<br />

nebenstehend gezeigt.<br />

Der Code ist systematisch. Die ersten 4 Bits<br />

von links entsprechen dem Quellwort u.<br />

c = [u 3 u 2 u 1 u 0 p 2 p 1 p 0 ]<br />

Die Codeworte sind identisch mit denen des nichtsystematischen<br />

Codes (Beispiel 4), jedoch ist die<br />

Zuordnung u ↔ c hier eine andere.<br />

Der Code ist selbstverständlich linear. Wieder gilt: Jedes<br />

Codewort c(x) ist durch g(x) ohne Rest teilbar.<br />

Decodierung<br />

Quellwort u Codewort c<br />

0000 0000000<br />

0001 0001011<br />

0010 0010110<br />

0011 0011101<br />

0100 0100111<br />

0101 0101100<br />

0110 0110001<br />

0111 0111010<br />

1000 1000101<br />

1001 1001110<br />

1010 1010011<br />

1011 1011000<br />

1100 1100010<br />

1101 1101001<br />

1110 1110100<br />

1111 1111111<br />

Vorlesung Datenverarbeitung 1 WS 2005/2006 Dr.-Ing. Stefan Freinatis<br />

Zyklische Codes <strong>Codierung</strong><br />

Ob systematischer oder nicht-systematischer Code, das<br />

empfangene Codewort muss erst durch das Generatorpolynom<br />

dividiert werden.<br />

c(x) ÷ g(x) = q(x) + r(x)<br />

Für den Fall r(x) = 0<br />

• kann beim systematischen Code das Nutzwort einfach<br />

entnommen werden (Position innerhalb c(x) ist ja bekannt).<br />

• stellt beim nicht-systematischen Code der Quotient das<br />

Nutzwort dar.<br />

Für den Fall r(x) ≠ 0 Korrektur mittels Syndromtabelle.<br />

Vorlesung Datenverarbeitung 1 WS 2005/2006 Dr.-Ing. Stefan Freinatis


Zyklische Codes <strong>Codierung</strong><br />

Beispiele Decodierung<br />

Hier systematischer Code aus Beispiel 5. Annahme: kein Fehler.<br />

Quellwort u = [1100]<br />

Codewort c = [1100010]<br />

x6 + x5 + x ÷ x3 + x + 1 = x3 + x2 x<br />

+ x<br />

6 + x4 + x3 x5 + x4 + x3 + x<br />

x5 + x3 + x2 x 4 + x 2 + x<br />

x 4 + x 2 + x<br />

0 = r(x)<br />

Der Quotient [1110] hat keine<br />

weitere Bedeutung.<br />

Rest = 0, Quellwort (Nutzlast)<br />

kann entnommen werden.<br />

Vorlesung Datenverarbeitung 1 WS 2005/2006 Dr.-Ing. Stefan Freinatis<br />

Zyklische Codes <strong>Codierung</strong><br />

Beispiele Decodierung<br />

Hier nicht-systematischer Code aus Beispiel 4. Annahme: kein Fehler<br />

Quellwort u = [1100]<br />

Codewort c = [1110100]<br />

x6 + x5 + x4 + x2 ÷ x3 + x + 1 = x3 + x2 x6 + x4 + x3 x5 + x3 + x2 x5 + x3 + x2 0 = r(x)<br />

Der Quotient [1100] hat eine<br />

Bedeutung. Es ist das Quellwort u!<br />

Rest = 0, der Quotient stellt die<br />

Nutzlast (das Quellwort) dar.<br />

Vorlesung Datenverarbeitung 1 WS 2005/2006 Dr.-Ing. Stefan Freinatis

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!