Einführung in die Kodierungstheorie
Transcription
Einführung in die Kodierungstheorie
Einführung in die Kodierungstheorie • • • • • • • • • • • • Einführung Vorgehen Beispiele Definitionen (Code, Codewort, Alphabet, Länge) Hamming-Distanz Definitionen (Äquivalenz, Coderate, …) Singleton-Schranke Lineare Codes Hamming-Gewicht Generator/Kontrollmatrix Syndrom-Decodierung Hamming-Codes Einführung Vorgehen bei FEC Kanal mit Störungen Sender Encoder Decoder Empfänger • Kapselung von Nutzdaten mit Redundanzen zu Codewörtern • Übermittlung der Codewörter zum Empfänger • Decodieren der Codewörter zu Nutzdaten + Erkennen/Beseitigen von Fehlern parity check Zu senden ist ein Wort w mit der Länge von n Bits. Codierung: hänge noch ein Bit p zu den Nutzdaten so, dass folgendes gilt: n ∑ b ≡ 0 (mod 2) i=0 i wobei bb 0 1 " bn = wp z.B. wird die Nachricht 101010 zu 1010101 codiert. Decodierung: Ist die Summe der übertragenen Bits ungerade, deutet das auf einen Fehler hin. Eine Korrektur des Fehlers ist nicht möglich. Wiederholungscode Alphabet {A,B,C,D} Codierung: Um einen Buchstaben zu übertragen, senden wir diesen dreimal. Also für D senden wir DDD. Decodierung: Bei der Übertragung passiert ein Fehler, wir empfangen DDC. Wir decodieren nach den am öftesten auftretenden Buchstaben: D. Empfangen wir stattdessen DBC, ist die Korrektur nicht mehr möglich. Hamming [7,4] code Die zu sendende Nachricht wird in Blöcke aus 4 Bits unterteilt. ⎛ 1 0 0 0 1 1 0⎞ Codierung: Jedem ⎜ 0 1 0 0 1 0 1⎟ ⎟ = [ I4 P ] G=⎜ Block wird durch ⎜ 0 0 1 0 0 1 1⎟ Multiplikation (mod 2) ⎜ ⎟ 0 0 0 1 1 1 1 ⎝ ⎠ mit der Matrix G ein Codewort mit 7 Bits zugewiesen. z.B. das zu b = (1, 0, 0, 1) zugehörige Codewort wäre c := b× G ≡ (1, 0, 0, 1, 0, 0, 1) (mod 2) Hamming [7,4] code Decodierung: Bilde die Matrix H aus P und der Einheitsmatrix I3 wie folgt: ⎛1 ⎜1 ⎜ ⎜0 ⎡P ⎤ ⎜ H := ⎢ ⎥ = ⎜ 1 ⎣ I3 ⎦ ⎜ 1 ⎜ ⎜0 ⎜0 ⎝ 1 0⎞ 0 1 ⎟⎟ 1 1⎟ ⎟ 1 1⎟ 0 0⎟ ⎟ 1 0⎟ 0 1 ⎟⎠ Angenommen, es wird statt dem gesendeten b= ( 1 0 0 1 0 0 1) ein b' = ( 1 0 0 0 0 0 1) empfangen. Multipliziert man nun b‘ mit H, so ergibt das: b'× H ≡ (1 1 1) (mod 2) Das ist die 4-te Zeile von H, also ist der Fehler an der 4-ten Stelle. Definitionen • Ein Code wird identifiziert mit der Menge seiner Codewörter. • Symbole aus denen die Codewörter bestehen bilden ein Alphabet. • Hat das Alphabet q Symbole, nennt man den Code q-när. • Ein Code hat die Länge n genau dann, wenn seine Codewörter die Länge n haben. • Elemente eines Codes nennt man Codewörter. Hamming-Distanz 2 • Hamming-Distanz: d(u,v) ist 1 die Anzahl der Stellen, an denen sich die Vektoren u und v unterscheiden. • Minimaldistanz: d(C) ist die kleinste Hamming-Distanz zwischen den Vektoren aus C. 1 Formal: d(C) := min {d(u, v) u, v ∈ C; u ≠ v} • Minimal-Distanz-Decodierung: Korrektur der Fehler im Vektor durch das Finden eines Codeworts mit der kleinsten Hamming-Distanz zu diesem. Hamming-Distanz 1. Ein Code C erkennt bis zu s Fehler, wenn d(C) ≥ s + 1 2. Ein Code C korrigiert bis zu t Fehler, wenn d(C) ≥ 2t + 1 Zu 1: Angenommen, ein Codewort c wird gesendet und kommt als v beim Empfänger mit bis zu d(C)-1 Fehlern an. Dann ist es kein anderes Codewort, da d(c, v) = d(C) − 1 < d(C ) d C c2 r c1 r d(C ) − 1 r= 2 Definitionen • Einen Code C der Länge n, mit M:=|C| Codewörtern und minimaler Distanz d:=d(C), nennt man (n,M,d) Code. n – parity check ist ein (n+1,2 ,2) Code – Wiederholungscode ist ein (3,4,3) Code 4 – Hamming [7,4] Code ist ein (7,2 ,3) Code • Zwei Codes C und C‘ sind äquivalent, wenn man durch Permutationen von Stellen und Symbolen aus den Codewörtern des einen die Codewörter des anderen Codes erhält. Stellenpermutation c = (c1,", cn ) 6 c' = (cσ (1) ,", cσ ( n ) ) Symbolpermutation c = (c1,", cn ) 6 c' = (σ (c1 ),",σ (c2 )) Definitionen • Haben wir einen q-nären (n,M,d) Code, so definieren wir die Coderate/Informationsrate wie folgt: logq M R= n log 4 1 – Coderate von Wiederholungscode: R = 4 = 3 3 log2 16 4 – Coderate von Hamming [7,4] Code: R = = 7 7 • Für einen (n,M,d) Code C definieren wir den relativen d Minimalabstand: δ (C ) := n Singleton-Schranke • Für einen q-nären (n,M,d) Code C gilt: M ≤ qn−d+1 Beweis: Entfernt man aus jedem Codewort die letzten d-1 Symbole, erhält man M verschiedene Vektoren aus An-(d-1). Die Anzahl solcher Vektoren ist höchstens qn−d+1. • Codes, deren Distanz die Singleton-Schranke erreicht, nennt man MDS Codes (maximum distance separable). Lineare Codes • Ein Linearer Code mit der Länge n und Dimension k über einem endlichen Körper K ist ein k-dimensionaler Unterraum von Kn. Solchen Code nennt man [n,k] Code. Ist d :=d(C), dann nennt man den Code [n,k,d] Code. – Hamming [7,4] Code ist Linear. – Parity check ist Linear Hamming-Gewicht • Wir Definieren Hamming-Gewicht w(u) des Vektors u als die Anzahl an Stellen ungleich Null. Formal: w(u ) = d(u,0); 0 ist der Nullvektor • Es sei C ein linearer Code. Dann ist d(C) gleich dem kleinsten Hamming-Gewicht aus allen Codewörtern ungleich Null. d(C ) = min {w(u ) | 0 ≠ u ∈ C} Beweis: Es existieren zwei Codewörter v und w, so dass d(v,w)=d(C). Dann gilt d(v, w) = w(v − w) = d(C ) Generatormatrix • Zur Konstruktion eines beliebigen linearen [n,k] Codes erzeugt man einen k-dimensionalen Unterraum von Kn. • Die (k×n)-Matrix G,bestehend aus k Basisvektoren, nennt man Generatormatrix (generating matrix). • Die durch Permutation ⎛1 0 ⎞ der Spaltenvektoren ⎜ ⎟ erhaltene Matrix G = ⎡⎣ Ik P ⎤⎦ = ⎜ % P⎟ heißt von ⎜0 ⎟ 1 ⎝ ⎠ reduzierter Form (systematic). Kontrollmatrix • Es sei C ein linearer [n,k] Code. Die Matrix H heißt Kontrollmatrix für C wenn: v ∈ C ⇔ vHT = 0 • Haben wir für einen Code die Generatormatrix G=[Ik,P], dann ist H=[-PT,In-k] die Kontrollmatrix für diesen Code. ⎛ 1 0⎞ ⎜ ⎟ T T H = ⎡⎣ −P In−k ⎤⎦ = ⎜ −P % ⎟ ⎜ ⎟ 0 1 ⎝ ⎠ Syndrom-Decodierung • Es sei C ein linearer [n,k] Code und Vektor u ∈ K n . Die Menge u + C = {u + c c ∈ C} heißt Nebenklasse (coset) von C. • Vektor mit dem kleinsten Hamming-Gewicht in seiner Nebenklasse heißt Nebenklassenführer (coset leader). • Der Vektor S(u)=uHT heißt Syndrom von u. • Zwei Vektoren u, v gehören zur selben Nebenklasse genau dann, wenn sie den gleichen Syndrom haben. Formal: u − v ∈ C ⇔ (u − v)HT = 0 ⇔ S(u ) = uHT = vHT = S(v) Syndrom-Decodierung • Syndrom-Decodierungs-Algorithmus: 0. Initialisierung: Erstelle Tabelle mit Nebenklassenführern und den dazugehörigen Syndromen 1. Berechne Syndrom S(r)=rHT für den empfangenen Vektor r. 2. Finde in der Tabelle den Nebenklassenführer c0 mit dem gleichen Syndrom S(c0)=S(r) 3. Decodiere r als r-c0 Hamming-Codes • Binäre Hamming-Codes haben folgende Parameter: m 1. Code-Länge: n=2 -1 m 2. Dimension: k=2 -m-1 3. Minimal-Distanz: d=3 • Für einen binären Hamming-Code der Länge n: 1. erstelle (m×n)-Matrix deren Spalten allen binären m-Tupeln ungleich Null entsprechen. 2. durch Überführung der Matrix in reduzierte Form (systematic) erhalten wir die Kontrollmatrix H für den Hamming [n,k] Code 3. dann bildet man aus H=[-PT,In-k] die Generatormatrix G=[Ik,P] Hamming-Codes • Hamming-Decodierungs-Algoritmus: 1. Berechne Syndrom S(y)=yHT für den empfangenen Vektor y. Wenn S(y)=0, dann gibt es keine Fehler. 2. Sonst, suche die Position j der Spalte von H die gleich dem transponierten Syndrom ist. 3. Ändere das j-te Bit von y und gebe das Ergebnis zurück.