Processing math: 100%

Allgemeine Beschreibung linearer Blockcodes

Aus LNTwww
< Kanalcodierung
Version vom 10. Juli 2022, 15:37 Uhr von Guenter (Diskussion | Beiträge)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu:Navigation, Suche

Lineare Codes und zyklische Codes


Alle bisher behandelten Codes,

  • der  "Single Parity–check Code",
  • der  "Repetition Code"  und
  • der  Hamming–Code


sind linear. Nun wird die für binäre Blockcodes gültige Definition von Linearität nachgereicht.

Definition:  Ein  linearer binärer Blockcode  C ist ein Satz von  2k  Codeworten  x_=(x1,x2,...,xn), wobei die (Modulo–2)–Summe zweier beliebiger Codeworte  x_  und  x_  wiederum ein gültiges Codewort ergibt:

x_,x_GF(2n),x_,x_Cx_+x_C.

Diese Bedingung muss auch für  x_=x_  erfüllt sein.

Hinweis:   Die Modulo–Addition wird für den Rest dieses Buches zur Vereinfachung der Schreibweise nicht mehr durch das Modulo–Additionszeichen ausgedrückt, sondern mit dem herkömmlichen Pluszeichen.


Beispiel 1:  Wir betrachten zwei  (3, 2)–Blockcodes:

C1={(0,0,0),(0,1,1),(1,0,1),(1,1,0)},
C2={(0,0,0),(0,1,1),(1,1,0),(1,1,1).

Man erkennt:

  • Der Code  C1  ist linear, da die Modulo–2–Addition zweier beliebiger Codeworte stets auch ein gültiges Codewort ergibt, z.B.  (0,1,1)+(1,0,1)=(1,1,0).
  • Die obige Definition gilt auch für die Modulo–2–Addition eines Codewortes mit sich selbst, zum Beispiel  (0,1,1)+(0,1,1)=(0,0,0)
      ⇒   Jeder lineare Code beinhaltet das Nullwort  0_.
  • Obwohl die letzte Voraussetzung erfüllt wird, ist  C2  kein linearer Code. Für diesen Code gilt nämlich beispielsweise:   (0,1,1)+(1,1,0)=(1,0,1). Dies ist kein gültiges Codewort von  C2.


Im Folgenden beschränken wir uns ausschließlich auf lineare Codes, da nichtlineare Codes für die Praxis von untergeordneter Bedeutung sind.

Definition:  Ein linearer Blockcode  C  heißt  zyklisch, wenn jede zyklische Verschiebung eines Codewortes  x_  (nach links oder rechts) ein gültiges Codewort ergibt:

x_=(x1,x2,...,xn)Cx_=(xn,x1,...,xn1)C.


Codetabelle des systematischen  (7, 4, 3)–Hamming–Codes;
schwarz:   k=4  Informationsbits, rot:   nk=3  Prüfbits

Beispiel 2: 

  • Man erkennt aus der Tabelle für den  HC (7, 4, 3), dass dieser linear und zyklisch ist.
  • Es ergibt sich auch dann ein gültiges Codewort, wenn man alle Bit invertiert:   01.
  • Auch das  0_–Wort  (n  mal eine „Null”) und das  1_–Wort (n  mal eine „Eins”) sind bei diesem Code zulässig.


Codefestlegung durch die Prüfmatrix


(7, 4, 3)–Hamming–Code

Wir betrachten den  (7, 4, 3)–Hamming–Code  mit Codeworten  x_  der Länge  n=7, bestehend aus

  • k=4  Informationsbits  x1x2x3x4, und
  • m=nk=3  Prüfbits x5x6x7.

Die Paritätsgleichungen lauten somit:

x1+x2+x3+x5=0,
x2+x3+x4+x6=0,
x1+x2+x4+x7=0.

In Matrixschreibweise lautet dieser Gleichungssatz:

Hx_T=0_T.

In dieser Gleichung werden verwendet:

  • die  Prüfmatrix  H  mit  m=nk=3  Zeilen und  n=7  Spalten:
H=(111010001110101101001),
  • das  Codewort  x_=(x1,x2,...,x7)  der Länge  n=7,
  • der  Nullvektor  0_=(0,0,0)  der Länge  m=3.

Durch Transponieren werden aus den  Zeilenvektoren  x_  und  0_  die entsprechenden  Spaltenvektoren  x_T  und  0_T.

(6, 3, 3)–Blockcode

Beispiel 3:  Die Grafik illustriert die  m=3  Paritätsgleichungen eines Codes  C  mit den Codeparametern  n=6  und  k=3  in der Reihenfolge rot, grün und blau. Es handelt sich also nicht um einen Hamming–Code  (n2m1).

Entsprechend der Gleichung  Hx_T=0_T  lautet die Prüfmatrix:

H=(110100101010011001).

Die  2k=8  Codeworte bei systematischer Realisierung lauten (mit den Prüfbits rechts vom kleinen Pfeil):

x_0=(0,0,00,0,0),x_1=(0,0,10,1,1),x_2=(0,1,01,0,1),x_3=(0,1,11,1,0),

x_4=(1,0,01,1,0),x_5=(1,0,11,0,1),x_6=(1,1,00,1,1),x_7=(1,1,10,0,0).

Man erkennt aus diesen Angaben:

  • Die Spaltenanzahl  H  ist gleich der Codelänge n.
  • Die Zeilenanzahl von  H  ist gleich der Anzahl  m=nk  der Prüfgleichungen.
  • Aus  Hx_T=0_T  folgt also nicht, dass alle Codeworte eine gerade Anzahl von Einsen beinhalten.


Codefestlegung durch die Generatormatrix


Die Prüfmatrix  H  eines  (n,k)–Blockcodes hat  m=nk  Zeilen und  n  Spalten. Den gleichen Code kann man aber auch durch die Matrix  G  mit ebenfalls  n  Spalten, aber  k  Zeilen beschreiben:

Definition:  Ein linearer binärer Blockcode  C  kann durch die  Prüfmatrix  H  bzw. mit der  Generatormatrix  G  wie folgt charakterisiert werden:

C={x_GF(2n):Hx_T=0_T},
C={x_GF(2n),u_GF(2k):x_=u_G}.


Bevor wir uns den Eigenschaften der Generatormatrix zuwenden, beschreiben wir an einem Beispiel die Erzeugung der Codeworte.

Beispiel 4:  Wir betrachten einen linearen  (5,3)–Blockcode mit der Generatormatrix (auch dies ist kein Hamming–Code)

G=(110110101001110)=(g_1g_2g_3).

Damit werden die Informationsworte  u_=(u1,u2,u3)  den Codeworten  x_=(x1,x2,x3,x4,x5)  gemäß folgenden Gleichungen zugeordnet.
Es gilt stets  x_=u_G:

u_0=(0,0,0)x_0=(0,0,0,0,0),
u_1=(0,0,1)x_1=(0,1,1,1,0)=g_3,
u_2=(0,1,0)x_2=(0,1,0,1,0)=g_2,
u_3=(0,1,1)x_3=(0,0,1,0,0)=g_2+g_3,
u_4=(1,0,0)x_4=(1,1,0,1,1)=g_1,
u_5=(1,0,1)x_5=(1,0,1,0,1)=g_1+g_3,
u_6=(1,1,0)x_6=(1,0,0,0,1)=g_1+g_2,
u_7=(1,1,1)x_7=(1,1,1,1,1)=g_1+g_2+g_3.


Anmerkungen:

  • Die hier zur Berechnung herangezogenen Basisvektoren  g_1g_2  und  g_3  – jeweils mit der Länge  n=5  – entsprechen den  k=3  Zeilen der Generatormatrix  G.
  • Dieser Code ist wegen  dmin=1  weder zur Fehlerkorrektur noch zur Fehlererkennung geeignet ist. Trotzdem wird dieser Code auch auf den nächsten Seiten beispielhaft betrachtet, weil die Codierergebnisse gut interpretierbar sind.
  • Wir möchten Sie an dieser Stelle auf das Applet  Gram–Schmidt–Verfahren  zum Buch „Digitalsignalübertragung” aufmerksam machen, das die Berechnung von Basisfunktionen vermittelt, wenn auch in einem anderen als dem hier gebrauchten Zusammenhang.


Identische Codes


Die im  Beispiel 4  auf der letzten Seite verwendeten Vektoren  g_1g_2,  ...  ,  g_k  sind die  Basisvektoren  des linearen Blockcodes  C.

  • Der Code selbst kann als  k–dimensionaler Untervektorraum von  GF(2n)  angesehen werden.
  • Die Basisvektoren  g_1g_2,  ...  , g_k  sind linear unabhängig.


Der Untervektorraum  C  wird aber nicht nur durch die Basisvektoren

g_1=(1,1,0,1,1),g_2=(0,1,0,1,0),g_3=(0,1,1,1,0)

aufgespannt, sondern andere Basisvektoren  g_1g_2  und  g_3  sind ebenso geeignet, so lange zwischen diesen die lineare Unabhängigkeit gewährleistet ist.

Beispiel 5:  Wir vergleichen den Code  C  von  Beispiel 4  mit einem zweiten Code  C. Die Generatormatrizen lauten:

G=(g_1g_2g_3)=(110110101001110),G=(g_1g_2g_3)=(100010101000100).
  • Die beiden Codes sind identisch:   Sie beinhalten die genau gleichen Codeworte; es gilt nur eine andere Zuordnung.
  • Bei dem Übergang von  G  auf  G  wurden folgende erlaubte Operationen ausgeführt:
g_1=g_1+g_2,g_2=g_2,g_3=g_2+g_3.
  • Zum entsprechenden Code  C  kommt man mit der Gleichung  x_=u_G:
u_0=(0,0,0)x_0=(0,0,0,0,0)=x_0,
u_1=(0,0,1)x_1=(0,0,1,0,0)=x_3,
u_2=(0,1,0)x_2=(0,1,0,1,0)=x_2,
u_3=(0,1,1)x_3=(0,1,1,1,0)=x_1,
u_4=(1,0,0)x_4=(1,0,0,0,1)=x_6,
u_5=(1,0,1)x_5=(1,0,1,0,1)=x_5,
u_6=(1,1,0)x_6=(1,1,0,1,1)=x_4,
u_7=(1,1,1)x_7=(1,1,1,1,1)=x_7.
  • Die entsprechenden Codeworte  x_i=u_iG  des Codes  C   ⇒   Generatormatrix  G  sind im  Beispiel 4  (vorherige Seite) angegeben.


Fazit:  Die Codetabellen von  Beispiel 4  und  Beispiel 5  machen deutlich:

  • C  und  C  beinhalten die genau gleichen Codeworte. Sie sind damit  identische Codes  und besitzen beide die gleiche Korrekturfähigkeit (siehe nächste Seite).
  • C  ist nun ein  systematischer Code, da die ersten  k  Binärstellen eines jeden Codewortes  x_i  mit den Binärstellen des Informationswortes  u_i  übereinstimmen.


Systematische Codes


Die Eigenschaft „systematisch” soll nun noch in mathematischer Form angegeben werden.

Definition:  Bei einem  systematischen (n,k)Blockcode  C  beinhaltet jedes Codewort  x_  explizit das Informationswort  u_.

  • Das heißt, es gilt:   u_=(u1,u2,...,uk)x_=(u1,u2,...,uk,xk+1,...,xn).
  • Die Generatormatrix hat in diesem Fall die Form  Gsys=(Ik ; P)  mit der  k×k–Einheitsmatrix  Ik  und einer geeignet zu wählenden  (n1)×k–Matrix  P.


Für das  Beispiel 5  auf der letzten Seite kann also auch geschrieben werden:

Gsys=(I3;P)mitI3=(100010001)undP=(011000).

Erfreulich aus Sicht der Kanalcodierung ist, dass für jeden Code  C  ein systematischer (identischer oder zumindest äquivalenter) Code  Csys  gefunden werden kann.


Beim  identischen systematischen Code  beinhalten  x_  und  x_sys  die gleichen Codeworte, nur die Zuordnung  u_x_  ist unterschiedlich. Man kommt durch folgende Manipulationen bezüglich der Generatormatrix  G  von einem Blockcode  C  zum identischen systematischen Code  Csys:

  • Vertauschen oder Permutieren der Zeilen,
  • Multiplizieren aller Zeilen mit einem konstanten Vektor ungleich  0_,
  • Ersetzen einer Zeile durch eine Linearkombination zwischen dieser Zeile und einer anderen.


Ohne Beweis:  Ein identischer systematischer Code Csys kann immer dann gefunden werden, wenn zu einer Generatormatrix  G  eine Matrix  A  existiert, so dass  Gsys=AG  gilt.


Ist dies nicht möglich, so findet man zumindest durch Vertauschen oder Permutieren der Spalten von  G  einen  äquivalenten systematischen Code:

Csys=π(C)mitπ():Permutationsoperator.

Die Codes  C  und  Csys  beinhalten dann zwar andere Codeworte, aber sie zeigen gleiche Eigenschaften. Beispielsweise weist  Csys  in diesem Fall die gleiche minimale Hamming–Distanz  dmin  auf wie der Code  C.

Beispiel 6:  Wir betrachten die Generatormatrizen

G=(11000011)undGsys=(10100101).

Die Analyse zeigt:

  • Die zugehörigen Codes  C  und  Csys  beinhalten unterschiedliche Codeworte und sind somit auch nicht identisch:
C={(0,0,0,0),(0,0,1,1),(1,1,0,0),(1,1,1,1)},
Csys={(0,0,0,0),(0,1,0,1),(1,0,1,0),(1,1,1,1)}.
  • Aber sie sind äquivalent:   Gsys  ergibt sich aus  G  durch Vertauschen der zweiten und dritten Spalte.
  • Es handelt sich in beiden Fällen um einen  (4, 2, 2)–Blockcode   ⇒   dmin=2.


Zusammenhang zwischen Generator– und Prüfmatrix


Zur Definition dieser beiden Beschreibungsmatrizen gehen wir von folgenden Gleichungen aus:

x_=u_Gx_T=GTu_T,Hx_T=0.

Verknüpft man diese zwei Gleichungen, so erhält man:

HGTu_T=0_u_GF(2k)HGT=0.

Anzumerken ist, dass in diesen Gleichungen

  • 0_  einen Zeilenvektor mit  k  Elementen bezeichnet und
  • 0  eine Matrix mit  m  Zeilen und  k  Spalten angibt,


wobei alle Elemente von  0_  und  0  identisch Null sind.

Beispiel 7:  Wir betrachten wie im  Beispiel 4  den  (5, 3)–Blockcode

C={(0,0,0,0,0),

(0,1,1,1,0),
(0,1,0,1,0),
(0,0,1,0,0),
(1,1,0,1,1),
(1,0,1,0,1),
(1,0,0,0,1),
(1,1,1,1,1)}.

Aus  n=5  und  k=3  folgt für die Anzahl der Prüfgleichungen  m=2. Durch Analyse der möglichen Codeworte erhält man folgende Ergebnisse:

x1x5=0,x2x4=0H=(1000101010)
HGT=(1000101010)(100111001111100)=(000000).

Die Nullmatrix besteht hier aus  m=2  Zeilen und  k=3  Spalten. Beispielsweise gilt für das Element in der ersten Zeile und der ersten Spalte:

1101000111=0.



Generatormatrix vs. Prüfmatrix bei systematischen Codes


Im allgemeinen Fall können  G  und  H  nicht direkt ineinander umgerechnet werden, schon allein aufgrund der unterschiedlichen Dimensionen von Generatormatrix  (k×n)  und Prüfmatrix  (m×n).

Ohne Beweis:  Der Rechengang vereinfacht sich, wenn die  (k×n) –Generatormatrix in systematischer Form vorliegt:   Gsys=(Ik;P). Dann folgt aus  HGT=0  für die  (m×n)–Prüfmatrix mit  m=nk:

H=(PT;Im).

Diese Gleichung gilt allgemein, also auch im nichtbinären Fall. Da wir uns im gesamten ersten Hauptkapitel auf binäre Codes beschränken ⇒   CGF(2n), gilt  P=+P, und man erhält die Form, die wir im Weiteren verwenden.

H=(PT;Im)=(PT;Im).


Beispiel 8:  Wir betrachten weiterhin den beispielhaften  (5, 3)–Blockcode, gehen aber nun von der systematischen Generatormatrix  Gsys  aus, die wir im  Beispiel 5  ermittelt haben:

Gsys=(100010101000100)=(I3;P)I3=(100010001),P=(011000)PT=(010100).

Damit erhält man für die Prüfmatrix

H=(PT;I2)=(0101010001),

und es ergibt sich folgende Codetabelle:

u_0=(0,0,0)x_0=(0,0,0,0,0),u_4=(1,0,0)x_4=(1,0,0,0,1),
u_1=(0,0,1)x_1=(0,0,1,0,0),u_5=(1,0,1)x_5=(1,0,1,0,1),
u_2=(0,1,0)x_2=(0,1,0,1,0),u_6=(1,1,0)x_6=(1,1,0,1,1),
u_3=(0,1,1)x_3=(0,1,1,1,0),u_7=(1,1,1)x_7=(1,1,1,1,1).

Zusammen mit dem Vektor  x_=(u1,u2,u3,p1,p2)=(x1,x2,x3,x4,x5)  lauten dann die Prüfbits:

p1=u2,p2=u1,

und die entsprechenden Prüfgleichungen des Decoders:

x2+x4=0,x1+x5=0.

Man erkennt aus diesen Gleichungen und auch aus obiger Codetabelle:

  • Dieser Code bietet gegenüber einem Übertragungsfehler hinsichtlich des dritten Bits  (x3=u3)  keinen Schutz.
  • Damit ist natürlich weder eine Fehlererkennung und noch weniger Fehlerkorrektur möglich.
  • Gleiches gilt aber auch für den nichtsystematischen Code entsprechend  Beispiel 7  auf der letzten Seite.


Darstellung von SPC und RC als duale Codes


Nun sollen für die bereits im Kapitel  Beispiele binärer Blockcodes  behandelten Codes noch jeweils die Generatormatrix  G  und die Prüfmatrix  H  angegeben werden. Die Codelänge sei für die folgenden Beispiele stets  n=5, doch lassen sich die Ergebnisse auch für andere Codelängen in gleicher Weise interpretieren. Es gilt für

H=(11111),G=(10001010010010100011);
G=(11111),H=(10001010010010100011).

Die jeweils erste Gleichung lässt sich einfach aus der jeweiligen Definition herleiten und die abgeleitete Gleichung folgt aus der Beziehung  HGT=0.

Aus den obigen Matrizen kann verallgemeinert werden:

  • Die Generatormatrix des  RC (5, 1)  ist identisch mit der Prüfmatrix des  SPC (5, 4). Es handelt sich jeweils um  (5×1)–Matrizen.
  • Die Prüfmatrix des  RC (5, 1)  ist identisch mit der Generatormatrix des  SPC (5, 4). Diese beiden Matrizen haben jeweils  5  Spalten und  4  Zeilen.
  • Dieser Sachverhalt ergibt sich, weil es sich hier um so genannte „duale Codes” handelt. Zur Erklärung benötigen wir noch zwei Definitionen:


Definition:  Zwei lineare Codes  C  und  C, beide aus  GF(2n), sind  orthogonal, wenn alle Codeworte  x_C  zu allen Codeworten  x_C  orthogonal sind. Man bezeichnet dann  C  und  C  als duale Codes.


Definition:  Zwei Codeworte  x_GF(2n)  und  x_GF(2n)  sind immer dann zueinander  orthogonal, wenn das  innere Produkt  verschwindet:

x_x_=ni=1xixi=0,x_x_GF(2n).


Wegen der Produktbildung in  GF(2n)  sind auch folgende Codewort–Paare zueinander orthogonal:

(0,1,1,0),(1,1,1,0)=0,(0,1,1,0),(0,1,1,0)=0.
  • Der Code  C  spannt einen  k–dimensionalen Untervektorraum in  GF(2n)  auf.
  • Der Untervektorraum des dualen Codes  C  ist zu diesem orthogonal und weist die Dimension  nk  auf.
  • Damit gilt:   dim{C}+dim{C}=n.

Einige Eigenschaften des (7, 4, 3)–Hamming–Codes


Fassen wir die bisherigen Ergebnisse dieses Kapitels am Beispiel des systematischen Hamming–Codes nochmals zusammen,  der bereits im Kapitel  "Beispiele binärer Blockcodes"  ausführlich beschrieben wurde.  Dieser  (7, 4, 3)–Code ist gekennzeichnet durch

Codeworte des  HC (7, 4, 3)
  • die Anzahl der Prüfgleichungen:  m=3,
  • die Codelänge  n=2m1=7,
  • die Informationswortlänge  k=nm=4,
  • die Anzahl  2k=16  der Codeworte  (Dimension),
  • die Rate  R=k/n=4/7,
  • die minimale Distanz  dmin=3  (unabhängig von  mn  und  k).


In obiger Tabelle sind die  24=16  Codeworte angegeben
(schwarz:  vier Informationsbits, rot:  drei Prüfbits).

Man erkennt daraus:

  • Der Code beinhaltet sowohl das Null–Wort  "0000000"  als auch das Eins–Wort  "1111111".
  • Es gibt sieben Codeworte,  die sich aus  "0001011"  jeweils durch zyklische Verschiebung ergeben  (alle gelb hinterlegt).
  • Es gibt sieben Codeworte,  die sich aus  "0011101"  jeweils durch zyklische Verschiebung ergeben  (alle grün hinterlegt).
  • Zu jedem Codewort existiert auch das  "negierte Codewort",  zum Beispiel gibt es neben  "0001011"  auch das Codewort  "1110100".
  • Die Prüfmatrix kann wie folgt geschrieben werden:
H=(111010001110101101001)=(PT;I3)PT=(111001111101),I3=(100010001).
  • Dementsprechend gilt für die Generatormatrix:
G=(I4;P)=(1000101010011100101100001011).

Aufgaben zum Kapitel


Aufgabe 1.7: Prüfmatrix und Generatormatrix des HC (7, 4, 3)

Aufgabe 1.7Z: Klassifizierung von Blockcodes

Aufgabe 1.8: Identische Codes

Aufgabe 1.8Z: Äquivalente Codes

Aufgabe 1.9: Erweiterter Hamming–Code

Aufgabe 1.9Z: Erweiterung und/oder Punktierung

Aufgabe 1.10: Einige Generatormatrizen