Codierung
Codierung
Codierung
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