Kanalcodierung/Allgemeine Beschreibung linearer Blockcodes: Unterschied zwischen den Versionen
(8 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 9: | Zeile 9: | ||
<br> | <br> | ||
Alle bisher behandelten Codes, | Alle bisher behandelten Codes, | ||
− | *der | + | *der "Single Parity–check Code", |
− | *der | + | *der "Repetition Code" und |
− | *der | + | *der Hamming–Code |
Zeile 17: | Zeile 17: | ||
{{BlaueBox|TEXT= | {{BlaueBox|TEXT= | ||
− | $\text{Definition:}$ 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–2)–Summe zweier beliebiger Codeworte $\underline{x}$ und $\underline{x}\hspace{0.05cm}'$ wiederum ein gültiges Codewort ergibt: | + | $\text{Definition:}$ 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–2)–Summe zweier beliebiger Codeworte $\underline{x}$ und $\underline{x}\hspace{0.05cm}'$ wiederum ein gültiges Codewort ergibt: |
::<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} | ||
Zeile 23: | Zeile 23: | ||
\hspace{0.05cm}.</math> | \hspace{0.05cm}.</math> | ||
− | Diese Bedingung muss auch für $\underline{x} = \underline{x}\hspace{0.05cm}'$ erfüllt sein.<br> | + | Diese Bedingung muss auch für $\underline{x} = \underline{x}\hspace{0.05cm}'$ erfüllt sein.<br> |
<i>Hinweis:</i> 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.}} <br> | <i>Hinweis:</i> 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.}} <br> | ||
{{GraueBox|TEXT= | {{GraueBox|TEXT= | ||
− | $\text{Beispiel 1:}$ Wir betrachten zwei $\text{(3, 2)}$–Blockcodes: | + | $\text{Beispiel 1:}$ Wir betrachten zwei $\text{(3, 2)}$–Blockcodes: |
::<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> | ||
Zeile 35: | Zeile 35: | ||
Man erkennt: | Man erkennt: | ||
− | *Der Code $\mathcal{C}_1$ 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)$.<br> | + | *Der Code $\mathcal{C}_1$ 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)$.<br> |
− | *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 $\underline{0}$.<br> | + | *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)$ <br> ⇒ Jeder lineare Code beinhaltet das Nullwort $\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> | + | *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> |
Im Folgenden beschränken wir uns ausschließlich auf lineare Codes, da nichtlineare Codes für die Praxis von untergeordneter Bedeutung sind.<br> | Im Folgenden beschränken wir uns ausschließlich auf lineare Codes, da nichtlineare Codes für die Praxis von untergeordneter Bedeutung sind.<br> | ||
{{BlaueBox|TEXT= | {{BlaueBox|TEXT= | ||
− | $\text{Definition:}$ Ein linearer Blockcode $\mathcal{C}$ heißt '''zyklisch''', wenn | + | $\text{Definition:}$ Ein linearer Blockcode $\mathcal{C}$ heißt '''zyklisch''', wenn jede zyklische Verschiebung eines Codewortes $\underline{x}$ (nach links oder rechts) ein gültiges Codewort ergibt: |
::<math>\underline{x}= (x_1, x_2, \hspace{0.05cm}\text{...} \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} | ||
Zeile 50: | Zeile 50: | ||
\hspace{0.05cm}.</math>}}<br> | \hspace{0.05cm}.</math>}}<br> | ||
− | [[Datei:P ID2354 KC T 1 3 S3c.png|right|frame|Codetabelle des systematischen $\text{(7, 4, 3)}$–Hamming–Codes;<br> | + | [[Datei:P ID2354 KC T 1 3 S3c.png|right|frame|Codetabelle des systematischen $\text{(7, 4, 3)}$–Hamming–Codes;<br> |
− | schwarz: $k= 4$ Informationsbits, rot: $n-k = 3$ Prüfbits ]] | + | schwarz: $k= 4$ Informationsbits, rot: $n-k = 3$ Prüfbits ]] |
{{GraueBox|TEXT= | {{GraueBox|TEXT= | ||
$\text{Beispiel 2:}$ | $\text{Beispiel 2:}$ | ||
− | *Man erkennt aus der Tabelle für den [[Kanalcodierung/Beispiele_binärer_Blockcodes#Hamming.E2.80.93Codes|$\text{HC (7, 4, 3)}$]], dass dieser linear und zyklisch ist. | + | *Man erkennt aus der Tabelle für den [[Kanalcodierung/Beispiele_binärer_Blockcodes#Hamming.E2.80.93Codes|$\text{HC (7, 4, 3)}$]], dass dieser linear und zyklisch ist. |
*Es ergibt sich auch dann ein gültiges Codewort, wenn man alle Bit invertiert: $0 ↔ 1$. | *Es ergibt sich auch dann ein gültiges Codewort, wenn man alle Bit invertiert: $0 ↔ 1$. | ||
− | *Auch das $\underline{0}$–Wort ($n$ mal eine „Null”) und das $\underline{1}$–Wort ($n$ mal eine „Eins”) sind bei diesem Code zulässig.}}<br> | + | *Auch das $\underline{0}$–Wort ($n$ mal eine „Null”) und das $\underline{1}$–Wort ($n$ mal eine „Eins”) sind bei diesem Code zulässig.}}<br> |
== Codefestlegung durch die Prüfmatrix == | == Codefestlegung durch die Prüfmatrix == | ||
<br> | <br> | ||
[[Datei:P ID2355 KC T 1 3 S3.png|right|frame|$\text{(7, 4, 3)}$–Hamming–Code]] | [[Datei:P ID2355 KC T 1 3 S3.png|right|frame|$\text{(7, 4, 3)}$–Hamming–Code]] | ||
− | Wir betrachten den [[Kanalcodierung/Beispiele_binärer_Blockcodes#Hamming.E2.80.93Codes|$\text{(7, 4, 3)}$–Hamming–Code]] mit Codeworten $\underline{x}$ der Länge $n=7$, | + | Wir betrachten den [[Kanalcodierung/Beispiele_binärer_Blockcodes#Hamming.E2.80.93Codes|$\text{(7, 4, 3)}$–Hamming–Code]] mit Codeworten $\underline{x}$ der Länge $n=7$, bestehend aus |
− | *$k = 4$ Informationsbits $x_1$, $x_2$, $x_3$, $x_4$ , und<br> | + | *$k = 4$ Informationsbits $x_1$, $x_2$, $x_3$, $x_4$, und<br> |
− | *$m = n-k = 3$ Prüfbits $x_5$, $x_6$, $x_7$.<br><br> | + | *$m = n-k = 3$ Prüfbits $x_5$, $x_6$, $x_7$.<br><br> |
Die Paritätsgleichungen lauten somit: | Die Paritätsgleichungen lauten somit: | ||
− | ::<math>x_1 + x_2 + x_3 + x_5 | + | ::<math>x_1 + x_2 + x_3 + x_5 = 0 \hspace{0.05cm},</math> |
− | x_2 + x_3 + x_4 + x_6 | + | ::<math>x_2 + x_3 + x_4 + x_6 = 0 \hspace{0.05cm},</math> |
− | x_1 + x_2 + x_4 + x_7 | + | ::<math>x_1 + x_2 + x_4 + x_7 = 0 \hspace{0.05cm}. </math> |
In Matrixschreibweise lautet dieser Gleichungssatz: | In Matrixschreibweise lautet dieser Gleichungssatz: | ||
Zeile 77: | Zeile 77: | ||
In dieser Gleichung werden verwendet: | In dieser Gleichung werden verwendet: | ||
− | *die '''Prüfmatrix''' ${ \boldsymbol{\rm H}}$ mit $m = n-k = 3$ Zeilen und $n = 7$ Spalten: | + | *die '''Prüfmatrix''' ${ \boldsymbol{\rm H}}$ mit $m = n-k = 3$ Zeilen und $n = 7$ Spalten: |
::<math>{ \boldsymbol{\rm H}} = \begin{pmatrix} | ::<math>{ \boldsymbol{\rm H}} = \begin{pmatrix} | ||
Zeile 85: | Zeile 85: | ||
\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> | + | *das ''Codewort'' $\underline{x}= (x_1, x_2, \hspace{0.05cm}\text{...}\hspace{0.05cm}, x_7)$ der Länge $n = 7$,<br> |
− | *der ''Nullvektor'' $\underline{0} = (0, 0, 0)$ der Länge $m = 3$.<br><br> | + | *der ''Nullvektor'' $\underline{0} = (0, 0, 0)$ der Länge $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> | + | Durch Transponieren werden aus den ''Zeilenvektoren'' $\underline{x}$ und $\underline{0}$ die entsprechenden ''Spaltenvektoren'' $\underline{x}^{\rm T}$ und $\underline{0}^{\rm T}$.<br> |
[[Datei:P ID2356 KC T 1 4 S2.png|right|frame|$\text{(6, 3, 3)}$–Blockcode]] | [[Datei:P ID2356 KC T 1 4 S2.png|right|frame|$\text{(6, 3, 3)}$–Blockcode]] | ||
{{GraueBox|TEXT= | {{GraueBox|TEXT= | ||
− | $\text{Beispiel 3:}$ 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{Beispiel 3:}$ 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 $(n \ne 2^m-1)$. |
− | Entsprechend der Gleichung $\boldsymbol{\rm H} \cdot \underline{x}^{\rm T}= \underline{0}^{\rm T}$ lautet die Prüfmatrix: | + | Entsprechend der Gleichung $\boldsymbol{\rm H} \cdot \underline{x}^{\rm T}= \underline{0}^{\rm T}$ lautet die Prüfmatrix: |
::<math> \boldsymbol{\rm H} = \begin{pmatrix} | ::<math> \boldsymbol{\rm H} = \begin{pmatrix} | ||
1 &1 &0 &1 &0 & 0\\ | 1 &1 &0 &1 &0 & 0\\ | ||
Zeile 102: | Zeile 102: | ||
\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): | + | Die $2^k = 8$ Codeworte bei systematischer Realisierung lauten (mit den Prüfbits rechts vom kleinen Pfeil): |
:<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. | + | \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: | Man erkennt aus diesen Angaben: | ||
− | *Die Spaltenanzahl $\boldsymbol{\rm H}$ ist gleich der Codelänge $n$.<br> | + | *Die Spaltenanzahl $\boldsymbol{\rm H}$ ist gleich der Codelänge $n$.<br> |
− | *Die Zeilenanzahl von $\boldsymbol{\rm H}$ ist gleich der Anzahl $m = n-k$ der Prüfgleichungen.<br> | + | *Die Zeilenanzahl von $\boldsymbol{\rm H}$ ist gleich der Anzahl $m = n-k$ der Prüfgleichungen.<br> |
− | *Aus $\boldsymbol{\rm H} \cdot \underline{x}^{\rm T}= \underline{0}^{\rm T} $ folgt also nicht, dass alle Codeworte eine gerade Anzahl von Einsen beinhalten.}}<br> | + | *Aus $\boldsymbol{\rm H} \cdot \underline{x}^{\rm T}= \underline{0}^{\rm T} $ folgt also nicht, dass alle Codeworte eine gerade Anzahl von Einsen beinhalten.}}<br> |
== Codefestlegung durch die Generatormatrix == | == Codefestlegung durch die Generatormatrix == | ||
<br> | <br> | ||
− | Die Prüfmatrix $\boldsymbol{\rm H}$ eines $(n, k)$–Blockcodes hat $m = n-k$ Zeilen und $n$ Spalten. Den gleichen Code kann man aber auch durch die Matrix $\boldsymbol{\rm G}$ mit ebenfalls $n$ Spalten, aber $k$ Zeilen beschreiben:<br> | + | Die Prüfmatrix $\boldsymbol{\rm H}$ eines $(n, k)$–Blockcodes hat $m = n-k$ Zeilen und $n$ Spalten. Den gleichen Code kann man aber auch durch die Matrix $\boldsymbol{\rm G}$ mit ebenfalls $n$ Spalten, aber $k$ Zeilen beschreiben:<br> |
{{BlaueBox|TEXT= | {{BlaueBox|TEXT= | ||
− | $\text{Definition:}$ 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:}$ 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: |
::<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> | ||
Zeile 130: | Zeile 130: | ||
{{GraueBox|TEXT= | {{GraueBox|TEXT= | ||
− | $\text{Beispiel 4:}$ Wir betrachten einen linearen $(5, 3)$–Blockcode mit der Generatormatrix | + | $\text{Beispiel 4:}$ Wir betrachten einen linearen $(5, 3)$–Blockcode mit der Generatormatrix (auch dies ist kein Hamming–Code) |
::<math> \boldsymbol{\rm G} = \begin{pmatrix} | ::<math> \boldsymbol{\rm G} = \begin{pmatrix} | ||
Zeile 145: | Zeile 145: | ||
\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äß folgenden Gleichungen zugeordnet. Es gilt stets $\underline{x} = \underline{u} \cdot \boldsymbol{\rm G}$: | + | 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äß folgenden Gleichungen zugeordnet. <br>Es gilt stets $\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> | ||
Zeile 157: | Zeile 157: | ||
''Anmerkungen'': | ''Anmerkungen'': | ||
− | *Die hier zur Berechnung herangezogenen Basisvektoren $\underline{g}_1$, $\underline{g}_2$ und $\underline{g}_3$ – jeweils mit der Länge $n = 5$ – entsprechen den $k = 3$ Zeilen der Generatormatrix $\boldsymbol{\rm G}$. | + | *Die hier zur Berechnung herangezogenen Basisvektoren $\underline{g}_1$, $\underline{g}_2$ und $\underline{g}_3$ – jeweils mit der Länge $n = 5$ – entsprechen den $k = 3$ Zeilen der Generatormatrix $\boldsymbol{\rm G}$. |
− | *Dieser Code ist wegen $d_{\rm min} = 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.<br> | + | *Dieser Code ist wegen $d_{\rm min} = 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.<br> |
− | * Wir möchten Sie an dieser Stelle auf das Applet [[ | + | * Wir möchten Sie an dieser Stelle auf das Applet [[Applets:Gram-Schmidt-Verfahren|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.<br> |
== Identische Codes == | == Identische 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}$. | + | Die im $\text{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$–dimensionaler <i>Untervektorraum</i> von $\text{GF}(2^n)$ angesehen werden. | + | *Der Code selbst kann als $k$–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> | + | *Die Basisvektoren $\underline{g}_1$, $\underline{g}_2$, ... , $\underline{g}_k$ sind linear unabhängig.<br> |
− | Der Untervektorraum $\mathcal{C}$ wird aber nicht nur durch die Basisvektoren | + | Der Untervektorraum $\mathcal{C}$ wird aber nicht nur durch die Basisvektoren |
::<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} | ||
Zeile 175: | Zeile 175: | ||
\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}\hspace{0.05cm}'_1$, $\underline{g}\hspace{0.05cm}'_2$ und $\underline{g}\hspace{0.05cm}'_3$ sind ebenso geeignet, so lange zwischen diesen die lineare Unabhängigkeit gewährleistet ist.<br> | + | aufgespannt, sondern andere Basisvektoren $\underline{g}\hspace{0.05cm}'_1$, $\underline{g}\hspace{0.05cm}'_2$ und $\underline{g}\hspace{0.05cm}'_3$ sind ebenso geeignet, so lange zwischen diesen die lineare Unabhängigkeit gewährleistet ist.<br> |
{{GraueBox|TEXT= | {{GraueBox|TEXT= | ||
− | $\text{Beispiel 5:}$ Wir vergleichen den Code $\mathcal{C}$ von Beispiel 4 mit einem zweiten Code $\mathcal{C}\hspace{0.05cm}'$. Die Generatormatrizen lauten: | + | $\text{Beispiel 5:}$ Wir vergleichen den Code $\mathcal{C}$ von $\text{Beispiel 4}$ mit einem zweiten Code $\mathcal{C}\hspace{0.05cm}'$. Die Generatormatrizen lauten: |
::<math> \boldsymbol{\rm G} = \begin{pmatrix} | ::<math> \boldsymbol{\rm G} = \begin{pmatrix} | ||
Zeile 201: | Zeile 201: | ||
\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. | + | *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}\hspace{0.05cm}'$ wurden folgende erlaubte Operationen ausgeführt: | + | *Bei dem Übergang von $\boldsymbol{\rm G}$ auf $\boldsymbol{\rm G}\hspace{0.05cm}'$ wurden folgende erlaubte Operationen ausgeführt: |
::<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} | ||
Zeile 208: | Zeile 208: | ||
\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}'$: | + | *Zum entsprechenden Code $\mathcal{C}'$ kommt man mit der Gleichung $\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 = | ||
Zeile 227: | Zeile 227: | ||
(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 Codes $\mathcal{C}$ ⇒ Generatormatrix $\boldsymbol{\rm G}$ sind im [[Kanalcodierung/Allgemeine_Beschreibung_linearer_Blockcodes#Codefestlegung_durch_die_Generatormatrix|Beispiel 4]] (vorherige Seite) angegeben.}}<br> | + | *Die entsprechenden Codeworte $\underline{x}_i = \underline{u}_i \cdot \boldsymbol{\rm G}$ des Codes $\mathcal{C}$ ⇒ Generatormatrix $\boldsymbol{\rm G}$ sind im [[Kanalcodierung/Allgemeine_Beschreibung_linearer_Blockcodes#Codefestlegung_durch_die_Generatormatrix|$\text{Beispiel 4}$]] (vorherige Seite) angegeben.}}<br> |
{{BlaueBox|TEXT= | {{BlaueBox|TEXT= | ||
− | $\text{Fazit:}$ Die Codetabellen von $\text{Beispiel 4}$ und $\text{Beispiel 5}$ machen deutlich: | + | $\text{Fazit:}$ Die Codetabellen von $\text{Beispiel 4}$ und $\text{Beispiel 5}$ machen deutlich: |
− | *$\mathcal{C}$ und $\mathcal{C}\hspace{0.05cm}'$ 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}$ und $\mathcal{C}\hspace{0.05cm}'$ 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}\hspace{0.05cm}'$ ist | + | *$\mathcal{C}\hspace{0.05cm}'$ ist nun ein ''systematischer Code'', da die ersten $k$ Binärstellen eines jeden Codewortes $\underline{x}\hspace{0.05cm}'_i$ mit den Binärstellen des Informationswortes $\underline{u}_i$ übereinstimmen.}}<br> |
== Systematische Codes== | == Systematische Codes== | ||
Zeile 240: | Zeile 240: | ||
{{BlaueBox|TEXT= | {{BlaueBox|TEXT= | ||
− | $\text{Definition:}$ Bei einem $\text{systematischen }(n, k)–\text{Blockcode} \ \mathcal{C}$ beinhaltet jedes Codewort $\underline{x}$ explizit das Informationswort $\underline{u}$. | + | $\text{Definition:}$ Bei einem $\text{systematischen }(n, k)–\text{Blockcode} \ \ \mathcal{C}$ beinhaltet jedes Codewort $\underline{x}$ explizit das Informationswort $\underline{u}$. |
*Das heißt, es gilt: $\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} = | *Das heißt, es gilt: $\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}.$ | (u_1, u_2, ... \hspace{0.05cm}, u_k, x_{k+1}, \hspace{0.05cm}\text{...}\hspace{0.05cm}, x_n)\hspace{0.05cm}.$ | ||
− | *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×k$–Einheitsmatrix $\boldsymbol{\rm I}_{\rm k}$ und einer geeignet zu wählenden $(n-1)×k$–Matrix $\boldsymbol{\rm P}$.}}<br> | + | *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×k$–Einheitsmatrix $\boldsymbol{\rm I}_{\rm k}$ und einer geeignet zu wählenden $(n-1)×k$–Matrix $\boldsymbol{\rm P}$.}}<br> |
− | Für das $\text{Beispiel 5}$ auf der letzten Seite kann also auch geschrieben werden: | + | Für das $\text{Beispiel 5}$ auf der letzten Seite kann also auch geschrieben werden: |
::<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 mit}\hspace{0.3cm} | ||
Zeile 260: | Zeile 260: | ||
\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> | + | 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> |
− | Beim ''identischen systematischen Code'' beinhalten $\underline{x}$ und $\underline{x}_{\rm sys}$ die gleichen Codeworte, nur die Zuordnung $\underline{u} → \underline{x}$ ist unterschiedlich. Man kommt durch folgende Manipulationen bezüglich der Generatormatrix $\boldsymbol{\rm G}$ von einem Blockcode $\mathcal{C}$ zum identischen systematischen Code $\mathcal{C}_{\rm sys}$: | + | Beim '''identischen systematischen Code''' beinhalten $\underline{x}$ und $\underline{x}_{\rm sys}$ die gleichen Codeworte, nur die Zuordnung $\underline{u} → \underline{x}$ ist unterschiedlich. Man kommt durch folgende Manipulationen bezüglich der Generatormatrix $\boldsymbol{\rm G}$ von einem Blockcode $\mathcal{C}$ zum identischen systematischen Code $\mathcal{C}_{\rm sys}$: |
*Vertauschen oder Permutieren der Zeilen,<br> | *Vertauschen oder Permutieren der Zeilen,<br> | ||
− | *Multiplizieren aller Zeilen mit einem konstanten Vektor ungleich $\underline{0}$,<br> | + | *Multiplizieren aller Zeilen mit einem konstanten Vektor ungleich $\underline{0}$,<br> |
*Ersetzen einer Zeile durch eine Linearkombination zwischen dieser Zeile und einer anderen.<br> | *Ersetzen einer Zeile durch eine Linearkombination zwischen dieser Zeile und einer anderen.<br> | ||
Zeile 272: | Zeile 272: | ||
{{BlaueBox|TEXT= | {{BlaueBox|TEXT= | ||
− | $\text{Ohne Beweis:}$ Ein $\text{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{Ohne Beweis:}$ Ein $\text{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.}} |
− | Ist dies nicht möglich, so findet man zumindest durch Vertauschen oder Permutieren der Spalten von $\boldsymbol{\rm G}$ einen '''äquivalenten systematischen Code''': | + | Ist dies nicht möglich, so findet man zumindest durch Vertauschen oder Permutieren der Spalten von $\boldsymbol{\rm G}$ einen '''äquivalenten systematischen Code''': |
::<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> | ::<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> | ||
− | 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}$ in diesem Fall die gleiche minimale Hamming–Distanz $d_{\rm min}$ auf wie der Code $\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}$ in diesem Fall die gleiche minimale Hamming–Distanz $d_{\rm min}$ auf wie der Code $\mathcal{C}$.<br> |
{{GraueBox|TEXT= | {{GraueBox|TEXT= | ||
Zeile 294: | Zeile 294: | ||
Die Analyse zeigt: | Die Analyse zeigt: | ||
− | *Die zugehörigen Codes $\mathcal{C}$ und $\mathcal{C}_{\rm sys}$ beinhalten unterschiedliche Codeworte und sind somit auch <i>nicht identisch</i>: | + | *Die zugehörigen Codes $\mathcal{C}$ und $\mathcal{C}_{\rm sys}$ beinhalten unterschiedliche Codeworte und sind somit auch <i>nicht identisch</i>: |
::<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} = \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}= \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> | ::<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>: $\boldsymbol{\rm G}_{\rm sys}$ ergibt sich aus $\boldsymbol{\rm G}$ durch Vertauschen der zweiten und dritten Spalte. | + | *Aber sie sind <i>äquivalent</i>: $\boldsymbol{\rm G}_{\rm sys}$ ergibt sich aus $\boldsymbol{\rm G}$ durch Vertauschen der zweiten und dritten Spalte. |
− | *Es handelt sich in beiden Fällen um einen $\text{(4, 2, 2)}$–Blockcode ⇒ $d_{\rm min} = 2$.}} | + | *Es handelt sich in beiden Fällen um einen $\text{(4, 2, 2)}$–Blockcode ⇒ $d_{\rm min} = 2$.}} |
Zeile 317: | Zeile 317: | ||
Anzumerken ist, dass in diesen Gleichungen | Anzumerken ist, dass in diesen Gleichungen | ||
− | *$\underline{0}$ einen Zeilenvektor mit $k$ Elementen bezeichnet und | + | *$\underline{0}$ einen Zeilenvektor mit $k$ Elementen bezeichnet und |
− | *$\boldsymbol{\rm 0}$ eine Matrix mit $m$ Zeilen und $k$ Spalten angibt, | + | *$\boldsymbol{\rm 0}$ eine Matrix mit $m$ Zeilen und $k$ Spalten angibt, |
− | wobei alle Elemente von $\underline{0}$ und $\boldsymbol{\rm 0}$ identisch Null sind.<br> | + | wobei alle Elemente von $\underline{0}$ und $\boldsymbol{\rm 0}$ identisch Null sind.<br> |
{{GraueBox|TEXT= | {{GraueBox|TEXT= | ||
− | $\text{Beispiel 7:}$ Wir betrachten wie im [[Kanalcodierung/Allgemeine_Beschreibung_linearer_Blockcodes#Codefestlegung_durch_die_Generatormatrix|Beispiel 4]] den $\text{(5, 3)}$–Blockcode | + | $\text{Beispiel 7:}$ Wir betrachten wie im [[Kanalcodierung/Allgemeine_Beschreibung_linearer_Blockcodes#Codefestlegung_durch_die_Generatormatrix|$\text{Beispiel 4}$]] den $\text{(5, 3)}$–Blockcode |
:<math>\mathcal{C} = \big \{ \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> | ||
Zeile 335: | Zeile 335: | ||
::<math> \hspace{0.6cm}(\hspace{0.05cm}1, 1, 1, 1, 1) \big \}\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: | + | 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: |
::<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} | ||
Zeile 361: | Zeile 361: | ||
\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: | + | 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: |
::<math>1 \cdot 1 \hspace{0.05cm}\oplus \hspace{0.05cm} | ::<math>1 \cdot 1 \hspace{0.05cm}\oplus \hspace{0.05cm} | ||
Zeile 374: | Zeile 374: | ||
== Generatormatrix vs. Prüfmatrix bei systematischen Codes == | == Generatormatrix vs. Prüfmatrix bei systematischen 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> | + | 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> |
− | Der Rechengang vereinfacht sich, wenn die $(k \times n)$ –Generatormatrix in systematischer Form vorliegt: $ \boldsymbol{\rm G_{sys}} =\left({ \boldsymbol{\rm I}}_k \: ; \: { \boldsymbol{\rm P}}\right). | + | {{BlaueBox|TEXT= |
+ | $\text{Ohne Beweis:}$ | ||
+ | Der Rechengang vereinfacht sich, wenn die $(k \times n)$ –Generatormatrix in systematischer Form vorliegt: $ \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)$–Prüfmatrix mit $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 ⇒ $\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> | + | Diese Gleichung gilt allgemein, also auch im nichtbinären Fall. Da wir uns im gesamten ersten Hauptkapitel auf binäre Codes beschränken ⇒ $\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> |
+ | |||
+ | ::<math>{ \boldsymbol{\rm H} } =\left( - { \boldsymbol{\rm P} }^{\rm T} \: ; \: { \boldsymbol{\rm I} }_m \right)=\left( { \boldsymbol{\rm P} }^{\rm T} \: ; \: { \boldsymbol{\rm I} }_m \right)\hspace{0.05cm}. | ||
+ | </math>}} | ||
− | |||
− | |||
{{GraueBox|TEXT= | {{GraueBox|TEXT= | ||
− | $\text{Beispiel 8:}$ Wir betrachten weiterhin den beispielhaften $\text{(5, 3)}$–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{Beispiel 8:}$ Wir betrachten weiterhin den beispielhaften $\text{(5, 3)}$–Blockcode, gehen aber nun von der systematischen Generatormatrix $\boldsymbol{\rm G}_{\rm sys}$ aus, die wir im [[Kanalcodierung/Allgemeine_Beschreibung_linearer_Blockcodes#Identische_Codes|$\text{Beispiel 5}$]] ermittelt haben: |
::<math> \boldsymbol{\rm G_{sys} } = \begin{pmatrix} | ::<math> \boldsymbol{\rm G_{sys} } = \begin{pmatrix} | ||
Zeile 435: | Zeile 438: | ||
(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: | + | 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: |
::<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> | ||
Zeile 444: | Zeile 447: | ||
Man erkennt aus diesen Gleichungen und auch aus obiger Codetabelle: | Man erkennt aus diesen Gleichungen und auch aus obiger Codetabelle: | ||
− | *Dieser Code bietet gegenüber einem Übertragungsfehler hinsichtlich des dritten Bits $(x_3 = u_3)$ keinen Schutz. | + | *Dieser Code bietet gegenüber einem Übertragungsfehler hinsichtlich des dritten Bits $(x_3 = u_3)$ keinen Schutz. |
*Damit ist natürlich weder eine Fehlererkennung und noch weniger Fehlerkorrektur möglich. | *Damit ist natürlich weder eine Fehlererkennung und noch weniger Fehlerkorrektur möglich. | ||
− | *Gleiches gilt aber auch für den nichtsystematischen Code auf der letzten Seite.}}<br> | + | *Gleiches gilt aber auch für den nichtsystematischen Code entsprechend [[Kanalcodierung/Allgemeine_Beschreibung_linearer_Blockcodes#Zusammenhang_zwischen_Generator.E2.80.93_und_Pr.C3.BCfmatrix|$\text{Beispiel 7}$]] auf der letzten Seite.}}<br> |
== Darstellung von SPC und RC als duale Codes == | == Darstellung von SPC und RC als duale Codes == | ||
<br> | <br> | ||
− | Nun sollen für die bereits im Kapitel [[Kanalcodierung/Beispiele_bin%C3%A4rer_Blockcodes|Beispiele 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 | + | Nun sollen für die bereits im Kapitel [[Kanalcodierung/Beispiele_bin%C3%A4rer_Blockcodes|Beispiele 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 |
− | *den [[Kanalcodierung/Beispiele_bin%C3%A4rer_Blockcodes#Single_Parity.E2.80.93check_Codes|Single–Parity–check Code]] ⇒ $\text{SPC (5, 4)}$: | + | *den [[Kanalcodierung/Beispiele_bin%C3%A4rer_Blockcodes#Single_Parity.E2.80.93check_Codes|Single–Parity–check Code]] ⇒ $\text{SPC (5, 4)}$: |
::<math>{ \boldsymbol{\rm H}} | ::<math>{ \boldsymbol{\rm H}} | ||
Zeile 464: | Zeile 467: | ||
0 &0 &0 &1 &1 | 0 &0 &0 &1 &1 | ||
\end{pmatrix} | \end{pmatrix} | ||
− | \hspace{0.05cm} | + | \hspace{0.05cm};</math> |
− | *den [[Kanalcodierung/Beispiele_bin%C3%A4rer_Blockcodes#Wiederholungscodes|Wiederholungscode]] (<i>Repetition Code</i>) ⇒ $\text{RC (5, 1)}$: | + | *den [[Kanalcodierung/Beispiele_bin%C3%A4rer_Blockcodes#Wiederholungscodes|Wiederholungscode]] (<i>Repetition Code</i>) ⇒ $\text{RC (5, 1)}$: |
::<math>{ \boldsymbol{\rm G}} | ::<math>{ \boldsymbol{\rm G}} | ||
Zeile 481: | Zeile 484: | ||
\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}$. | + | 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: | Aus den obigen Matrizen kann verallgemeinert werden: | ||
− | *Die Generatormatrix des $\text{RC (5, 1)}$ ist identisch mit der Prüfmatrix des $\text{SPC (5, 4)}$. Es handelt sich jeweils um $(5 \times 1)$–Matrizen.<br> | + | *Die Generatormatrix des $\text{RC (5, 1)}$ ist identisch mit der Prüfmatrix des $\text{SPC (5, 4)}$. Es handelt sich jeweils um $(5 \times 1)$–Matrizen.<br> |
− | *Die Prüfmatrix des $\text{RC (5, 1)}$ ist identisch mit der Generatormatrix des $\text{SPC (5, 4)}$. Diese beiden Matrizen haben jeweils $5$ Spalten und $4$ Zeilen.<br> | + | *Die Prüfmatrix des $\text{RC (5, 1)}$ ist identisch mit der Generatormatrix des $\text{SPC (5, 4)}$. Diese beiden Matrizen haben jeweils $5$ Spalten und $4$ Zeilen.<br> |
− | *Dieser Sachverhalt ergibt sich, weil es sich hier um | + | *Dieser Sachverhalt ergibt sich, weil es sich hier um so genannte „duale Codes” handelt. Zur Erklärung benötigen wir noch zwei Definitionen:<br> |
{{BlaueBox|TEXT= | {{BlaueBox|TEXT= | ||
− | $\text{Definition:}$ Zwei lineare Codes $\mathcal{C}$ und $\mathcal{C}\hspace{0.05cm}'$, beide aus ${\rm GF}(2^n)$, sind ''orthogonal'', wenn alle Codeworte $\underline{x} \in \mathcal{C}$ zu allen Codeworten $\underline{x}\hspace{0.05cm}' \in \mathcal{C}\hspace{0.05cm}'$ orthogonal sind. Man bezeichnet dann $\mathcal{C}$ und $\mathcal{C}\hspace{0.05cm}'$ als '''duale Codes'''.}}<br> | + | $\text{Definition:}$ Zwei lineare Codes $\mathcal{C}$ und $\mathcal{C}\hspace{0.05cm}'$, beide aus ${\rm GF}(2^n)$, sind ''orthogonal'', wenn alle Codeworte $\underline{x} \in \mathcal{C}$ zu allen Codeworten $\underline{x}\hspace{0.05cm}' \in \mathcal{C}\hspace{0.05cm}'$ orthogonal sind. Man bezeichnet dann $\mathcal{C}$ und $\mathcal{C}\hspace{0.05cm}'$ als '''duale Codes'''.}}<br> |
{{BlaueBox|TEXT= | {{BlaueBox|TEXT= | ||
− | $\text{Definition:}$ 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:}$ Zwei Codeworte $\underline{x} \in{\rm GF}(2^n)$ und $\underline{x\hspace{0.05cm}'} \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: |
::<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} | ::<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} | ||
Zeile 501: | Zeile 504: | ||
\hspace{0.05cm}.</math>}}<br> | \hspace{0.05cm}.</math>}}<br> | ||
− | Wegen der Produktbildung in ${\rm GF}(2^n)$ sind auch folgende Codewort–Paare zueinander orthogonal: | + | Wegen der Produktbildung in ${\rm GF}(2^n)$ sind auch folgende Codewort–Paare zueinander orthogonal: |
− | ::<math>\left \langle \hspace{0.05cm}(0, 1, 1, 0) \hspace{0.05cm}, \hspace{0. | + | ::<math>\left \langle \hspace{0.05cm}(0, 1, 1, 0) \hspace{0.05cm}, \hspace{0.5cm} (1, 1, 1, 0) \hspace{0.05cm} \right \rangle = 0\hspace{0.05cm},\hspace{0.2cm} |
\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$–dimensionalen Untervektorraum in ${\rm GF}(2^n)$ auf. | + | *Der Code $\mathcal{C}$ spannt einen $k$–dimensionalen Untervektorraum in ${\rm GF}(2^n)$ auf. |
− | *Der Untervektorraum des dualen Codes $\mathcal{C}\hspace{0.05cm}'$ ist zu diesem orthogonal und weist die Dimension $n-k$ auf. | + | *Der Untervektorraum des dualen Codes $\mathcal{C}\hspace{0.05cm}'$ ist zu diesem orthogonal und weist die Dimension $n-k$ auf. |
* Damit gilt: ${\rm dim} \{ \mathcal{C} \} + {\rm dim} \{ \mathcal{C}\hspace{0.05cm}' \} = n\hspace{0.05cm}.$<br> | * Damit gilt: ${\rm dim} \{ \mathcal{C} \} + {\rm dim} \{ \mathcal{C}\hspace{0.05cm}' \} = n\hspace{0.05cm}.$<br> | ||
== Einige Eigenschaften des (7, 4, 3)–Hamming–Codes == | == Einige Eigenschaften des (7, 4, 3)–Hamming–Codes == | ||
<br> | <br> | ||
− | Fassen wir die bisherigen Ergebnisse dieses Kapitels am Beispiel des systematischen Hamming–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 $\text{(7, 4, 3)}$–Code ist gekennzeichnet durch | + | Fassen wir die bisherigen Ergebnisse dieses Kapitels am Beispiel des systematischen Hamming–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 $\text{(7, 4, 3)}$–Code ist gekennzeichnet durch |
− | [[Datei:P ID2359 KC T 1 4 S7.png|right|frame|Codeworte des $\text{(7, 4, 3)}$ | + | [[Datei:P ID2359 KC T 1 4 S7.png|right|frame|Codeworte des $\text{HC (7, 4, 3)}$|class=fit]] |
− | *die Anzahl der Prüfgleichungen $m = 3$,<br> | + | *die Anzahl der Prüfgleichungen: $m = 3$,<br> |
− | *die Codelänge $n = 2^m-1 = 7$,<br> | + | |
− | *die Informationswortlänge $k = n-m = 4$,<br> | + | *die Codelänge $n = 2^m-1 = 7$,<br> |
− | *die Anzahl $2^k =16$ der Codeworte (Dimension),<br> | + | |
− | *die Rate $R= k/n = 4/7$, | + | *die Informationswortlänge $k = n-m = 4$,<br> |
− | + | ||
+ | *die Anzahl $2^k =16$ der Codeworte (Dimension),<br> | ||
+ | |||
+ | *die Rate $R= k/n = 4/7$,<br> | ||
+ | *die minimale Distanz $d_{\rm min} = 3$ $($unabhängig von $m$, $n$ und $k)$.<br> | ||
− | In obiger Tabelle sind die $2^4 = 16$ Codeworte angegeben ( schwarz: vier Informationsbits, rot: drei Prüfbits). | + | |
+ | In obiger Tabelle sind die $2^4 = 16$ Codeworte angegeben <br>(schwarz: vier Informationsbits, rot: drei Prüfbits). | ||
Man erkennt daraus: | Man erkennt daraus: | ||
− | *Der Code beinhaltet sowohl das Null–Wort $ | + | *Der Code beinhaltet sowohl das Null–Wort "$0000000$" als auch das Eins–Wort "$1111111$". |
− | *Es gibt sieben Codeworte, die sich aus $ | + | |
− | *Es gibt sieben Codeworte, die sich aus $ | + | *Es gibt sieben Codeworte, die sich aus "$0001011$" jeweils durch zyklische Verschiebung ergeben (alle gelb hinterlegt). |
− | *Zu jedem Codewort existiert auch das & | + | |
+ | *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: | *Die Prüfmatrix kann wie folgt geschrieben werden: | ||
Zeile 547: | Zeile 559: | ||
\end{pmatrix}\hspace{0.05cm}.</math> | \end{pmatrix}\hspace{0.05cm}.</math> | ||
− | Dementsprechend gilt für die Generatormatrix: | + | *Dementsprechend gilt für die Generatormatrix: |
::<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) |
Aktuelle Version vom 10. Juli 2022, 14:37 Uhr
Inhaltsverzeichnis
- 1 Lineare Codes und zyklische Codes
- 2 Codefestlegung durch die Prüfmatrix
- 3 Codefestlegung durch die Generatormatrix
- 4 Identische Codes
- 5 Systematische Codes
- 6 Zusammenhang zwischen Generator– und Prüfmatrix
- 7 Generatormatrix vs. Prüfmatrix bei systematischen Codes
- 8 Darstellung von SPC und RC als duale Codes
- 9 Einige Eigenschaften des (7, 4, 3)–Hamming–Codes
- 10 Aufgaben zum Kapitel
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.
$\text{Definition:}$ 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–2)–Summe zweier beliebiger Codeworte $\underline{x}$ und $\underline{x}\hspace{0.05cm}'$ wiederum ein gültiges Codewort ergibt:
- \[\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}.\]
Diese Bedingung muss auch für $\underline{x} = \underline{x}\hspace{0.05cm}'$ 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.
$\text{Beispiel 1:}$ Wir betrachten zwei $\text{(3, 2)}$–Blockcodes:
- \[\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}.\]
Man erkennt:
- Der Code $\mathcal{C}_1$ 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 $\underline{0}$.
- 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$.
Im Folgenden beschränken wir uns ausschließlich auf lineare Codes, da nichtlineare Codes für die Praxis von untergeordneter Bedeutung sind.
$\text{Definition:}$ Ein linearer Blockcode $\mathcal{C}$ heißt zyklisch, wenn jede zyklische Verschiebung eines Codewortes $\underline{x}$ (nach links oder rechts) ein gültiges Codewort ergibt:
- \[\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}.\]
$\text{Beispiel 2:}$
- Man erkennt aus der Tabelle für den $\text{HC (7, 4, 3)}$, dass dieser linear und zyklisch ist.
- Es ergibt sich auch dann ein gültiges Codewort, wenn man alle Bit invertiert: $0 ↔ 1$.
- Auch das $\underline{0}$–Wort ($n$ mal eine „Null”) und das $\underline{1}$–Wort ($n$ mal eine „Eins”) sind bei diesem Code zulässig.
Codefestlegung durch die Prüfmatrix
Wir betrachten den $\text{(7, 4, 3)}$–Hamming–Code mit Codeworten $\underline{x}$ der Länge $n=7$, bestehend aus
- $k = 4$ Informationsbits $x_1$, $x_2$, $x_3$, $x_4$, und
- $m = n-k = 3$ Prüfbits $x_5$, $x_6$, $x_7$.
Die Paritätsgleichungen lauten somit:
- \[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 Matrixschreibweise lautet dieser Gleichungssatz:
- \[{ \boldsymbol{\rm H}} \cdot \underline{x}^{\rm T}= \underline{0}^{\rm T} \hspace{0.05cm}. \]
In dieser Gleichung werden verwendet:
- die Prüfmatrix ${ \boldsymbol{\rm H}}$ mit $m = n-k = 3$ Zeilen und $n = 7$ Spalten:
- \[{ \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},\]
- das Codewort $\underline{x}= (x_1, x_2, \hspace{0.05cm}\text{...}\hspace{0.05cm}, x_7)$ der Länge $n = 7$,
- der Nullvektor $\underline{0} = (0, 0, 0)$ der Länge $m = 3$.
Durch Transponieren werden aus den Zeilenvektoren $\underline{x}$ und $\underline{0}$ die entsprechenden Spaltenvektoren $\underline{x}^{\rm T}$ und $\underline{0}^{\rm T}$.
$\text{Beispiel 3:}$ 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 $(n \ne 2^m-1)$.
Entsprechend der Gleichung $\boldsymbol{\rm H} \cdot \underline{x}^{\rm T}= \underline{0}^{\rm T}$ lautet die Prüfmatrix:
- \[ \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}.\]
Die $2^k = 8$ Codeworte bei systematischer Realisierung lauten (mit den Prüfbits rechts vom kleinen Pfeil):
\[\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}.\]
Man erkennt aus diesen Angaben:
- Die Spaltenanzahl $\boldsymbol{\rm H}$ ist gleich der Codelänge $n$.
- Die Zeilenanzahl von $\boldsymbol{\rm H}$ ist gleich der Anzahl $m = n-k$ der Prüfgleichungen.
- Aus $\boldsymbol{\rm H} \cdot \underline{x}^{\rm T}= \underline{0}^{\rm T} $ folgt also nicht, dass alle Codeworte eine gerade Anzahl von Einsen beinhalten.
Codefestlegung durch die Generatormatrix
Die Prüfmatrix $\boldsymbol{\rm H}$ eines $(n, k)$–Blockcodes hat $m = n-k$ Zeilen und $n$ Spalten. Den gleichen Code kann man aber auch durch die Matrix $\boldsymbol{\rm G}$ mit ebenfalls $n$ Spalten, aber $k$ Zeilen beschreiben:
$\text{Definition:}$ 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:
- \[\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}.\]
Bevor wir uns den Eigenschaften der Generatormatrix zuwenden, beschreiben wir an einem Beispiel die Erzeugung der Codeworte.
$\text{Beispiel 4:}$ Wir betrachten einen linearen $(5, 3)$–Blockcode mit der Generatormatrix (auch dies ist kein 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}.\]
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äß folgenden Gleichungen zugeordnet.
Es gilt stets $\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}.\]
Anmerkungen:
- Die hier zur Berechnung herangezogenen Basisvektoren $\underline{g}_1$, $\underline{g}_2$ und $\underline{g}_3$ – jeweils mit der Länge $n = 5$ – entsprechen den $k = 3$ Zeilen der Generatormatrix $\boldsymbol{\rm G}$.
- Dieser Code ist wegen $d_{\rm min} = 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 $\text{Beispiel 4}$ auf der letzten Seite verwendeten Vektoren $\underline{g}_1$, $\underline{g}_2$, ... , $\underline{g}_k$ sind die Basisvektoren des linearen Blockcodes $\mathcal{C}$.
- Der Code selbst kann als $k$–dimensionaler Untervektorraum von $\text{GF}(2^n)$ angesehen werden.
- Die Basisvektoren $\underline{g}_1$, $\underline{g}_2$, ... , $\underline{g}_k$ sind linear unabhängig.
Der Untervektorraum $\mathcal{C}$ wird aber nicht nur durch die Basisvektoren
- \[\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}\]
aufgespannt, sondern andere Basisvektoren $\underline{g}\hspace{0.05cm}'_1$, $\underline{g}\hspace{0.05cm}'_2$ und $\underline{g}\hspace{0.05cm}'_3$ sind ebenso geeignet, so lange zwischen diesen die lineare Unabhängigkeit gewährleistet ist.
$\text{Beispiel 5:}$ Wir vergleichen den Code $\mathcal{C}$ von $\text{Beispiel 4}$ mit einem zweiten Code $\mathcal{C}\hspace{0.05cm}'$. Die Generatormatrizen lauten:
- \[ \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}.\]
- 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}\hspace{0.05cm}'$ wurden folgende erlaubte Operationen ausgeführt:
- \[\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}.\]
- Zum entsprechenden Code $\mathcal{C}'$ kommt man mit der Gleichung $\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}.\]
- Die entsprechenden Codeworte $\underline{x}_i = \underline{u}_i \cdot \boldsymbol{\rm G}$ des Codes $\mathcal{C}$ ⇒ Generatormatrix $\boldsymbol{\rm G}$ sind im $\text{Beispiel 4}$ (vorherige Seite) angegeben.
$\text{Fazit:}$ Die Codetabellen von $\text{Beispiel 4}$ und $\text{Beispiel 5}$ machen deutlich:
- $\mathcal{C}$ und $\mathcal{C}\hspace{0.05cm}'$ beinhalten die genau gleichen Codeworte. Sie sind damit identische Codes und besitzen beide die gleiche Korrekturfähigkeit (siehe nächste Seite).
- $\mathcal{C}\hspace{0.05cm}'$ ist nun ein systematischer Code, da die ersten $k$ Binärstellen eines jeden Codewortes $\underline{x}\hspace{0.05cm}'_i$ mit den Binärstellen des Informationswortes $\underline{u}_i$ übereinstimmen.
Systematische Codes
Die Eigenschaft „systematisch” soll nun noch in mathematischer Form angegeben werden.
$\text{Definition:}$ Bei einem $\text{systematischen }(n, k)–\text{Blockcode} \ \ \mathcal{C}$ beinhaltet jedes Codewort $\underline{x}$ explizit das Informationswort $\underline{u}$.
- Das heißt, es gilt: $\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}.$
- 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×k$–Einheitsmatrix $\boldsymbol{\rm I}_{\rm k}$ und einer geeignet zu wählenden $(n-1)×k$–Matrix $\boldsymbol{\rm P}$.
Für das $\text{Beispiel 5}$ auf der letzten Seite kann also auch geschrieben werden:
- \[ \boldsymbol{\rm G_{sys}} =\left({ \boldsymbol{\rm I}}_3 \: ; \: { \boldsymbol{\rm P}}\right)\hspace{0.3cm}{\rm mit}\hspace{0.3cm} { \boldsymbol{\rm I_{3}}} = \begin{pmatrix} 1 &0 &0 \\ 0 &1 &0 \\ 0 &0 &1 \end{pmatrix}\hspace{0.3cm}{\rm und}\hspace{0.3cm} { \boldsymbol{\rm P}} = \begin{pmatrix} 0 &1 \\ 1 &0 \\ 0 &0 \end{pmatrix}\hspace{0.05cm}.\]
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.
Beim identischen systematischen Code beinhalten $\underline{x}$ und $\underline{x}_{\rm sys}$ die gleichen Codeworte, nur die Zuordnung $\underline{u} → \underline{x}$ ist unterschiedlich. Man kommt durch folgende Manipulationen bezüglich der Generatormatrix $\boldsymbol{\rm G}$ von einem Blockcode $\mathcal{C}$ zum identischen systematischen Code $\mathcal{C}_{\rm sys}$:
- Vertauschen oder Permutieren der Zeilen,
- Multiplizieren aller Zeilen mit einem konstanten Vektor ungleich $\underline{0}$,
- Ersetzen einer Zeile durch eine Linearkombination zwischen dieser Zeile und einer anderen.
$\text{Ohne Beweis:}$ Ein $\text{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.
Ist dies nicht möglich, so findet man zumindest durch Vertauschen oder Permutieren der Spalten von $\boldsymbol{\rm G}$ einen äquivalenten systematischen Code:
- \[\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}.\]
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}$ in diesem Fall die gleiche minimale Hamming–Distanz $d_{\rm min}$ auf wie der Code $\mathcal{C}$.
$\text{Beispiel 6:}$ Wir betrachten die Generatormatrizen
- \[ \boldsymbol{\rm G} = \begin{pmatrix} 1 &1 &0 &0 \\ 0 &0 &1 &1 \end{pmatrix}\hspace{0.3cm}{\rm und}\hspace{0.3cm} \boldsymbol{\rm G_{sys} } = \begin{pmatrix} 1 &0 &1 &0 \\ 0 &1 &0 &1 \end{pmatrix}\hspace{0.05cm}.\]
Die Analyse zeigt:
- Die zugehörigen Codes $\mathcal{C}$ und $\mathcal{C}_{\rm sys}$ beinhalten unterschiedliche Codeworte und sind somit auch nicht identisch:
- \[\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}.\]
- Aber sie sind äquivalent: $\boldsymbol{\rm G}_{\rm sys}$ ergibt sich aus $\boldsymbol{\rm G}$ durch Vertauschen der zweiten und dritten Spalte.
- Es handelt sich in beiden Fällen um einen $\text{(4, 2, 2)}$–Blockcode ⇒ $d_{\rm min} = 2$.
Zusammenhang zwischen Generator– und Prüfmatrix
Zur Definition dieser beiden Beschreibungsmatrizen gehen wir von folgenden Gleichungen aus:
- \[\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}.\]
Verknüpft man diese zwei Gleichungen, so erhält man:
- \[{ \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}.\]
Anzumerken ist, dass in diesen Gleichungen
- $\underline{0}$ einen Zeilenvektor mit $k$ Elementen bezeichnet und
- $\boldsymbol{\rm 0}$ eine Matrix mit $m$ Zeilen und $k$ Spalten angibt,
wobei alle Elemente von $\underline{0}$ und $\boldsymbol{\rm 0}$ identisch Null sind.
$\text{Beispiel 7:}$ Wir betrachten wie im $\text{Beispiel 4}$ den $\text{(5, 3)}$–Blockcode
\[\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}.\]
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:
- \[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}.\]
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:
- \[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}.\]
Generatormatrix vs. Prüfmatrix bei systematischen Codes
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)$.
$\text{Ohne Beweis:}$ Der Rechengang vereinfacht sich, wenn die $(k \times n)$ –Generatormatrix in systematischer Form vorliegt: $ \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)$–Prüfmatrix mit $m = n-k$:
- \[{ \boldsymbol{\rm H} } =\left( - { \boldsymbol{\rm P} }^{\rm T} \: ; \: { \boldsymbol{\rm I} }_m \right) \hspace{0.05cm}.\]
Diese Gleichung gilt allgemein, also auch im nichtbinären Fall. Da wir uns im gesamten ersten Hauptkapitel auf binäre Codes beschränken ⇒ $\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.
- \[{ \boldsymbol{\rm H} } =\left( - { \boldsymbol{\rm P} }^{\rm T} \: ; \: { \boldsymbol{\rm I} }_m \right)=\left( { \boldsymbol{\rm P} }^{\rm T} \: ; \: { \boldsymbol{\rm I} }_m \right)\hspace{0.05cm}. \]
$\text{Beispiel 8:}$ Wir betrachten weiterhin den beispielhaften $\text{(5, 3)}$–Blockcode, gehen aber nun von der systematischen Generatormatrix $\boldsymbol{\rm G}_{\rm sys}$ aus, die wir im $\text{Beispiel 5}$ ermittelt haben:
- \[ \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}.\]
Damit erhält man für die Prüfmatrix
- \[{ \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},\]
und es ergibt sich folgende Codetabelle:
- \[\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}.\]
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:
- \[p_1 = u_2 \hspace{0.05cm},\hspace{0.2cm}p_2 = u_1 \hspace{0.05cm},\]
und die entsprechenden Prüfgleichungen des Decoders:
- \[x_2 + x_4 = 0 \hspace{0.05cm},\hspace{0.2cm}x_1 + x_5 = 0 \hspace{0.05cm}.\]
Man erkennt aus diesen Gleichungen und auch aus obiger Codetabelle:
- Dieser Code bietet gegenüber einem Übertragungsfehler hinsichtlich des dritten Bits $(x_3 = u_3)$ 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 $\text{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 $\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
- den Single–Parity–check Code ⇒ $\text{SPC (5, 4)}$:
- \[{ \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};\]
- den Wiederholungscode (Repetition Code) ⇒ $\text{RC (5, 1)}$:
- \[{ \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}.\]
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:
- Die Generatormatrix des $\text{RC (5, 1)}$ ist identisch mit der Prüfmatrix des $\text{SPC (5, 4)}$. Es handelt sich jeweils um $(5 \times 1)$–Matrizen.
- Die Prüfmatrix des $\text{RC (5, 1)}$ ist identisch mit der Generatormatrix des $\text{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:
$\text{Definition:}$ Zwei lineare Codes $\mathcal{C}$ und $\mathcal{C}\hspace{0.05cm}'$, beide aus ${\rm GF}(2^n)$, sind orthogonal, wenn alle Codeworte $\underline{x} \in \mathcal{C}$ zu allen Codeworten $\underline{x}\hspace{0.05cm}' \in \mathcal{C}\hspace{0.05cm}'$ orthogonal sind. Man bezeichnet dann $\mathcal{C}$ und $\mathcal{C}\hspace{0.05cm}'$ als duale Codes.
$\text{Definition:}$ Zwei Codeworte $\underline{x} \in{\rm GF}(2^n)$ und $\underline{x\hspace{0.05cm}'} \in {\rm GF}(2^n)$ sind immer dann zueinander orthogonal, wenn das innere Produkt verschwindet:
- \[\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}.\]
Wegen der Produktbildung in ${\rm GF}(2^n)$ sind auch folgende Codewort–Paare zueinander orthogonal:
- \[\left \langle \hspace{0.05cm}(0, 1, 1, 0) \hspace{0.05cm}, \hspace{0.5cm} (1, 1, 1, 0) \hspace{0.05cm} \right \rangle = 0\hspace{0.05cm},\hspace{0.2cm} \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}.\]
- Der Code $\mathcal{C}$ spannt einen $k$–dimensionalen Untervektorraum in ${\rm GF}(2^n)$ auf.
- Der Untervektorraum des dualen Codes $\mathcal{C}\hspace{0.05cm}'$ ist zu diesem orthogonal und weist die Dimension $n-k$ auf.
- Damit gilt: ${\rm dim} \{ \mathcal{C} \} + {\rm dim} \{ \mathcal{C}\hspace{0.05cm}' \} = n\hspace{0.05cm}.$
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 $\text{(7, 4, 3)}$–Code ist gekennzeichnet durch
- die Anzahl der Prüfgleichungen: $m = 3$,
- die Codelänge $n = 2^m-1 = 7$,
- die Informationswortlänge $k = n-m = 4$,
- die Anzahl $2^k =16$ der Codeworte (Dimension),
- die Rate $R= k/n = 4/7$,
- die minimale Distanz $d_{\rm min} = 3$ $($unabhängig von $m$, $n$ und $k)$.
In obiger Tabelle sind die $2^4 = 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:
- \[{ \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}.\]
- Dementsprechend gilt für die Generatormatrix:
- \[{ \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}.\]
Aufgaben zum Kapitel
Aufgabe 1.7: Prüfmatrix und Generatormatrix des HC (7, 4, 3)
Aufgabe 1.7Z: Klassifizierung von Blockcodes
Aufgabe 1.8Z: Äquivalente Codes
Aufgabe 1.9: Erweiterter Hamming–Code
Aufgabe 1.9Z: Erweiterung und/oder Punktierung
Aufgabe 1.10: Einige Generatormatrizen