1 / 70

1.1 Einführung

Kapitel 1: Codierungstheorie Inhalt: 1.1 Einführung 1.2 Quellcodierung 1.3 Fehlererkennende Codes 1.4 Fehlerkorrigierende Codes. 1.1 Einführung. In der Codierungstheorie unterscheidet man Quellcodierung und Kanalcodierung .

franz
Download Presentation

1.1 Einführung

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Kapitel 1: CodierungstheorieInhalt:1.1 Einführung 1.2 Quellcodierung 1.3 Fehlererkennende Codes 1.4 Fehlerkorrigierende Codes

  2. 1.1 Einführung In der Codierungstheorie unterscheidet man Quellcodierung und Kanalcodierung. 1. Die Quellcodierung hat zum Ziel, Daten so zu transformieren, dass sie gut übertragen werden können. 2. Die Kanalcodierung hat zum Ziel, Daten so zu transformieren, dass bei der Übertragung auftretende Fehler erkannt und evtl. sogar korrigiert werden können.

  3. Quellcodierung Bei der Quellcodierung sind zwei Aspekte wichtig: (a) Oft treten Daten in einer Form auf, die sich nicht zur Übermittlung eignet. Diese Quelldaten müssen codiert werden, damit sie überhaupt übertragen werden können. Beispiele:- Flaggencode- Digitalisierung von Sprache, Bildern, ...- Morse-Code: a = • –, b = – • • •, ...- ASCII-Code: a = 10000010, b = 10000100, ... (b) Die Daten sollen möglichst ökonomisch übertragen werden. Dazu sollen sie so gut wie möglich komprimiert werden.

  4. Kanalcodierung Der Kanalcodierung liegt folgende Situation zugrunde: Ein Sender will einem Empfänger gewisse Daten über einen Kanal übermitteln. Dabei können zufällige Fehler vorkommen.Diese Fehler treten in der Regel aus physikalischen Gründen auf. Beispiele:- Tippfehler bei Eingaben über eine Tastatur- Kratzer auf einer CD- Atmospherische Störungen („Rauschen“) bei einer Funkübertragung

  5. Kommunikationsmodell der Kanalcodierung Der Sender codiert einen Datensatz d zu einer Nachricht c (Codewort); diese wird über den Kanal geschickt. Der Empfänger versucht durch Decodieren zu erkennen, ob Fehler aufgetreten sind, und evtl. den Datensatz wieder zu rekonstruieren.

  6. Fehlererkennung und -korrektur Beifehlererkennenden Codes wird – wenn ein Fehler passiert – angezeigt, dass etwas nicht stimmt. Die Übertragung muss daraufhin wiederholt werden. Für viele Anwendungen ist das ausreichend. Beispiele: Kontonummern, Buchnummern, Artikelnummern, ... Manchmal ist eine wiederholte Übertragung aber sehr aufwendig oder überhaupt nicht möglich. Dann benötigt man fehlerkorrigierende Codes. Beispiele: CD-Player, Datenfernübertragung zwischen Computern (Internet), Übertragung von Planetenfotos von Satelliten zur Erde, ...

  7. 1.2 Quellcodierung Sei {s1, s2, ..., sn} eine Quelle mit den Quellzuständensi, die jeweils mit der Häufigkeit oder Wahrscheinlichkeit pi auftreten. Beispiele:(a) Im Deutschen treten die Buchstaben des Alphabets mit folgenden Wahrscheinlichkeiten auf:e: 17,4 %, n: 9,78 %, i: 7,55 %, s: 7,27 %, r: 7,00 %, a: 6,51 %, ... (b) Seien s1, s2, ..., sn die verschiedenen Bytes, die in einem Computerprogramm auftreten. Dabei trete si mit der Häufigkeit pi auf. Wir möchten dieses Programm so gut wie möglich komprimieren.

  8. Der Huffman-Code Wir wollen uns im Folgenden auf binäre Codierung beschränken. Der wichtigste Code zur Datenkomprimierung ist der Huffman-Code. Er beruht auf der Idee, häufig vorkommende Zeichen in möglichst kurze Codewörter zu transformieren. Beispiel: Wir betrachten folgende 8 Quellzustände und Häufigkeiten:

  9. Beispiel zum Huffman-Code

  10. Die Schritte beim Huffman-Code • In jedem Schritt werden die Quellzustände mit den kleinsten Häufig-keiten zu einem neuen Quellzustand kombiniert, dessen Häufigkeit die Summe der „alten“ Häufigkeiten ist ( + = ).Dies wird solange durchgeführt bis nur noch zwei Zustände übrig sind.- Von diesen beiden Quellzuständen erhält der häufigere eine 0, der seltenere eine 1 als Code.- Jetzt geht es rückwärts: Der Code eines Quellzustands im Schritt k sei b1b2...bm. Wenn dieser Zustand auch im Schritt k-1 vorkommt, dann erhält er dort die gleiche Codierung. Wenn der Zustand aus den Zuständen su und sv kombiniert wurde (o.B.d.A. sei su häufiger), dann erhält su den Code b1b2...bm0 und sv erhält b1b2...bm1.

  11. Die durchschnittliche Codewortlänge Sei S = {s1, s2, ..., sn} eine Quelle mit den Quellzuständensi, die jeweils mit der Wahrscheinlichkeit pi auftreten. Unter einem binären Code werde si in c(si) codiert. Sei l(si) die Länge des Codeworts c(si). Wir definieren die durchschnittliche Codewortlänge l* als l* = p1· l(s1) + p2· l(s2) + ... + pn· l(sn) . Beispiel: Im obigen Beispiel gilt l* = 0,22·2 + 0,2·2 + 0,18·3 + 0,15·3 + 0,1·3 + 0,08·4 + 0,05·5 + 0,02·5 = 2,8

  12. Wie gut ist der Huffman-Code? Der Huffman-Code ist im folgenden Sinne „optimal“. 1.2.1 Satz. Sei S = {s1, s2, ..., sn} eine Quelle mit den zugehörigen Wahrscheinlichkeiten pi. Dann gilt es keinen Code, der eine kleinere durchschnittliche Codewortlänge als der Huffman-Code hat. Beweis durch Induktion nach n. Wenn der Code in einem Schritt k „optimal“ ist, dann liefert das Vorgehen beim Huffman-Code auch im Schritt k-1 einen optimalen Code.  Bemerkung. Man kann zeigen, dass der Huffman-Code eindeutig decodierbar ist.

  13. 1.3 Fehlererkennende Codes Schon die alten Römer wussten es: „Errare humanum est”. Wir betrachten Fehler beim Übertragen von Daten, die durch zufälligeStörungen hervorgerufen werden. Folgen: falsche Geldüberweisungen, Artikellieferungen ,... Die Fehler, die wir behandeln, sind Veränderungen von Zeichen. Keine Fehler in diesem Sinne sind also Verlust oder Hinzufügen von Zeichen. Mit Hilfe fehlererkennender Codes soll der Empfänger entscheiden können, ob die empfangene Nachricht Fehler enthält oder nicht.

  14. Fehlererkennung im täglichen Leben • Namen buchstabieren („Zet-es-zeh-ha-i-e-ge-en-e-er“) • Buchstabieralphabete („A wie Anton, B wie Berta, ...“) • Sprachen sind so redundant (haben so viel überschüssige Informa-tion), dass man alls vrsteht, auc wnn einge Bchstbn fhln. Selpst wen groppe recktscreib Felr auftren ged dr ßinn nich färlohn. Grundidee: Man fügt der Nachricht etwas hinzu - eine „Kontrollinforma-tion“, die nur dazu dient, eventuelle Übertragungsfehler zu erkennen.

  15. Die Idee: Eine Prüfziffer! Das Szenario: Als Daten wollen wir 4-stellige Zahlen übermitteln. Der Empfänger soll merken, ob die Daten korrekt sind oder nicht. Die Idee:Wir fügen eine Ziffer hinzu, und zwar so, dass die Quersumme dieser (5-stelligen) Zahl durch 10 teilbar ist! Diese hinzugefügte Ziffer heißt Prüfziffer. Beispiele:(a) Der Datensatz 1234 hat die Prüfziffer 0.(b) Der Datensatz 4813 hat die Prüfziffer 4.

  16. Wie wird der Fehler erkannt? Woran merkt der Empfänger, dass ein Fehler aufgetreten ist? Der Empfänger bildet die Quersumme der empfangenen (5-stelligen) Zahl.- Wenn diese durch 10 teilbar ist, so akzeptiert er die Nachricht und nimmt die ersten vier Stellen als Daten.- Wenn die Quersumme nicht durch 10 teilbar ist, so weiß er, dass ein Fehler passiert ist und fordert die Nachricht erneut an. Beispiel: Wird die Zahl 12345 empfangen, so muss beim Übertragen ein Fehler aufgetreten sein, denn 1+2+3+4+5=15 ist nicht durch 10 teilbar.

  17. Paritätscodes Die Daten seien binäre Folgen der Länge n-1, D die Menge aller Daten: D = {(b1, ..., bn-1) | bi  {0, 1}}. Wir erhalten die codierte Nachricht, indem wir ein n-tes Bit anhängen, so dass die Summe aller Bits gerade ist: M = {(b1, ..., bn-1, bn) | bi  {0, 1} und bi mod 2 = 0}. Codierung: Wenn b1 + ... + bn-1 gerade ist, setzt der Sender bn = 0, sonst bn = 1.Decodierung: Der Empfänger überprüft, ob die Summe der Bits in der empfangenen Nachricht gerade ist. Falls ja, akzeptiert es die Nachricht; falls nein, akzeptiert es sie nicht.

  18. Der Paritätscode ist 1-fehlererkennend Die Menge M = {(b1, ..., bn-1, bn) | bi  {0, 1} und bi mod 2 = 0}. heißt Paritätscode der Länge n zur Basis 2. Die Elemente von M heißen Codewörter. Beobachtung: Der Paritätscode ist ein 1-fehlerekennender Code.Das heißt, wenn höchstens ein Fehler passiert, wird dieser entdeckt. Bemerkung: Wenn 2 (oder eine gerade Anzahl) Fehler passieren, akzeptiert der Empfänger die Nachricht, obwohl sie Fehler enthält.

  19. Verallgemeinerung: Paritätscodes über Gruppen Sei G eine Gruppe und sei c ein beliebiges Element von G. Die Menge C = {(g1, ..., gn-1, gn) | gi G und g1 ...  gn-1 gn = c} ist ein Paritätscode der Länge n über der Gruppe G. Wie können uns (g1, ..., gn-1) als Informationssymbole („Daten“) und gn als Prüfsymbol vorstellen. Berechnung des Prüfsymbols: gn = gn-1-1  gn-2-1  ...  g1-1  c. Beispiele: (a) G = Z2 = {0, 1}, c = 0: Vorheriges Beispiel (Folie 17). (b) G = Z10, c = 0: Dezimalcode von Folie 15.

  20. 1-Fehlererkennung bei Paritätscodes über Gruppen 1.3.1 Satz. Paritätscodes über Gruppen sind 1-fehlererkennend. Beweis. Sei (g1, ..., gn-1, gn) ein Codewort. Dann ist g1 ...  gn-1 gn = c. Angenommen, das i-te Symbol gi wird durch ein anderes Symbol gi‘ ersetzt (ein Fehler an der i-ten Stelle passiert). Würde der Empfänger die Nachricht (g1, ..., gi-1, gi‘, gi+1, ... , gn-1, gn) akzeptieren, so müsste gelten g1 ...  gi-1  gi‘ gi+1  ...  gn-1 gn = c. Zusammen folgt gi = gi‘. Das ist ein Widerspruch. 

  21. Vertuaschungsfehler Bisher haben wir nurEinzelfehler betrachtet:Ein Zeichen wurde durch ein anderes ersetzt. Beispiel: Statt 1357 liest man 1857. Jetzt betrachten wir Vertauschungsfehler: Zwei aufeinanderfolgende Zeichen werden vertauscht. Beispiel: Statt 1357 liest man 1375. Paritätscodes erkennen Vertauschungsfehler im Allgemeinen nicht.Wenn G eine abelsche Gruppe ist, wird kein Vertauschungsfehler erkannt. Wenn G nichtabelsch ist, werden manche Vertauschungs-fehler erkannt, aber niemals alle (denn jedes Element ist stets mit seinem Inversen und mit dem neutralen Element vertauschbar).

  22. Paritätscodes mit Gewichten Problem: Wie können wir benachbarte Stellen unterscheiden? Neue Idee:Wir versehen jede Stelle mit einem „Gewicht”! Sei G die Gruppe (Zm, +) und c  Zm. Seien w1, ..., wn-1, wn  Zm. Dann ist C = {(z1, ..., zn-1, zn) | zi Zm und w1z1 + ... + wn-1zn-1 + wnzn = c} ein Paritätscode zur Basis m mit den Gewichten w1, ..., wn. Beispiel: Wir erhalten den ursprünglichen Paritätscode (ohne Gewichte) zurück, wenn wir w1 = ... = wn = 1 setzen.

  23. 1-Fehlererkennung bei Paritätscodes mit Gewichten 1.3.2 Satz. Obiger Paritätscode mit Gewichten ist genau dann 1-fehlererkennend, wenn gilt w1, ..., wn-1, wn  Zm*. Beweis. „“Sei (z1, ..., zn-1, zn) ein Codewort. Dann ist w1z1 + ... + wn-1zn-1 + wnzn = c. Angenommen, das i-te Symbol zi wird durch zi‘  zi ersetzt. Wäre auch (z1, ..., zi-1, zi‘, zi+1, ... , zn-1, zn) ein Codewort, so müsste gelten w1z1 + ... + wi-1zi-1 + wizi‘ + wi+1zi+1 + ... + wn-1zn-1 + wnzn = c. Subtraktion der beiden Gleichungen liefert wizi - wizi‘ = wi(zi - zi‘) = 0. Da wi invertierbar ist, folgt zi - zi‘ = 0, also zi = zi‘: Widerspruch.

  24. Fortsetzung des Beweises „“Angenommen, wi wäre nicht aus Zm*. Dann ist t := ggT(m, wi) > 1. Dann wird die Veränderung von zi := m/t zu zi‘ := 0 nicht erkannt!(Denn: Sei wi = kt. Sei (z1, ..., zi, ..., zn) ein Codewort mit zi := m / t. Dann ist c = w1z1 + ... + wizi + ... + wnzn = w1z1 + ... + kt  m/t + ... + wnzn = w1z1 + ... + 0 + ... + wnzn (in Zm). = w1z1 + ... + wi  0 + ... + wnzn = w1z1 + ... + wi  zi‘ + ... + wnzn . Also ist auch (z1, ..., zi‘, ..., zn) ein Codewort, der Fehler an der i-ten Stelle wird nicht erkannt. ) 

  25. Der EAN-Code Fast jedes käufliche Produkt besitzt eine EAN (Europäische Artikel-Nummer) mit zugehörigem Strichcode. Die EAN ist entweder 13- oder 8-stellig. An letzter Stelle steht die Prüfziffer. Sie wird nach einem Paritätscode zur Basis 10 mit den Gewichten 1-3-1-...-1 (bei 13 Stellen) bzw. 3-1-3-...-1 (bei 8 Stellen) berechnet. Der EAN-Code erkennt alle Einzelfehler (nach 1.3.2), aber nicht alle Vertauschungsfehler!

  26. Erkennen von Vertauschungsfehlern 1.3.3 Satz. Ein Paritätscode zur Basis mmit Gewichten w1, w2, ..., wn erkennt genau dann alle Vertauschungsfehler an den Stellen i und j, falls die Zahl wi wj teilerfremd zu m ist. Beweis. Sei (z1, z2, ..., zn) ein Codewort; das bedeutet, dass gilt w1z1 + w2z2 + ... + wnzn = c.Nun mögen die Einträge an den Stellen i und j vertauscht werden. Dann gilt: Der Empfänger bemerkt diesen Fehler nicht w1z1 + w2z2 + ... + wizj + ... + wjzi + ... + wnzn = c  wizi + wjzj– (wizj + wjzi) = 0  wi(zi – zj) + wj(zj – zi) = 0  (wi– wj)(zi – zj) = 0.

  27. Fortsetzung des Beweises Das bedeutet: Der Empfänger bemerkt jede solche Vertauschung, falls keine der möglichen Zahlen (wi– wj)(zi – zj) gleich 0 ist (in Zm), d.h. falls keine der Zahlen (wi– wj)(zi – zj) durch m teilbar ist. „“:Wenn die Zahlen m und wi– wj teilerfremd sind, dann teilt m keine der Zahlen (wi– wj)(zi– zj). Denn m müsste dann sogar zi – zj teilen, was wegen zi – zj m1 unmöglich ist. „“:Wenn andererseits die Zahlen m und wi– wj einen größten gemeinsamen Teiler t > 1 haben, dann wird die Vertauschung von zi := m/t und zj = 0 nicht erkannt. 

  28. Kann man Einzel- und Vertauschungsfehler erkennen? 1.3.4 Korollar. Für gerades m gibt es keinen Paritätscode zur Basis m, der alle Einzelfehler und alle Vertauschungsfehler an aufeinander-folgenden Stellen erkennt. Beweis. Sei C ein Paritätscode der Länge n zu einer geraden Basis m mit den Gewichten w1, w2, ...., wn.Wenn C alle Einzelfehler erkennt, müssen nach 1.3.2 alle Gewichte ungerade sein, da sie sonst nicht teilerfremd zu m wären. Also sind die Differenzen wi–wi+1 alle gerade. Daher kann C nach 1.3.3 nicht alle Vertauschungsfehler an aufeinanderfolgenden Stellen erkennen.  Beispiel: Dezimale Paritätscodes (m = 10) erkennen nie alle Einzel-fehler und alle Vertauschungsfehler an aufeinanderfolgenden Stellen.

  29. Der ISBN-Code Einer der besten Codes ist der ISBN-Code. Jedes Buch hat eine ISBN (International Standard Book Number). Diese hat 10 Stellen, in 4 Gruppen eingeteilt: 1. Sprachraum (z.B. 3 = deutsch) 2. Verlag (z.B. 528: Verlag Vieweg) 3. Nummer des Buches (z.B. 06783) 4. Prüfsymbol ISBN 3-528-06783-7

  30. Berechnung des ISBN-Prüfsymbols Sei a1a2a3... a9a10 eine ISBN. Das Prüfsymbol a10 wird so bestimmt, dass die Zahl 10a1 + 9a2 + 8a3 + 7a4 + 6a5 + 5a6 + 4a7 + 3a8 + 2a9 + 1a10 eine Elferzahl ist. Das Prüfsymbol kann gleich 0, 1, 2, ..., 9 oder 10 sein. Wenn sich 10 ergibt, so schreibt man X (römische Zehn). Beispiel: Für die ISBN 3-528-06783-? berechnen wir die Zahl 103 + 95 + 82 + 78 + 60 + 56 + 47 + 38 + 23 = 235. Die nächste Elferzahl ist 242, also muss das Prüfsymbol 7 sein.Die komplette ISBN lautet also 3-528-06783-7.

  31. Wie gut ist der ISBN-Code? 1.3.5 Satz. (a) Der ISBN-Code erkennt alle Einzelfehler.(b) Der ISBN-Code erkennt alle Vertauschungsfehler – sogar an belie-bigen Stellen. Beweis. Formal kann der ISBN-Code wie folgt beschrieben werden: {(a1, ..., a10)  10a1+ 9a2+ 8a3+ 7a4+...+ 3a8+ 2a9+ 1a10 mod 11 = 0}. Der ISBN-Code ist also ein Paritätscode zur Basis m = 11 mit den Gewichten 10, 9, ..., 1 und c = 0. Da Z11* = {1, 2, ..., 10} ist, liegen alle Gewichte und alle Differenzen von je zwei Gewichten in Z11*. Nach 1.3.2 und 1.3.3 werden daher alle Einzelfehler und beliebige Vertau-schungsfehler erkannt. 

  32. 1.4 Fehlerkorrigierende Codes Unser erstes Ziel ist es, die Eigenschaft, Fehler korrigieren zu können, zu präzisieren. Im Folgenden sei eine Nachricht stets ein binäres n-Tupel, also ein Element der Menge V := {0,1}n bzw. des Vektorraums GF(2)n. Problemstellung: Der Kanal addiert zu dem gesendeten Vektor c (der „Nachricht”) einen Fehlervektor e. Der Empfänger erhält den Vektor x = c + e. Die Aufgabe des Empfängers ist es dann, c aus x zu bestimmen.

  33. Hamming-Abstand Der zentrale Begriff der Codierungstheorie ist der des Hamming-Abstandes. Seien v = (v1, . . ., vn), w = (w1, . . ., wn) Î V. Der Abstand d(v, w) von v und w ist die Anzahl der Stellen, an denen sich v und w unter-scheiden: d(v, w) = |{i | vi¹ wi}|. Oft wird d auch als Hamming-Abstand bezeichnet (zu Ehren eines der Gründerväter der Codierungstheorie Richard W. Hamming).

  34. Der Hamming-Abstand als Metrik Der Hamming-Abstand d trägt den Namen „Abstand” zu Recht: 1.4.1 Lemma. Die Funktion d ist eine Metrik auf V. Beweis. Nachweis der Eigenschaften einer Metrik: (1) Da d(v, w) eine Anzahl ist, ist d(v, w) ³ 0; ferner gilt d(v, w) = 0 genau dann, wenn sich v und w an keiner Stelle unterscheiden, also wenn sie gleich sind.(2) Symmetrie: Offenbar gilt d(v, w) = d(w, v). (3) (3) Die Dreiecksungleichung nachzuweisen, ist etwas kniffliger: Seien u, v, w Î V; es ist zu zeigen: d(u, w) £ d(u, v) + d(v, w).

  35. Nachweis der Dreiecksungleichung Wir können o.B.d.A. annehmen, dass sich u und w genau an den ersten a = d(u, w) Stellen unterscheiden. Unter diesen a Stellen mögen b sein, an denen sich v und w unterscheiden (also u und v übereinstimmen); ferner gebe es c Stellen außerhalb der ersten a Stellen, an denen sich v von w unterscheidet. Natürlich ist dann d(v, w) = b + c. Daraus erkennt man d(u, v) = a – b + c. Es ergibt sich d(u, v) + d(v, w) = a – b + c + b + c = a + 2c ³ a = d(u, w). 

  36. Hammingkugeln Zur Beschreibung von Codes werden später die „Kugeln“ bezüglich der Hamming-Metrik von Nutzen sein. Sei v Î V, und sei r eine nichtnegative ganze Zahl. Dann heißt Sr(v) := {x Î V | d(x, v) £ r} die Kugelvom Radius r um den Mittelpunkt v. Man spricht dabei auch von Hammingkugeln.

  37. t-fehlerkorrigierende Codes Sei t eine natürliche Zahl. Eine Teilmenge C von V = {0,1}n heißt ein t-fehlerkorrigierender Code, falls für je zwei verschiedene Elemente v, w Î C gilt d(v, w) ³ 2t + 1. Mit anderen Worten: C Í V ist ein t-fehlerkorrigierender Code, wenn der Minimalabstand d(C) := min {d(c, c') | c, c' Î C, c ¹ c'} von C mindestens 2t + 1 ist. Wir nennen die Elemente eines Codes auch Codewörter.

  38. Lemma über Hammingkugeln 1.4.2 Lemma. Sei C ein t-fehlerkorrigierender Code. Dann gilt:(a) Zu jedem Vektor v Î V gibt es höchstens ein c Î C mit d(v, c) £ t.(b) Die Kugeln St(c) mit c Î C sind paarweise disjunkt. Beweis. (a) Angenommen, es gäbe zwei verschiedene Elemente c, c' Î C und einen Vektor v Î V mit d(v, c) £ t und d(v, c') £ t. Wegen der Dreiecksungleichung folgte daraus d(c, c') £ d(c, v) + d(v, c') £ 2t,im Widerspruch zu d(C) ³ 2t +1.(b) Angenommen, es gibt ein v Î V in St(c)  St(c') mitc, c' Î C, c ¹ c. Dann ist d(v, c) £ t und d(v, c') £ t: Widerspruch zu (a). 

  39. Warum „t-fehlerkorrigierend“? Als gesendete Nachrichten werden nur Codewörter zugelassen. Wenn während der Übertragung eines Codewortes c höchstens t Fehler auftreten, so hat der empfangene Vektor x höchstens den Abstand t zu c. Nach dem Lemma über Hammingkugeln gibt es nur ein Code-wort, das einen Abstand £ t zu x hat. Der Empfänger decodiertx zu c. Hier ist die Vorstellung der Kugeln besonders hilfreich: Die Tatsache, dass bei der Übertragung von c höchstens t Fehler auftreten, bedeutet, dass der empfangene Vektor jedenfalls noch inSt(c) liegt. Da nach obigem Lemma je zwei Kugeln um Codewörter disjunkt sind, kann der empfangene Vektor decodiert werden, und zwar zu dem Codewort, welches der Mittelpunkt der Kugel ist, in der x liegt.

  40. Das Ziel der Codierungstheorie Bemerkung. Wenn pro Codewort mehr als t Fehler auftreten, so wird der empfangene Vektor im allgemeinen nicht korrekt decodiert. In der Praxis wird man so vorgehen, dass man zunächst abschätzt, wie fehleranfällig der Kanal ist, dann die Zahl t entsprechend wählt und schließlich einen t-fehlerkorrigierenden Code konstruiert. Das Ziel der Codierungstheorie ist es, Codes zu konstruieren, die– einen großen Minimalabstand (und damit gute Fehlerkorrektureigen-schaften) haben und– für die es einen effizienten Decodieralgorithmus gibt.

  41. Beispiel Die folgenden 16 Vektoren aus V = {0,1}7 bilden einen 1-fehlerkorri-gierenden Code: 0000000 1111111 1110000 0001111 1001100 01100111000011 01111000101010 10101010100101 10110100011001 11001100010110 1101001

  42. Lineare Codes Der bisherige Ansatz ist unpraktikabel, denn: - Speichern des Codes (man muss jedes Codewort abspeichern), - Bestimmung des Minimalabstands (man muss je zwei Codewörter vergleichen, hat also quadratischen Aufwand in |C|)- Decodieralgorithmen (bei jedem empfangenen Vektor muss man alle Codewörter untersuchen). Für praktische Anwendungen besser: „Lineare Codes”. Ein Code C Í V heißt linear, falls C ein Unterraum des Vektorraums V (und nicht nur eine Teilmenge der Menge V) ist. Die Dimension von C wird oft mit k bezeichnet und wir nennen dann C einen linearen [n, k]-Code.

  43. Generatormatrix Erster Vorteil linearer Codes: Man braucht nur eine Basis von C zu kennen. Statt alle 2k Vektoren von C zu speichern, genügt es, die k Basisvektoren zu speichern. Sei c1, . . ., ck eine Basis eines linearen [n, k]-Codes C. Dann heißt die k×n-Matrix G, deren i-te Zeile der Basisvektor ci ist, eine Generatormatrix von C. Beispiel. Eine Generatormatrix des obigen Beispielcodes (Folie 41) ist G =

  44. Minimalgewicht Das Gewicht w(x) eines Vektors x Î V ist die Anzahl der von 0 verschiedenen Stellen von x: w(x) = d(x, 0). Das Minimalgewicht w(C) des Codes C ist definiert als w(C) := min {w(c) | c Î C, c ¹ 0}. 1.4.3 Lemma. Sei C ein linearer Code. Dann gilt d(C) = w(C). Zweiter Vorteil linearer Codes: Um den Minimalabstand und damit die Fehlerkorrekturqualität von C zu bestimmen, muss man also nur das Minimalgewicht ausrechnen; dazu braucht man höchstens |C| Schritte.

  45. Beweis des Lemmas Beweis. Für jeden Code, der den Nullvektor enthält, gilt d(C) = min{d(c, c') | c, c' Î C, c ¹ c'} £ min{d(c, 0) | c Î C, c ¹ 0} = w(C). Noch z.z.: Es gibt ein Codewort c0 vom Gewicht d(C). Seien c, c' Î C mit d(c, c') = d(C). Dann gilt: w(c–c') = d(c–c', 0) = d(c–c'‚ c'–c') = d(c, c') = d(C). Da C linear ist, ist c0 := c–c' Î C. Damit ist alles gezeigt. 

  46. Dualer Code Dritter Vorteil linearer Codes: Sie erlauben effizientes Decodieren. Dazu müssen wir etwas ausholen. Sei C Í V ein Code. Der zu C duale Code C^ ist wie folgt definiert: C^ := {v Î V | cv = 0 für alle c Î C}; dabei ist das innere Produkt cv der Vektoren c = (c1, . . ., cn) und v = (v1, . . ., vn) erklärt durch cv = c1v1 + c2v2 + . . . + cnvn. Wenn cv = 0 ist, so sagt man auch, dass c und v orthogonal sind.

  47. Dimensionsformel für den dualen Code 1.4.4 Satz. Ist C ein linearer [n, k]-Code der Dimension k, so ist C^ ein linearer Code der Dimension n–k. Beweis. Unabhängig davon, ob C linear ist oder nicht, ist C^ ein Unterraum von V. Noch z.z.: dim C^ = n–k. Dazu betrachten wir eine Generatormatrix G mit den Zeilen c1, . . , ck von C. Dann gilt: C^ = {v Î V | civ = 0, i = 1, . . ., k}, d.h. C^ besteht aus den Lösungen v = (v1, . . ., vn) Î V des homogenen Gleichungs-systems mit der Koeffizientenmatrix G. Die Dimension des Lösungs-raums ist gleich n–Rang(G). Da die Zeilen von G eine Basis von C bilden, hat G den Rang k. Also gilt dim(C^) = n–k. 

  48. Satz vom „Bidualcode“ 1.4.5 Satz. Sei C ein linearer Code. Dann ist C^^ = C. Beweis. Zunächst zeigen wirC Í C^^: Die Menge C^^ besteht aus all den Vektoren, die orthogonal zu allen Vektoren aus C^ sind; dazu gehören aber bestimmt die Vektoren aus C, da C^ ja die Menge derjenigen Vektoren ist, die orthogonal zu jedem Vektor aus C sind. Wenn wir die Dimensionsformel auf C^ anwenden, erhalten wir dim(C^^) = n – dim(C^) = n – (n–k) = k = dim(C). Zusammen folgt C^^ = C. 

  49. Kontrollmatrix und Syndrom Sei C Í V ein linearer Code. Eine Matrix H, deren Zeilen eine Basis des dualen Codes C^ bilden, heißt eine Kontrollmatrix von C. Da C^ die Dimension n–k hat, ist H eine (n–k)n-Matrix. Für das effiziente Decodieren ist der Begriff des „Syndroms“ wichtig. Für jeden Vektor v Î V definieren wir sein Syndrom als s(v) := vHT, wobei HT die zur Kontrollmatrix H transponierte Matrix ist. Ein Syndrom ist also ein binärer Vektor der Länge n–k.

  50. Satz über die Kontrollmatrix 1.4.6 Satz. Ist C ein linearer Code mit Kontrollmatrix H, so gilt C = {v Î V | s(v) = 0}. Beweis. Sei v Î V beliebig. Dann gilt s(v) = 0 Û vHT = 0 Û v ist orthogonal zu allen Vektoren einer Basis von C^ Û v Î C^^ Û v Î Cwegen C^^ = C. 

More Related