Blockcode

Systematischer Blockcode aus voneinander getrennten Informations- und Prüfsymbolen

Blockcodes sind eine Art der Kanalkodierung der Familie der (fehlererkennenden und) fehlerkorrigierenden Codes. Sie zeichnen sich durch eine feste Blockgröße aus  n {\displaystyle n} Symbolen eines festen Alphabets Σ {\displaystyle \Sigma } (bei Binärcodes Σ = { 0 , 1 } {\displaystyle \Sigma =\\{0,1\\}} ) aus. Einzelne Blocks werden im Gegensatz zu Faltungscodes unabhängig voneinander kodiert und dekodiert.

Wichtige Eigenschaften eines Blockcodes sind die Informationsrate (das Verhältnis aus enthaltener Informationsmenge  k {\displaystyle k} zur Gesamt-Datenmenge  n {\displaystyle n} ) sowie seine Korrekturrate (d. h. die Fähigkeit Fehler zu erkennen und/oder zu korrigieren). Beide Eigenschaften beeinflussen einander und spannen eine gemeinsame, unüberwindbare Schranke auf. Durch Optimierung kann man sich der Schranke nähern, erhält aber lange und aufwändig zu dekodierende Codes. Hier hat sich das Kaskadieren von Codes als praktikablere Lösung erwiesen.

Obwohl Blockcodes häufig nicht optimal im Sinne einer minimalen mittleren Codewortlänge sind, schränkt man sich oft auf Blockcodes ein. Eine weitere Spezialisierung stellen lineare Codes und systematische Codes dar.

## Aufbau

[Bearbeiten | Quelltext bearbeiten]

Aus dem Alphabet  Σ {\displaystyle \Sigma } und der Blockgröße  n {\displaystyle n} ergibt sich  Σ n {\displaystyle \Sigma ^{n}} als Menge der möglichen Worte, von denen eine Teilmenge  C ⊆ Σ n {\displaystyle {\mathcal {C}}\subseteq \Sigma ^{n}} die gültigen Codeworte darstellt. Die Mächtigkeit des Alphabets  Σ {\displaystyle \Sigma } wird mit  q = | Σ | {\displaystyle q=|\Sigma |} bezeichnet, sie beträgt im Falle von Binärcodes  q = | Σ | = 2 {\displaystyle q=|\Sigma |=2} . Die Mächtigkeit des Codes  | C | {\displaystyle |{\mathcal {C}}|} kann bei vielen Codes (bei linearen Codes immer) als  | C | = q k {\displaystyle |{\mathcal {C}}|=q^{k}} mit  k ∈ N + {\displaystyle k\in \mathbb {N} ^{+}} geschrieben werden. Diese Codes können bei einer Blockgröße von  n {\displaystyle n} Symbolen eine Nutzlast  k ≤ n {\displaystyle k\leq n} tragen.

Die Informationrate beträgt  k / n ≤ 1 {\displaystyle k/n\leq 1} , die Korrekturrate wird durch den (minimalen) Hamming-Abstand des Codes  C {\displaystyle {\mathcal {C}}} limitiert. Der Hamming-Abstand zweier Codeworte  c i {\displaystyle c_{i}} und  c j {\displaystyle c_{j}} ist hierbei die Anzahl unterschiedlicher Symbole dieser Codeworte  Δ ( c i , c j ) {\displaystyle \Delta (c_{i},c_{j})} , der (minimale) Hamming-Abstand  d {\displaystyle d} eines (ganzen) Codes C {\displaystyle {\mathcal {C}}} ist der minimale Hamming-Abstand aller (disjunkten) Codewort-Paare, d. h.  d = Δ ( C ) = d e f min i ≠ j Δ ( c i , c j ) {\displaystyle d=\Delta ({\mathcal {C}})\,\,{\overset {\underset {\mathrm {def} }{}}{=}}\,\min _{i\neq j}\,\Delta (c_{i},c_{j})} . Letztere beschränkt die maximale (zuverlässige) Korrekturleistung auf  t {\displaystyle t} Symbolfehlern mit  t = ⌊ ( d − 1 ) / 2 ⌋ {\displaystyle t=\left\lfloor (d-1)/2\right\rfloor } ein. Bei kaskadierten Korrekturverfahren spielt neben der Fehlerkorrektur auch die Fehlererkennung eine Rolle. Zum einen erkennen Nicht-perfekte Codes eine gewisse Menge an Mehrbit-Fehler mit  t M e h r b i t > t {\displaystyle t_{\mathrm {Mehrbit} }>t} , die sie selbst nicht mehr korrigieren können, zum anderen kann man Fehlerkorrektur-Fähigkeiten gegen weitere (garantierte) Fehlererkennungs-Fähigkeiten  r {\displaystyle r} eintauschen und damit folgende Korrektur-Stufen unterstützen:  r = d − 1 − t b e n u t z t {\displaystyle r=d-1-t_{\mathrm {benutzt} }} .

Für Codes haben sich in der Literatur unterschiedliche Notationen etabliert:

* [ n , k ; d , q ] {\displaystyle [n,k;d,q]} oder  [ n , k ; d ] q {\displaystyle [n,k;d]_{q}} , häufig wird das Semikolon durch ein Komma ersetzt, die eckigen Klammern durch runde Klammern.  q = 2 {\displaystyle q=2} wird häufig weggelassen, gleiches gilt für das  d = 3 {\displaystyle d=3} der klassischen Hamming-Codes.
* Häufig wird statt  k {\displaystyle k} (der Anzahl der Nutzsymbole) die Mächtigkeit des Codes  q k = | C | {\displaystyle q^{k}=|{\mathcal {C}}|} , d. h.  ( n , q k , d ) q {\displaystyle (n,q^{k},d)_{q}} oder der Code selbst angegeben  ( n , C , d ) q {\displaystyle (n,{\mathcal {C}},d)_{q}} angegeben, zum Teil wird diese Information in der Art der verwendeten Klammern versteckt.

Im Weiteren wird versucht, dies wie auch die Nutzung von Variablennamen sowohl in diesem Artikel wie auch in verwandten Artikeln konsistent zu halten.

Man bezeichnet allgemein  C {\displaystyle {\mathcal {C}}} als einen  ( n , C ; d , q ) {\displaystyle (n,{\mathcal {C}};d,q)} -Code, falls

* Σ {\displaystyle \Sigma } ein Alphabet mit  | Σ | = q {\displaystyle |\Sigma |=q} ist,
* der Code  C ⊆ Σ n {\displaystyle {\mathcal {C}}\subseteq \Sigma ^{n}} ist und
* der (minimalen) Hamming-Abstand  d = Δ ( C ) {\displaystyle d=\Delta ({\mathcal {C}})} ist.

Betrachtet man lineare Codes, so spricht man von  [ n , k ; d , q ] {\displaystyle [n,k;d,q]} -Codes bzw.  [ n , k ; d ] q {\displaystyle [n,k;d]_{q}} -Codes, wobei  k {\displaystyle k} hier die Dimension von  C {\displaystyle {\mathcal {C}}} über dem Körper  F q {\displaystyle \mathbb {F} _{q}} ist.  n {\displaystyle n} und  d {\displaystyle d} haben dabei die gleiche Bedeutung wie bei den allgemeinen Blockcodes.

Es gibt zwar theoretische Grenzen (wie die Hamming-Grenze), aber eine andere Frage ist, welche Codes tatsächlich konstruiert werden können. Es ist, als würde man Kugeln in einem eckigen Karton verpacken … Dieses Diagramm zeigt die konstruierbaren Codes die linear und binär sind. Die x-Achse zeigt die Anzahl der geschützten Symbole k und die y-Achse die Anzahl der benötigten Prüfsymbole n-k. Es sind die Grenzen für verschiedene Hamming-Distanzen dargestellt: Von 1 (ungeschützt) bis 34.
Mit Punkten markiert sind perfekte Codes:

* hellorange auf der x-Achse: trivial ungeschützte Codes
* orange, auf der y-Achse: trivial Wiederholungs-Codes
* dunkelorange, auf der Linie für d=3: klassische, perfekte Hamming-Codes
* dunkelrot und groß: der einzige perfekte binäre Golay-Code

Man interessiert sich bei gegebenem  n {\displaystyle n} ,  d {\displaystyle d} und  q {\displaystyle q} für eine Maximierung der Mächtigkeit des Codes, d. h. für  max { | C | : C m i t Δ ( C ) ≥ d } {\displaystyle \max\\{|{\mathcal {C}}|:{\mathcal {C}}\,\,{\mathrm {mit} }\,\,\Delta ({\mathcal {C}})\geq d\\}} , da hierbei eine optimale Informationsrate für diese Parameter erzielt wird. Allerdings gibt es günstige Parameter, die zu effizienteren Codes als ihre Nachbarparameter führen. So fordert ein  [ 23 , 12 ; 7 , 2 ] {\displaystyle [23,12;7,2]} -Code 11 Schutzbits, ein  [ 27 , 13 ; 7 , 2 ] {\displaystyle [27,13;7,2]} -Code allerdings schon 14. Ein  [ 41 , 24 ; 7 , 2 ] {\displaystyle [41,24;7,2]} \- kommt wie ein  [ 55 , 38 ; 7 , 2 ] {\displaystyle [55,38;7,2]} -Code mit 17 Schutzbits aus.

Es gibt Abschätzungen, ob Codes möglich sein könnten oder gegen gewisse Prinzipien verstoßen:

* Singleton-Schranke (MDS-Code)
* Hamming-Schranke (Perfekter Code)
* Plotkin-Schranke
* Gilbert-Varshamov-Schranke, Johnson-Schranke, Griesmer-Schranke, Bassalygo-Elias-Schranke
* Optimaler Code

Schranken weisen darauf hin, ob Codes existieren können, nicht ob sie konstruierbar sind und wirklich existieren.

## Typen von Blockcodes

[Bearbeiten | Quelltext bearbeiten]

Formal heißt der Code  C ⊆ Σ n {\displaystyle {\mathcal {C}}\subseteq \Sigma ^{n}} Blockcode, wobei  Σ {\displaystyle \Sigma } als Alphabet bezeichnet wird und  n {\displaystyle n} die Länge jedes Codewortes  c ∈ C {\displaystyle c\in {\mathcal {C}}} ist.

Triviale Blockcodes sind Codes

* die nur ein Wort als Code umfassen:  | C | = 1 {\displaystyle |{\mathcal {C}}|=1} . Es lassen sich alle Übertragungsfehler erkennen, aber keine Information übertragen oder
* die alle möglichen Worte als Code umfassen:  | C | = | Σ | n {\displaystyle |{\mathcal {C}}|=|\Sigma |^{n}} . Es lassen sich keine Übertragungsfehler erkennen, die übertragene Information ist aber maximal.

Bemerkungen:

* Der erste Code lässt sich als  [ n , 0 ; 2 n + 1 , q ] {\displaystyle [n,0;2n+1,q]} -Code schreiben. Er hat im klassischen Sinne keine Hamming-Distanz, da es keine Codepaare gibt. Es lassen sich bis zu maximal  t = n {\displaystyle t=n} Symbolfehler im übertragenen Wort  w {\displaystyle w} korrigieren (das übertragene Codewort ist bekannt), was eine typische Eigenschaft für Codes mit  d = 2 t + 1 = 2 n + 1 {\displaystyle d=2t+1=2n+1} ist. Das gleiche gilt für die Anzahl von Codes, die sich eindeutig dekodieren lassen. Die Gleichung  q n = ∑ i = 0 ⌊ ( d − 1 ) / 2 ⌋ ( q − 1 ) i ( n i ) {\displaystyle q^{n}={\sum _{i=0}^{\lfloor (d-1)/2\rfloor }(q-1)^{i}{\binom {n}{i}}}} liefert für  d ≥ 2 n + 1 {\displaystyle d\geq 2n+1} das richtige Ergebnis.
* Der zweite Code lässt sich als  [ n , n ; 1 , 2 ] {\displaystyle [n,n;1,2]} -Code schreiben. Er hat eine Hamming-Distanz von 1.

Lineare Blockcodes sind Codes, die auch als  k {\displaystyle k} -dimensionaler Untervektorraum von  Σ n {\displaystyle \Sigma ^{n}} aufgefasst werden können. Es existiert dann eine Basis  g 1 , … , g k {\displaystyle g_{1},\dots ,g_{k}} des Codes  C {\displaystyle {\mathcal {C}}} . Fasst man diese Basis zu einer Matrix

G = ( g 1 g 2 ⋮ g k − 1 g k ) {\displaystyle G={\begin{pmatrix}g_{1}\\\g_{2}\\\\\vdots \\\g_{k-1}\\\g_{k}\end{pmatrix}}}

zusammen, erhält man eine Generatormatrix dieses linearen Blockcodes. Die Codeworte erhält man durch Multiplizieren des Eingangssignals  x {\displaystyle x} mit der Generatormatrix

c ( x ) = x ⋅ G {\displaystyle c(x)=x\cdot G}

Der Hauptvorteil linearer Code ist die einfache Codierbarkeit und die einfache Decodierbarkeit: Zur Kodierung eines Codes mit  q k {\displaystyle q^{k}} Codeworten muss man nur noch  k {\displaystyle k} Codeworte vorrätig halten. Gleiches gilt für die Dekodierung mit  q n {\displaystyle q^{n}} vs.  n {\displaystyle n} .

Systematische Blockcodes sind Codes, bei denen die  k {\displaystyle k} Informationssymbole direkt im Block ablesbar sind (meist am Blockanfang, siehe Abbildung am Anfang des Artikels). Sie können gleichzeitig lineare Blockcodes sein, müssen es aber nicht. Sie sind lineare Blockcodes, wenn neben den Informationssymbolen (die immer linear sind) auch die Prüfsymbole linear sind.

Perfekte Blockcodes sind Codes, in denen jedes Wort  w ∈ Σ n {\displaystyle w\in \Sigma ^{n}} nur zu genau einem Codewort c ∈ C {\displaystyle c\in {\mathcal {C}}} (und nicht zu mehreren) einen geringsten Hamming-Abstand d w {\displaystyle d_{w}} hat. Jedes Wort lässt sich damit eindeutig decodieren. Der Hamming-Code ist ein Beispiel für einen perfekten Code.

Maximum-Distanz-Codes (MDS-Codes) sind Blockcodes, deren Codeworte den größtmöglichen Hamming-Abstand voneinander haben. Beispiele für MDS Codes sind Wiederholungscodes, Paritätscodes und Reed-Solomon-Codes.

## Informationsrate von Blockcodes

[Bearbeiten | Quelltext bearbeiten]

Die Informationsrate (auch Coderate)  R {\displaystyle R} gibt an, wie viel Information pro Codewortsymbol im Mittel übertragen wird, sie ist also das Verhältnis von Nachrichtensymbolen zu Codewortsymbolen. Da ein Code Redundanz hinzufügt, gilt allgemein  0 ≤ R ≤ 1 {\displaystyle 0\leq R\leq 1} .

Sei  C ⊆ Σ n {\displaystyle {\mathcal {C}}\subseteq \Sigma ^{n}} ein Blockcode und es gelte  q = | Σ | {\displaystyle q=|\Sigma |} , das Alphabet habe also  q {\displaystyle q} verschiedene Elemente. Dann lautet für  C {\displaystyle {\mathcal {C}}} die Definition der Informationsrate:

R = log q ⁡ ( | C | ) log q ⁡ ( | Σ | n ) = log q ⁡ ( | C | ) n {\displaystyle R={\frac {\log _{q}(|{\mathcal {C}}|)}{\log _{q}(|\Sigma |^{n})}}={\frac {\log _{q}(|{\mathcal {C}}|)}{n}}} .

Ist z. B.  C {\displaystyle {\mathcal {C}}} ein binärer Code mit  s {\displaystyle s} verschiedenen Codeworten, dann benötigt man  ⌈ log 2 ⁡ s ⌉ {\displaystyle \lceil \log _{2}s\rceil } Bits, um diese eindeutig zu unterscheiden.

Handelt es sich um einen linearen Code, so ist die Informationsrate:

R = log q ⁡ ( q k ) n = k n {\displaystyle R={\frac {\log _{q}(q^{k})}{n}}={\frac {k}{n}}} .

## Beispiele für Blockcodes

[Bearbeiten | Quelltext bearbeiten]

### Wiederholungscode

[Bearbeiten | Quelltext bearbeiten]

Wiederholungscodes sind lineare, systematische  [ n , 1 ; n ] {\displaystyle [n,1;n]} -Blockcodes über einem beliebigen Alphabet, bei denen jedes Nachrichtensymbol n-mal wiederholt wird. Damit hat ein Wiederholungscode die Generatormatrix

G = ( 1 ⋯ 1 ) {\displaystyle G={\begin{pmatrix}1\cdots 1\end{pmatrix}}}

und eine Informationsrate von  R = 1 n {\displaystyle R={\frac {1}{n}}} .

### Paritätscode

[Bearbeiten | Quelltext bearbeiten]

Paritätscodes (engl. Single Parity Check (SPC) codes) sind lineare, systematische und binäre Codes, bei denen der Nachricht ein einziges Prüfbit angefügt wird, das sich als XOR-Verknüpfung aller Nachrichtenbits ergibt. Somit hat jedes Codewort eine gerade Anzahl an „1“-Bits. Die Generatormatrix hat folgende Form:

G = ( 10 … 00 1 01 … 00 1 ⋮ ⋱ ⋮ ⋮ 00 … 10 1 00 … 01 1 ) {\displaystyle G={\begin{pmatrix}10\dots 00\,\,1\\\01\dots 00\,\,1\\\\\,\,\,\,\vdots \ddots \vdots \,\,\,\,\,\,\vdots \\\00\dots 10\,\,1\\\00\dots 01\,\,1\\\\\end{pmatrix}}}

Sie haben eine Hamming-Distanz von 2 und stellen - [ n , n − 1 ; 2 , 2 ] {\displaystyle [n,n-1;2,2]} Blockcodes dar. Sie können einen Fehler erkennen, aber keine Fehler korrigieren. Lineare binäre Blockcodes mit ungeradem Hamming-Abstand  [ n , k ; 2 m + 1 , 2 ] {\displaystyle [n,k;2m+1,2]} lassen sich mit einem zusätzlichen Paritätscode zu einem  [ n + 1 , k ; 2 m + 2 , 2 ] {\displaystyle [n+1,k;2m+2,2]} -Code erweitern.

### Hadamard-Code

[Bearbeiten | Quelltext bearbeiten]

Hadamard Codes sind lineare nicht-systematische Blockcodes  [ 2 k , k + 1 ; 2 k − 1 ] {\displaystyle [2^{k},k+1;2^{k-1}]} . Die Generatormatrix hat eine sehr auffällige Form

G = ( 01010101 ⋯ 10 ⋯ 01010101 00110011 ⋯ 10 ⋯ 00110011 00001111 ⋯ 10 ⋯ 00001111 ⋮ 00000000 ⋯ 01 ⋯ 11111111 11111111 ⋯ 10 ⋯ 00000000 ) {\displaystyle G={\begin{pmatrix}01010101\cdots 10\cdots 01010101\\\00110011\cdots 10\cdots 00110011\\\00001111\cdots 10\cdots 00001111\\\\\vdots \\\00000000\cdots 01\cdots 11111111\\\11111111\cdots 10\cdots 00000000\\\\\end{pmatrix}}}

Sie haben eine geringe Coderate von  R = k + 1 2 k {\displaystyle R={\frac {k+1}{2^{k}}}} , können aber noch Daten aus sehr fehlerbehafteten Signal dekodieren. Daher fanden sie unter anderem in der Mariner 9 Mission Anwendung.

### Weitere Beispiele für Blockcodes

[Bearbeiten | Quelltext bearbeiten]

#### Beispiel 1

[Bearbeiten | Quelltext bearbeiten]

( 9 , { 0 , 31 , 227 , 364 , 437 , 474 } ; 5 , 2 ) {\displaystyle (9,\\{0,31,227,364,437,474\\};5,2)}

Die  | C | = 6 {\displaystyle |{\mathcal {C}}|=6} Codeworte  c {\displaystyle c} lauten in der Binärdarstellung:

.........
....#####
.###...##
#.##.##..
##.##.#.#
###.##.#.

Es existiert kein linearer Code dieser Mächtigkeit. Zum einen ist  log q 6 ∉ N + {\displaystyle {\text{log}}_{q}6\not \in \mathbb {N} ^{+}} , zum anderen sind die größten lineare Code dieser Art ein  [ 8 , 2 ; 5 , 2 ] {\displaystyle [8,2;5,2]} \- und ein  [ 10 , 3 ; 5 , 2 ] {\displaystyle [10,3;5,2]} -Code. Der Code lässt sich nicht in einen linearen Code umwandeln.

#### Beispiel 2

[Bearbeiten | Quelltext bearbeiten]

( 11 , { 0 , 143 , 307 , 444 , 597 , 730 , 870 , 1001 , 1130 , 1253 , 1369 , 1494 , 1599 , 1712 , 1804 , 1923 } ; 5 , 2 ) {\displaystyle (11,\\{0,143,307,444,597,730,870,1001,1130,1253,1369,1494,1599,1712,1804,1923\\};5,2)}

Die  | C | = 16 {\displaystyle |{\mathcal {C}}|=16} Codeworte  c {\displaystyle c} lauten in der Binärdarstellung (MSB links):

...........
...#...####
..#..##..##
..##.####..
.#..#.#.#.#
.#.##.##.#.
.##.##..##.
.#####.#..#
#...##.#.#.
#..###..#.#
#.#.#.##..#
#.###.#.##.
##...######
##.#.##....
###....##..
####.....##

Es handelt sich um einen linearen systematischen Code mit der Basis

...#...####
..#..##..##
.#..#.#.#.#
#...##.#.#.

Die 16 Codeworte lassen sich durch eine XOR-Verknüpfung der Basisvektoren erzeugen, deren Informationsbits gesetzt sind (daher linearer Code). Die Informationsbits stellen die linken 4 Bit dar (Bit 10 bis 7), die Schutzbits die rechten 7 Bit (Bit 6 bis 0) (daher systematischer Code).

#### Beispiel 3

[Bearbeiten | Quelltext bearbeiten]

( 8 , { 0 , 7 , 25 , 30 , 42 , 53 , 75 , 84 , 97 , 108 , 114 , 127 , 140 , 147 , 166 , 169 , 176 , 194 , 197 , 216 } ; 3 , 2 ) {\displaystyle (8,\\{0,7,25,30,42,53,75,84,97,108,114,127,140,147,166,169,176,194,197,216\\};3,2)}

Die  | C | = 20 {\displaystyle |{\mathcal {C}}|=20} Codeworte  c {\displaystyle c} lauten in der Binärdarstellung:

........
.....###
...##..#
...####.
..#.#.#.
..##.#.#
.#..#.##
.#.#.#..
.##....#
.##.##..
.###..#.
.#######
#...##..
#..#..##
#.#..##.
#.#.#..#
#.##....
##....#.
##...#.#
##.##...

Es existiert kein linearer Code dieser Mächtigkeit. Auch hier ist zum einen  log q 20 ∉ N + {\displaystyle {\text{log}}_{q}20\not \in \mathbb {N} ^{+}} , zum anderen sind die größten lineare Code dieser Art ein  [ 7 , 4 ; 3 , 2 ] {\displaystyle [7,4;3,2]} \- und ein  [ 9 , 5 ; 3 , 2 ] {\displaystyle [9,5;3,2]} -Code. Der Code lässt sich nicht in einen linearen Code umwandeln.

## Fehlerkorrektur

[Bearbeiten | Quelltext bearbeiten]

Blockcodes können zur Fehlererkennung und Fehlerkorrektur bei der Übertragung von Daten über fehlerbehaftete Kanäle verwendet werden. Dabei ordnet der Sender dem zu übertragenen Informationswort der Länge  k {\displaystyle k} ein Codewort der Länge  n {\displaystyle n} zu, wobei  n > k {\displaystyle n>k} . Durch das Hinzufügen der  n − k {\displaystyle n-k} zusätzlichen Symbole entsteht Redundanz und die Informationsrate sinkt; jedoch kann der Empfänger die redundante Information nun dazu nutzen Übertragungsfehler zu erkennen und zu korrigieren.

Verwendet man beispielsweise, im Fall der Binärkodierung, die Zuordnung

Informationswort  | Codewort

|

0  | 000
1  | 111

so können empfangene Codewörter mit genau einem Bitfehler korrigiert werden, indem man mit Hilfe einer Mehrheitsfunktion das abweichende Bit umkehrt:

Fehlerhaftes
Codewort  | Korrigiertes
Codewort  | Zugeordnetes
Informationswort

|
|

001 | 000 | 0
010  | 000  | 0
011  | 111  | 1
100  | 000  | 0
101  | 111  | 1
110 | 111 | 1

Sind in diesem Falle jedoch zwei Bits falsch, so wird zwar ein Fehler erkannt, aber fehlerhaft korrigiert. Sind gar drei Bits falsch, so kann nicht einmal mehr ein Fehler erkannt werden.

## Schranken

[Bearbeiten | Quelltext bearbeiten]

### Singleton-Schranke

[Bearbeiten | Quelltext bearbeiten]

Die Singleton-Schranke bezeichnet eine obere Schranke für die Mindestdistanz d {\displaystyle d} eines Blockcodes der Länge  n {\displaystyle n} bei Informationswörtern der Länge  k {\displaystyle k} über einem einheitlichen Alphabet  Σ {\displaystyle \Sigma } .

Sie lautet:

d ≤ n − k + 1 {\displaystyle d\leq n-k+1}

Die Schranke kann auf folgende Art intuitiv klargemacht werden:

* Annahme: Alphabet  Σ = { 0 , … , q − 1 } {\displaystyle \Sigma =\\{0,\ldots ,q-1\\}}
* Anzahl der möglichen Informationswörter:  | I | = q k {\displaystyle |{\mathcal {I}}|=q^{k}}
* Anzahl der Codewörter:  | C | = | I | = q k {\displaystyle |{\mathcal {C}}|=|{\mathcal {I}}|=q^{k}}
* Mindestdistanz:  d {\displaystyle d}

Streicht man nun in den Codewörtern jeweils die letzten ( d − 1 {\displaystyle d-1} ) der  n {\displaystyle n} Stellen, so haben die übrigen Codewörter zueinander immer noch mindestens den Hamming-Abstand 1\. Bei  d {\displaystyle d} Streichungen wäre dies nicht mehr gewährleistet. Damit sind immer noch alle Codewörter unterschiedlich, also

| C ′ | = | C | = q k {\displaystyle |{\mathcal {C}}'|=|{\mathcal {C}}|=q^{k}}

Deswegen muss auch die Anzahl der durch die Länge  n − ( d − 1 ) {\displaystyle n-(d-1)} erzeugbaren Wörter  q n − d + 1 ≥ q k {\displaystyle q^{n-d+1}\geq q^{k}} sein. Stellt man diese Gleichung um, ergibt sich daraus die Singleton-Schranke

n − d + 1 ≥ k ⇔ d ≤ n − k + 1 {\displaystyle n-d+1\geq k\Leftrightarrow d\leq n-k+1}

Für nicht-lineare Codes gilt entsprechend

M ≤ q n − d + 1 {\displaystyle M\leq q^{n-d+1}} ,

wobei  M = | C | {\displaystyle M=|{\mathcal {C}}|} .

Codes, die die Singleton-Schranke mit Gleichheit erfüllen, nennt man auch MDS-Codes.

Im Falle der Hamming-Schranke ist  t = ⌊ ( d − 1 ) / 2 ⌋ {\displaystyle t=\lfloor (d-1)/2\rfloor } die Anzahl der maximal korrigierbaren Fehler eines Codes mit der Hamming-Distanz  d {\displaystyle d} .

Die Hamming-Schranke sagt aus, dass

q n ≥ q k ∑ i = 0 t ( q − 1 ) i ( n i ) {\displaystyle q^{n}\geq q^{k}{\sum _{i=0}^{t}(q-1)^{i}{\binom {n}{i}}}} ,

beziehungsweise

n ≥ k + log q ⁡ ∑ i = 0 t ( q − 1 ) i ( n i ) {\displaystyle n\geq k+\log _{q}{\sum _{i=0}^{t}(q-1)^{i}{\binom {n}{i}}}}

erfüllt sein muss für einen Code, der mittels  n {\displaystyle n} Symbolen eines Alphabets  Σ {\displaystyle \Sigma } der Größe  q {\displaystyle q} eine Nachricht mit der Länge  k {\displaystyle k} transportiert.

Die Singleton-Schranke ist eine ungenauere Abschätzung als die Hamming-Schranke, die die Größe des Alphabets nicht berücksichtigt. Weiterhin gibt es Unterschiede in der Beziehung zwischen  t {\displaystyle t} und  d {\displaystyle d} .

### Plotkin-Grenze

[Bearbeiten | Quelltext bearbeiten]

In der Kanalcodierung verwendet man Blockcodes, um Fehler in Datenströmen erkennen und korrigieren zu können. Ein Blockcode  C {\displaystyle C} der Länge  n {\displaystyle n} über einem  q {\displaystyle q} -nären Alphabet mit einem Minimalabstand  d {\displaystyle d} erfüllt die Plotkin-Grenze, auch als Plotkin-Schranke bezeichnet,[1][2]

| C | ≤ d d − ( q − 1 q ) ⋅ n {\displaystyle |C|\leq {\frac {d}{d-({\frac {q-1}{q}})\cdot n}}}

dann, wenn der Nenner positiv ist. Somit liefert die Plotkin-Grenze nur dann ein Resultat, wenn  d {\displaystyle d} hinreichend nahe bei  n {\displaystyle n} liegt.

Nimmt ein Code  C {\displaystyle C} die Plotkin-Schranke an, so gilt insbesondere, dass der Abstand zweier beliebiger Codewörter genau  d {\displaystyle d} ist.

Ist  q ≥ 3 {\displaystyle q\geq 3} und  | C | = a ⋅ q + b {\displaystyle |C|=a\cdot q+b} mit  b < q {\displaystyle b<q} , so gilt sogar die schärfere Beziehung:[3]

d ( | C | 2 ) ≤ n ( ( | C | 2 ) − b ( a + 1 2 ) − ( q − b ) ( a 2 ) ) {\displaystyle d{|C| \choose 2}\leq n\left({|C| \choose 2}-b{a+1 \choose 2}-(q-b){a \choose 2}\right)}

Beispielsweise liefert die Plotkin-Grenze für  q = 3 {\displaystyle q=3} ,  n = 9 {\displaystyle n=9} und  d = 7 {\displaystyle d=7} nur  | C | ≤ 7 {\displaystyle |C|\leq 7} , die Verschärfung jedoch  | C | ≤ 6 {\displaystyle |C|\leq 6} , da sich für  a = 2 {\displaystyle a=2} und  b = 1 {\displaystyle b=1} ein Widerspruch ergibt.

Sie wurde 1960 von Morris Plotkin veröffentlicht.

## Literatur

[Bearbeiten | Quelltext bearbeiten]

* Rudolf Nocker: Digitale Kommunikationssysteme 1. Grundlagen der Basisbandübertragung, 1. Auflage, Friedrich Vieweg & Sohn Verlag, Wiesbaden 2004, ISBN 978-3-528-03976-9.
* Markus Hufschmid: Information und Kommunikation. Grundlagen der Informationsübertragung, Vieweg und Teubner, Wiesbaden 2006, ISBN 3-8351-0122-6.
* Bernd Friedrichs: Kanalcodierung. Grundlagen und Anwendungen in modernen Kommunikationssystemen. Springer Verlag, Berlin/Heidelberg 1995, ISBN 3-540-59353-5.

## Weblinks

[Bearbeiten | Quelltext bearbeiten]

* Kanalcodierung und Blockcodes
* Proinformatik - Funktionale Programmierung (abgerufen am 6. April 2018)
* Theory and Practice of Error Control Codes Block Code Performance (abgerufen am 6. April 2018)

## Einzelnachweise

[Bearbeiten | Quelltext bearbeiten]

1. ↑ M. Plotkin: Binary codes with specified minimum distance, IRE Transactions on Information Theory, 6:445-450, 1960 (engl.).
2. ↑ W.C. Huffman, V. Pless: Fundamentals of Error-Correcting Codes, Cambridge University Press, 2003 (engl.).
3. ↑ Die Plotkin-Grenze und ihre Verschärfung (englisch).