Kodierungstheorie: Lineare Kodes

Kodierungstheorie: Lineare Kodes
Seminararbeit
Sommersemester 2015
Bearbeitet von:
Sebastian Gombocz
(Matrikelnummer: 48947)
Christian Löhle
(Matrikelnummer: 48913)
Betreuer:
Prof. Dr. Thomas Thierauf
Hochschule für Technik und Wirtschaft Aalen
Fakultät Elektronik und Informatik
Studiengang Informatik
Inhaltsverzeichnis
1 Einleitung
1.1 Definition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2 Abgrenzung Informationstheorie . . . . . . . . . . . . . . . . . . . . .
1.3 Anwendung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2
2
2
3
2 Grundlagen
2.1 Algebra . . . . . .
2.2 Kodierung . . . . .
2.3 Hamming-Abstand
2.4 Fehlermuster . . . .
2.5 Fehlererkennung . .
2.6 Mindestdistanz . .
2.7 Fehlerkorrektur . .
2.8 Zusammenfassung .
.
.
.
.
.
.
.
.
4
4
4
4
5
5
5
6
7
3 Lineare Kodes
3.1 Generatormatrix . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2 Kontrollmatrix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.3 Syndrom-Dekodierung . . . . . . . . . . . . . . . . . . . . . . . . . .
8
8
9
9
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
4 Zyklische Kodes
10
4.1 Reed-Solomon Kodes . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
5 Literaturverzeichnis
12
1
1 Einleitung
1.1 Definition
Die Kodierungstheorie ist eine Teilgebiet der Mathematik, das sich mit Kodierung
von Informationen mit der Absicht Fehler bei der Übertragung zu erkennen und
eventuell zu korrigieren. Ausgangspunkt ist dazu ein Modell[5], das folgendermaßen
aufgebaut ist:
Die Problemstellung der Kodierungstheorie ist es über einen störungsbehafteten
Kanal eine zuverlässige Datenübertragung herzustellen. Hierbei wird abstrahiert,
dass jedes Bit die gleiche Wahrscheinlichkeit p hat, fehlerhaft übertragen zu werden.
Es muss p 6= 12 gelten, für p < 12 wird das übertragene Bit immer invertiert, somit
erhält man p > 12 . (Anmerkung: Diese Abstraktion ist nicht immer zutreffend in
der Praxis, bei einer kurzfristigen Störung der Leitung könnten in einem kurzen
Zeitraum sehr viele Bits beschädigt worden sein.)
1.2 Abgrenzung Informationstheorie
Shannon gilt als Pionier der Informationstheorie, das oben abgebildete Modell wurde
von ihm eingeführt. Anhand des Modells lässt sich die Abgrenzung zur Informationstheorie leicht erklären. Die Kodierungstheorie beschäftigt sich nur mit der Kommunikation zwischen Sender und Empfänger. Die Theorie der Kommunikation kann
so aufgeteilt werden, in die Informationstheorie, die sich damit beschäftigt möglich
effizient Informationen festhalten zu können. Wohingegen die Kodierungstheorie die
Informationen für die Übertragung redundant, aber dafür fehlerresistent, macht.
2
1.3 Anwendung
Kodierungstheorie wird in der Praxis sowohl bei der Datenübertragung als auch bei
der Datenspeicherung eingesetzt. Bei der Datenübertragung kann bei Fehlererkennung die Information erneut gesendet werden, dies erzeugt Verzögerung und könnte
in manchen Szenarien sehr teuer sein, deshalb kommen hier nicht nur fehlererkennende sondern auch fehlerkorrigierende Kodes zum Einsatz.
Bei Der Datenspeicherung hingegen, ist es oft nicht möglich, an die Information
zu kommen, wenn diese fehlerhaft vorliegt, z.B. durch einen Defekt des physischen
Datenträgers. Ohne Fehlerkorrigierende Kodes wären diese Daten unter Umständen
nicht wiederherstellbar.
3
2 Grundlagen
Dieses Kapitel bezieht sich großteils auf [2].
2.1 Algebra
Die Kodierungstheorie beschränkt sich, sofern es nicht von Nöten ist, nicht auf das
binäre System zum Übertragen von Nachrichten. Diese Arbeit wird das allerdings
großteils tun um das Thema nicht zu abstrakt vorzutragen. Besonders wichtig ist
das exklusive Oder(XOR) und die Multiplikation, da diese einen Körper bilden. In
der Literatur wird der Körper (Z2 , +, ∗) oft mit GF (2)(Galois Field of two elements,
zu deutsch: Endlicher Körper mit zwei Elementen) notiert. Im folgenden sind + und
∗ also immer in Z2 zu verstehen.
2.2 Kodierung
Es gilt eine Menge Nachrichten M , wobei jedes m ∈ M aus k bits besteht, auf eine
Menge Kodewörter C, wobei jedes c ∈ C aus n bits besteht, abzubilden. Daraus folgt
direkt das n ≥ k gelten muss. Es wird ausserdem angenommen das |M | = |C| = 2k ,
die Nachrichtenmenge M also ihre Bits komplett ausnutzt. Die Abbildung wäre für
die Kodierung nutzlos, wenn sie nicht injektiv wäre, da ansonsten Informationen der
Nachricht verloren gehen würde.
Definition: Ein Kode C ist eine Injektive Abbildung: C : {0, 1}k → {0, 1}n .
In der Literatur und auch in dieser Arbeit, wird C doppelt belegt: Als Kode im
Sinne einer Abbildung und als Menge aller Kodewörter des Kodes(Wertemenge von
C).
2.3 Hamming-Abstand
Das Hamming-Gewicht eines Wortes ist die Anzahl der Bits die nicht null sind,
notiert als weight(c). Der Hamming-Abstand zweier Wörter c1 und c2 ist definiert
als weight(c1 + c2 ) anders ausgedrückt: Die Anzahl an Stellen an denen sich c1 und
c2 unterscheiden.
Notiert wird der Hamming-Abstand zweier Kodewörter c1 und c2 mit d(c1 , c2 ).
4
2.4 Fehlermuster
Das Fehlermuster e ist das Wort, das das Störsignal auf das zu übertragene Kodewort
addiert. Wenn weight(e) = 0, wurde die Nachricht ungestört übertragen. Wenn
weight(e) = 1 ist bei der Fehlerübertragung ein Bit falsch übertragen worden, usw.
2.5 Fehlererkennung
Man sagt ein Kode erkennt das Fehlermuster e, wenn für alle Kodewörter c ∈ C
gilt, dass c + e ∈
/ C. Der Kode erkennt also, dass ein Fehler e bei der Übertragung
geschehen ist und das Kodewort verfälscht wurde. Es muss e nicht bestimmen können. Die Konsequenz ist das empfangene Wort zu verwerfen und neu anzufordern.
Allerdings existiert bei Kodes mit |M | > 1 immer auch ein e das nicht vom Kode
erkannt wird, also dass c1 + e = c2 gilt für c1 , c2 ∈ C. Ein Kode ist i-fehlererkennend
wenn er alle e mit weight(e) ≤ i erkennt. Als Beispiel sei M = 0, 1 und C = 00, 11.
Eine Nachricht m ∈ M wird kodiert in dem das Bit wiederholt wird.
Behauptung: C ist 1-fehlererkennend, d.h. der Kode erkennt alle Fehler solang nur
maximal 1 Fehler pro Übertragung passiert.
Zu zeigen: c + e ∈
/ C ∀e mit weight(e) ≤ 1.
c
00
00
11
11
e
01
10
01
10
c0
01
10
10
01
Da c0 die Werte 01, 10 ∈
/ C annimmt, kann ein Fehlermuster mit Hamming-Gewicht
1 immer erkannt werden. 2.6 Mindestdistanz
Die Mindestdistanz ist das Minimum der Hamming-Abstände die alle Paare c1 , c2 ∈
C haben.
Definition: Mindestdistanz = min(d(c1 + c2 ) ∀c1 , c2 ∈ C).
Notiert wird diese Eigenschaft eines Kodes C mit minweight(C). Wenn C trivial ist
und m = c für alle m ∈ M gilt, gilt offensichtlich minweight(C) = 1, da die Nachrichten sich nur in einem Bit unterscheiden. Das vorige Beispiel war C = {00, 11}
also gilt minweight(C) = 2. Wie viele Fehler ein Kode erkennt ist von seiner Mindestdistanz abhängig:
Satz: Ein Kode C mit Mindestdistanz d erkennt alle Fehlermuster e mit weight(e) =
d − 1.
5
Beweis: Sei e ein beliebiges Fehlermuster mit weight(e) ≤ d − 1 und c das zu übertragene Kodewort. Zu zeigen ist, dass der Fehler erkannt wird..
Das empfangene Wort ist c+e. Der Abstand vom Kodewort zum empfangenen Wort
ist weight(c + c + e) = weight(e) und weight(e) ≤ d − 1 also gilt weight(e) < d.
Angenommen c + e ∈ C, dann ist d(c, c + e) = weight(e) also gilt d(c, c + e) < d,
dies ist ein Widerspruch, da d die Mindestdistanz von C ist, d.h. zwei Kodewörter
mindestens Abstand d haben müssen. Satz: Für einen Kode C mit Mindestdistanz d gibt es ein Fehlermuster e mit
weight(e) = d das nicht erkannt wird.
Beweis: Da die Mindestdistanz d ist, gibt es zwei Kodewörter c1 , c2 ∈ C so dass gilt
weight(c1 + c2 ) = d.
Ist nun c1 das zu übertragene Wort und c1 +c2 das Fehlermuster, wird c2 empfangen,
da c1 + c1 + c2 = c2 . Das Fehlermuster wird nicht korrigiert, da c2 ∈ C. Der zweite Satz zeigt, dass der erste Satz maximal formuliert ist.
2.7 Fehlerkorrektur
Um nun auch einen Fehler zu korrigieren wird Maximum Likelihood Decoding(MLD)
angewandt. Wird ein Fehler erkannt, wird er zum nächstliegenden Kodewort korrigiert. Das bedeutet allerdings, dass MLD auch falsch korrigieren kann wenn weight(e)
groß genug ist. Da Fehlermuster mit niedrigem Gewicht wahrscheinlicher sind, korrigiert MLD meist richtig.
Definition: Ein Kode C heißt i-fehlerkorrigierend, wenn er alle Fehlermuster e mit
weight(e) ≤ i korrigiert.
Beispiel: M = 0, 1 und C = {000, 111}, es wird das Nachrichtenbit 3 mal wiederholt.
Behauptung: C ist 1-fehlerkorrigierend.
Beweis: Fehlermuster E mit e ∈ E und weight(e) = 1 für alle e sind E = {001, 010, 100}.
Die Fehlermuster verändern nur 1 Bit, Nachrichtem M = {000, 111} sind aber 3 Bit
entfernt. Folgerung: Es bräuchte ein e mit weight(e) = 2 um eine falsche Korrektur
6
zu ermöglichen. . Auch die Fehlerkorrigerbarkeit hängt direkt von der Mindestdistanz ab:
Satz: Ein Kode C mit Mindestdistanz d korrigiert alle Fehlermuster e mit weight(e) ≤
b(d − 1)/2c.
Satz: Für einen Kode C mit Mindestdistanz d gibt es ein Fehlermuster e mit
weight(e) = d das nicht erkannt wird.
2.8 Zusammenfassung
In diesem Kapitel wurde gezeigt, dass sowohl Fehlererkennbarkeit als auch Fehlerkorrigierbarkeit direkt von der Mindestdistanz abhängen. Die Parameter eines (binären)
Kodes C lassen sich also mit Länge der Nachrichten n, Länge der Kodewörter k und
Mindestdistanz d vollständig beschreiben.
Definition: Ein Kode C ist ein (n, k, d) Kode wenn die Länge der Nachrichten
n ist, die Länge der Kodewörter k ist und die Kodewörter eine Mindestdistanz von
d haben.
7
3 Lineare Kodes
Der Nachteil an der bisherigen Vorgehensweise einen Kode explizit als Abbildung
anzugeben, also für jedes m ∈ M ein c ∈ C anzugeben, ist die Größe der Darstellung
und damit der Kodierungs- und Dekodierungsaufwand.
Viele Kodes lassen sich auch angeben ohne die komplette Wertemenge auszuschreiben, eine weit verbreitete Art solcher Kodes sind die linearen Kodes.
Alle Kodewörter werden als Vektoren interpretiert, dies ermöglicht die Anwendung
bereits bekannter Verfahren der Linearen Algebra.
Definition: Ein Kode ist ein linearer Kode, wenn die Kodewörter einen Untervektorraum von Fn2 bilden.
Ein Untervektorraum U von einem Vektorraum (V, +, ∗) ist eine nichtleere Teilmenge U ⊆ V die unter der Vektoraddition und der Skalarmultiplikation abgeschlossen
ist.
Diese Eigenschaften sind einfacher zu erfüllen, als man auf den ersten Blick vielleicht
denkt.
Die Skalarmultiplikation resultiert nur in den Nullvektor, durch 0 als Skalar, und in
c selbst, durch 1 als Skalar. Eine hinreichende und notwendige Bedingung folgt also
direkt daraus: Der Nullvektor muss ein Kodewort sein.
Die Abgeschlossenheit der Vektoraddition fordert, das ∀c1 , c2 ∈ C auch c1 + c2 ∈ C.
3.1 Generatormatrix
Vektorräume und damit auch Untervektorräume haben eine Basis, eine Menge von
linear unabhängigen Vektoren, dessen Linearkombination den kompletten Vektorraum aufspannt.
In dem letzten Abschnitt wurden Kodes definiert die einen Vektorraum bilden und
sich damit die Basis zunutzen machen können um nicht alle Kodewörter angeben zu
müssen.
Definition: Eine k × n Matrix dessen Zeilen eine Basis für einen (n, k, d) Kode
C bilden, nennt man Generatormatrix.
Jede Linearkombination kann mit einem Vektor der Länge k dargestellt werden,
dieser Vektor ist die zu kodierende Nachricht des Kodes. Um nun eine Nachricht in
8
das zugehörige Kodewort umzuwandeln reicht es G ∗ mT zu berechnen, wobei G die
Generatormatrix ist.
Es gibt eine einheitliche Form eine Generatormatrix anzugeben:
Definition: Eine Generator-Matrix G die den Aufbau G = [Ik |P ] hat ist in systematischer Form.
Ik ist dabei die k × k Identitätsmatrix und P der Paritätsteil, der die Redundanz
hinzufügt. Jeder lineare Kode kann in einen äquivalenten Kode in systematischer
Form gebracht werden.
3.2 Kontrollmatrix
Die Generatormatrix aus dem letzten Abschnitt hilft, zumindest offensichtlich, nicht
bei der Dekodierung weiter. Es gilt eine zweite Matrix zu finden, die die Kodierung
rückgängig macht:
Definition: Eine Matrix H, für die ∀c ∈ C HcT = 0 gilt, nennt man Kontrollmatrix. Ist die Generatormatrix G in systematischer Form G = [Ik |P ] dann ist die
Kontrollmatrix H = [P T |In − k], da GH T = P − P = 0.
3.3 Syndrom-Dekodierung
Die Kontrollmatrix wie sie bisher erläutert wurde, hilft nur um zu überprüfen ob
ein empfangenes Wort ein Kodewort ist, allerdings lässt sie sich auch zur MaximumLikelihood Dekodierung nutzen.
Um noch einmal zu veranschaulichen:
Bei bisherigen Kodes musste der Fehlervektor des empfangenes Vektors ’erraten’
werden, indem die Liste alle Kodewörter durchlaufen wird, um zu sehen welches am
nächsten liegt.
Man kann sich die Kontrollmatrix folgendermaßen zu Nutze machen, dabei sei c0 das
empfangene Wort, c das gesendete Kodewort und e der Fehlervektor.
Für das Syndrom s = Hc0 gilt:
Hc0 = H(c + e) = H(c) + H(e) = 0 + H(e) = H(e).
Diese Fehlerkorrektur wird effizient wenn man im Vorfeld eine Tabelle aller Syndrome(auch Syndrom-Tabelle) und deren zugehöriges Kodewort berechnet und beim
Dekodieren nur einen Table-Lookup durchführen muss.
9
4 Zyklische Kodes
Eine in der Praxis besonders relevante Teilmenge der linearen Kodes stellen die zyklischen Kodes dar.
Definition: Ein linearer Kode heißt zyklischer Kode, wenn jede bitweise Verschiebung eines Kodewortes ebenfalls ein Kodewort ist.
Die bisherige Darstellung von linearen Kodes macht Verschiebungen sehr schwer, da
sie nur in Form der Generatormatrix angegeben werden. Für zyklische Kodes ist die
Angabe von Generatorpolynomen geläufiger.
Die Idee dabei ist es, das Bit als Koeffizient und die Stelle als Potenz zu nutzen,
dadurch lässt sich ein Kodewort in ein Polynom umwandeln.
Beispiel: Sei c = 11001011 ein Kodewort. Das zugehörige Polynom ist dann: c(x) =
1 + x + x4 + x6 + x7 .
Die Verschiebungen von c sind xi c(x) (mod xn − 1) für alle i. Eine Multiplikation des Polynoms mit xi bedeutet also eine Rechts-Verschiebung um i Positionen.
Zusammen mit der Linearität folgt daraus, dass das Produkt zweier KodewortPolynome c1 und c2 ebenfalls ein Kodewort ist:
c1 (x)c2 (x) (mod xn − 1) ∈ C
Dies ist offensichtlich wenn man die Multiplikation als eine Linearkombination von
xi c2 (x) sieht.
Definition: Ein Polynom g(x) heißt Generator-Polynom von Kode C wenn für jedes
Kodewort c(x) und das dazugehörige Nachrichtenwort w(x) gilt: c(x) = w(x) ∗ g(x).
Damit ist ein Kodewort ein Vielfaches des Generator-Polynoms.
Jeder zyklische Kode besitzt ein eindeutiges Generator-Polynom mit minimalem
Grad.
4.1 Reed-Solomon Kodes
Reed-Solomon Kodes(RS-Kodes) sind zyklische Kodes die vielerlei Anwendung finden, zum Beispiel bei der Kodierung von CD’s oder bei der Übertragung von Nachrichten in der Raumfahrt.
Man wählt einen Vektor a = (a1 , a2 , ..., an ) wobei die ai jeweils verschieden sein
müssen. Daraus folgt, dass eine Betrachung von F2 nur bedingt Sinn macht, da n
10
auf zwei beschränkt ist, deshalb betrachtet man bei RS-Kodes Fq . Es muss dann
offensichtlich n ≤ q gelten.
Fq ist nur dann ein Körper, wenn q eine Primzahlpotenz ist, deshalb wird dies im
folgenden vorausgesetzt.
Die Nachricht m wird als Polynom p(x) betrachtet, wie im vorigen Abschnitt beschrieben. Zu einer Nachricht p(x) ist das Kodewort dann p = (p(a1 ), p(a2 ), ..., p(an )).
Satz: Ein RS-Kode hat die Parameter (n, k, n − k + 1).
Beweis: Zu zeigen ist lediglich, dass die Minimaldistanz d den Wert n − k + 1 besitzt,
n und k ergeben sich direkt aus der Definition.
Seien m1 , m2 zwei Nachrichten für die gilt m1 6= m2 , die dazugehörigen Kodewörter p1 und p2 sind die n Stellen des Polynoms für x = a1 , x = a2 : ... x = an .
Nach Definition sind diese x Werte verschieden. Nun kann der Fundamentalsatz der
Algebra angewandt werden: Zwei unterschiedliche Polynome mit Grad ≤ k haben
≤ k − 1 Schnittpunkte. Es wurden n Punkte ausgewertet, schlimmsten Falls befinden sich alle Schnittpunkte darunter also sind noch n−(k−1) Punkte verschieden. Eine Dekodierung kann ebenfalls über das Syndrom durchgeführt werden, allerdings
bieten Verfahren an, die auf Schaltungen effizienter durchzuführen sind.
Reed-Solomon Kodes haben neben der effizienten Kodierung und Dekodierung noch
andere Vorteile gegenüber allgemeinen linearen oder zyklischen Kodes.
Ein großer Vorteil ist, dass die Mindestdistanz nicht nur bekannt ist, sondern sogar
über die anderen beiden Parameter fixiert werden kann.
Für (binäre) lineare Kodes hingegen, ist das Problem den Mindestabstand zu berechnen NP-Hart, das zugehörige Entscheidungsproblem NP-vollständig[6].
11
5 Literaturverzeichnis
[1] Rudi Piotraschke Dagmar Schönfeld, Herbert Kliment. Informations- und Kodierungstheorie. Springer, 2012.
[2] D. G. Hoffman. Coding Theory - The Essentials. Marcel Dekker Inc, 1991.
[3] Dirk W. Hoffmann. Einführung in die Informations- und Codierungstheorie.
Springer, 2014.
[4] Ralph-Hardo Schulz. Codierungstheorie - Eine Einführung. Vieweg, 1991.
[5] C. E. Shannon. A mathematical theory of communication. The bell System
Technical Journal, 1948.
[6] Alexander Vardy. The intractability of computer the minimum distance of a
code. Transactions on Information Theory, 1997.
12