Difference between revisions of "Channel Coding/General Description of Linear Block Codes"

From LNTwww
 
(50 intermediate revisions by 6 users not shown)
Line 1: Line 1:
 
   
 
   
 
{{Header
 
{{Header
|Untermenü=Binäre Blockcodes zur Kanalcodierung
+
|Untermenü=Binary Block Codes for Channel Coding
|Vorherige Seite=Beispiele binärer Blockcodes
+
|Vorherige Seite=Examples of Binary Block Codes
|Nächste Seite=Decodierung linearer Blockcodes
+
|Nächste Seite=Decoding of Linear Block Codes
 
}}
 
}}
  
== Lineare Codes und zyklische Codes ==
+
== Linear codes and cyclic codes ==
 
<br>
 
<br>
Alle bisher behandelten Codes
+
All codes mentioned so far are&nbsp; &raquo;'''linear'''&laquo;:
*<i>Single Parity&ndash;check Code</i>,  
+
*the&nbsp; [[Channel_Coding/Examples_of_Binary_Block_Codes#Single_Parity-check_Codes|$\text{single parity-check code}$]]&nbsp; $\rm (SPC)$,
*<i>Repetition Code</i>,
+
* <i>Hamming&ndash;Code</i>
+
*the&nbsp; [[Channel_Coding/Examples_of_Binary_Block_Codes#Repetition_Codes|$\text{repetition code}$]]&nbsp; $\rm (RC)$,
  
sind linear. Nun wird die für binäre Blockcodes gültige Definition von Linearität nachgereicht.<br>
+
*the&nbsp; [[Channel_Coding/Examples_of_Binary_Block_Codes#Hamming_Codes|$\text{Hamming code}$]]&nbsp; $\rm (HC)$.
 +
 
 +
 
 +
Now the definition of&nbsp; "linearity"&nbsp; valid for binary block codes is added.<br>
  
 
{{BlaueBox|TEXT=   
 
{{BlaueBox|TEXT=   
$\text{Definition:}$&nbsp; Ein '''linearer binärer Blockcode''' $\mathcal{C}$ ist ein Satz von $2^k$ Codeworten $\underline{x}= (x_1, x_2, \hspace{0.05cm}\text{...}\hspace{0.05cm}, x_n)$, wobei die (Modulo&ndash;2)&ndash;Summe zweier beliebiger Codeworte $\underline{x}$ und $\underline{x}'$ wiederum ein gültiges Codewort ergibt:
+
$\text{Definition:}$&nbsp; A&nbsp; &raquo;'''linear binary block code'''&laquo;&nbsp; $\mathcal{C}$ &nbsp; is a set of&nbsp; $2^k$&nbsp; code words&nbsp; $\underline{x}= (x_1, x_2, \hspace{0.05cm}\text{...}\hspace{0.05cm}, x_n)$,&nbsp; where the&nbsp; (modulo 2)&nbsp; sum of any two code words&nbsp; $\underline{x}$&nbsp; and&nbsp; $\underline{x}\hspace{0.05cm}'$&nbsp; again gives a valid code word:
  
 
::<math>\underline{x}, \underline{x}\hspace{0.05cm}' \in {\rm GF}(2^n),\hspace{0.3cm} \underline{x}, \underline{x}\hspace{0.05cm}' \in  \mathcal{C}  
 
::<math>\underline{x}, \underline{x}\hspace{0.05cm}' \in {\rm GF}(2^n),\hspace{0.3cm} \underline{x}, \underline{x}\hspace{0.05cm}' \in  \mathcal{C}  
Line 22: Line 25:
 
  \hspace{0.05cm}.</math>
 
  \hspace{0.05cm}.</math>
  
Diese Bedingung muss auch für $\underline{x} = \underline{x}'$ erfüllt sein.<br>
+
*This condition must also be satisfied for&nbsp; $\underline{x} = \underline{x}\hspace{0.05cm}'$&nbsp;.<br>
  
<i>Hinweis:</i> Die Modulo&ndash;Addition wird für den Rest dieses Buches zur Vereinfachung der Schreibweise nicht mehr durch das Modulo&ndash;Additionszeichen ausgedrückt, sondern mit dem herkömmlichen Pluszeichen.}} <br>
+
*For the remainder of this book,&nbsp; modulo addition will no longer be expressed by the&nbsp; "modulo sign"&nbsp; to simplify notation, but by the conventional&nbsp; "plus sign".}} <br>
  
 
{{GraueBox|TEXT=   
 
{{GraueBox|TEXT=   
$\text{Beispiel 1:}$&nbsp; Wir betrachten zwei (3, 2)&ndash;Blockcodes:
+
$\text{Example 1:}$&nbsp; We consider two&nbsp; $\text{(3, 2)}$&nbsp; block codes:
  
 
::<math>\mathcal{C}_1 = \{ (0, 0, 0) \hspace{0.05cm}, (0, 1, 1) \hspace{0.05cm},(1, 0, 1) \hspace{0.05cm},(1, 1, 0) \}\hspace{0.05cm},</math>
 
::<math>\mathcal{C}_1 = \{ (0, 0, 0) \hspace{0.05cm}, (0, 1, 1) \hspace{0.05cm},(1, 0, 1) \hspace{0.05cm},(1, 1, 0) \}\hspace{0.05cm},</math>
Line 33: Line 36:
 
::<math>\mathcal{C}_2 = \{ (0, 0, 0) \hspace{0.05cm}, (0, 1, 1) \hspace{0.05cm},(1, 1, 0) \hspace{0.05cm},(1, 1, 1) \hspace{0.05cm}.</math>
 
::<math>\mathcal{C}_2 = \{ (0, 0, 0) \hspace{0.05cm}, (0, 1, 1) \hspace{0.05cm},(1, 1, 0) \hspace{0.05cm},(1, 1, 1) \hspace{0.05cm}.</math>
  
Man erkennt:
+
You can see:
*Der Code $\mathcal{C}_1$ ist linear, da die Modulo&ndash;2&ndash;Addition zweier beliebiger Codeworte stets auch ein gültiges Codewort ergibt, zum Beispiel $(0, 1, 1) + (1, 0, 1) = (1, 1, 0)$.<br>
+
*The code&nbsp; $\mathcal{C}_1$&nbsp; is linear,&nbsp; since the modulo 2 addition of any two code words always yields also a valid code word, e.g.&nbsp; $(0, 1, 1) + (1, 0, 1) = (1, 1, 0)$.<br>
 +
 
 +
*The above definition also applies to the modulo 2 addition of a code word with itself, e.g.&nbsp; $(0, 1, 1) + (0, 1, 1) = (0, 0, 0)$.
  
*Die obige Definition gilt auch für die Modulo&ndash;2&ndash;Addition eines Codewortes mit sich selbst, zum Beispiel $(0, 1, 1) + (0, 1, 1) = (0, 0, 0)$ &nbsp;&nbsp;&#8658;&nbsp;&nbsp; Jeder lineare Code beinhaltet das Nullwort $\underline{0}$.<br>
+
*From this follows:&nbsp; Each linear code contains the all-zero word&nbsp; $\underline{0}$.<br>
  
*Obwohl die letzte Voraussetzung erfüllt wird, ist $\mathcal{C}_2$ 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 $\mathcal{C}_2$.}}<br>
+
*Although the last condition is satisfied,&nbsp; $\mathcal{C}_2$&nbsp; is not a linear code.&nbsp; Indeed,&nbsp; for this code: &nbsp; $(0, 1, 1) + (1, 1, 0) = (1, 0, 1)$.&nbsp; This is not a valid code word of&nbsp; $\mathcal{C}_2$.}}<br>
  
Im Folgenden beschränken wir uns ausschließlich auf lineare Codes, da nichtlineare Codes für die Praxis von untergeordneter Bedeutung sind.<br>
+
In the following,&nbsp; we restrict ourselves exclusively to linear codes,&nbsp; since non-linear codes are of secondary importance for practical use.<br>
  
 
{{BlaueBox|TEXT=   
 
{{BlaueBox|TEXT=   
$\text{Definition:}$&nbsp; Ein linearer Blockcode $\mathcal{C}$ heißt '''zyklisch''', wenn eine jede zyklische Verschiebung eines Codewortes $\underline{x}$ (nach links oder rechts) wieder ein gültiges Codewort ergibt:
+
$\text{Definition:}$&nbsp; A linear block code&nbsp; $\mathcal{C}$&nbsp; is called&nbsp; &raquo;'''cyclic'''&laquo;&nbsp; if every cyclic shift of a code word&nbsp; $\underline{x}$ &nbsp; $($to the left or right$)$ &nbsp; results in a valid code word:
  
::<math>\underline{x}= (x_1, x_2, ... \hspace{0.05cm}, x_n) \in  \mathcal{C}  
+
::<math>\underline{x}= (x_1, x_2, \hspace{0.05cm}\text{...} \hspace{0.05cm}, x_n) \in  \mathcal{C}  
  \hspace{0.3cm} \Rightarrow \hspace{0.3cm}\underline{x}\hspace{0.05cm}'= (x_n, x_1,  ... \hspace{0.05cm}, x_{n-1}) \in  \mathcal{C}
+
  \hspace{0.3cm} \Rightarrow \hspace{0.3cm}\underline{x}\hspace{0.05cm}'= (x_n, x_1,  \hspace{0.05cm}\text{...} \hspace{0.05cm} \hspace{0.05cm}, x_{n-1}) \in  \mathcal{C}
 
  \hspace{0.05cm}.</math>}}<br>
 
  \hspace{0.05cm}.</math>}}<br>
  
[[File:P ID2354 KC T 1 3 S3c.png|right|frame|Codetabelle des systematischen (7, 4, 3)–Hamming–Codes<br>
 
schwarz: $k= 4$ Informationsbits, rot: $n-k = 3$ Prüfbits ]]
 
{{GraueBox|TEXT= 
 
$\text{Beispiel 2:}$&nbsp;
 
*Man erkennt aus der Tabelle für den [[Kanalcodierung/Beispiele_binärer_Blockcodes#Hamming.E2.80.93Codes|(7, 4, 3)&ndash;Hamming&ndash;Code]] , dass dieser linear und zyklisch ist.
 
*Es ergibt sich auch dann ein gültiges Codewort, wenn man alle Bit invertiert: $0 &#8596; 1$.
 
*Auch das $\underline{0}$&ndash;Wort ($n$ mal eine &bdquo;Null&rdquo;) und das $\underline{1}$&ndash;Wort ($n$ mal eine &bdquo;Eins&rdquo;) sind bei diesem Code zulässig.}}<br>
 
  
== Codefestlegung durch die Prüfmatrix ==
+
{{GraueBox|TEXT=
 +
[[File:P ID2354 KC T 1 3 S3c.png|right|frame|Code table of the systematic&nbsp; $\text{(7, 4, 3)}$&nbsp; Hamming code;<br>
 +
black: &nbsp; $k= 4$&nbsp; information bits, red: &nbsp; $n-k = 3$&nbsp; parity bits ]] 
 +
$\text{Example 2:}$&nbsp; You can see from the table for the&nbsp; [[Channel_Coding/Examples_of_Binary_Block_Codes#Hamming_Codes|$\text{HC (7, 4, 3)}$]] that it is linear and cyclic.
 +
<br><br><br>
 +
*A valid code word results even if all bits are inverted: &nbsp; $0 &#8596; 1$.
 +
 +
*Also the&nbsp; $\underline{0}$&nbsp; word&nbsp; $(n$&nbsp; times a "zero"$)$&nbsp; and the&nbsp; $\underline{1}$&nbsp; word&nbsp; $(n$&nbsp; times a "one"$)$&nbsp; are allowed with this code.}}<br>
 +
 
 +
== Code definition by the parity-check matrix ==
 
<br>
 
<br>
[[File:P ID2355 KC T 1 3 S3.png|right|frame|(7, 4, 3)–Hamming–Code]]
+
[[File:P ID2355 KC T 1 3 S3.png|right|frame|Chart for the &nbsp;$\text{(7, 4, 3)}$&nbsp; Hamming code]]
Wir betrachten den [[Kanalcodierung/Beispiele_binärer_Blockcodes#Hamming.E2.80.93Codes|(7, 4, 3)&ndash;Hamming&ndash;Code]] mit Codeworten $\underline{x}$ der Länge $n=7$, nämlich
+
We consider the&nbsp; [[Channel_Coding/Examples_of_Binary_Block_Codes#Hamming_Codes|$\text{(7, 4, 3)}$&nbsp; Hamming code]]&nbsp; with code words&nbsp; $\underline{x}$&nbsp; of length&nbsp; $n=7$, consisting of
*den $k = 4$ Informationsbits $x_1$>, $x_2$, $x_3$, $x_4$ , und<br>
+
*$k = 4$&nbsp; information bits&nbsp; $x_1$,&nbsp; $x_2$,&nbsp; $x_3$,&nbsp; $x_4$, and<br>
*den  $m = 3$ Prüfbits $x_5$, $x_6$, $x_7$.<br><br>
 
  
Die Paritätsgleichungen lauten somit:
+
*$m = n-k = 3$&nbsp; parity bits $x_5$,&nbsp; $x_6$,&nbsp; $x_7$.<br><br>
  
::<math>x_1 + x_2 + x_3 + x_5    \hspace{-0.1cm} =  \hspace{-0.1cm} 0 \hspace{0.05cm},\hspace{0.5cm}
+
The parity-check equations are&nbsp; (see graphic on the right):
x_2 + x_3 + x_4 + x_6    \hspace{-0.1cm} =  \hspace{-0.1cm} 0 \hspace{0.05cm},\hspace{0.05cm}
 
x_1 + x_2 + x_4 + x_7    \hspace{-0.1cm} =  \hspace{-0.1cm}  0 \hspace{0.05cm}. </math>
 
  
In Matrixschreibweise lautet dieser Gleichungssatz:
+
::<math>x_1 + x_2 + x_3 + x_5    = 0 \hspace{0.05cm},</math>
 +
::<math>x_2 + x_3 + x_4 + x_6    = 0 \hspace{0.05cm},</math>
 +
::<math>x_1 + x_2 + x_4 + x_7    =  0 \hspace{0.05cm}. </math>
 +
 
 +
In matrix notation, this set of equations reads:
  
 
::<math>{ \boldsymbol{\rm H}} \cdot \underline{x}^{\rm T}= \underline{0}^{\rm T}  
 
::<math>{ \boldsymbol{\rm H}} \cdot \underline{x}^{\rm T}= \underline{0}^{\rm T}  
 
  \hspace{0.05cm}. </math>
 
  \hspace{0.05cm}. </math>
  
In dieser Gleichung werden verwendet:
+
In this equation are used:
*die '''Prüfmatrix''' ${ \boldsymbol{\rm H}}$  mit $m = n-k = 3$ Zeilen und $n = 7$ Spalten:
+
*the&nbsp; &raquo;'''parity-check matrix'''&laquo;&nbsp; ${ \boldsymbol{\rm H}}$&nbsp; with&nbsp; $m = n-k = 3$&nbsp; rows and&nbsp; $n = 7$&nbsp; columns:
  
 
::<math>{ \boldsymbol{\rm H}} = \begin{pmatrix}
 
::<math>{ \boldsymbol{\rm H}} = \begin{pmatrix}
Line 84: Line 92:
 
       \end{pmatrix}\hspace{0.05cm},</math>
 
       \end{pmatrix}\hspace{0.05cm},</math>
  
*das ''Codewort'' $\underline{x}= (x_1, x_2, \hspace{0.05cm}\text{...}\hspace{0.05cm}, x_7)$ der Länge $n = 7$,<br>
+
*the&nbsp; code word&nbsp; $\underline{x}= (x_1,\ x_2, \hspace{0.05cm}\text{...}\hspace{0.05cm},\ x_7)$&nbsp; of length&nbsp; $n = 7$,<br>
  
*das ''Nullvektor'' $\underline{0} = (0, 0, 0)$ der Länge $m = 3$.<br><br>
+
*the&nbsp; all-zero vector&nbsp; $\underline{0} = (0,\ 0,\ 0)$&nbsp; of length&nbsp; $m = 3$.<br><br>
  
Durch Transponieren werden aus den ''Zeilenvektoren'' $\underline{x}$ und $\underline{0}$ die entsprechenden ''Spaltenvektoren'' $\underline{x}^{\rm T}$ und $\underline{0}^{\rm T}$.<br>
+
By&nbsp; "transposing",&nbsp; the&nbsp; row vectors &nbsp; $\underline{x}$ &nbsp;and &nbsp; $\underline{0}$ &nbsp; become the corresponding&nbsp; column vectors&nbsp; $\underline{x}^{\rm T}$&nbsp; and&nbsp; $\underline{0}^{\rm T}$.<br>
  
[[File:P ID2356 KC T 1 4 S2.png|right|frame|(6, 3, 3)–Blockcode]]
 
 
{{GraueBox|TEXT=   
 
{{GraueBox|TEXT=   
$\text{Beispiel 3:}$&nbsp; Die Grafik illustriert die $m = 3$ Paritätsgleichungen eines Codes $\mathcal{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.
+
$\text{Example 3:}$&nbsp; The graph illustrates the&nbsp; $m = 3$&nbsp; parity-check equations of a code&nbsp; $\mathcal{C}$&nbsp; with code parameters&nbsp; $n = 6$&nbsp; and&nbsp; $k = 3$&nbsp; in the order red, green and blue.&nbsp; Thus,&nbsp;  $\mathcal{C}$&nbsp; is not a Hamming code&nbsp; $(n \ne 2^m-1)$.
 +
[[File:P ID2356 KC T 1 4 S2.png|right|frame|Chart for the &nbsp;$\text{(6, 3, 3)}$&nbsp; block code]]
  
Entsprechend $\boldsymbol{\rm H} \cdot \underline{x}^{\rm T}= \underline{0}^{\rm T}$ lautet die Prüfmatrix:
+
According to the equation&nbsp; $\boldsymbol{\rm H} \cdot \underline{x}^{\rm T}= \underline{0}^{\rm T}$&nbsp; the parity-check matrix is:
 
::<math> \boldsymbol{\rm H} = \begin{pmatrix}
 
::<math> \boldsymbol{\rm H} = \begin{pmatrix}
 
1 &1 &0 &1 &0 & 0\\
 
1 &1 &0 &1 &0 & 0\\
Line 101: Line 109:
 
       \end{pmatrix}\hspace{0.05cm}.</math>
 
       \end{pmatrix}\hspace{0.05cm}.</math>
  
Die $2^k = 8$ Codeworte bei systematischer Realisierung lauten (mit den Prüfbits rechts vom kleinen Pfeil):
+
The&nbsp; $2^k = 8$&nbsp; code words in systematic realization are&nbsp; (with the parity bits to the right of the small arrow):
  
:<math>\underline{x}_0 = (0, 0, 0_{\hspace{0.01cm} \rightarrow} 0, 0, 0)\hspace{0.05cm}, \hspace{0.5cm} \underline{x}_1 = (0, 0, 1_{\hspace{0.01cm} \rightarrow}0, 1, 1)\hspace{0.05cm},\hspace{0.5cm}  
+
:<math>\underline{x}_0 = (0,\ 0,\ 0_{\hspace{0.01cm} \rightarrow} 0,\ 0,\ 0)\hspace{0.05cm}, \hspace{0.5cm} \underline{x}_1 = (0,\ 0,\ 1_{\hspace{0.01cm} \rightarrow}0,\ 1,\ 1)\hspace{0.05cm},\hspace{0.5cm}  
\underline{x}_2 = (0, 1, 0_{\hspace{0.01cm} \rightarrow}1, 0, 1)\hspace{0.05cm},\hspace{0.5cm}\underline{x}_3 = (0, 1, 1_{\hspace{0.01cm} \rightarrow}1, 1, 0)\hspace{0.05cm}, </math>
+
\underline{x}_2 = (0,\ 1,\ 0_{\hspace{0.01cm} \rightarrow}1,\ 0,\ 1)\hspace{0.05cm},\hspace{0.5cm}\underline{x}_3 = (0, 1, 1_{\hspace{0.01cm} \rightarrow}1,\ 1,\ 0)\hspace{0.05cm}, </math>
:<math>\underline{x}_4 = (1, 0, 0_{\hspace{0.01cm} \rightarrow} 1, 1, 0)\hspace{0.05cm}, \hspace{0.5cm} \underline{x}_5 = (1, 0, 1_{\hspace{0.01cm} \rightarrow}1, 0, 1)\hspace{0.05cm},\hspace{0.5cm}  
+
:<math>\underline{x}_4 = (1,\ 0,\ 0_{\hspace{0.01cm} \rightarrow} 1,\ 1,\ 0)\hspace{0.05cm}, \hspace{0.5cm} \underline{x}_5 = (1,\ 0,\ 1_{\hspace{0.01cm} \rightarrow}1,\ 0,\ 1)\hspace{0.05cm},\hspace{0.5cm}  
\underline{x}_6 = (1, 1, 0_{\hspace{0.01cm} \rightarrow}0, 1, 1)\hspace{0.05cm}, \hspace{0.2cm} \underline{x}_7 = (1, 1, 1_{\hspace{0.01cm} \rightarrow}0, 0, 0)\hspace{0.05cm}.</math>
+
\underline{x}_6 = (1,\ 1,\ 0_{\hspace{0.01cm} \rightarrow}0,\ 1,\ 1)\hspace{0.05cm}, \hspace{0.5cm} \underline{x}_7 = (1,\ 1,\ 1_{\hspace{0.01cm} \rightarrow}0,\ 0,\ 0)\hspace{0.05cm}.</math>
  
Man erkennt aus diesen Angaben:
+
It can be seen from these specifications:
*Die Spaltenanzahl  $\boldsymbol{\rm H}$ ist gleich der Codelänge $n$.<br>
+
*The number of columns&nbsp; $\boldsymbol{\rm H}$&nbsp; is equal to the code length&nbsp; $n$.<br>
  
*Die Zeilenanzahl von $\boldsymbol{\rm H}$ ist gleich der Anzahl $m = n-k$ der Prüfgleichungen.<br>
+
*The number of lines of&nbsp; $\boldsymbol{\rm H}$&nbsp; is equal to the number&nbsp; $m = n-k$&nbsp; of parity-check equations.<br>
  
*Aus $\boldsymbol{\rm H} \cdot \underline{x}^{\rm T}= \underline{0}^{\rm T} $ folgt nicht, dass alle Codeworte eine gerade Anzahl von Einsen beinhalten.}}<br>
+
*From&nbsp; $\boldsymbol{\rm H} \cdot \underline{x}^{\rm T}= \underline{0}^{\rm T} $&nbsp; it therefore does not follow that all code words contain an even number of ones.}}<br>
  
== Codefestlegung durch die Generatormatrix ==
+
== Code definition by the generator matrix ==
 
<br>
 
<br>
Die Prüfmatrix $\boldsymbol{\rm H}$ eines $(n, k)$)&ndash;Blockcodes hat $m = n-k$ Zeilen und $n$ Spalten. Den gleichen Code kann man aber auch durch die $\boldsymbol{\rm G}$ mit ebenfalls $n$ Spalten, aber $k$ Zeilen beschreiben:<br>
+
The check matrix&nbsp; $\boldsymbol{\rm H}$&nbsp; of a&nbsp; $(n, k)$&nbsp; block code has&nbsp;
 +
*$n$&nbsp; columns,
 +
*$m = n-k$&nbsp; rows.  
 +
 
 +
 
 +
However,&nbsp; the same code can be described by the matrix&nbsp; $\boldsymbol{\rm G}$&nbsp; with
 +
*also&nbsp; $n$&nbsp; columns,  
 +
*but&nbsp; $k$&nbsp; rows.<br>
 +
 
  
 
{{BlaueBox|TEXT=   
 
{{BlaueBox|TEXT=   
$\text{Definition:}$&nbsp; Ein linearer binärer Blockcode $\mathcal{C}$ kann durch die '''Prüfmatrix''' $\boldsymbol{\rm H}$ bzw. mit der '''Generatormatrix''' $\boldsymbol{\rm G}$ wie folgt charakterisiert werden:
+
$\text{Definition:}$&nbsp; A linear binary block code&nbsp; $\mathcal{C}$&nbsp; can be characterized by the&nbsp; &raquo;'''check matrix'''&laquo;&nbsp; $\boldsymbol{\rm H}$&nbsp; or with the&nbsp; &raquo;'''generator matrix'''&laquo;&nbsp; $\boldsymbol{\rm G}$&nbsp; as follows:
  
 
::<math>\mathcal{C} = \{ \underline{x} \in {\rm GF}(2^n)\text{:} \hspace{0.2cm}{ \boldsymbol{\rm H} } \cdot \underline{x}^{\rm T}= \underline{0}^{\rm T} \}\hspace{0.05cm},</math>  
 
::<math>\mathcal{C} = \{ \underline{x} \in {\rm GF}(2^n)\text{:} \hspace{0.2cm}{ \boldsymbol{\rm H} } \cdot \underline{x}^{\rm T}= \underline{0}^{\rm T} \}\hspace{0.05cm},</math>  
Line 126: Line 142:
 
\hspace{0.2cm}\underline{x} = \underline{u} \cdot { \boldsymbol{\rm G} }  \}\hspace{0.05cm}.</math>}}<br>
 
\hspace{0.2cm}\underline{x} = \underline{u} \cdot { \boldsymbol{\rm G} }  \}\hspace{0.05cm}.</math>}}<br>
  
Bevor wir uns den Eigenschaften der Generatormatrix zuwenden, beschreiben wir an einem Beispiel die Erzeugung der Codeworte.<br>
+
Before we turn to the properties of the generator matrix,&nbsp;  we describe the generation of the code words with an example.<br>
  
 
{{GraueBox|TEXT=   
 
{{GraueBox|TEXT=   
$\text{Beispiel 4:}$&nbsp; Wir betrachten einen linearen $(5, 3)$&ndash;Blockcode mit der Generatormatrix
+
$\text{Example 4:}$&nbsp; We consider a linear&nbsp; $(5, 3)$&nbsp; block code with the generator matrix (again:&nbsp; this is not a Hamming code!)
  
:<math> \boldsymbol{\rm G} = \begin{pmatrix}
+
::<math> \boldsymbol{\rm G} = \begin{pmatrix}
 
1 &1 &0 &1 &1\\
 
1 &1 &0 &1 &1\\
 
0 &1 &0 &1 &0\\
 
0 &1 &0 &1 &0\\
Line 144: Line 160:
 
\hspace{0.05cm}.</math>
 
\hspace{0.05cm}.</math>
  
Damit werden die Informationsworte $\underline{u}= (u_1, u_2, u_3)$ den Codeworten $\underline{x}= (x_1, x_2, x_3, x_4, x_5)$ gemäß der folgenden Tabelle mit acht Einträgen zugeordnet. Es gilt $\underline{x} = \underline{u} \cdot  \boldsymbol{\rm G}$.
+
*Thus,&nbsp; the information words&nbsp; $\underline{u}= (u_1,\ u_2,\ u_3)$&nbsp; are assigned to the code words&nbsp; $\underline{x}= (x_1,\ x_2,\ x_3,\ x_4,\ x_5)$&nbsp; according to the following equations.  
 +
*The following always applies:&nbsp; $\underline{x} = \underline{u} \cdot  \boldsymbol{\rm G}$:
  
 
::<math>\underline{u}_0 = (0, 0, 0)\hspace{0.3cm} \rightarrow\hspace{0.3cm} \underline{x}_0 = (0, 0, 0, 0, 0) \hspace{0.05cm},</math>
 
::<math>\underline{u}_0 = (0, 0, 0)\hspace{0.3cm} \rightarrow\hspace{0.3cm} \underline{x}_0 = (0, 0, 0, 0, 0) \hspace{0.05cm},</math>
Line 155: Line 172:
 
::<math>\underline{u}_7 =(1, 1, 1)\hspace{0.3cm} \rightarrow\hspace{0.3cm} \underline{x}_7 = (1, 1, 1, 1, 1) \hspace{0.1cm}= \hspace{0.1cm} \underline{g}_1+ \underline{g}_2+\underline{g}_3\hspace{0.05cm}.</math>}}<br>
 
::<math>\underline{u}_7 =(1, 1, 1)\hspace{0.3cm} \rightarrow\hspace{0.3cm} \underline{x}_7 = (1, 1, 1, 1, 1) \hspace{0.1cm}= \hspace{0.1cm} \underline{g}_1+ \underline{g}_2+\underline{g}_3\hspace{0.05cm}.</math>}}<br>
  
''Anmerkungen'':
+
Notes:
*Die hier zur Berechnung herangezogenen Basisvektoren $\underline{g}_1$, $\underline{g}_2$ und  $\underline{g}_3$ &ndash; jeweils mit der Länge $n = 5$ &ndash; entsprechen den $k = 3$ Zeilen der Generatormatrix $\boldsymbol{\rm G}$.  
+
*The basis vectors used here for the calculation&nbsp; $\underline{g}_1$,&nbsp; $\underline{g}_2$&nbsp; and&nbsp; $\underline{g}_3$&nbsp; &ndash; each with length&nbsp; $n = 5$&nbsp; &ndash; correspond to the&nbsp; $k = 3$&nbsp; rows of the generator matrix&nbsp; $\boldsymbol{\rm G}$.
*Dieser Code ist wegen $d_{\rm min} = 1$ weder zur Fehlerkorrektur noch zur Fehlererkennung geeignet ist. Trotzdem wird er auch auf den nächsten Seiten beispielhaft weiter betrachtet.<br>
+
* Wir möchten Sie an dieser Stelle auf das Applet [[Gram&ndash;Schmidt&ndash;Verfahren]] zum Buch &bdquo;Digitalsignalübertragung&rdquo; aufmerksam machen, das die Berechnung von Basisfunktionen vermittelt, wenn auch in völlig anderem Zusammenhang als im hier gebrauchten Zusammenhang.<br>
+
*This code is neither suitable for error correction nor for error detection because of&nbsp; $d_{\rm min} = 1$.&nbsp; Nevertheless,&nbsp; this code is also considered exemplarily in the next sections,&nbsp; because the coding results are well interpretable.<br>
 +
 
 +
*At this point we would like to draw your attention to the applet&nbsp; [[Applets:Gram-Schmidt-Verfahren|$\text{Gram&ndash;Schmidt process}$]]&nbsp; for the book&nbsp; "Digital Signal Transmission",&nbsp; which teaches the calculation of basis functions,&nbsp; although in a different context than the one used here.<br>
  
  
== Identische Codes ==
+
== Identical Codes ==
 
<br>
 
<br>
Die im Beispiel 4 auf der letzten Seite verwendeten Vektoren $\underline{g}_1$, $\underline{g}_2$, ... , $\underline{g}_k$ sind die [[Digitalsignal%C3%BCbertragung/Signale,_Basisfunktionen_und_Vektorr%C3%A4ume#Orthonormale_Basisfunktionen| Basisvektoren]] des linearen Blockcodes $\mathcal{C}$. Der Code selbst kann als $k$&ndash;dimensionaler <i>Untervektorraum</i> von $\text{GF}(2^n)$ angesehen werden. Die Basisvektoren $\underline{g}_1$, $\underline{g}_2$, ... , $\underline{g}_k$ sind linear unabhängig.<br>
+
The vectors&nbsp; $\underline{g}_1$,&nbsp; $\underline{g}_2$,&nbsp; ... &nbsp;,&nbsp; $\underline{g}_k$&nbsp; used in&nbsp; $\text{Example 4}$&nbsp; in the last section are the&nbsp; [[Digital_Signal_Transmission/Signals,_Basis_Functions_and_Vector_Spaces#Orthonormal_basis_functions|$\text{basis vectors}$]]&nbsp; of the linear block code&nbsp; $\mathcal{C}$.  
 +
*The code itself can be viewed as a&nbsp; $k$&ndash;dimensional&nbsp; subspace&nbsp; of&nbsp; $\text{GF}(2^n)$.
  
Der Untervektorraum $\mathcal{C}$ wird aber nicht nur durch die Basisvektoren
+
*The basis vectors&nbsp; $\underline{g}_1$,&nbsp; $\underline{g}_2$,&nbsp; ... &nbsp;, $\underline{g}_k$&nbsp; are linearly independent.<br>
 +
 
 +
 
 +
However,&nbsp; the subspace&nbsp; $\mathcal{C}$&nbsp; is not only spanned by the basis vectors
  
 
::<math>\underline{g}_1 = (1, 1, 0, 1, 1) \hspace{0.05cm},\hspace{0.3cm}
 
::<math>\underline{g}_1 = (1, 1, 0, 1, 1) \hspace{0.05cm},\hspace{0.3cm}
Line 171: Line 194:
 
\underline{g}_3 = (0, 1, 1, 1, 0) \hspace{0.05cm}</math>
 
\underline{g}_3 = (0, 1, 1, 1, 0) \hspace{0.05cm}</math>
  
aufgespannt, sondern andere Basisvektoren $\underline{g}_1'$, $\underline{g}_2'$ und $\underline{g}_3'$ sind ebenso geeignet, so lange zwischen diesen die lineare Unabhängigkeit gewährleistet ist.<br>
+
but other basis vectors&nbsp; $\underline{g}\hspace{0.05cm}'_1$,&nbsp; $\underline{g}\hspace{0.05cm}'_2$&nbsp; and&nbsp; $\underline{g}\hspace{0.05cm}'_3$&nbsp; are equally suitable as long as linear independence is guaranteed between them.<br>
  
 
{{GraueBox|TEXT=   
 
{{GraueBox|TEXT=   
$\text{Beispiel 5:}$&nbsp; Wir vergleichen den Code $\mathcal{C}$ von Beispiel 4 mit einem zweiten Code $\mathcal{C}'$.  Die Generatormatrizen lauten:
+
$\text{Example 5:}$&nbsp; We compare the code&nbsp; $\mathcal{C}$&nbsp; of&nbsp; [[Channel_Coding/General_Description_of_Linear_Block_Codes#Code_definition_by_the_generator_matrix|$\text{Example 4}$]]&nbsp; with a second code&nbsp; $\mathcal{C}\hspace{0.05cm}'$.&nbsp; The generator matrices are:
  
 
::<math> \boldsymbol{\rm G} = \begin{pmatrix}
 
::<math> \boldsymbol{\rm G} = \begin{pmatrix}
Line 197: Line 220:
 
\end{pmatrix}\hspace{0.05cm}.</math>
 
\end{pmatrix}\hspace{0.05cm}.</math>
  
Die beiden Codes sind identisch: Sie beinhalten die genau gleichen Codeworte; es gilt nur eine andere Zuordnung. Bei dem Übergang von $\boldsymbol{\rm G}$ auf $\boldsymbol{\rm G}'$ wurden folgende erlaubte Operationen ausgeführt:
+
*The two codes are identical: &nbsp; They contain the exact same code words; only a different assignment applies.
 +
 +
*During the transition from&nbsp; $\boldsymbol{\rm G}$&nbsp; to&nbsp; $\boldsymbol{\rm G}\hspace{0.05cm}'$,&nbsp; the following allowed operations were performed:
  
 
::<math>\underline{g}\hspace{0.05cm}'_1 = \underline{g}_1 + \underline{g}_2  \hspace{0.05cm},\hspace{0.3cm}
 
::<math>\underline{g}\hspace{0.05cm}'_1 = \underline{g}_1 + \underline{g}_2  \hspace{0.05cm},\hspace{0.3cm}
Line 203: Line 228:
 
\underline{g}\hspace{0.05cm}'_3 = \underline{g}_2 + \underline{g}_3 \hspace{0.05cm}.</math>
 
\underline{g}\hspace{0.05cm}'_3 = \underline{g}_2 + \underline{g}_3 \hspace{0.05cm}.</math>
  
Zum entsprechenden Code $\mathcal{C}'$ kommt man mit der Gleichung $\underline{x}' = \underline{u} \cdot  \boldsymbol{\rm G}'$.
+
*The corresponding code &nbsp; $\mathcal{C}'$ &nbsp; is obtained by the equation&nbsp; $\underline{x}' = \underline{u} \cdot  \boldsymbol{\rm G}'$:
  
 
::<math>\underline{u}_0 = (0, 0, 0)\hspace{0.3cm} \rightarrow\hspace{0.3cm} \underline{x}\hspace{0.05cm}'_0 =  
 
::<math>\underline{u}_0 = (0, 0, 0)\hspace{0.3cm} \rightarrow\hspace{0.3cm} \underline{x}\hspace{0.05cm}'_0 =  
Line 209: Line 234:
 
::<math>\underline{u}_1 = (0, 0, 1)\hspace{0.3cm} \rightarrow\hspace{0.3cm} \underline{x}\hspace{0.05cm}'_1 =  
 
::<math>\underline{u}_1 = (0, 0, 1)\hspace{0.3cm} \rightarrow\hspace{0.3cm} \underline{x}\hspace{0.05cm}'_1 =  
 
(0, 0, 1, 0, 0) \hspace{0.1cm}= \hspace{0.1cm}\underline{x}_3\hspace{0.05cm},</math>
 
(0, 0, 1, 0, 0) \hspace{0.1cm}= \hspace{0.1cm}\underline{x}_3\hspace{0.05cm},</math>
::<math>\underline{u}_2 \hspace{-0.15cm} = \hspace{-0.15cm} (0, 1, 0)\hspace{0.3cm} \rightarrow\hspace{0.3cm} \underline{x}\hspace{0.05cm}'_2 =  
+
::<math>\underline{u}_2 = (0, 1, 0)\hspace{0.3cm} \rightarrow\hspace{0.3cm} \underline{x}\hspace{0.05cm}'_2 =  
 
(0, 1, 0, 1, 0) \hspace{0.1cm}= \hspace{0.1cm} \underline{x}_2\hspace{0.05cm},</math>
 
(0, 1, 0, 1, 0) \hspace{0.1cm}= \hspace{0.1cm} \underline{x}_2\hspace{0.05cm},</math>
 
::<math>\underline{u}_3 = (0, 1, 1)\hspace{0.3cm} \rightarrow\hspace{0.3cm} \underline{x}\hspace{0.05cm}'_3 =  
 
::<math>\underline{u}_3 = (0, 1, 1)\hspace{0.3cm} \rightarrow\hspace{0.3cm} \underline{x}\hspace{0.05cm}'_3 =  
Line 222: Line 247:
 
(1, 1, 1, 1, 1) \hspace{0.1cm}= \hspace{0.1cm} \underline{x}_7\hspace{0.05cm}.</math>
 
(1, 1, 1, 1, 1) \hspace{0.1cm}= \hspace{0.1cm} \underline{x}_7\hspace{0.05cm}.</math>
  
Die entsprechenden Codeworte $\underline{x}_i = \underline{u}_i \cdot  \boldsymbol{\rm G}$ des odes $\mathcal{C}$ &nbsp; &rArr; &nbsp; Generatormatrix $\boldsymbol{\rm G}$ sind im [[Kanalcodierung/Allgemeine_Beschreibung_linearer_Blockcodes#Codefestlegung_durch_die_Generatormatrix|Beispiel 4]] (vorherige Seite) angegeben.}}<br>
+
*The corresponding code words&nbsp; $\underline{x}_i = \underline{u}_i \cdot  \boldsymbol{\rm G}$&nbsp; of the code &nbsp; $\mathcal{C}$ &nbsp; &rArr; &nbsp; generator matrix&nbsp; $\boldsymbol{\rm G}$&nbsp; are give in&nbsp; $\text{Example 4}$&nbsp; (previous section).}}<br>
  
 
{{BlaueBox|TEXT=   
 
{{BlaueBox|TEXT=   
$\text{Fazit:}$&nbsp; Die Codetabellen von Beispiel 4 und Beispiel 5 machen deutlich:
+
$\text{Conclusion:}$&nbsp; The code tables of&nbsp; $\text{Example 4}$&nbsp; and&nbsp; $\text{Example 5}$&nbsp; make clear:
*$\mathcal{C}$ und $\mathcal{C}'$ beinhalten die genau gleichen Codeworte. Sie sind damit <i>identische Codes</i> und besitzen beide die gleiche Korrekturfähigkeit (siehe nächste Seite).<br>
+
*$\mathcal{C}$&nbsp; and&nbsp; $\mathcal{C}\hspace{0.05cm}'$&nbsp; contain the same code words.&nbsp; They are thus&nbsp; "identical codes"&nbsp; and both have the same capability of correction&nbsp; (see next section).<br>
  
*$\mathcal{C}'$ ist aber nun ein ''systematischer Code'', da die ersten $k$ Binärstellen eines jeden Codewortes $\underline{x}'_i$ mit den Binärstellen des Informationswortes $\underline{u}$ übereinstimmen.}}<br>
+
*$\mathcal{C}\hspace{0.05cm}'$&nbsp;  is now a&nbsp; "systematic code"&nbsp; since the first&nbsp; $k$&nbsp; binary digits of each code word&nbsp; $\underline{x}\hspace{0.05cm}'_i$&nbsp; match the binary digits of the information word.}}<br>
  
== Systematische Codes==
+
== Systematic Codes==
 
<br>
 
<br>
Die Eigenschaft &bdquo;systematisch&rdquo; soll nun noch in mathematischer Form angegeben werden.<br>
+
The property&nbsp; "systematic"&nbsp; is now to be specified in mathematical form.<br>
  
 
{{BlaueBox|TEXT=   
 
{{BlaueBox|TEXT=   
$\text{Definition:}$&nbsp; Bei einem '''systematischen (n, k)&ndash;Blockcode''' $\mathcal{C}$ beinhaltet jedes Codewort $\underline{x}$ explizit das Informationswort $\underline{u}$.  
+
$\text{Definition:}$&nbsp; In a&nbsp; $\text{systematic }(n, k) \text{ block code} \ \ \mathcal{C}$&nbsp; each code word&nbsp; $\underline{x}$&nbsp; explicitly includes the information word&nbsp; $\underline{u}$.  
*Das heißt, es gilt:
+
*That is,&nbsp; it applies: &nbsp; $\underline{u} =  (u_1,\ u_2, \hspace{0.05cm}\text{...} \hspace{0.05cm},\ u_k) \hspace{0.3cm} \Rightarrow\hspace{0.3cm} \underline{x}\hspace{0.05cm} =  
::<math>\underline{u} =  (u_1, u_2, ... \hspace{0.05cm}, u_k) \hspace{0.3cm} \rightarrow\hspace{0.3cm} \underline{x}\hspace{0.05cm} =  
+
(u_1,\ u_2,\ ... \hspace{0.05cm},\ u_k,\ x_{k+1}, \hspace{0.05cm}\text{...}\hspace{0.05cm},\ x_n)\hspace{0.05cm}.$
(u_1, u_2, ... \hspace{0.05cm}, u_k, x_{k+1}, ... \hspace{0.05cm}, x_n)\hspace{0.05cm}.</math>
 
  
*Die Generatormatrix hat in diesem Fall die Form $\boldsymbol{\rm G_{\rm sys} } =\left({ \boldsymbol{\rm I}_{\rm k} \ ; \{ \boldsymbol{\rm P} }\right)$ mit der $k&times;k$&ndash;Einheitsmatrix $\boldsymbol{\rm I}_{\rm k}$ und einer geeignet zu wählenden $(n-1)&times;k$&ndash;Matrix $\boldsymbol{\rm P}$.}}<br>
+
*The generator matrix in this case has the form &nbsp; $\boldsymbol{\rm G_{\rm sys} } =\left({ \boldsymbol{\rm I}_{\rm k} \ ; \ \boldsymbol{\rm P} }\right)$ &nbsp; with the&nbsp; $k&times;k$&nbsp; "identity matrix" &nbsp; $\boldsymbol{\rm I}_{\rm k}$ &nbsp; and a suitably chosen&nbsp; $(n-1)&times;k$&nbsp; matrix &nbsp; $\boldsymbol{\rm P}$.}}<br>
  
Für das Beispiel 5 auf der letzten Seite kann also auch geschrieben werden:
+
So,&nbsp; for &nbsp; $\text{Example 5}$&nbsp; in the last section can also be written:
  
::<math> \boldsymbol{\rm G_{sys}} =\left({ \boldsymbol{\rm I}}_3 \: ; \: { \boldsymbol{\rm P}}\right)\hspace{0.3cm}{\rm mit}\hspace{0.3cm}
+
::<math> \boldsymbol{\rm G_{sys}} =\left({ \boldsymbol{\rm I}}_3 \: ; \: { \boldsymbol{\rm P}}\right)\hspace{0.3cm}{\rm with}\hspace{0.3cm}
 
{ \boldsymbol{\rm I_{3}}} = \begin{pmatrix}  
 
{ \boldsymbol{\rm I_{3}}} = \begin{pmatrix}  
 
1 &0 &0 \\
 
1 &0 &0 \\
 
0 &1 &0 \\
 
0 &1 &0 \\
 
0 &0 &1   
 
0 &0 &1   
\end{pmatrix}\hspace{0.3cm}{\rm und}\hspace{0.3cm}
+
\end{pmatrix}\hspace{0.3cm}{\rm and}\hspace{0.3cm}
 
{ \boldsymbol{\rm P}} = \begin{pmatrix}  
 
{ \boldsymbol{\rm P}} = \begin{pmatrix}  
 
0 &1  \\
 
0 &1  \\
Line 256: Line 280:
 
\end{pmatrix}\hspace{0.05cm}.</math>
 
\end{pmatrix}\hspace{0.05cm}.</math>
  
Erfreulich aus Sicht der Kanalcodierung ist, dass für jeden Code $\mathcal{C}$ ein systematischer (identischer oder zumindest äquivalenter) Code $\mathcal{C}_{\rm sys}$ gefunden werden kann.<br>
+
It is gratifying from the point of view of channel coding,&nbsp; that for each code&nbsp; $\mathcal{C}$&nbsp; a systematic&nbsp; $($identical or at least equivalent$)$&nbsp; code&nbsp; $\mathcal{C}_{\rm sys}$&nbsp; can be found.<br>
  
 +
In an&nbsp; &raquo;'''identical systematic code'''&laquo;,&nbsp;&nbsp; $\underline{x}$&nbsp; and&nbsp; $\underline{x}_{\rm sys}$&nbsp; contain the same code words,&nbsp; only the mapping&nbsp; $\underline{u}  &nbsp; &#8594; &nbsp; \underline{x}$&nbsp; is different.&nbsp; One gets from a block code&nbsp; $\mathcal{C}$&nbsp; to the identical systematic code&nbsp; $\mathcal{C}_{\rm sys}$&nbsp; by the following manipulations with respect to the generator matrix&nbsp; $\mathcal{\rm G}$:
 +
*Swap or permute the rows,<br>
  
Beim '''identischen systematischen Code''' beinhalten $\underline{x}$ und $\underline{x}_{\rm sys}$ die gleichen Codeworte, nur die Zuordnung $  &nbsp; &#8594; &nbsp; \underline{x}$ ist unterschiedlich. Man kommt durch folgende Manipulationen bezüglich $\boldsymbol{\rm G}$ von $\mathcal{C}$ zu $\mathcal{C}_{\rm sys}$:
+
*Multiply all rows by a constant vector not equal to&nbsp; $\underline{0}$,<br>
*Vertauschen oder Permutieren der Zeilen,<br>
 
  
*Multiplizieren aller Zeilen mit einem konstanten Vektor ungleich $\underline{0}$,<br>
+
*Replace a row with a linear combination between this row and another one.<br>
 
 
*Ersetzen einer Zeile durch eine Linearkombination zwischen dieser Zeile und einer anderen.<br>
 
  
  
 
{{BlaueBox|TEXT=   
 
{{BlaueBox|TEXT=   
$\text{Ohne Beweis:}$&nbsp; Ein identischer systematischer Code $\mathcal{C}_{\rm sys}$ kann immer dann gefunden werden, wenn zu einer Generatormatrix $\boldsymbol{\rm G}$ eine Matrix $\boldsymbol{\rm A}$ existiert, so dass $\boldsymbol{\rm G}_{\rm sys} = \boldsymbol{\rm A} \cdot \boldsymbol{\rm G}$ gilt.}}  
+
$\text{Without proof:}$&nbsp; An&nbsp; $\text{identical systematic code  }\mathcal{C}_{\rm sys}$&nbsp; can be found whenever to a generator matrix&nbsp; $\boldsymbol{\rm G}$&nbsp; there exists a matrix&nbsp; $\boldsymbol{\rm A}$&nbsp; such that&nbsp; $\boldsymbol{\rm G}_{\rm sys} = \boldsymbol{\rm A} \cdot \boldsymbol{\rm G}$&nbsp; holds.}}  
  
  
Ist dies nicht möglich, so findet man zumindest durch Vertauschen oder Permutieren der Spalten von $\boldsymbol{\rm G}$ einen '''äquivalenten systematischen Code''':
+
If this is not possible,&nbsp; one can at least find an&nbsp; &raquo;'''equivalent systematic code'''&laquo;&nbsp; by swapping or permuting the columns of&nbsp; $\boldsymbol{\rm G}$&nbsp;:
 +
::<math>\mathcal{C}_{\rm sys} = {\rm \pi} (\mathcal{C})\hspace{0.3cm}{\rm with}\hspace{0.3cm}{\rm \pi}():\hspace{0.15cm}{\rm permutation\:operator}\hspace{0.05cm}.</math>
  
::<math>\mathcal{C}_{\rm sys} = {\rm \pi} (\mathcal{C})\hspace{0.3cm}{\rm mit}\hspace{0.3cm}{\rm \pi}():\hspace{0.15cm}{\rm Permutationsoperator}\hspace{0.05cm}.</math>
+
*The codes&nbsp; $\mathcal{C}$&nbsp; and&nbsp; $\mathcal{C}_{\rm sys}$&nbsp; then contain different code words,&nbsp; but they exhibit the same properties.
 +
*For example,&nbsp; in this case&nbsp; $\mathcal{C}_{\rm sys}$&nbsp;  exhibits the same minimum Hamming distance&nbsp; $d_{\rm min}$&nbsp; as the code&nbsp; $\mathcal{C}$.<br>
  
Die Codes $\mathcal{C}$ und $\mathcal{C}_{\rm sys}$ beinhalten dann zwar andere Codeworte, aber sie zeigen gleiche Eigenschaften. Beispielsweise weist $\mathcal{C}_{\rm sys}$ die gleiche minimale Hamming&ndash;Distanz $d_{\rm min}$ auf wie der Code $\mathcal{C}$.<br>
 
  
 
{{GraueBox|TEXT=   
 
{{GraueBox|TEXT=   
$\text{Beispiel 6:}$&nbsp; Wir betrachten die Generatormatrizen
+
$\text{Example 6:}$&nbsp; We consider the generator matrices
  
 
::<math> \boldsymbol{\rm G} = \begin{pmatrix}  
 
::<math> \boldsymbol{\rm G} = \begin{pmatrix}  
 
1 &1 &0 &0 \\
 
1 &1 &0 &0 \\
 
0 &0 &1 &1   
 
0 &0 &1 &1   
\end{pmatrix}\hspace{0.3cm}{\rm und}\hspace{0.3cm}
+
\end{pmatrix},\hspace{0.3cm}
 
  \boldsymbol{\rm G_{sys} } = \begin{pmatrix}  
 
  \boldsymbol{\rm G_{sys} } = \begin{pmatrix}  
 
1 &0 &1 &0 \\
 
1 &0 &1 &0 \\
Line 289: Line 313:
 
\end{pmatrix}\hspace{0.05cm}.</math>
 
\end{pmatrix}\hspace{0.05cm}.</math>
  
Die Analyse zeigt:
+
The analysis shows:
*Die zugehörigen Codes $\mathcal{C}$ und $\mathcal{C}_{\rm sys}$ beinhalten unterschiedliche Codeworte und sind somit auch <i>nicht identisch</i>:  
+
*The corresponding codes&nbsp; $\mathcal{C}$&nbsp; and&nbsp; $\mathcal{C}_{\rm sys}$&nbsp; contain different code words and are thus&nbsp; &raquo;'''not identical'''&laquo;:  
::<math>\mathcal{C} = \{ (0, 0, 0, 0) \hspace{0.05cm}, (0, 0, 1, 1) \hspace{0.05cm},(1, 1, 0, 0) \hspace{0.05cm},(1, 1, 1, 1) \}\hspace{0.05cm},</math>
+
::<math>\mathcal{C} = \big \{ (0, 0, 0, 0) \hspace{0.05cm}, (0, 0, 1, 1) \hspace{0.05cm},(1, 1, 0, 0) \hspace{0.05cm},(1, 1, 1, 1) \big \}\hspace{0.05cm},</math>
::<math>\mathcal{C}_{\rm sys}= \{ (0, 0, 0, 0) \hspace{0.05cm}, (0, 1, 0, 1) \hspace{0.05cm},(1, 0, 1, 0) \hspace{0.05cm},(1, 1, 1, 1) \}\hspace{0.05cm}.</math>
+
::<math>\mathcal{C}_{\rm sys}= \big \{ (0, 0, 0, 0) \hspace{0.05cm}, (0, 1, 0, 1) \hspace{0.05cm},(1, 0, 1, 0) \hspace{0.05cm},(1, 1, 1, 1) \big \}\hspace{0.05cm}.</math>
*Aber sie sind <i>äquivalent</i>: &nbsp; $\boldsymbol{\rm G}_{\rm sys}$ ergibt sich aus $\boldsymbol{\rm G}$}  durch Vertauschen der zweiten und dritten Spalte.
+
*But they are&nbsp; &raquo;'''equivalent'''&laquo;:&nbsp; $\boldsymbol{\rm G}_{\rm sys}$&nbsp; is obtained from&nbsp; $\boldsymbol{\rm G}$&nbsp; by swapping the second and third columns.&nbsp;  
*Es handelt sich in beiden Fällen um einen (4, 2, 2)&ndash;Blockcode &nbsp;&nbsp;&#8658;&nbsp;&nbsp; $d_{\rm min} = 2$.}}
 
  
 +
*It is a&nbsp; $\text{(4, 2, 2)}$ block code in both cases &nbsp;&nbsp;&#8658;&nbsp;&nbsp; $d_{\rm min} = 2$.}}
  
  
== Zusammenhang zwischen Generator– und Prüfmatrix==
+
 
 +
== Relationship between generator and parity-check matrix==
 
<br>
 
<br>
Zur Definition dieser beiden Beschreibungsmatrizen gehen wir von folgenden Gleichungen aus:
+
To define these two description matrices,&nbsp; we assume the following equations:
  
 
::<math>\underline{x} = \underline{u} \cdot { \boldsymbol{\rm G}} \hspace{0.3cm} \Rightarrow \hspace{0.3cm}  
 
::<math>\underline{x} = \underline{u} \cdot { \boldsymbol{\rm G}} \hspace{0.3cm} \Rightarrow \hspace{0.3cm}  
Line 306: Line 331:
 
{ \boldsymbol{\rm H}}  \cdot  \underline{x}^{\rm T} = { \boldsymbol{\rm 0}}\hspace{0.05cm}.</math>
 
{ \boldsymbol{\rm H}}  \cdot  \underline{x}^{\rm T} = { \boldsymbol{\rm 0}}\hspace{0.05cm}.</math>
  
Verknüpft man diese zwei Gleichungen, so erhält man:
+
Linking these two equations,&nbsp; we get:
  
:<math>{ \boldsymbol{\rm H}}  \cdot  { \boldsymbol{\rm G}}^{\rm T} \cdot \underline{u}^{\rm T}  = \underline{0}\hspace{0.5cm}
+
::<math>{ \boldsymbol{\rm H}}  \cdot  { \boldsymbol{\rm G}}^{\rm T} \cdot \underline{u}^{\rm T}  = \underline{0}\hspace{0.5cm}
 
  \forall \hspace{0.15cm}\underline{u} \in {\rm GF}(2^k)\hspace{0.3cm}  
 
  \forall \hspace{0.15cm}\underline{u} \in {\rm GF}(2^k)\hspace{0.3cm}  
 
\Rightarrow \hspace{0.3cm} { \boldsymbol{\rm H}}  \cdot  { \boldsymbol{\rm G}}^{\rm T} = { \boldsymbol{\rm 0}} \hspace{0.05cm}.</math>
 
\Rightarrow \hspace{0.3cm} { \boldsymbol{\rm H}}  \cdot  { \boldsymbol{\rm G}}^{\rm T} = { \boldsymbol{\rm 0}} \hspace{0.05cm}.</math>
  
Anzumerken ist, dass in diesen Gleichungen
+
Note that in these equations.
*$\underline{0}$ einen Zeilenvektor mit $k$ Elementen bezeichnet
+
*$\underline{0}$ &nbsp; denotes a row vector with&nbsp; $k$&nbsp; elements, and
*$\boldsymbol{\rm 0}$ eine Matrix mit $m$ Zeilen und $k$ Spalten.
+
*$\boldsymbol{\rm 0}$ &nbsp; denotes a matrix with&nbsp; $m$&nbsp; rows and&nbsp; $k$&nbsp; columns,
  
  
Alle Elemente von $\underline{0}$ und $\boldsymbol{\rm 0}$ sind identisch Null.<br>
+
where all elements of&nbsp; $\underline{0}$&nbsp; and&nbsp; $\boldsymbol{\rm 0}$&nbsp; are zero.<br>
  
 
{{GraueBox|TEXT=   
 
{{GraueBox|TEXT=   
$\text{Beispiel 7:}$&nbsp; Wir betrachten wie im [[Kanalcodierung/Allgemeine_Beschreibung_linearer_Blockcodes#Codefestlegung_durch_die_Generatormatrix| Beispiel 3]] den (5, 3)&ndash;Blockcode
+
$\text{Example 7:}$&nbsp; We consider as in&nbsp; [[Channel_Coding/General_Description_of_Linear_Block_Codes#Code_definition_by_the_generator_matrix|$\text{Example 4}$]]&nbsp; the&nbsp; $\text{(5, 3)}$ block code
  
:<math>\mathcal{C}  = \{  \hspace{0.15cm} (  \hspace{0.05cm}  0, 0, 0, 0, 0) \hspace{0.05cm},</math>
+
:<math>\mathcal{C}  = \big \{  \hspace{0.15cm} (  \hspace{0.05cm}  0, 0, 0, 0, 0) \hspace{0.05cm},</math>
 
::<math>  \hspace{0.6cm}(  \hspace{0.05cm}  0, 1, 1, 1, 0) \hspace{0.05cm},</math>
 
::<math>  \hspace{0.6cm}(  \hspace{0.05cm}  0, 1, 1, 1, 0) \hspace{0.05cm},</math>
 
::<math>  \hspace{0.6cm}( \hspace{0.05cm}0, 1, 0, 1, 0) \hspace{0.05cm},</math>
 
::<math>  \hspace{0.6cm}( \hspace{0.05cm}0, 1, 0, 1, 0) \hspace{0.05cm},</math>
Line 329: Line 354:
 
::<math> \hspace{0.6cm}( \hspace{0.05cm}1, 0, 1, 0, 1) \hspace{0.05cm},</math>
 
::<math> \hspace{0.6cm}( \hspace{0.05cm}1, 0, 1, 0, 1) \hspace{0.05cm},</math>
 
::<math> \hspace{0.6cm}( \hspace{0.05cm}1, 0, 0, 0, 1) \hspace{0.05cm},</math>
 
::<math> \hspace{0.6cm}( \hspace{0.05cm}1, 0, 0, 0, 1) \hspace{0.05cm},</math>
::<math> \hspace{0.6cm}(\hspace{0.05cm}1, 1, 1, 1, 1) \}\hspace{0.05cm}.</math>
+
::<math> \hspace{0.6cm}(\hspace{0.05cm}1, 1, 1, 1, 1) \big \}\hspace{0.05cm}.</math>
  
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:
+
From&nbsp; $n= 5$&nbsp; and&nbsp; $k = 3$&nbsp; follows for the number of parity-check equations&nbsp; $m = 2$.&nbsp; By analyzing the possible code words,&nbsp; the following results are obtained:
  
 
::<math>x_1 \oplus x_5 = 0 \hspace{0.05cm},\hspace{0.5cm}
 
::<math>x_1 \oplus x_5 = 0 \hspace{0.05cm},\hspace{0.5cm}
Line 357: Line 382:
 
\end{pmatrix}\hspace{0.05cm}.</math>
 
\end{pmatrix}\hspace{0.05cm}.</math>
  
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:
+
The zero matrix here consists of&nbsp; $m = 2$&nbsp; rows and&nbsp; $k = 3$&nbsp; columns.&nbsp; For example,&nbsp; for the element in the first row and the first column:
  
 
::<math>1 \cdot 1 \hspace{0.05cm}\oplus \hspace{0.05cm}
 
::<math>1 \cdot 1 \hspace{0.05cm}\oplus \hspace{0.05cm}
Line 368: Line 393:
  
  
== Generatormatrix vs. Prüfmatrix bei systematischen Codes ==
+
== Generator matrix vs. parity-check matrix for systematic codes ==
 
<br>
 
<br>
Im allgemeinen Fall können $\boldsymbol{\rm G}$ und $\boldsymbol{\rm H}$ nicht direkt ineinander umgerechnet werden, schon allein aufgrund der unterschiedlichen Dimensionen von Generatormatrix $(k \times n)$ und  Prüfmatrix $(m \times n)$.<br>
+
Generally,&nbsp; $\boldsymbol{\rm G}$&nbsp; and&nbsp; $\boldsymbol{\rm H}$&nbsp; cannot be directly converted into each other,&nbsp; because of the different dimensions of generator matrix&nbsp; $(k \times n)$&nbsp; and parity-check matrix&nbsp; $(m \times n)$.<br>
  
Der Rechengang vereinfacht sich, wenn die $(k \times n)$ &ndash;Generatormatrix in systematischer Form vorliegt: &nbsp; $ \boldsymbol{\rm G_{sys}} =\left({ \boldsymbol{\rm I}}_k \: ; \: { \boldsymbol{\rm P}}\right).$ Dann folgt aus $\boldsymbol{\rm H} \cdot \boldsymbol{\rm G}^{\rm T} = \boldsymbol{\rm 0}$ für die $(m \times n)$&ndash;Prüfmatrix mit $m = n-k$:
+
{{BlaueBox|TEXT= 
 +
$\text{Without proof:}$&nbsp;
 +
The calculation process is simplified if the&nbsp; $(k \times n)$&nbsp; generator matrix is in systematic form: &nbsp;  
 +
:$$ \boldsymbol{\rm G_{sys} } =\left({ \boldsymbol{\rm I} }_k \: ; \: { \boldsymbol{\rm P} }\right).$$
 +
*Then it follows from&nbsp; $\boldsymbol{\rm H} \cdot \boldsymbol{\rm G}^{\rm T} = \boldsymbol{\rm 0}$&nbsp; for the&nbsp; $(m \times n)$&nbsp; parity-check matrix with&nbsp; $m = n-k$:
  
::<math>{ \boldsymbol{\rm H}} =\left(-{ \boldsymbol{\rm P}}^{\rm T}  \: ; \: { \boldsymbol{\rm I}}_m \right)
+
::<math>{ \boldsymbol{\rm H} } =\left( - { \boldsymbol{\rm P} }^{\rm T}  \: ; \: { \boldsymbol{\rm I} }_m \right)
 
  \hspace{0.05cm}.</math>
 
  \hspace{0.05cm}.</math>
  
Diese Gleichung gilt allgemein, also auch im nichtbinären Fall. Da wir uns im gesamten ersten Hauptkapitel auf binäre Codes beschränken &#8658; &nbsp; $\mathcal{C} \in \text{GF}(2^n)$, gilt $-\boldsymbol{\rm P} = +\boldsymbol{\rm P}$, und man erhält die Form, die wir im Weiteren verwenden.<br>
+
*This equation holds in general,&nbsp; i.e.,&nbsp; also in the non-binary case.&nbsp; Since we restrict ourselves to binary codes &#8658; &nbsp; $\mathcal{C} \in \text{GF}(2^n)$ &nbsp; &rArr;&nbsp; $ - \boldsymbol{\rm P} = +\boldsymbol{\rm P}$.
 +
 +
*Thus we obtain the form we will use in the remainder of this chapter.<br>
 +
 
 +
::<math>{ \boldsymbol{\rm H} } =\left(  { \boldsymbol{\rm P} }^{\rm T}  \: ; \: { \boldsymbol{\rm I} }_m \right)\hspace{0.05cm}.
 +
</math>}}
  
::<math>{ \boldsymbol{\rm H}} =\left(-{ \boldsymbol{\rm P}}^{\rm T}  \: ; \: { \boldsymbol{\rm I}}_m \right)
 
= \left [ \left({ \boldsymbol{\rm P}}^{\rm T}  \: ; \: { \boldsymbol{\rm I}}_m \right)\right ]_{{\rm bin\ddot{a}r}} \hspace{0.05cm}.</math>
 
  
 
{{GraueBox|TEXT=   
 
{{GraueBox|TEXT=   
$\text{Beispiel 8:}$&nbsp; Wir betrachten weiterhin den beispielhaften (5,&nbsp;3)&ndash;Blockcode, gehen aber nun von der systematischen Generatormatrix $\boldsymbol{\rm G}_{\rm sys}$ aus, die wir im [[Kanalcodierung/Allgemeine_Beschreibung_linearer_Blockcodes#Identische_Codes|Beispiel 5]] ermittelt haben:
+
$\text{Example 8:}$&nbsp; We continue to consider the example&nbsp; $\text{(5,&nbsp;3)}$&nbsp; block code,&nbsp; but now assume the systematic generator matrix&nbsp; $\boldsymbol{\rm G}_{\rm sys}$&nbsp; that we determined the&nbsp; [[Channel_Coding/General_Description_of_Linear_Block_Codes#Identical_Codes|$\text{Example 5}$]]:
  
 
::<math> \boldsymbol{\rm G_{sys} } = \begin{pmatrix}
 
::<math> \boldsymbol{\rm G_{sys} } = \begin{pmatrix}
Line 407: Line 439:
 
\end{pmatrix}\hspace{0.05cm}.</math>
 
\end{pmatrix}\hspace{0.05cm}.</math>
  
Damit erhält man für die Prüfmatrix
+
*This gives the following for the parity-check matrix
  
 
::<math>{ \boldsymbol{\rm H} } =\left({ \boldsymbol{\rm P} }^{\rm T}  \: ; \: { \boldsymbol{\rm I} }_2 \right)
 
::<math>{ \boldsymbol{\rm H} } =\left({ \boldsymbol{\rm P} }^{\rm T}  \: ; \: { \boldsymbol{\rm I} }_2 \right)
Line 414: Line 446:
 
1 &0 &0 &0 &1
 
1 &0 &0 &0 &1
 
\end{pmatrix}
 
\end{pmatrix}
\hspace{0.05cm},</math>
+
\hspace{0.05cm}.</math>
  
und es ergibt sich folgende Codetabelle:
+
*The following code table results:
  
 
::<math>\underline{u}_0 = (0, 0, 0)\hspace{0.2cm} \rightarrow\hspace{0.2cm} \underline{x}\hspace{0.05cm}_0 =  
 
::<math>\underline{u}_0 = (0, 0, 0)\hspace{0.2cm} \rightarrow\hspace{0.2cm} \underline{x}\hspace{0.05cm}_0 =  
Line 431: Line 463:
 
(1, 1, 1, 1, 1) \hspace{0.05cm}.</math>
 
(1, 1, 1, 1, 1) \hspace{0.05cm}.</math>
  
Zusammen mit dem Vektor $\underline{x} = (u_1, u_2, u_3, p_1, p_2) =  (x_1, x_2, x_3, x_4, x_5)$ lauten dann die Prüfbits:
+
*Together with the vector&nbsp; $\underline{x} = (u_1,\ u_2,\ u_3,\ p_1,\ p_2) =  (x_1,\ x_2,\ x_3,\ x_4,\ x_5)$&nbsp; the parity bits are then:
  
 
::<math>p_1 = u_2 \hspace{0.05cm},\hspace{0.2cm}p_2 = u_1 \hspace{0.05cm},</math>
 
::<math>p_1 = u_2 \hspace{0.05cm},\hspace{0.2cm}p_2 = u_1 \hspace{0.05cm},</math>
  
und die entsprechenden Prüfgleichungen des Decoders:
+
and the corresponding parity-check equations of the decoder:
  
:<math>x_2 + x_4 = 0 \hspace{0.05cm},\hspace{0.2cm}x_1 + x_5 = 0 \hspace{0.05cm}.</math>
+
::<math>x_2 + x_4 = 0 \hspace{0.05cm},\hspace{0.2cm}x_1 + x_5 = 0 \hspace{0.05cm}.</math>
  
Man erkennt aus diesen Gleichungen und auch aus obiger Codetabelle:  
+
You can see from these equations and from the above code table:  
*Dieser Code bietet gegenüber einem Übertragungsfehler hinsichtlich des dritten Bits $(x_3 = u_3)$ keinen Schutz.  
+
#This code offers no protection against a transmission error with respect to the third bit&nbsp; $(x_3 = u_3)$&nbsp;.
*Damit ist natürlich weder eine Fehlererkennung und noch weniger Fehlerkorrektur möglich.  
+
#This,&nbsp; of course,&nbsp; does not allow for error detection,&nbsp; and much less error correction.
*Gleiches gilt aber auch für den nichtsystematischen Code auf der letzten Seite.}}<br>
+
#But the same is true for the non-systematic code according to&nbsp; [[Channel_Coding/General_Description_of_Linear_Block_Codes#Relationship_between_generator_and_parity-check_matrix|$\text{Example 7}$]]&nbsp; in the last section.}}<br>
  
== Darstellung von SPC und RC als duale Codes ==
+
== Representation of SPC and RC as dual codes ==
 
<br>
 
<br>
Nun sollen für die bereits im Kapitel [[Kanalcodierung/Beispiele_bin%C3%A4rer_BlockcodesBeispiele binärer Blockcodes]] behandelten Codes noch jeweils die Generatormatrix $\boldsymbol{\rm G}$ und die Prüfmatrix $\boldsymbol{\rm 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
+
For the codes already dealt with in the chapter&nbsp; [[Channel_Coding/Examples_of_Binary_Block_Codes|$\text{Examples of binary block codes}$]],&nbsp;  the generator matrix&nbsp; $\boldsymbol{\rm G}$&nbsp; and the parity-check matrix&nbsp; $\boldsymbol{\rm H}$&nbsp; are to be given in each case.&nbsp; Let the code length always be&nbsp; $n = 5$ for the following examples,&nbsp; but the results can be interpreted in the same way for other code lengths.&nbsp; It applies to
*den [[Kanalcodierung/Beispiele_bin%C3%A4rer_Blockcodes#Single_Parity.E2.80.93check_Codes|Single&ndash;Parity&ndash;check Code]] &nbsp; &#8658; &nbsp; SPC (5, 4):
+
*the&nbsp; [[Channel_Coding/Examples_of_Binary_Block_Codes#Single_Parity-check_Codes|$\text{single parity&ndash;check code}$]] &nbsp; &#8658; &nbsp; $\text{SPC (5, 4)}$:
  
 
::<math>{ \boldsymbol{\rm H}}  
 
::<math>{ \boldsymbol{\rm H}}  
Line 460: Line 492:
 
0 &0 &0 &1 &1
 
0 &0 &0 &1 &1
 
\end{pmatrix}
 
\end{pmatrix}
\hspace{0.05cm}.</math>
+
\hspace{0.05cm};</math>
  
*den [[Kanalcodierung/Beispiele_bin%C3%A4rer_Blockcodes#Wiederholungscodes|Wiederholungscode]] (<i>Repetition Code</i>) &nbsp; &#8658; &nbsp; RC (5,1):
+
*the&nbsp; [[Channel_Coding/Examples_of_Binary_Block_Codes#Repetition_Codes|$\text{repetition code}$]] &nbsp; &#8658; &nbsp; $\text{RC (5, 1)}$:
  
 
::<math>{ \boldsymbol{\rm G}}  
 
::<math>{ \boldsymbol{\rm G}}  
Line 477: Line 509:
 
\hspace{0.05cm}.</math>
 
\hspace{0.05cm}.</math>
  
Die jeweils erste Gleichung lässt sich einfach aus der jeweiligen Definition herleiten und die abgeleitete Gleichung folgt aus der Beziehung $\boldsymbol{\rm H} \cdot \boldsymbol{\rm G}^{\rm T} = \boldsymbol{\rm 0}$. Aus den obigen Matrizen kann verallgemeinert werden:
+
The first equation can be easily derived from the respective definition and the derived equation follows from the relation&nbsp; $\boldsymbol{\rm H} \cdot \boldsymbol{\rm G}^{\rm T} = \boldsymbol{\rm 0}$.  
*Die Generatormatrix des RC (5, 1) ist identisch mit der Prüfmatrix des SPC (5, 4). Es handelt sich jeweils um $(5 \times 1)$&ndash;Matrizen.<br>
+
 
 +
From the above matrices can be generalized:
 +
*The generator matrix of the&nbsp; $\text{RC (5, 1)}$&nbsp; is identical to the parity-check matrix of the&nbsp; $\text{SPC (5, 4)}$.&nbsp; In each case they are&nbsp; $(5 \times 1)$ matrices.<br>
  
*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.<br>
+
*The parity-check matrix of the&nbsp; $\text{RC (5, 1)}$&nbsp; is identical to the generator matrix of the&nbsp; $\text{SPC (5, 4)}$. These two matrices each have&nbsp; $5$&nbsp; columns and&nbsp; $4$&nbsp; rows.<br>
  
*Dieser Sachverhalt ergibt sich, weil es sich hier um '''duale Codes'''  handelt. Zur Erklärung benötigen wir noch zwei Definitionen:<br>
+
*This situation arises because we are dealing here with so-called&nbsp; "dual codes".&nbsp; For explanation we need two more definitions:<br>
  
  
 
{{BlaueBox|TEXT=   
 
{{BlaueBox|TEXT=   
$\text{Definition:}$&nbsp; Zwei lineare Codes $\mathcal{C}$ und $\mathcal{C}'$, beide aus ${\rm GF}(2^n)$, sind ''orthogonal'', wenn alle Codeworte $\underline{x} \in \mathcal{C}$ zu allen Codeworten $\underline{x}' \in \mathcal{C}'$ orthogonal sind. Man bezeichnet dann $\mathcal{C}$ und $\mathcal{C}'$ als '''duale Codes'''.}}<br><br>
+
$\text{Definition:}$&nbsp; Two linear codes&nbsp; $\mathcal{C}$&nbsp; and&nbsp; $\mathcal{C}\hspace{0.05cm}'$,&nbsp; both made of&nbsp; ${\rm GF}(2^n)$,&nbsp; are&nbsp; &raquo;'''orthogonal'''&laquo;&nbsp; if all code words&nbsp; $\underline{x} \in \mathcal{C}$&nbsp; to all code words&nbsp; $\underline{x}\hspace{0.05cm}' \in \mathcal{C}\hspace{0.05cm}'$&nbsp; are orthogonal.  
 +
*One then refers to&nbsp; $\mathcal{C}$&nbsp; and&nbsp; $\mathcal{C}\hspace{0.05cm}'$&nbsp; as&nbsp; &raquo;'''dual codes'''&laquo;.}}<br>
  
 
{{BlaueBox|TEXT=   
 
{{BlaueBox|TEXT=   
$\text{Definition:}$&nbsp; Zwei Codeworte $\underline{x} \in{\rm GF}(2^n)$ und $\underline{x} \in {\rm GF}(2^n)$ sind immer dann zueinander '''orthogonal''', wenn das [[Digitalsignalübertragung/Signale,_Basisfunktionen_und_Vektorräume#Zur_Nomenklatur_im_vierten_Kapitel|innere Produkt]] verschwindet:
+
$\text{Definition:}$&nbsp; Two code words&nbsp; $\underline{x} \in{\rm GF}(2^n)$&nbsp; and&nbsp; $\underline{x\hspace{0.05cm}'} \in {\rm GF}(2^n)$&nbsp; are&nbsp; &raquo;'''orthogonal'''&laquo;&nbsp; to each other whenever the&nbsp; [[Digital_Signal_Transmission/Signals,_Basis_Functions_and_Vector_Spaces#Nomenclature_in_the_fourth_chapter|$\text{inner product}$]]&nbsp; disappears:
  
::<math>\left \langle \underline{x} \cdot \underline{x}' \right \rangle =  \sum_{i=1  }^{n} x_i \cdot x_i' = 0 \hspace{0.05cm}, \hspace{0.5cm}
+
::<math>\big \langle \underline{x} \cdot \underline{x}\hspace{0.05cm}' \big \rangle =  \sum_{i=1  }^{n} x_i \cdot x\hspace{0.05cm}'_i = 0 \hspace{0.05cm}, \hspace{0.5cm}
\left \langle \underline{x} \cdot \underline{x}' \right \rangle \in {\rm GF}(2^n)
+
\left \langle \underline{x} \cdot \underline{x}\hspace{0.05cm}' \right \rangle \in {\rm GF}(2^n)
 
\hspace{0.05cm}.</math>}}<br>
 
\hspace{0.05cm}.</math>}}<br>
  
Wegen der Produktbildung in ${\rm GF}(2^n)$ sind auch folgende Codewort&ndash;Paare zueinander orthogonal:
+
Because of the product  in&nbsp; ${\rm GF}(2^n)$,&nbsp; the following code word pairs are also orthogonal to each other:
  
::<math>\left \langle \hspace{0.05cm}(0, 1, 1, 0) \hspace{0.05cm}, \hspace{0.2cm} (1, 1, 1, 0) \hspace{0.05cm} \right \rangle = 0\hspace{0.05cm},\hspace{0.2cm}
+
::<math>\left \langle \hspace{0.05cm}(0, 1, 1, 0) \hspace{0.05cm}, \hspace{0.2cm} (1, 1, 1, 0) \hspace{0.05cm} \right \rangle = 0\hspace{0.05cm},\hspace{0.8cm}
 
\left \langle \hspace{0.1cm}(0, 1, 1, 0) \hspace{0.05cm}, \hspace{0.2cm} (0, 1, 1, 0) \hspace{0.1cm}\right \rangle = 0\hspace{0.05cm}.</math>
 
\left \langle \hspace{0.1cm}(0, 1, 1, 0) \hspace{0.05cm}, \hspace{0.2cm} (0, 1, 1, 0) \hspace{0.1cm}\right \rangle = 0\hspace{0.05cm}.</math>
  
Der Code $\mathcal{C}$ spannt einen $k$&ndash;dimensionalen Untervektorraum in ${\rm GF}(2^n)$ auf. Der Untervektorraum des dualen Codes $\mathcal{C}'$ ist zu diesem orthogonal und weist die Dimension $n-k$ auf. Damit gilt: &nbsp; ${\rm dim} \{ \mathcal{C} \} + {\rm dim} \{ \mathcal{C}' \} = n\hspace{0.05cm}.$<br>
+
*The code&nbsp; $\mathcal{C}$&nbsp; spans a&nbsp; $k$&ndash;dimensional subvector space in&nbsp; ${\rm GF}(2^n)$.
 +
 +
*The subspace of the dual code&nbsp; $\mathcal{C}\hspace{0.05cm}'$&nbsp; is orthogonal to it and has dimension&nbsp; $n-k$.
  
== Einige Eigenschaften des (7, 4, 3)–Hamming–Codes ==
+
*Thus follows: &nbsp; ${\rm dim} \{ \mathcal{C} \} + {\rm dim} \{ \mathcal{C}\hspace{0.05cm}' \} = n\hspace{0.05cm}.$<br>
 +
 
 +
== Some properties of the (7, 4, 3) Hamming code ==
 
<br>
 
<br>
Fassen wir die bisherigen Ergebnisse dieses Kapitels am Beispiel des systematischen Hamming&ndash;Codes nochmals zusammen, der bereits im Kapitel [[Kanalcodierung/Beispiele_bin%C3%A4rer_Blockcodes#Hamming.E2.80.93Codes|Beispiele binärer Blockcodes]] ausführlich beschrieben wurde. Dieser (7,&nbsp;4,&nbsp;3)&ndash;Code ist gekennzeichnet durch
+
Let us summarize again the previous results of this chapter using the example of the systematic Hamming code, which has already been described in detail in the chapter&nbsp; [[Channel_Coding/Examples_of_Binary_Block_Codes#Hamming_Codes|$\text{Examples of Binary Block Codes}$]]&nbsp;. This&nbsp; $\text{(7, 4, 3)}$ code is characterized by
[[File:P ID2359 KC T 1 4 S7.png|right|frame|Codeworte des (7, 4, 3)–Hamming–Codes|class=fit]]
+
[[File:P ID2359 KC T 1 4 S7.png|right|frame|Code words of the&nbsp; $\text{HC (7, 4, 3)}$|class=fit]]
*die Anzahl der Prüfgleichungen $m = 3$,<br>
+
*the number of parity-check equations&nbsp; $m = 3$,<br>
*die Codelänge $n = 2^m-1 = 7$,<br>
+
*the code length&nbsp; $n = 2^m-1 = 7$,<br>
*die Informationswortlänge $k = n-m = 4$,<br>
+
*the information word length&nbsp; $k = n-m = 4$,<br>
*die Anzahl $2^k =16$ der Codeworte (Dimension),<br>
+
*the number of code words (dimension)&nbsp; $2^k =16$&nbsp;,<br>
*die Rate $R= k/n = 4/7$,<br>
+
*the rate&nbsp; $R= k/n = 4/7$,<br>
*die minimale Distanz $d_{\rm min} = 3$ (unabhängig von $m$, $n$ und$k$).<br>
+
*the minimum distance&nbsp; $d_{\rm min} = 3$&nbsp; $($independent of&nbsp; $m$,&nbsp; $n$&nbsp; and&nbsp; $k)$.<br>
 +
 
 +
 
 +
In the above table the&nbsp; $2^4 = 16$&nbsp; code words are given <br>(black:&nbsp; four information bits, red:&nbsp; three parity bits).
 +
 
 +
One can see from this:
 +
*The code includes both the all zero word&nbsp; "$0000000$"&nbsp; and the all one word&nbsp;  "$1111111$".
 +
 
 +
*There are seven code words resulting from&nbsp; "$0001011$"&nbsp; each by cyclic shift&nbsp; (all highlighted in yellow).
  
 +
*There are seven code words resulting from&nbsp; "$0011101$"&nbsp; each by cyclic shift&nbsp; (all highlighted in green).
  
In obiger Tabelle sind die $2^4 = 16$ Codeworte angegeben ( schwarz: vier Informationsbits, rot: dreiPrüfbits).  
+
*For each code word also exists the "negated" code word, for example, besides&nbsp; "$0001011$"&nbsp; there is also the code word&nbsp; "$1110100$".
  
Man erkennt daraus:
+
*The parity-check matrix can be written as follows:
*Der Code  beinhaltet sowohl das Null&ndash;Wort $(0000000)$ als auch das Eins>&ndash;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 &bdquo;negierte&rdquo; Codewort, zum Beispiel gibt es neben $(0001011)$ auch das Codewort $(1110100)$.
 
*Die Prüfmatrix kann wie folgt geschrieben werden:
 
  
 
::<math>{ \boldsymbol{\rm H}} =  \begin{pmatrix}
 
::<math>{ \boldsymbol{\rm H}} =  \begin{pmatrix}
Line 539: Line 582:
 
\end{pmatrix}\hspace{0.05cm}.</math>
 
\end{pmatrix}\hspace{0.05cm}.</math>
  
Dementsprechend gilt für die Generatormatrix:
+
*Accordingly, the following applies to the generator matrix:
  
 
::<math>{ \boldsymbol{\rm G}} =\left({ \boldsymbol{\rm I}}_4 \: ; \: { \boldsymbol{\rm P}}\right)
 
::<math>{ \boldsymbol{\rm G}} =\left({ \boldsymbol{\rm I}}_4 \: ; \: { \boldsymbol{\rm P}}\right)
Line 549: Line 592:
 
\end{pmatrix}\hspace{0.05cm}.</math><br>
 
\end{pmatrix}\hspace{0.05cm}.</math><br>
  
== Aufgaben zum Kapitel ==
+
== Exercises for the chapter ==
 
<br>
 
<br>
[[Aufgaben:Aufgabe_1.07:_Prüf-_und_Generatormatrix_des_HC_(7,_4,_3)|Aufgabe 1.7:  Prüfmatrix und Generatormatrix des HC (7, 4, 3)]]
+
[[Aufgaben:Exercise_1.07:_Check_and_Generator_Matrix_of_the_HC_(7,_4,_3)|Exercise 1.7:  Check and Generator Matrix of the HC (7, 4, 3)]]
  
[[Aufgaben:Aufgabe_1.07Z:_Klassifizierung_von_Blockcodes|Aufgabe 1.7Z: Klassifizierung von Blockcodes]]
+
[[Aufgaben:Aufgabe_1.07Z:_Klassifizierung_von_Blockcodes|Exercise 1.7Z: Classification of Block Codes]]
  
[[Aufgaben:Aufgabe_1.08:_Identische_Codes|Aufgabe 1.8: Identische Codes]]
+
[[Aufgaben:Aufgabe_1.08:_Identische_Codes|Exercise 1.8: Identical Codes]]
  
[[Aufgaben:Aufgabe_1.08Z:_Äquivalente_Codes|Aufgabe 1.8Z: Äquivalente Codes]]
+
[[Aufgaben:Aufgabe_1.08Z:_Äquivalente_Codes|Exercise 1.8Z: Equivalent Codes]]
  
[[Aufgaben:Aufgabe_1.09:_Erweiterter_Hamming–Code|Aufgabe 1.9: Erweiterter Hamming–Code]]
+
[[Aufgaben:Aufgabe_1.09:_Erweiterter_Hamming–Code|Exercise 1.9: Extended Hamming Code]]
  
[[Aufgaben:Aufgabe_1.09Z:_Erweiterung_und/oder_Punktierung|Aufgabe 1.9Z: Erweiterung und/oder Punktierung]]
+
[[Aufgaben:Aufgabe_1.09Z:_Erweiterung_und/oder_Punktierung|Exercise 1.9Z: Extension and/or Puncturing]]
  
[[Aufgaben:Aufgabe_1.10:_Einige_Generatormatrizen|Aufgabe 1.10: Einige Generatormatrizen]]
+
[[Aufgaben:Aufgabe_1.10:_Einige_Generatormatrizen|Exercise 1.10: Some Generator Matrices]]
  
 
{{Display}}
 
{{Display}}

Latest revision as of 10:32, 22 November 2022

Linear codes and cyclic codes


All codes mentioned so far are  »linear«:


Now the definition of  "linearity"  valid for binary block codes is added.

$\text{Definition:}$  A  »linear binary block code«  $\mathcal{C}$   is a set of  $2^k$  code words  $\underline{x}= (x_1, x_2, \hspace{0.05cm}\text{...}\hspace{0.05cm}, x_n)$,  where the  (modulo 2)  sum of any two code words  $\underline{x}$  and  $\underline{x}\hspace{0.05cm}'$  again gives a valid code word:

\[\underline{x}, \underline{x}\hspace{0.05cm}' \in {\rm GF}(2^n),\hspace{0.3cm} \underline{x}, \underline{x}\hspace{0.05cm}' \in \mathcal{C} \hspace{0.3cm} \Rightarrow \hspace{0.3cm}\underline{x} + \underline{x}\hspace{0.05cm}' \in \mathcal{C} \hspace{0.05cm}.\]
  • This condition must also be satisfied for  $\underline{x} = \underline{x}\hspace{0.05cm}'$ .
  • For the remainder of this book,  modulo addition will no longer be expressed by the  "modulo sign"  to simplify notation, but by the conventional  "plus sign".


$\text{Example 1:}$  We consider two  $\text{(3, 2)}$  block codes:

\[\mathcal{C}_1 = \{ (0, 0, 0) \hspace{0.05cm}, (0, 1, 1) \hspace{0.05cm},(1, 0, 1) \hspace{0.05cm},(1, 1, 0) \}\hspace{0.05cm},\]
\[\mathcal{C}_2 = \{ (0, 0, 0) \hspace{0.05cm}, (0, 1, 1) \hspace{0.05cm},(1, 1, 0) \hspace{0.05cm},(1, 1, 1) \hspace{0.05cm}.\]

You can see:

  • The code  $\mathcal{C}_1$  is linear,  since the modulo 2 addition of any two code words always yields also a valid code word, e.g.  $(0, 1, 1) + (1, 0, 1) = (1, 1, 0)$.
  • The above definition also applies to the modulo 2 addition of a code word with itself, e.g.  $(0, 1, 1) + (0, 1, 1) = (0, 0, 0)$.
  • From this follows:  Each linear code contains the all-zero word  $\underline{0}$.
  • Although the last condition is satisfied,  $\mathcal{C}_2$  is not a linear code.  Indeed,  for this code:   $(0, 1, 1) + (1, 1, 0) = (1, 0, 1)$.  This is not a valid code word of  $\mathcal{C}_2$.


In the following,  we restrict ourselves exclusively to linear codes,  since non-linear codes are of secondary importance for practical use.

$\text{Definition:}$  A linear block code  $\mathcal{C}$  is called  »cyclic«  if every cyclic shift of a code word  $\underline{x}$   $($to the left or right$)$   results in a valid code word:

\[\underline{x}= (x_1, x_2, \hspace{0.05cm}\text{...} \hspace{0.05cm}, x_n) \in \mathcal{C} \hspace{0.3cm} \Rightarrow \hspace{0.3cm}\underline{x}\hspace{0.05cm}'= (x_n, x_1, \hspace{0.05cm}\text{...} \hspace{0.05cm} \hspace{0.05cm}, x_{n-1}) \in \mathcal{C} \hspace{0.05cm}.\]



Code table of the systematic  $\text{(7, 4, 3)}$  Hamming code;
black:   $k= 4$  information bits, red:   $n-k = 3$  parity bits

$\text{Example 2:}$  You can see from the table for the  $\text{HC (7, 4, 3)}$ that it is linear and cyclic.


  • A valid code word results even if all bits are inverted:   $0 ↔ 1$.
  • Also the  $\underline{0}$  word  $(n$  times a "zero"$)$  and the  $\underline{1}$  word  $(n$  times a "one"$)$  are allowed with this code.


Code definition by the parity-check matrix


Chart for the  $\text{(7, 4, 3)}$  Hamming code

We consider the  $\text{(7, 4, 3)}$  Hamming code  with code words  $\underline{x}$  of length  $n=7$, consisting of

  • $k = 4$  information bits  $x_1$,  $x_2$,  $x_3$,  $x_4$, and
  • $m = n-k = 3$  parity bits $x_5$,  $x_6$,  $x_7$.

The parity-check equations are  (see graphic on the right):

\[x_1 + x_2 + x_3 + x_5 = 0 \hspace{0.05cm},\]
\[x_2 + x_3 + x_4 + x_6 = 0 \hspace{0.05cm},\]
\[x_1 + x_2 + x_4 + x_7 = 0 \hspace{0.05cm}. \]

In matrix notation, this set of equations reads:

\[{ \boldsymbol{\rm H}} \cdot \underline{x}^{\rm T}= \underline{0}^{\rm T} \hspace{0.05cm}. \]

In this equation are used:

  • the  »parity-check matrix«  ${ \boldsymbol{\rm H}}$  with  $m = n-k = 3$  rows and  $n = 7$  columns:
\[{ \boldsymbol{\rm H}} = \begin{pmatrix} 1 &1 &1 &0 &1 & 0 & 0\\ 0 &1 &1 &1 &0 & 1 & 0\\ 1 &1 &0 &1 &0 & 0 & 1 \end{pmatrix}\hspace{0.05cm},\]
  • the  code word  $\underline{x}= (x_1,\ x_2, \hspace{0.05cm}\text{...}\hspace{0.05cm},\ x_7)$  of length  $n = 7$,
  • the  all-zero vector  $\underline{0} = (0,\ 0,\ 0)$  of length  $m = 3$.

By  "transposing",  the  row vectors   $\underline{x}$  and   $\underline{0}$   become the corresponding  column vectors  $\underline{x}^{\rm T}$  and  $\underline{0}^{\rm T}$.

$\text{Example 3:}$  The graph illustrates the  $m = 3$  parity-check equations of a code  $\mathcal{C}$  with code parameters  $n = 6$  and  $k = 3$  in the order red, green and blue.  Thus,  $\mathcal{C}$  is not a Hamming code  $(n \ne 2^m-1)$.

Chart for the  $\text{(6, 3, 3)}$  block code

According to the equation  $\boldsymbol{\rm H} \cdot \underline{x}^{\rm T}= \underline{0}^{\rm T}$  the parity-check matrix is:

\[ \boldsymbol{\rm H} = \begin{pmatrix} 1 &1 &0 &1 &0 & 0\\ 1 &0 &1 &0 &1 & 0\\ 0 &1 &1 &0 &0 & 1 \end{pmatrix}\hspace{0.05cm}.\]

The  $2^k = 8$  code words in systematic realization are  (with the parity bits to the right of the small arrow):

\[\underline{x}_0 = (0,\ 0,\ 0_{\hspace{0.01cm} \rightarrow} 0,\ 0,\ 0)\hspace{0.05cm}, \hspace{0.5cm} \underline{x}_1 = (0,\ 0,\ 1_{\hspace{0.01cm} \rightarrow}0,\ 1,\ 1)\hspace{0.05cm},\hspace{0.5cm} \underline{x}_2 = (0,\ 1,\ 0_{\hspace{0.01cm} \rightarrow}1,\ 0,\ 1)\hspace{0.05cm},\hspace{0.5cm}\underline{x}_3 = (0, 1, 1_{\hspace{0.01cm} \rightarrow}1,\ 1,\ 0)\hspace{0.05cm}, \] \[\underline{x}_4 = (1,\ 0,\ 0_{\hspace{0.01cm} \rightarrow} 1,\ 1,\ 0)\hspace{0.05cm}, \hspace{0.5cm} \underline{x}_5 = (1,\ 0,\ 1_{\hspace{0.01cm} \rightarrow}1,\ 0,\ 1)\hspace{0.05cm},\hspace{0.5cm} \underline{x}_6 = (1,\ 1,\ 0_{\hspace{0.01cm} \rightarrow}0,\ 1,\ 1)\hspace{0.05cm}, \hspace{0.5cm} \underline{x}_7 = (1,\ 1,\ 1_{\hspace{0.01cm} \rightarrow}0,\ 0,\ 0)\hspace{0.05cm}.\]

It can be seen from these specifications:

  • The number of columns  $\boldsymbol{\rm H}$  is equal to the code length  $n$.
  • The number of lines of  $\boldsymbol{\rm H}$  is equal to the number  $m = n-k$  of parity-check equations.
  • From  $\boldsymbol{\rm H} \cdot \underline{x}^{\rm T}= \underline{0}^{\rm T} $  it therefore does not follow that all code words contain an even number of ones.


Code definition by the generator matrix


The check matrix  $\boldsymbol{\rm H}$  of a  $(n, k)$  block code has 

  • $n$  columns,
  • $m = n-k$  rows.


However,  the same code can be described by the matrix  $\boldsymbol{\rm G}$  with

  • also  $n$  columns,
  • but  $k$  rows.


$\text{Definition:}$  A linear binary block code  $\mathcal{C}$  can be characterized by the  »check matrix«  $\boldsymbol{\rm H}$  or with the  »generator matrix«  $\boldsymbol{\rm G}$  as follows:

\[\mathcal{C} = \{ \underline{x} \in {\rm GF}(2^n)\text{:} \hspace{0.2cm}{ \boldsymbol{\rm H} } \cdot \underline{x}^{\rm T}= \underline{0}^{\rm T} \}\hspace{0.05cm},\]
\[\mathcal{C} = \{ \underline{x} \in {\rm GF}(2^n)\hspace{0.05cm}, \hspace{0.1cm}\underline{u} \in {\rm GF}(2^k)\text{:} \hspace{0.2cm}\underline{x} = \underline{u} \cdot { \boldsymbol{\rm G} } \}\hspace{0.05cm}.\]


Before we turn to the properties of the generator matrix,  we describe the generation of the code words with an example.

$\text{Example 4:}$  We consider a linear  $(5, 3)$  block code with the generator matrix (again:  this is not a Hamming code!)

\[ \boldsymbol{\rm G} = \begin{pmatrix} 1 &1 &0 &1 &1\\ 0 &1 &0 &1 &0\\ 0 &1 &1 &1 &0 \end{pmatrix} = \begin{pmatrix} \underline{g}_1\\ \underline{g}_2\\ \underline{g}_3\\ \end{pmatrix} \hspace{0.05cm}.\]
  • Thus,  the information words  $\underline{u}= (u_1,\ u_2,\ u_3)$  are assigned to the code words  $\underline{x}= (x_1,\ x_2,\ x_3,\ x_4,\ x_5)$  according to the following equations.
  • The following always applies:  $\underline{x} = \underline{u} \cdot \boldsymbol{\rm G}$:
\[\underline{u}_0 = (0, 0, 0)\hspace{0.3cm} \rightarrow\hspace{0.3cm} \underline{x}_0 = (0, 0, 0, 0, 0) \hspace{0.05cm},\]
\[\underline{u}_1 = (0, 0, 1)\hspace{0.3cm} \rightarrow\hspace{0.3cm} \underline{x}_1 = (0, 1, 1, 1, 0) \hspace{0.1cm}= \hspace{0.1cm}\underline{g}_3\hspace{0.05cm},\]
\[\underline{u}_2 = (0, 1, 0)\hspace{0.3cm} \rightarrow\hspace{0.3cm} \underline{x}_2 = (0, 1, 0, 1, 0)\hspace{0.1cm}= \hspace{0.1cm} \underline{g}_2\hspace{0.05cm},\]
\[\underline{u}_3 = (0, 1, 1)\hspace{0.3cm} \rightarrow\hspace{0.3cm} \underline{x}_3 = (0, 0, 1, 0, 0) \hspace{0.1cm}= \hspace{0.1cm} \underline{g}_2+\underline{g}_3\hspace{0.05cm},\]
\[\underline{u}_4 = (1, 0, 0)\hspace{0.3cm} \rightarrow\hspace{0.3cm} \underline{x}_4 = (1, 1, 0, 1, 1)\hspace{0.1cm}= \hspace{0.1cm} \underline{g}_1 \hspace{0.05cm},\]
\[\underline{u}_5 =(1, 0, 1)\hspace{0.3cm} \rightarrow\hspace{0.3cm} \underline{x}_5 = (1, 0, 1, 0, 1)\hspace{0.1cm}= \hspace{0.1cm} \underline{g}_1+\underline{g}_3\hspace{0.05cm},\]
\[\underline{u}_6 = (1, 1, 0)\hspace{0.3cm} \rightarrow\hspace{0.3cm} \underline{x}_6 = (1, 0, 0, 0, 1)\hspace{0.1cm}= \hspace{0.1cm} \underline{g}_1+\underline{g}_2\hspace{0.05cm},\]
\[\underline{u}_7 =(1, 1, 1)\hspace{0.3cm} \rightarrow\hspace{0.3cm} \underline{x}_7 = (1, 1, 1, 1, 1) \hspace{0.1cm}= \hspace{0.1cm} \underline{g}_1+ \underline{g}_2+\underline{g}_3\hspace{0.05cm}.\]


Notes:

  • The basis vectors used here for the calculation  $\underline{g}_1$,  $\underline{g}_2$  and  $\underline{g}_3$  – each with length  $n = 5$  – correspond to the  $k = 3$  rows of the generator matrix  $\boldsymbol{\rm G}$.
  • This code is neither suitable for error correction nor for error detection because of  $d_{\rm min} = 1$.  Nevertheless,  this code is also considered exemplarily in the next sections,  because the coding results are well interpretable.
  • At this point we would like to draw your attention to the applet  $\text{Gram–Schmidt process}$  for the book  "Digital Signal Transmission",  which teaches the calculation of basis functions,  although in a different context than the one used here.


Identical Codes


The vectors  $\underline{g}_1$,  $\underline{g}_2$,  ...  ,  $\underline{g}_k$  used in  $\text{Example 4}$  in the last section are the  $\text{basis vectors}$  of the linear block code  $\mathcal{C}$.

  • The code itself can be viewed as a  $k$–dimensional  subspace  of  $\text{GF}(2^n)$.
  • The basis vectors  $\underline{g}_1$,  $\underline{g}_2$,  ...  , $\underline{g}_k$  are linearly independent.


However,  the subspace  $\mathcal{C}$  is not only spanned by the basis vectors

\[\underline{g}_1 = (1, 1, 0, 1, 1) \hspace{0.05cm},\hspace{0.3cm} \underline{g}_2 = (0, 1, 0, 1, 0) \hspace{0.05cm},\hspace{0.3cm} \underline{g}_3 = (0, 1, 1, 1, 0) \hspace{0.05cm}\]

but other basis vectors  $\underline{g}\hspace{0.05cm}'_1$,  $\underline{g}\hspace{0.05cm}'_2$  and  $\underline{g}\hspace{0.05cm}'_3$  are equally suitable as long as linear independence is guaranteed between them.

$\text{Example 5:}$  We compare the code  $\mathcal{C}$  of  $\text{Example 4}$  with a second code  $\mathcal{C}\hspace{0.05cm}'$.  The generator matrices are:

\[ \boldsymbol{\rm G} = \begin{pmatrix} \underline{g}_1\\ \underline{g}_2\\ \underline{g}_3\\ \end{pmatrix}= \begin{pmatrix} 1 &1 &0 &1 &1\\ 0 &1 &0 &1 &0\\ 0 &1 &1 &1 &0 \end{pmatrix}\hspace{0.05cm},\hspace{0.3cm} \boldsymbol{\rm G}\hspace{0.05cm}' = \begin{pmatrix} \underline{g}\hspace{0.05cm}'_1\\ \underline{g}\hspace{0.05cm}'_2\\ \underline{g}\hspace{0.05cm}'_3\\ \end{pmatrix}= \begin{pmatrix} 1 &0 &0 &0 &1\\ 0 &1 &0 &1 &0\\ 0 &0 &1 &0 &0 \end{pmatrix}\hspace{0.05cm}.\]
  • The two codes are identical:   They contain the exact same code words; only a different assignment applies.
  • During the transition from  $\boldsymbol{\rm G}$  to  $\boldsymbol{\rm G}\hspace{0.05cm}'$,  the following allowed operations were performed:
\[\underline{g}\hspace{0.05cm}'_1 = \underline{g}_1 + \underline{g}_2 \hspace{0.05cm},\hspace{0.3cm} \underline{g}\hspace{0.05cm}'_2 = \underline{g}_2 \hspace{0.05cm},\hspace{0.3cm} \underline{g}\hspace{0.05cm}'_3 = \underline{g}_2 + \underline{g}_3 \hspace{0.05cm}.\]
  • The corresponding code   $\mathcal{C}'$   is obtained by the equation  $\underline{x}' = \underline{u} \cdot \boldsymbol{\rm G}'$:
\[\underline{u}_0 = (0, 0, 0)\hspace{0.3cm} \rightarrow\hspace{0.3cm} \underline{x}\hspace{0.05cm}'_0 = (0, 0, 0, 0, 0) \hspace{0.1cm}= \hspace{0.1cm} \underline{x}_0 \hspace{0.05cm},\]
\[\underline{u}_1 = (0, 0, 1)\hspace{0.3cm} \rightarrow\hspace{0.3cm} \underline{x}\hspace{0.05cm}'_1 = (0, 0, 1, 0, 0) \hspace{0.1cm}= \hspace{0.1cm}\underline{x}_3\hspace{0.05cm},\]
\[\underline{u}_2 = (0, 1, 0)\hspace{0.3cm} \rightarrow\hspace{0.3cm} \underline{x}\hspace{0.05cm}'_2 = (0, 1, 0, 1, 0) \hspace{0.1cm}= \hspace{0.1cm} \underline{x}_2\hspace{0.05cm},\]
\[\underline{u}_3 = (0, 1, 1)\hspace{0.3cm} \rightarrow\hspace{0.3cm} \underline{x}\hspace{0.05cm}'_3 = (0, 1, 1, 1, 0) \hspace{0.1cm}= \hspace{0.1cm} \underline{x}_1\hspace{0.05cm},\]
\[\underline{u}_4 = (1, 0, 0)\hspace{0.3cm} \rightarrow\hspace{0.3cm} \underline{x}\hspace{0.05cm}'_4 = (1, 0, 0, 0, 1)\hspace{0.1cm}= \hspace{0.1cm} \underline{x}_6 \hspace{0.05cm},\]
\[\underline{u}_5 =(1, 0, 1)\hspace{0.3cm} \rightarrow\hspace{0.3cm} \underline{x}\hspace{0.05cm}'_5 = (1, 0, 1, 0, 1)\hspace{0.1cm}= \hspace{0.1cm} \underline{x}_5\hspace{0.05cm},\]
\[\underline{u}_6 = (1, 1, 0)\hspace{0.3cm} \rightarrow\hspace{0.3cm} \underline{x}\hspace{0.05cm}'_6 = (1, 1, 0, 1, 1)\hspace{0.1cm}= \hspace{0.1cm} \underline{x}_4\hspace{0.05cm},\]
\[\underline{u}_7 = (1, 1, 1)\hspace{0.3cm} \rightarrow\hspace{0.3cm} \underline{x}\hspace{0.05cm}'_7 = (1, 1, 1, 1, 1) \hspace{0.1cm}= \hspace{0.1cm} \underline{x}_7\hspace{0.05cm}.\]
  • The corresponding code words  $\underline{x}_i = \underline{u}_i \cdot \boldsymbol{\rm G}$  of the code   $\mathcal{C}$   ⇒   generator matrix  $\boldsymbol{\rm G}$  are give in  $\text{Example 4}$  (previous section).


$\text{Conclusion:}$  The code tables of  $\text{Example 4}$  and  $\text{Example 5}$  make clear:

  • $\mathcal{C}$  and  $\mathcal{C}\hspace{0.05cm}'$  contain the same code words.  They are thus  "identical codes"  and both have the same capability of correction  (see next section).
  • $\mathcal{C}\hspace{0.05cm}'$  is now a  "systematic code"  since the first  $k$  binary digits of each code word  $\underline{x}\hspace{0.05cm}'_i$  match the binary digits of the information word.


Systematic Codes


The property  "systematic"  is now to be specified in mathematical form.

$\text{Definition:}$  In a  $\text{systematic }(n, k) \text{ block code} \ \ \mathcal{C}$  each code word  $\underline{x}$  explicitly includes the information word  $\underline{u}$.

  • That is,  it applies:   $\underline{u} = (u_1,\ u_2, \hspace{0.05cm}\text{...} \hspace{0.05cm},\ u_k) \hspace{0.3cm} \Rightarrow\hspace{0.3cm} \underline{x}\hspace{0.05cm} = (u_1,\ u_2,\ ... \hspace{0.05cm},\ u_k,\ x_{k+1}, \hspace{0.05cm}\text{...}\hspace{0.05cm},\ x_n)\hspace{0.05cm}.$
  • The generator matrix in this case has the form   $\boldsymbol{\rm G_{\rm sys} } =\left({ \boldsymbol{\rm I}_{\rm k} \ ; \ \boldsymbol{\rm P} }\right)$   with the  $k×k$  "identity matrix"   $\boldsymbol{\rm I}_{\rm k}$   and a suitably chosen  $(n-1)×k$  matrix   $\boldsymbol{\rm P}$.


So,  for   $\text{Example 5}$  in the last section can also be written:

\[ \boldsymbol{\rm G_{sys}} =\left({ \boldsymbol{\rm I}}_3 \: ; \: { \boldsymbol{\rm P}}\right)\hspace{0.3cm}{\rm with}\hspace{0.3cm} { \boldsymbol{\rm I_{3}}} = \begin{pmatrix} 1 &0 &0 \\ 0 &1 &0 \\ 0 &0 &1 \end{pmatrix}\hspace{0.3cm}{\rm and}\hspace{0.3cm} { \boldsymbol{\rm P}} = \begin{pmatrix} 0 &1 \\ 1 &0 \\ 0 &0 \end{pmatrix}\hspace{0.05cm}.\]

It is gratifying from the point of view of channel coding,  that for each code  $\mathcal{C}$  a systematic  $($identical or at least equivalent$)$  code  $\mathcal{C}_{\rm sys}$  can be found.

In an  »identical systematic code«,   $\underline{x}$  and  $\underline{x}_{\rm sys}$  contain the same code words,  only the mapping  $\underline{u}   →   \underline{x}$  is different.  One gets from a block code  $\mathcal{C}$  to the identical systematic code  $\mathcal{C}_{\rm sys}$  by the following manipulations with respect to the generator matrix  $\mathcal{\rm G}$:

  • Swap or permute the rows,
  • Multiply all rows by a constant vector not equal to  $\underline{0}$,
  • Replace a row with a linear combination between this row and another one.


$\text{Without proof:}$  An  $\text{identical systematic code }\mathcal{C}_{\rm sys}$  can be found whenever to a generator matrix  $\boldsymbol{\rm G}$  there exists a matrix  $\boldsymbol{\rm A}$  such that  $\boldsymbol{\rm G}_{\rm sys} = \boldsymbol{\rm A} \cdot \boldsymbol{\rm G}$  holds.


If this is not possible,  one can at least find an  »equivalent systematic code«  by swapping or permuting the columns of  $\boldsymbol{\rm G}$ :

\[\mathcal{C}_{\rm sys} = {\rm \pi} (\mathcal{C})\hspace{0.3cm}{\rm with}\hspace{0.3cm}{\rm \pi}():\hspace{0.15cm}{\rm permutation\:operator}\hspace{0.05cm}.\]
  • The codes  $\mathcal{C}$  and  $\mathcal{C}_{\rm sys}$  then contain different code words,  but they exhibit the same properties.
  • For example,  in this case  $\mathcal{C}_{\rm sys}$  exhibits the same minimum Hamming distance  $d_{\rm min}$  as the code  $\mathcal{C}$.


$\text{Example 6:}$  We consider the generator matrices

\[ \boldsymbol{\rm G} = \begin{pmatrix} 1 &1 &0 &0 \\ 0 &0 &1 &1 \end{pmatrix},\hspace{0.3cm} \boldsymbol{\rm G_{sys} } = \begin{pmatrix} 1 &0 &1 &0 \\ 0 &1 &0 &1 \end{pmatrix}\hspace{0.05cm}.\]

The analysis shows:

  • The corresponding codes  $\mathcal{C}$  and  $\mathcal{C}_{\rm sys}$  contain different code words and are thus  »not identical«:
\[\mathcal{C} = \big \{ (0, 0, 0, 0) \hspace{0.05cm}, (0, 0, 1, 1) \hspace{0.05cm},(1, 1, 0, 0) \hspace{0.05cm},(1, 1, 1, 1) \big \}\hspace{0.05cm},\]
\[\mathcal{C}_{\rm sys}= \big \{ (0, 0, 0, 0) \hspace{0.05cm}, (0, 1, 0, 1) \hspace{0.05cm},(1, 0, 1, 0) \hspace{0.05cm},(1, 1, 1, 1) \big \}\hspace{0.05cm}.\]
  • But they are  »equivalent«:  $\boldsymbol{\rm G}_{\rm sys}$  is obtained from  $\boldsymbol{\rm G}$  by swapping the second and third columns. 
  • It is a  $\text{(4, 2, 2)}$ block code in both cases   ⇒   $d_{\rm min} = 2$.


Relationship between generator and parity-check matrix


To define these two description matrices,  we assume the following equations:

\[\underline{x} = \underline{u} \cdot { \boldsymbol{\rm G}} \hspace{0.3cm} \Rightarrow \hspace{0.3cm} \underline{x}^{\rm T} = { \boldsymbol{\rm G}}^{\rm T} \cdot \underline{u}^{\rm T} \hspace{0.05cm}, \hspace{0.8cm} { \boldsymbol{\rm H}} \cdot \underline{x}^{\rm T} = { \boldsymbol{\rm 0}}\hspace{0.05cm}.\]

Linking these two equations,  we get:

\[{ \boldsymbol{\rm H}} \cdot { \boldsymbol{\rm G}}^{\rm T} \cdot \underline{u}^{\rm T} = \underline{0}\hspace{0.5cm} \forall \hspace{0.15cm}\underline{u} \in {\rm GF}(2^k)\hspace{0.3cm} \Rightarrow \hspace{0.3cm} { \boldsymbol{\rm H}} \cdot { \boldsymbol{\rm G}}^{\rm T} = { \boldsymbol{\rm 0}} \hspace{0.05cm}.\]

Note that in these equations.

  • $\underline{0}$   denotes a row vector with  $k$  elements, and
  • $\boldsymbol{\rm 0}$   denotes a matrix with  $m$  rows and  $k$  columns,


where all elements of  $\underline{0}$  and  $\boldsymbol{\rm 0}$  are zero.

$\text{Example 7:}$  We consider as in  $\text{Example 4}$  the  $\text{(5, 3)}$ block code

\[\mathcal{C} = \big \{ \hspace{0.15cm} ( \hspace{0.05cm} 0, 0, 0, 0, 0) \hspace{0.05cm},\]

\[ \hspace{0.6cm}( \hspace{0.05cm} 0, 1, 1, 1, 0) \hspace{0.05cm},\]
\[ \hspace{0.6cm}( \hspace{0.05cm}0, 1, 0, 1, 0) \hspace{0.05cm},\]
\[ \hspace{0.6cm}( \hspace{0.05cm}0, 0, 1, 0, 0) \hspace{0.05cm},\]
\[ \hspace{0.6cm}( \hspace{0.05cm} 1, 1, 0, 1, 1) \hspace{0.05cm},\]
\[ \hspace{0.6cm}( \hspace{0.05cm}1, 0, 1, 0, 1) \hspace{0.05cm},\]
\[ \hspace{0.6cm}( \hspace{0.05cm}1, 0, 0, 0, 1) \hspace{0.05cm},\]
\[ \hspace{0.6cm}(\hspace{0.05cm}1, 1, 1, 1, 1) \big \}\hspace{0.05cm}.\]

From  $n= 5$  and  $k = 3$  follows for the number of parity-check equations  $m = 2$.  By analyzing the possible code words,  the following results are obtained:

\[x_1 \oplus x_5 = 0 \hspace{0.05cm},\hspace{0.5cm} x_2 \oplus x_4 = 0\hspace{1cm} \Rightarrow \hspace{0.3cm}{ \boldsymbol{\rm H} } = \begin{pmatrix} 1 &0 &0 &0 &1\\ 0 &1 &0 &1 &0 \end{pmatrix}\]
\[\Rightarrow \hspace{0.3cm} { \boldsymbol{\rm H} } \cdot { \boldsymbol{\rm G} }^{\rm T} = \begin{pmatrix} 1 &0 &0 &0 &1\\ 0 &1 &0 &1 &0 \end{pmatrix} \begin{pmatrix} 1 &0 &0 \\ 1 &1 &1 \\ 0 &0 &1 \\ 1 &1 &1 \\ 1 &0 &0 \end{pmatrix} = \begin{pmatrix} 0 &0 &0 \\ 0 &0 &0 \end{pmatrix}\hspace{0.05cm}.\]

The zero matrix here consists of  $m = 2$  rows and  $k = 3$  columns.  For example,  for the element in the first row and the first column:

\[1 \cdot 1 \hspace{0.05cm}\oplus \hspace{0.05cm} 0 \cdot 1 \hspace{0.05cm}\oplus \hspace{0.05cm} 0 \cdot 0 \hspace{0.05cm}\oplus \hspace{0.05cm} 0 \cdot 1 \hspace{0.05cm}\oplus \hspace{0.05cm} 1 \cdot 1 = 0 \hspace{0.05cm}.\]



Generator matrix vs. parity-check matrix for systematic codes


Generally,  $\boldsymbol{\rm G}$  and  $\boldsymbol{\rm H}$  cannot be directly converted into each other,  because of the different dimensions of generator matrix  $(k \times n)$  and parity-check matrix  $(m \times n)$.

$\text{Without proof:}$  The calculation process is simplified if the  $(k \times n)$  generator matrix is in systematic form:  

$$ \boldsymbol{\rm G_{sys} } =\left({ \boldsymbol{\rm I} }_k \: ; \: { \boldsymbol{\rm P} }\right).$$
  • Then it follows from  $\boldsymbol{\rm H} \cdot \boldsymbol{\rm G}^{\rm T} = \boldsymbol{\rm 0}$  for the  $(m \times n)$  parity-check matrix with  $m = n-k$:
\[{ \boldsymbol{\rm H} } =\left( - { \boldsymbol{\rm P} }^{\rm T} \: ; \: { \boldsymbol{\rm I} }_m \right) \hspace{0.05cm}.\]
  • This equation holds in general,  i.e.,  also in the non-binary case.  Since we restrict ourselves to binary codes ⇒   $\mathcal{C} \in \text{GF}(2^n)$   ⇒  $ - \boldsymbol{\rm P} = +\boldsymbol{\rm P}$.
  • Thus we obtain the form we will use in the remainder of this chapter.
\[{ \boldsymbol{\rm H} } =\left( { \boldsymbol{\rm P} }^{\rm T} \: ; \: { \boldsymbol{\rm I} }_m \right)\hspace{0.05cm}. \]


$\text{Example 8:}$  We continue to consider the example  $\text{(5, 3)}$  block code,  but now assume the systematic generator matrix  $\boldsymbol{\rm G}_{\rm sys}$  that we determined the  $\text{Example 5}$:

\[ \boldsymbol{\rm G_{sys} } = \begin{pmatrix} 1 &0 &0 &0 &1\\ 0 &1 &0 &1 &0\\ 0 &0 &1 &0 &0 \end{pmatrix} =\left({ \boldsymbol{\rm I} }_3 \: ; \: { \boldsymbol{\rm P} }\right) \hspace{0.3cm} \Rightarrow \hspace{0.3cm} { \boldsymbol{\rm I_3} }= \begin{pmatrix} 1 &0 &0 \\ 0 &1 &0\\ 0 &0 &1 \end{pmatrix}, \hspace{0.3cm} { \boldsymbol{\rm P} }= \begin{pmatrix} 0 &1 \\ 1 &0\\ 0 &0 \end{pmatrix} \hspace{0.3cm}\Rightarrow\hspace{0.3cm} { \boldsymbol{\rm P}^{\rm T} } = \begin{pmatrix} 0 &1 &0\\ 1 &0 &0 \end{pmatrix}\hspace{0.05cm}.\]
  • This gives the following for the parity-check matrix
\[{ \boldsymbol{\rm H} } =\left({ \boldsymbol{\rm P} }^{\rm T} \: ; \: { \boldsymbol{\rm I} }_2 \right) = \begin{pmatrix} 0 &1 &0 &1 &0\\ 1 &0 &0 &0 &1 \end{pmatrix} \hspace{0.05cm}.\]
  • The following code table results:
\[\underline{u}_0 = (0, 0, 0)\hspace{0.2cm} \rightarrow\hspace{0.2cm} \underline{x}\hspace{0.05cm}_0 = (0, 0, 0, 0, 0) \hspace{0.05cm},\hspace{0.8cm}\underline{u}_4 = (1, 0, 0)\hspace{0.2cm} \rightarrow\hspace{0.2cm} \underline{x}\hspace{0.05cm}_4 = (1, 0, 0, 0, 1) \hspace{0.05cm},\]
\[\underline{u}_1 = (0, 0, 1)\hspace{0.2cm} \rightarrow\hspace{0.2cm} \underline{x}\hspace{0.05cm}_1 = (0, 0, 1, 0, 0) \hspace{0.05cm},\hspace{0.8cm}\underline{u}_5 =(1, 0, 1)\hspace{0.2cm} \rightarrow\hspace{0.2cm} \underline{x}\hspace{0.05cm}_5 = (1, 0, 1, 0, 1)\hspace{0.05cm},\]
\[\underline{u}_2 =(0, 1, 0)\hspace{0.2cm} \rightarrow\hspace{0.2cm} \underline{x}\hspace{0.05cm}_2 = (0, 1, 0, 1, 0) \hspace{0.05cm},\hspace{0.8cm}\underline{u}_6 =(1, 1, 0)\hspace{0.2cm} \rightarrow\hspace{0.2cm} \underline{x}\hspace{0.05cm}_6 = (1, 1, 0, 1, 1)\hspace{0.05cm},\]
\[\underline{u}_3 = (0, 1, 1)\hspace{0.2cm} \rightarrow\hspace{0.2cm} \underline{x}\hspace{0.05cm}_3 = (0, 1, 1, 1, 0) \hspace{0.05cm},\hspace{0.8cm}\underline{u}_7 = (1, 1, 1)\hspace{0.2cm} \rightarrow\hspace{0.2cm} \underline{x}\hspace{0.05cm}_7 = (1, 1, 1, 1, 1) \hspace{0.05cm}.\]
  • Together with the vector  $\underline{x} = (u_1,\ u_2,\ u_3,\ p_1,\ p_2) = (x_1,\ x_2,\ x_3,\ x_4,\ x_5)$  the parity bits are then:
\[p_1 = u_2 \hspace{0.05cm},\hspace{0.2cm}p_2 = u_1 \hspace{0.05cm},\]

and the corresponding parity-check equations of the decoder:

\[x_2 + x_4 = 0 \hspace{0.05cm},\hspace{0.2cm}x_1 + x_5 = 0 \hspace{0.05cm}.\]

You can see from these equations and from the above code table:

  1. This code offers no protection against a transmission error with respect to the third bit  $(x_3 = u_3)$ .
  2. This,  of course,  does not allow for error detection,  and much less error correction.
  3. But the same is true for the non-systematic code according to  $\text{Example 7}$  in the last section.


Representation of SPC and RC as dual codes


For the codes already dealt with in the chapter  $\text{Examples of binary block codes}$,  the generator matrix  $\boldsymbol{\rm G}$  and the parity-check matrix  $\boldsymbol{\rm H}$  are to be given in each case.  Let the code length always be  $n = 5$ for the following examples,  but the results can be interpreted in the same way for other code lengths.  It applies to

\[{ \boldsymbol{\rm H}} = \begin{pmatrix} 1 &1 &1 &1 &1 \end{pmatrix} \hspace{0.05cm},\hspace{0.5cm}{ \boldsymbol{\rm G}} = \begin{pmatrix} 1 &0 &0 &0 &1\\ 0 &1 &0 &0 &1\\ 0 &0 &1 &0 &1\\ 0 &0 &0 &1 &1 \end{pmatrix} \hspace{0.05cm};\]
\[{ \boldsymbol{\rm G}} = \begin{pmatrix} 1 &1 &1 &1 &1 \end{pmatrix} \hspace{0.05cm},\hspace{0.5cm}{ \boldsymbol{\rm H}} = \begin{pmatrix} 1 &0 &0 &0 &1\\ 0 &1 &0 &0 &1\\ 0 &0 &1 &0 &1\\ 0 &0 &0 &1 &1 \end{pmatrix} \hspace{0.05cm}.\]

The first equation can be easily derived from the respective definition and the derived equation follows from the relation  $\boldsymbol{\rm H} \cdot \boldsymbol{\rm G}^{\rm T} = \boldsymbol{\rm 0}$.

From the above matrices can be generalized:

  • The generator matrix of the  $\text{RC (5, 1)}$  is identical to the parity-check matrix of the  $\text{SPC (5, 4)}$.  In each case they are  $(5 \times 1)$ matrices.
  • The parity-check matrix of the  $\text{RC (5, 1)}$  is identical to the generator matrix of the  $\text{SPC (5, 4)}$. These two matrices each have  $5$  columns and  $4$  rows.
  • This situation arises because we are dealing here with so-called  "dual codes".  For explanation we need two more definitions:


$\text{Definition:}$  Two linear codes  $\mathcal{C}$  and  $\mathcal{C}\hspace{0.05cm}'$,  both made of  ${\rm GF}(2^n)$,  are  »orthogonal«  if all code words  $\underline{x} \in \mathcal{C}$  to all code words  $\underline{x}\hspace{0.05cm}' \in \mathcal{C}\hspace{0.05cm}'$  are orthogonal.

  • One then refers to  $\mathcal{C}$  and  $\mathcal{C}\hspace{0.05cm}'$  as  »dual codes«.


$\text{Definition:}$  Two code words  $\underline{x} \in{\rm GF}(2^n)$  and  $\underline{x\hspace{0.05cm}'} \in {\rm GF}(2^n)$  are  »orthogonal«  to each other whenever the  $\text{inner product}$  disappears:

\[\big \langle \underline{x} \cdot \underline{x}\hspace{0.05cm}' \big \rangle = \sum_{i=1 }^{n} x_i \cdot x\hspace{0.05cm}'_i = 0 \hspace{0.05cm}, \hspace{0.5cm} \left \langle \underline{x} \cdot \underline{x}\hspace{0.05cm}' \right \rangle \in {\rm GF}(2^n) \hspace{0.05cm}.\]


Because of the product in  ${\rm GF}(2^n)$,  the following code word pairs are also orthogonal to each other:

\[\left \langle \hspace{0.05cm}(0, 1, 1, 0) \hspace{0.05cm}, \hspace{0.2cm} (1, 1, 1, 0) \hspace{0.05cm} \right \rangle = 0\hspace{0.05cm},\hspace{0.8cm} \left \langle \hspace{0.1cm}(0, 1, 1, 0) \hspace{0.05cm}, \hspace{0.2cm} (0, 1, 1, 0) \hspace{0.1cm}\right \rangle = 0\hspace{0.05cm}.\]
  • The code  $\mathcal{C}$  spans a  $k$–dimensional subvector space in  ${\rm GF}(2^n)$.
  • The subspace of the dual code  $\mathcal{C}\hspace{0.05cm}'$  is orthogonal to it and has dimension  $n-k$.
  • Thus follows:   ${\rm dim} \{ \mathcal{C} \} + {\rm dim} \{ \mathcal{C}\hspace{0.05cm}' \} = n\hspace{0.05cm}.$

Some properties of the (7, 4, 3) Hamming code


Let us summarize again the previous results of this chapter using the example of the systematic Hamming code, which has already been described in detail in the chapter  $\text{Examples of Binary Block Codes}$ . This  $\text{(7, 4, 3)}$ code is characterized by

Code words of the  $\text{HC (7, 4, 3)}$
  • the number of parity-check equations  $m = 3$,
  • the code length  $n = 2^m-1 = 7$,
  • the information word length  $k = n-m = 4$,
  • the number of code words (dimension)  $2^k =16$ ,
  • the rate  $R= k/n = 4/7$,
  • the minimum distance  $d_{\rm min} = 3$  $($independent of  $m$,  $n$  and  $k)$.


In the above table the  $2^4 = 16$  code words are given
(black:  four information bits, red:  three parity bits).

One can see from this:

  • The code includes both the all zero word  "$0000000$"  and the all one word  "$1111111$".
  • There are seven code words resulting from  "$0001011$"  each by cyclic shift  (all highlighted in yellow).
  • There are seven code words resulting from  "$0011101$"  each by cyclic shift  (all highlighted in green).
  • For each code word also exists the "negated" code word, for example, besides  "$0001011$"  there is also the code word  "$1110100$".
  • The parity-check matrix can be written as follows:
\[{ \boldsymbol{\rm H}} = \begin{pmatrix} 1 &1 &1 &0 &1 &0 &0\\ 0 &1 &1 &1 &0 &1 &0\\ 1 &1 &0 &1 &0 &0 &1 \end{pmatrix}=\left({ \boldsymbol{\rm P}}^{\rm T} \: ; \: { \boldsymbol{\rm I}}_3 \right)\hspace{0.8cm} \Rightarrow\hspace{0.8cm}{ \boldsymbol{\rm P}}^{\rm T} = \begin{pmatrix} 1 &1 &1 &0 \\ 0 &1 &1 &1 \\ 1 &1 &0 &1 \end{pmatrix}\hspace{0.05cm},\hspace{0.2cm}{ \boldsymbol{\rm I}}_3 = \begin{pmatrix} 1 &0 &0 \\ 0 &1 &0 \\ 0 &0 &1 \end{pmatrix}\hspace{0.05cm}.\]
  • Accordingly, the following applies to the generator matrix:
\[{ \boldsymbol{\rm G}} =\left({ \boldsymbol{\rm I}}_4 \: ; \: { \boldsymbol{\rm P}}\right) = \begin{pmatrix} 1 &0 &0 &0 &1 &0 &1\\ 0 &1 &0 &0 &1 &1 &1\\ 0 &0 &1 &0 &1 &1 &0\\ 0 &0 &0 &1 &0 &1 &1 \end{pmatrix}\hspace{0.05cm}.\]

Exercises for the chapter


Exercise 1.7: Check and Generator Matrix of the HC (7, 4, 3)

Exercise 1.7Z: Classification of Block Codes

Exercise 1.8: Identical Codes

Exercise 1.8Z: Equivalent Codes

Exercise 1.9: Extended Hamming Code

Exercise 1.9Z: Extension and/or Puncturing

Exercise 1.10: Some Generator Matrices