Gruppencode

In der Kodierungstheorie (Informatik) versteht man unter einem Gruppencode eine spezielle Codierung, die man zur Fehlererkennung und Fehlerkorrektur verwenden kann. Für die Codierung wird eine Gruppe (algebraische Struktur) verwendet.

Codierung

Ein Gruppencode ist ein Blockcode, das heißt alle Codewörter haben die gleiche Länge (Im weiteren bezeichnen wir die Länge der Codewörter mit n {\displaystyle n} ).

Zur Kodierung verwendet man als Alphabet eine beliebige abelsche Gruppe ( A , + ) {\displaystyle (A,{\mathord {+}})} , meist ( { 0 , 1 } , + ) {\displaystyle (\{0,1\},{\mathord {+}})} , die zyklische Gruppe der Ordnung zwei, da man deren beiden Elemente mit den Bits 0 und 1 identifizieren kann.

Die quellkodierten Wörter sind die Elemente der Gruppe ( A , + ) k {\displaystyle (A,{\mathord {+}})^{k}} . (Alle Wörter mit Symbolen aus A {\displaystyle A} der Länge k {\displaystyle k} )

Um die Gruppe ( A , + ) k {\displaystyle (A,{\mathord {+}})^{k}} zu Codieren wählt man einem injektiven Homomorphismus f : ( A , + ) k ( A , + ) n {\displaystyle f\colon (A,{\mathord {+}})^{k}\to (A,{\mathord {+}})^{n}} . Das Bild von f {\displaystyle f} ist eine Untergruppe ( C , + ) {\displaystyle (C,{\mathord {+}})} von ( A , + ) n {\displaystyle (A,{\mathord {+}})^{n}} .

C {\displaystyle C} ist der Gruppencode. f {\displaystyle f} die zugehörige Kodierungsfunktion.

Im Gegensatz zu „willkürlichen“ Codierungen muss f {\displaystyle f} nicht für jedes Codewort extra angegeben (gespeichert) werden, sondern es reicht f {\displaystyle f} für ein erzeugendes System der Gruppe ( A , + ) k {\displaystyle (A,{\mathord {+}})^{k}} zu definieren. Die Codierung der restlichen Elemente kann dann mittels deren Darstellung als Summe von erzeugenden Elementen berechnet werden.

Beispiele

Beispiel 1

Gruppe ( { 0 , 1 } , + ) {\displaystyle (\{0,1\},{\mathord {+}})}

Quellcodierung: ( { 0 , 1 } , + ) 3 {\displaystyle (\{0,1\},{\mathord {+}})^{3}}

erzeugendes System: e 1 = ( 1 , 0 , 0 ) {\displaystyle e_{1}=(1,0,0)} , e 2 = ( 0 , 1 , 0 ) {\displaystyle e_{2}=(0,1,0)} , e 3 = ( 0 , 0 , 1 ) {\displaystyle e_{3}=(0,0,1)}

Codierung: f ( e 1 ) = ( 1 , 1 , 0 , 0 , 0 ) {\displaystyle f(e_{1})=(1,1,0,0,0)} , f ( e 2 ) = ( 0 , 0 , 1 , 1 , 0 ) {\displaystyle f(e_{2})=(0,0,1,1,0)} , f ( e 3 ) = ( 1 , 0 , 1 , 0 , 1 ) {\displaystyle f(e_{3})=(1,0,1,0,1)}

Sei nun c = ( 1 , 0 , 1 ) {\displaystyle c=(1,0,1)} ein Wort in Quellcodierung. Um die Codierung f ( c ) {\displaystyle f(c)} zu berechnen geht man wie folgt vor:

Man stellt c {\displaystyle c} als Summe von erzeugenden Elementen dar: c = ( 1 , 0 , 1 ) = e 1 + e 3 {\displaystyle c=(1,0,1)=e_{1}+e_{3}}

und berechnet dann die Summe der Codierungen der selbigen f ( c ) = f ( e 1 ) + f ( e 3 ) = ( 1 , 1 , 0 , 0 , 0 ) + ( 1 , 0 , 1 , 0 , 1 ) = ( 0 , 1 , 1 , 0 , 1 ) {\displaystyle f(c)=f(e_{1})+f(e_{3})=(1,1,0,0,0)+(1,0,1,0,1)=(0,1,1,0,1)}

Beispiel 2

Gruppe ( { 0 , 1 , x , x + 1 } , + ) {\displaystyle (\{0,1,x,x+1\},{\mathord {+}})} , die Kleinsche Vierergruppe

+ 0 1 x x+1
0 0 1 x x+1
1 1 0 x+1 x
x x x+1 0 1
x+1 x+1 x 1 0

Quellcodierung: ( { 0 , 1 , x , x + 1 } , + ) 2 {\displaystyle (\{0,1,x,x+1\},{\mathord {+}})^{2}}

erzeugendes System: e 1 = ( 1 , 0 ) {\displaystyle e_{1}=(1,0)} , e 2 = ( x , 0 ) {\displaystyle e_{2}=(x,0)} , e 3 = ( 0 , 1 ) {\displaystyle e_{3}=(0,1)} , e 4 = ( 0 , x ) {\displaystyle e_{4}=(0,x)}

Codierung: f ( e 1 ) = ( 1 , 0 , 0 ) {\displaystyle f(e_{1})=(1,0,0)} , f ( e 2 ) = ( 1 , 1 , 0 ) {\displaystyle f(e_{2})=(1,1,0)} , f ( e 3 ) = ( x , 1 , 1 ) {\displaystyle f(e_{3})=(x,1,1)} , f ( e 4 ) = ( 0 , 0 , x ) {\displaystyle f(e_{4})=(0,0,x)}

Sei nun c = ( 1 , x + 1 ) {\displaystyle c=(1,x+1)} ein Wort in Quellcodierung. c = e 1 + e 3 + e 4 {\displaystyle c=e_{1}+e_{3}+e_{4}} , f ( c ) = f ( e 1 ) + f ( e 3 ) + f ( e 4 ) = ( 1 , 0 , 0 ) + ( x , 1 , 1 ) + ( 0 , 0 , x ) = ( x + 1 , 1 , x + 1 ) {\displaystyle f(c)=f(e_{1})+f(e_{3})+f(e_{4})=(1,0,0)+(x,1,1)+(0,0,x)=(x+1,1,x+1)} ,

Eigenschaften

Gruppencodes erfüllen folgende Eigenschaften:

  • Die Codewörter bilden eine Gruppe
  • Bei einem binären Gruppencode ist die Distanzverteilung jeweils gleich für alle Codewörter und auch gleich der Gewichtsverteilung.
  • Jeder Gruppencode enthält den „Nullvektor“ als gültiges Codewort.
  • Das Gewicht eines Gruppencodes ist definiert als das kleinste Codewortgewicht (Hamming-Gewicht) außer dem des Nullvektors.
  • Bei binären Gruppencodes gilt, dass der Hamming-Abstand dem Gewicht des Codes entspricht.

Siehe auch

  • Ein linearer Code ist eine Codierung, bei der statt einer Gruppe ein endlicher Körper verwendet wird.