Difference between revisions of "Channel Coding/The Basics of Low-Density Parity Check Codes"

From LNTwww
 
(91 intermediate revisions by 8 users not shown)
Line 1: Line 1:
 
  {{LastPage}}
 
  {{LastPage}}
 
{{Header
 
{{Header
|Untermenü=Iterative Decodierverfahren
+
|Untermenü=Iterative Decoding Methods
|Vorherige Seite=Grundlegendes zu den Turbocodes
+
|Vorherige Seite=The Basics of Turbo Codes
 
|Nächste Seite=
 
|Nächste Seite=
 
}}
 
}}
  
== Einige Charakteristika der LDPC–Codes (1) ==
+
== Some characteristics of LDPC codes ==
 
<br>
 
<br>
Die <i>Low&ndash;density Parity&ndash;check Codes</i> &ndash; kurz LDPC&ndash;Codes &ndash; wurden bereits Anfang der 1960er Jahre erfunden und gehen auf die Dissertation [Gal63]<ref>Gallager, R. G.: ''Low–density Parity–check Codes.'' MIT Press, Cambridge, MA, 1963.</ref> von Robert G. Gallager zurück.<br>
+
The&nbsp; "Low&ndash;density Parity&ndash;check Codes"&nbsp; $($in short: &nbsp;&raquo;'''LDPC codes'''&laquo;$)$&nbsp; were invented as early as the early 1960s and date back to the dissertation&nbsp; [Gal63]<ref name ='Gal63'>Gallager, R. G.:&nbsp; Low-density parity-check codes.&nbsp; MIT Press, Cambridge, MA, 1963.</ref>&nbsp; by&nbsp; [https://en.wikipedia.org/wiki/Robert_G._Gallager $\text{Robert G. Gallager}$].<br>
  
Die Idee kam allerdings aufgrund der damaligen Prozessorentechnologie um einige Jahrzehnte zu früh. Schon drei Jahre nach Berrou's Erfindung der Turbocodes 1993 erkannten dann allerdings David J. C. MacKay und Radford M. Neal das riesige Potential der LDPC&ndash;Codes, wenn man diese ebenso wie die Turbocodes iterativ symbolweise decodiert. Sie erfanden die LDPC&ndash;Codes quasi neu.<br>
+
However,&nbsp; the idea came several decades too early due to the processor technology of the time.&nbsp; Only three years after Berrou's invention of the turbo codes in 1993,&nbsp; however,&nbsp; [https://en.wikipedia.org/wiki/David_J._C._MacKay $\text{David J. C. MacKay}$]&nbsp; and&nbsp; [https://en.wikipedia.org/wiki/Radford_M._Neal $\text{Radford M. Neal}$]&nbsp; recognized the huge potential of the LDPC codes if they were decoded iteratively symbol by symbol just like the turbo codes.&nbsp; They virtually reinvented the LDPC codes.<br>
  
Wie aus dem Namensbestandteil &bdquo;Parity&ndash;check&rdquo; bereits hervorgeht, handelt es sich bei diesen Codes um lineare Blockcodes entsprechend den Ausführungen in Kapitel 1. Deshalb gilt auch hier:
+
As can already be seen from the name component&nbsp; "parity&ndash;check"&nbsp; that these codes are linear block codes according to the explanations in the&nbsp; [[Channel_Coding/Objective_of_Channel_Coding#.23_OVERVIEW_OF_THE_FIRST_MAIN_CHAPTER_.23|"first main chapter" ]].&nbsp; Therefore,&nbsp; the same applies here:
*Das Codewort ergibt sich aus dem Informationswort <u><i>u</i></u> (dargestellt mit <i>k</i> Binärsymbolen) und der Generatormatrix <b>G</b> der Dimension <i>k</i>&times;<i>n</i> zu <u><i>x</i></u> = <u><i>u</i></u> &middot; <b>G</b> &nbsp;&#8658;&nbsp; Codewortlänge <i>n</i>.<br>
+
*The code word results from the information word&nbsp; $\underline{u}$&nbsp; $($represented with&nbsp; $k$&nbsp; binary symbols$)$&nbsp; and the&nbsp; [[Channel_Coding/General_Description_of_Linear_Block_Codes#Code_definition_by_the_generator_matrix|$\text{generator matrix}$]]&nbsp; $\mathbf{G}$&nbsp; of dimension&nbsp; $k &times; n$&nbsp; to&nbsp; $\underline{x} = \underline{u} \cdot \mathbf{G}$&nbsp; &#8658; &nbsp; code word length&nbsp; $n$.<br>
  
*Die Prüfgleichungen ergeben sich aus der Identität <u><i>x</i></u> &middot; <b>H</b><sup>T</sup> &equiv; 0, wobei <b>H</b> die Prüfmatrix bezeichnet. Diese besteht aus <i>m</i> Zeilen und <i>n</i> Spalten. Während im ersten Kapitel grundsätzlich <i>m</i> = <i>n</i> &ndash; <i>k</i> gegolten hat, fordern wir für die LPDC&ndash;Codes lediglich noch <i>m</i> &#8805; <i>n</i> &ndash; <i>k</i>.<br><br>
+
*The parity-check equations result from the identity &nbsp; $\underline{x} \cdot \mathbf{H}^{\rm T} &equiv; 0$, &nbsp; where&nbsp; $\mathbf{H}$&nbsp; denotes the parity-check matrix.&nbsp; This consists of&nbsp; $m$&nbsp; rows and&nbsp; $n$&nbsp; columns.&nbsp; While in the first chapter basically&nbsp; $m = n -k$&nbsp; was valid,&nbsp; for the LPDC codes we only require&nbsp; $m &#8805; n -k$.<br>
  
Ein gravierender Unterschied zwischen einem LDPC&ndash;Code und einem herkömmlichen Blockcode nach der Beschreibung im ersten Kapitel ist, dass die Prüfmatrix <b>H</b> nur spärlich mit Einsen besetzt ist.<br>
+
*A serious difference between an LDPC code and a conventional block code as described in the first main chapter is that the parity-check matrix&nbsp; $\mathbf{H}$&nbsp; is here sparsely populated with&nbsp; "ones" &nbsp; &rArr; &nbsp; "low-density".<br>
  
{{Beispiel}}''':''' Die Grafik zeigt beispielhaft die Prüfmatrizen <b>H</b> für
 
*den Hamming&ndash;Code mit Codelänge <i>n</i> = 15, <i>m</i> = 4 &nbsp;&#8658;&nbsp; <i>k</i> = 11 Informationsbits,<br>
 
  
*den LDPC&ndash;Code aus [Liv15]<ref>Liva, G.: ''Channels Codes for Iterative Decoding.'' Vorlesungsmanuskript, Lehrstuhl für Nachrichtentechnik, TU München und DLR Oberpfaffenhofen, 2015.</ref> der Länge <i>n</i> = 12 und mit <i>m</i> = 9 Prüfgleichungen &nbsp;&#8658;&nbsp; <i>k</i> &#8805; 3.<br><br>
+
{{GraueBox|TEXT=
 +
[[File:EN_KC_T_4_4_S1a_v3.png|right|frame|Parity-check matrices of a Hamming code and a LDPC code|class=fit]]
 +
$\text{Example 1:}$&nbsp; The graph shows parity-check matrices&nbsp; $\mathbf{H}$&nbsp; for
 +
 +
*the Hamming code with code length&nbsp; $n = 15$&nbsp; and  with&nbsp; $m = 4$&nbsp; parity-check equations &nbsp; &#8658; &nbsp; $k = 11$&nbsp; information bits,<br>
  
[[File:P ID3065 KC T 4 4 S1a v3 einfacher Rahmen.png|Prüfmatrizen eines Hamming–Codes und eines LDPC–Codes|class=fit]]<br>
+
*the LDPC code from&nbsp; [Liv15]<ref name='Liv15'>Liva, G.:&nbsp; Channels Codes for Iterative Decoding.&nbsp; Lecture notes, Chair of Communications Engineering, TU Munich and DLR Oberpfaffenhofen, 2015.</ref>&nbsp; of length&nbsp; $n = 12$&nbsp; and with&nbsp; $m = 9$&nbsp; parity-check equations &nbsp; &#8658; &nbsp; $k &#8805; 3$&nbsp; information bits.<br><br>
  
In der linken Grafik beträgt der Anteil der Einsen 32/60 &asymp; 53.3%, wohingegen in der rechten Grafik der Einsen&ndash;Anteil mit 36/108 = 33.3% geringer ist. Bei den für die Praxis relevanten LDPC&ndash;Codes (großer Länge) ist der Einsen&ndash;Anteil noch deutlich niedriger.<br>
+
<u>Remarks:</u>
 +
#In the left graph,&nbsp; the proportion of&nbsp; "ones"&nbsp; is&nbsp; $32/60 \approx  53.3\%$.&nbsp;
 +
#In the right graph the share of&nbsp; "ones"&nbsp; is lower with&nbsp; $36/108 = 33.3\%$.
 +
#For LDPC codes&nbsp; $($relevant for practice &nbsp; &rArr; &nbsp; with long length$)$,&nbsp; the share of&nbsp; "ones"&nbsp; is even significantly lower.<br>
  
<i>Hinweis</i>: Auf der nächsten Seite wird auf diese Grafik noch mehrmals Bezug genommen.{{end}}<br>
 
  
== Einige Charakteristika der LDPC–Codes (2) ==
+
We now analyze the two parity-check matrices using the rate and Hamming weight:<br>
<br>
+
*The rate of the Hamming code under consideration&nbsp; $($left graph$)$&nbsp; is&nbsp; $R = k/n = 11/15 \approx 0.733$.&nbsp; The Hamming weight of each of the four rows is&nbsp; $w_{\rm R}= 8$,&nbsp; while the Hamming weights&nbsp; $w_{\rm C}(i)$&nbsp; of the columns vary between&nbsp; $1$&nbsp; and&nbsp; $4$.&nbsp; For the columns index variable here: &nbsp; $1 &#8804; i &#8804; 15$.
Wir analysieren nun die beiden Prüfmatrizen anhand der Rate und des Hamming&ndash;Gewichts.<br>
 
 
 
[[File:P ID3066 KC T 4 4 S1a v2.png|Prüfmatrizen eines Hamming–Codes und eines LDPC–Codes|class=fit]]<br>
 
 
 
*Die Rate des betrachteten Hamming&ndash;Codes (linke Grafik) ist <i>R</i> = <i>k</i>/<i>n</i> = 11/15 &asymp; 0.733. Das Hamming&ndash;Gewicht einer jeden der vier Zeilen ist <i>w</i><sub>Z</sub> = 8, während die Hamming&ndash;Gewichte <i>w</i><sub>S</sub>(<i>i</i>) der Spalten zwischen 1 und 4 variieren. Für die Spalten&ndash;Laufvariable gilt hier: 1 &#8804; <i>i</i> &#8804; 15.
 
  
*Beim betrachteten LDPC&ndash;Code gibt es in allen Zeilen vier Einsen &nbsp;&#8658;&nbsp; <i>w</i><sub>Z</sub> = 4 und in allen Spalten drei Einsen &#8658; <i>w</i><sub>S</sub> = 3. Die Codebezeichnung <b>(<i>w</i><sub>Z</sub>, <i>w</i><sub>S</sub>) LDPC&ndash;Code</b> verwendet genau diese Parameter. Beachten Sie die unterschiedliche Nomenklatur zum &bdquo;(<i>n</i>, <i>k</i>, <i>m</i>) Hamming&ndash;Code&rdquo;.
+
*In the considered LDPC code there are four&nbsp; "ones"&nbsp; in all rows &nbsp; &#8658; &nbsp; $w_{\rm R} = 4$&nbsp; and three&nbsp; "ones"&nbsp; in all columns &nbsp; &#8658; &nbsp; $w_{\rm C} = 3$.&nbsp; The code label&nbsp; $(w_{\rm R}, \ w_{\rm C})$&nbsp; of LDPC code uses exactly these parameters.&nbsp; Note the different nomenclature to the&nbsp; "$(n, \ k, \ m)$&nbsp; Hamming code".
  
*Man spricht hier von einem <b>regulären LDPC&ndash;Code</b>, da alle Zeilengewichte <i>w</i><sub>Z</sub>(<i>j</i>) für 1 &#8804; <i>j</i> &#8804; <i>m</i> konstant gleich <i>w</i><sub>Z</sub> sind und auch alle Spaltengewichte (mit den Indizes 1 &#8804; <i>i</i> &#8804; <i>n</i>) gleich sind: <i>w</i><sub>S</sub>(<i>i</i>) = <i>w</i><sub>S</sub> = const. Ist diese Bedingung nicht erfüllt, so liegt ein <i>irregulärer LDPC&ndash;Code</i> vor.
+
*This is called a&nbsp; &raquo;<b>regular LDPC code</b>&laquo;,&nbsp; since all row weights&nbsp; $w_{\rm R}(j)$&nbsp; for&nbsp; $1 &#8804; j &#8804; m$&nbsp; are constant equal&nbsp; $w_{\rm R}$ and also all column weights&nbsp; $($with indices&nbsp; $1 &#8804; i &#8804; n)$&nbsp; are equal: &nbsp;  $w_{\rm C}(i) = w_{\rm C} = {\rm const.}$&nbsp; If this condition is not met,&nbsp; there is an&nbsp; "irregular LDPC code".}}<br>
  
*Für die Coderate kann man allgemein (also, wenn <i>k</i> nicht bekannt ist) nur eine Schranke angeben: <b><i>R</i> &#8805; 1 &ndash; <i>w</i><sub>S</sub>/<i>w</i><sub>Z</sub></b>. Das Gleichheitszeichen gilt dann, wenn alle Zeilen von <b>H</b> linear unabhängig sind &nbsp;&#8658;&nbsp; <i>m</i> = <i>n</i> &ndash; <i>k</i>. Dann ergibt sich die  herkömmliche Gleichung: <i>R</i> = 1 &ndash; <i>w</i><sub>S</sub>/<i>w</i><sub>Z</sub> = 1 &ndash; <i>m</i>/<i>n</i> = <i>k</i>/<i>n</i>.
+
{{BlaueBox|TEXT=
 +
$\text{Feature of LDPC codes}$&nbsp; 
 +
*For the code rate,&nbsp; one can generally&nbsp; $($if&nbsp; $k$&nbsp; is not known$)$&nbsp; specify only a bound: &nbsp;
 +
:$$R &#8805; 1 - w_{\rm C}/w_{\rm R}.$$
 +
*The equal sign holds if all rows of&nbsp; $\mathbf{H}$&nbsp; are linearly independent &nbsp; &#8658; &nbsp; $m = n \, &ndash; k$.&nbsp; Then the conventional equation is obtained:
 +
:$$R = 1 -  w_{\rm C}/w_{\rm R} = 1 - m/n = k/n.$$
  
*Dagegen gilt für die Coderate eines irregulären LDPC&ndash;Codes und auch für den links skizzierten (15, 11, 4) Hammingcode:
+
*In contrast,&nbsp; for the code rate of an irregular LDPC code and also for the &nbsp;$(15, 11, 4)$&nbsp; Hamming code sketched on the left:
  
::<math>R \ge 1 - \frac{{\rm E}[w_{\rm S}]}{{\rm E}[w_{\rm Z}]}
+
:$$R \ge 1 - \frac{ {\rm E}[w_{\rm C}]}{ {\rm E}[w_{\rm R}]}
\hspace{0.5cm}{\rm mit}\hspace{0.5cm}
+
\hspace{0.5cm}{\rm with}\hspace{0.5cm}
{\rm E}[w_{\rm S}] =\frac{1}{n} \cdot  \sum_{i = 1}^{n}w_{\rm S}(i)
+
{\rm E}[w_{\rm C}] =\frac{1}{n} \cdot  \sum_{i = 1}^{n}w_{\rm C}(i)
\hspace{0.5cm}{\rm und}\hspace{0.5cm}
+
\hspace{0.5cm}{\rm and}\hspace{0.5cm}
{\rm E}[w_{\rm Z}] =\frac{1}{m} \cdot  \sum_{j = 1}^{ m}w_{\rm Z}(j)
+
{\rm E}[w_{\rm R}] =\frac{1}{m} \cdot  \sum_{j = 1}^{ m}w_{\rm R}(j)
\hspace{0.05cm}.</math>
+
\hspace{0.05cm}.$$
  
:Da beim Hamming&ndash;Code die <i>m</i> = <i>n</i> &ndash; <i>k</i> Prüfgleichungen linear voneinander unabhängig sind, kann das &bdquo;&#8805;&rdquo;&ndash;Zeichen durch das Gleichheitszeichen ersetzt werden, was gleichzeitig <i>R</i> = <i>k</i>/<i>n</i> bedeutet.<br><br>
+
*In Hamming codes&nbsp; the&nbsp; $m = n - k$&nbsp; parity-check equations are linearly independent,&nbsp; the &nbsp;"$&#8805;$" sign can be replaced by the &nbsp;"$=$" sign, which simultaneously means:
 +
:$$R = k/n.$$}}<br>
  
Weitere Informationen zu diesem Thema finden Sie in Aufgabe A4.11 und in Aufgabe Z4.11
+
For more information on this topic,&nbsp; see&nbsp; [[Aufgaben:Exercise_4.11:_Analysis_of_Parity-check_Matrices| "Exercise 4.11"]]&nbsp; and&nbsp; [[Aufgaben:Exercise_4.11Z:_Code_Rate_from_the_Parity-check_Matrix| "Exercise 4.11Z"]].
  
== Zweiteilige LDPC–Graphenrepräsentation – Tanner–Graph (1) ==
+
== Two-part LDPC graph representation - Tanner graph ==
 
<br>
 
<br>
Alle wesentlichen Merkmale eines LDPC&ndash;Codes sind in der Prüfmatrix <b>H</b> = (<i>h<sub>j,i</sub></i>) enthalten und lassen sich durch einen so genannten <span style="font-weight: bold;">Tanner&ndash;Graphen</span> darstellen. Es handelt sich um eine <i>Bipartite Graph Representation</i>, wobei die deutsche Übersetzung von &bdquo;bipartite&rdquo; in etwa &bdquo;zweiteilig&rdquo; lautet. Bevor wir beispielhafte Tanner&ndash;Graphen genauer betrachten und analysieren, müssen zuerst noch einige geeignete Beschreibungsgrößen definiert werden:
+
All essential features of a LDPC ode are contained in the parity-check matrix&nbsp; $\mathbf{H} = (h_{j,\hspace{0.05cm}i})$&nbsp; and can be represented by a so-called &nbsp;"Tanner graph".&nbsp; It is a &nbsp;"bipartite graph representation".&nbsp; Before we examine and analyze exemplary Tanner graphs more exactly,&nbsp; first still some suitable description variables must be defined:
*Die <i>n</i> Spalten der Prüfmatrix <b>H</b> stehen jeweils für ein Codewortbit. Da jedes Codewortbit sowohl ein Informationsbit als auch ein Prüfbit sein kann, hat sich hierfür die neutrale Bezeichnung <b>Varibale Node</b> (VN) durchgesetzt. Das <i>i</i>&ndash;te Codewortbit wird <i>V<sub>i</sub></i> genannt und die Menge aller <i>Variable Nodes</i> (VNs) ist {<i>V</i><sub>1</sub>, ..., <i>V<sub>i</sub></i>, ..., <i>V<sub>n</sub></i>}.<br>
+
*The&nbsp; $n$&nbsp; columns of the parity-check matrix&nbsp; $\mathbf{H}$&nbsp; each represent one bit of a code word.&nbsp; Since each code word bit can be both an information bit and a parity bit,&nbsp; the neutral name &nbsp; &raquo;<b>variable node </b>&laquo;&nbsp; $\rm (VN)$&nbsp; has become accepted for this.&nbsp; The&nbsp; $i$<sup>th</sup>&nbsp; code word bit is called&nbsp; $V_i$&nbsp; and the set of all&nbsp; variable nodes is&nbsp; $\{V_1, \text{...}\hspace{0.05cm} , \ V_i, \ \text{...}\hspace{0.05cm} , \ V_n\}$.<br>
 
 
*Die <i>m</i> Zeilen von <b>H</b> beschreiben jeweils eine Prüfgleichung (englisch: <i>Parity&ndash;check Equation</i>). Wir bezeichnen im folgenden eine solche Prüfgleichung als <b>Check Node</b> (CN). Die Menge aller <i>Check Nodes</i> (CNs) ist {<i>C</i><sub>1</sub>, ..., <i>C<sub>j</sub></i>, ..., <i>C<sub>m</sub></i>}, wobei <i>C<sub>j</sub></i> die Prüfgleichung der <i>j</i>&ndash;ten Zeile angibt.<br>
 
  
*Im Tanner&ndash;Graphen werden die <i>n</i> <i>Variable Nodes</i> <i>V<sub>i</sub></i> als Kreise und die <i>m</i> <i>Check Nodes</i> <i>C<sub>j</sub></i> als Quadrate dargestellt. Ist das Matrixelement in Zeile <i>j</i> und Spalte <i>i</i> &#8658; <i>h<sub>j,i</sub></i> = 1, so gibt es eine Verbindungslinie (englisch: <i>Edge</i>) zwischen dem <i>Variable Node</i> <i>V<sub>i</sub></i> und dem <i>Check Node</i> <i>C<sub>j</sub></i>.<br><br>
+
*The&nbsp; $m$&nbsp; rows of&nbsp; $\mathbf{H}$&nbsp; each describe a parity-check equation.&nbsp; We refer to such a parity-check equation  in the following as &nbsp; &raquo;<b>check node</b>&laquo;&nbsp; $\rm (CN)$.&nbsp; The set of all&nbsp; check nodes  is&nbsp; $\{C_1, \ \text{...}\hspace{0.05cm} , \ C_j, \ \text{...}\hspace{0.05cm} , \ C_m\}$,&nbsp; where&nbsp; $C_j$&nbsp; denotes the parity-check equation of the&nbsp; $j$<sup>th</sup>&nbsp; row.<br>
  
{{Beispiel}}''':'''
+
*In the Tanner graph, the&nbsp; $n$&nbsp; variable nodes&nbsp; $V_i$&nbsp; are represented as circles and the&nbsp; $m$&nbsp; check nodes&nbsp; $C_j$&nbsp; as squares.&nbsp; If the&nbsp; $\mathbf{H}$&nbsp; matrix element in row&nbsp; $j$&nbsp; and column&nbsp; $i$&nbsp; is $h_{j,\hspace{0.05cm}i} = 1$,&nbsp; there is an edge between the variable node&nbsp; $V_i$&nbsp; and the check node&nbsp; $C_j$.<br><br>
[[File:P ID3069 KC T 4 4 S2a v3.png|rahmenlos|rechts|Einfaches Beispiel für einen Tanner–Graphen|class=fit]] Sie  sehen rechts einen beispielhaften Tannergraphen zur Verdeutlichung obiger Begriffe mit
 
*den <i>Variable Nodes</i> (kurz: VNs) <i>V</i><sub>1</sub> bis <i>V</i><sub>4</sub>, und<br>
 
  
*den <i>Check Nodes</i> (kurz: CNs)  <i>C</i><sub>1</sub> bis <i>C</i><sub>3</sub>.<br><br>
+
{{GraueBox|TEXT=
 +
[[File:P ID3069 KC T 4 4 S2a v3.png|right|frame|Example of a Tanner graph|class=fit]] 
 +
$\text{Example 2:}$&nbsp; To clarify the above terms,&nbsp; an exemplary Tanner graph is given on the right with
 +
*the variable nodes&nbsp; $V_1$&nbsp; to&nbsp; $V_4$,&nbsp; and<br>
  
Der zugehörige Code hat allerdings keinerlei praktische Bedeutung. Man erkennt aus der Grafik:
+
*the check nodes&nbsp; $C_1$&nbsp; to&nbsp; $C_3$.<br><br>
*Die Codelänge ist <i>n</i> = 4 und es gibt <i>m</i> = 3 Prüfgleichungen. Damit hat die Prüfmatrix <b>H</b> die Dimension 3&times;4.<br>
 
  
*Es gibt insgesamt sechs Verbindungslinien (englisch: <i>Edges</i>). Damit sind sechs der zwölf Elemente <i>h<sub>j,i</sub></i> von <b>H</b> Einsen.<br>
+
However,&nbsp; the associated code has no practical meaning.  
  
*Bei jedem <i>Check Node</i> kommen zwei Linien an. Das bedeutet, dass die Hamming&ndash;Gewichte aller Zeilen gleich sind: <i>w</i><sub>S</sub>(<i>j</i>) = 2 = <i>w</i><sub>S</sub>.<br>
+
One can see from the graph:
 +
#The code length is&nbsp; $n = 4$&nbsp; and there are&nbsp; $m = 3$&nbsp; parity-check equations.&nbsp;
 +
#Thus the parity-check matrix&nbsp; $\mathbf{H}$&nbsp; has dimension&nbsp; $3&times;4$.<br>
 +
#There are six edges in total.&nbsp; Thus six of the twelve elements&nbsp; $h_{j,\hspace{0.05cm}i}$&nbsp; of matrix&nbsp; $\mathbf{H}$&nbsp; are&nbsp; "ones".<br>
 +
#At each check node two lines arrive &nbsp; &rArr; &nbsp; the Hamming weights of all rows are equal:  &nbsp; $w_{\rm R}(j) = 2 = w_{\rm R}$.<br>
 +
#From the nodes&nbsp; $V_1$&nbsp; and&nbsp; $V_4$&nbsp; there is only one transition to a check node each,&nbsp; from&nbsp; $V_2$&nbsp; and&nbsp; $V_3$,&nbsp; however,&nbsp; there are two.
 +
#For this reason,&nbsp; it is an&nbsp; "irregular code".<br><br>
  
*Von den Knoten  <i>V</i><sub>1</sub> und <i>V</i><sub>4</sub> gibt es jeweils nur einen Übergang zu einem <i>Check Node</i>, von <i>V</i><sub>2</sub> und <i>V</i><sub>3</sub> dagegen zwei. Aus diesem Grund handelt es sich um einen <i>irregulären Code</i>.<br><br>
+
Accordingly,&nbsp; the parity-check matrix is:
  
Die Prüfmatrix lautet demnach:
+
::<math>{ \boldsymbol{\rm H} } =
 
 
:<math>{ \boldsymbol{\rm H}} =
 
 
\begin{pmatrix}
 
\begin{pmatrix}
 
1 &1 &0 &0\\  
 
1 &1 &0 &0\\  
 
0 &1 &1 &0\\   
 
0 &1 &1 &0\\   
 
0 &0 &1 &1  
 
0 &0 &1 &1  
\end{pmatrix}\hspace{0.05cm}.</math>{{end}}<br>
+
\end{pmatrix}\hspace{0.05cm}.</math>}}<br>
 +
 
 +
{{GraueBox|TEXT= 
 +
$\text{Example 3:}$&nbsp; Now a more practical example follows.&nbsp; In&nbsp; [[Aufgaben:Exercise_4.11:_Analysis_of_Parity-check_Matrices|"Exercise 4.11"]]&nbsp; two parity-check matrices were analyzed:
 +
[[File:EN_KC_T_4_4_S2b_v1.png|right|frame|Tanner graph of a regular and an irregular code|class=fit]]
  
Auf der nächsten Seite folgt ein praxisrelevanteres Beispiel.<br>
+
&rArr; &nbsp; The encoder corresponding to the matrix&nbsp; $\mathbf{H}_1$&nbsp; is systematic.
 +
#The code parameters are&nbsp; $n = 8, \ k = 4,\ m = 4$&nbsp; &#8658; &nbsp; rate&nbsp; $R=1/2$.
 +
#The code is irregular because the Hamming weights are not the same for all columns.
 +
#In the graph,&nbsp; this&nbsp; "irregular&nbsp; $\mathbf{H}$ matrix"&nbsp; is given above.<br>
  
== Zweiteilige LDPC–Graphenrepräsentation – Tanner–Graph (2) ==
 
<br>
 
{{Beispiel}}''':''' In Aufgabe A4.11 wurden zwei Prüfmatrizen analysiert:
 
*Der Coder entsprechend der Matrix <b>H</b><sub>1</sub> ist systematisch. Die Codeparameter sind <i>n</i> = 8, <i>k</i>&nbsp;=&nbsp;4 und <i>m</i> = 4 &#8658; Rate 1/2. Der Code ist irregulär, da die Hamming&ndash;Gewichte nicht für alle Spalten gleich sind. In der folgenden Grafik ist diese &bdquo;irreguläre <b>H</b>&ndash;Matrix&rdquo; oben angegeben.<br>
 
  
*Unten angegeben ist die &bdquo;reguläre <b>H</b>&ndash;Matrix&rdquo; entsprechend der Matrix <b>H</b><sub>3</sub> in Aufgabe A4.11. Die Zeilen sind Linearkombinationen der oberen Matrix. Für diesen nicht systematischen Coder gilt mit <i>w</i><sub>S</sub> = 2 und <i>w</i><sub>Z</sub> = 4 ebenfalls:
+
&rArr; &nbsp; Bottom indicated is the "regular&nbsp; $\mathbf{H}$ matrix" corresponding to the matrix&nbsp; $\mathbf{H}_3$&nbsp; from Exercise 4.11.
 +
#The rows are linear combinations of the upper matrix&nbsp; $\mathbf{H}_1$.
 +
#For this non-systematic encoder holds&nbsp; $w_{\rm C} = 2, \ w_{\rm R} = 4$.
 +
#Thus for the rate: &nbsp; $R \ge 1 - w_{\rm C}/w_{\rm R} = 1/2$.
 +
<br clear=all>
 +
On the right you see the corresponding Tanner graphs:
 +
*The left Tanner graph refers to the upper&nbsp;  $($irregular$)$&nbsp; matrix.&nbsp; The eight variable nodes&nbsp; $V_i$&nbsp; are connected to the four check nodes&nbsp;  $C_j$&nbsp; if the element in row&nbsp; $j$&nbsp; and column&nbsp; $i$&nbsp; is a&nbsp; "one" $\hspace{0.15cm} &#8658; \hspace{0.15cm} h_{j,\hspace{0.05cm}i}=1$.<br>
  
::<math>R \ge 1 - \frac{w_{\rm S}}{w_{\rm Z}}
+
*This graph is not particularly well suited for&nbsp; [[Channel_Coding/The_Basics_of_Low-Density_Parity_Check_Codes#Iterative_decoding_of_LDPC_codes| $\text{iterative symbol-wise decoding}$]].&nbsp; The variable nodes&nbsp; $V_5, \ \text{...}\hspace{0.05cm} , \ V_8$&nbsp; are each associated with only one check node,&nbsp; which provides no information for decoding.<br>
= 1 - \frac{2}{4} = 1/2
 
\hspace{0.05cm}.</math>
 
  
[[File:P ID3071 KC T 4 4 S2b v4.png|Tanner–Graph eines regulären und eines irregelären Codes|class=fit]]<br>
+
*In the right Tanner graph for the regular code,&nbsp; you can see that here from each variable node&nbsp; $V_i$&nbsp; two edges come off and from each check node&nbsp; $C_j$&nbsp; their four.&nbsp; This allows information to be gained during decoding in each iteration loop.<br>
  
Die Grafik zeigt die zugehörigen Tanner&ndash;Graphen:
+
*It can also be seen that here,&nbsp; in the transition from the irregular to the equivalent regular code,&nbsp; the proportion of&nbsp; "ones"&nbsp; increases,&nbsp; in the example from&nbsp; $37.5\%$&nbsp; to $50\%$.&nbsp; However,&nbsp; this statement cannot be generalized.}}<br>
*Der linke Graph bezieht sich auf die irreguläre Matrix. Die acht <i>Variable Nodes</i> (abgekürzt VNs) <i>V<sub>i</sub></i> sind mit den vier <i>Check Nodes</i> (abgekürzt CNs) <i>C<sub>j</sub></i> verbunden, falls das Element in Zeile <i>j</i> und Spalte <i>i</i> &nbsp;&#8658;&nbsp; <i>h<sub>j,i</sub></i> gleich 1 ist. Andernfalls  (falls <i>h<sub>j,i</sub></i> = 0) besteht keine Verbindung.<br>
 
  
*Der links dargestellte  Graph ist für die iterative symbolweise Decodierung nicht sonderlich gut geeignet. Die VNs <i>V</i><sub>5</sub>, ...., <i>V</i><sub>8</sub> sind jeweils nur mit einem CN verbunden, was für die Decodierung keinerlei Information liefert.<br>
+
== Iterative decoding of LDPC codes ==
 +
<br>
 +
As an example of iterative LDPC decoding,&nbsp; the so-called&nbsp; "message passing algorithm"&nbsp; is now described.&nbsp; We illustrate this using the right-hand Tanner graph in&nbsp; [[Channel_Coding/The_Basics_of_Low-Density_Parity_Check_Codes#Two-part_LDPC_graph_representation_-_Tanner_graph|$\text{Example 3}$]]&nbsp; in the previous section and thus for the regular parity-check matrix given there.<br>
  
*Im rechten Tanner&ndash;Graph für den regulären Code erkennt man, dass hier von jedem VN <i>V<sub>i</sub></i> zwei Verbindungslinien (englisch: <i>Edges</i>) abgehen und von jedem CN <i>C<sub>j</sub></i> deren vier. Damit ist bei der Decodierung in jeder Iterationsschleife ein Informationsgewinn möglich.<br>
+
{{BlaueBox|TEXT= 
 +
$\text{Principle:}$&nbsp; In the&nbsp; &raquo;<b>message passing algorithm</b>&laquo;&nbsp; there is an alternating&nbsp; $($or iterative$)$&nbsp; exchange of information between the  variable nodes&nbsp; $V_1, \ \text{...}\hspace{0.05cm} , \ V_n$&nbsp; and the check nodes&nbsp;  $C_1 , \ \text{...}\hspace{0.05cm} , \ C_m$.}}<br>
  
*Man erkennt zudem, dass hier beim Übergang vom irregulären zum äquivalenten regulären Code der Einsen&ndash;Anteil zunimmt, im Beispiel von 37.5% auf 50%. Diese Aussage kann allerdings nicht verallgemeinert werden.{{end}}<br>
+
[[File:EN_KC_T_4_4_S3a_v1.png|right|frame|Iterative decoding of LDPC codes|class=fit]]
  
== Iterative Decodierung von LDPC–Codes (1) ==
+
For the regular LDPC code under consideration:
<br>
+
#There are&nbsp; $n = 8$&nbsp; variable nodes and&nbsp; $m = 4$&nbsp; check nodes.
Als Beispiel für die iterative LDPC&ndash;Decodierung wird nun der sog. <b>Message&ndash;passing Algorithm</b> beschrieben. Wir verdeutlichen diesen anhand des rechten Tanner&ndash;Graphen auf der vorherigen Seite und damit für die dort angegebene reguläre Prüfmatrix.<br>
+
# From each variable node go&nbsp; $d_{\rm V} = 2$&nbsp; connecting lines to a check node  and each check node  is connected to&nbsp; $d_{\rm C} = 4$&nbsp; variable nodes.
 +
#The variable node degree&nbsp; $d_{\rm V}$&nbsp; is equal to the Hamming weight of each column&nbsp; $(w_{\rm C})$&nbsp; and for the check node degree  holds:&nbsp; $d_{\rm C} = w_{\rm R}$&nbsp; (Hamming weight of each row).
 +
#In the following description we use the terms&nbsp; "neighbors of a variable node" &nbsp; &#8658; &nbsp; $N(V_i)$&nbsp; and&nbsp; "neighbors of a check node" &nbsp; &#8658; &nbsp; $N(C_j)$.
 +
#We restrict ourselves here to implicit definitions:
  
Bei diesem Decodieralgorithmus  erfolgt abwechselnd (oder iterativ) ein Informationsaustausch zwischen den <i>Variable Nodes </i> (VNs) <i>V</i><sub>1</sub>, ... , <i>V<sub>n</sub></i> und den <i>Check Nodes </i> (CNs) <i>C</i><sub>1</sub>, ... , <i>C<sub>m</sub></i>.<br>
+
::$$N(V_1) = \{ C_1, C_2\}\hspace{0.05cm},$$
 +
::$$ N(V_2) = \{ C_3, C_4\},$$
 +
:::::$$\text{........}$$
 +
::$$N(V_8) = \{ C_1, C_4\},$$
 +
::$$N(C_1) = \{ V_1, V_4, V_5, V_8\},$$
 +
:::::$$\text{........}$$
 +
::$$N(C_4) = \{ V_2, V_3, V_6, V_8\}.$$
  
[[File:P ID3075 KC T 4 4 S3a v1.png|Iterative Decodierung von LDPC–Codes|class=fit]]<br>
+
{{GraueBox|TEXT=
 +
[[File:P ID3085 KC T 4 4 S3c v2.png|right|frame|Information exchange between variable and check nodes]]
 +
$\text{Example 4:}$The sketch from&nbsp; [Liv15]<ref name='Liv15'>Liva, G.:&nbsp; Channels Codes for Iterative Decoding.&nbsp; Lecture notes, Chair of Communications Engineering, TU Munich and DLR Oberpfaffenhofen, 2015.</ref>&nbsp; shows the information exchange
 +
*between the yariable node&nbsp; $V_i$&nbsp; and the check node&nbsp; $C_j$,
  
Für das betrachtete Beispiel gilt:
+
*expressed by&nbsp; [[Channel_Coding/Soft-in_Soft-Out_Decoder#Reliability_information_-_Log_likelihood_ratio| $\text{log likelihood ratios}$]]    &nbsp; $(L$&nbsp; values for short$)$.
*Es gibt <i>n</i> = 8 VNs und <i>m</i> = 4 CNs. Da ein regulärer LDPC&ndash;Code vorliegt, gehen von jedem VN <i>d</i><sub>V</sub> = 2 Verbindungslinien zu einem CN und jeder CN ist mit <i>d</i><sub>C</sub> = 4 VNs verbunden.
 
  
*Der <i>Variable Node Degree</i> <i>d</i><sub>V</sub> ist gleich dem Hamming&ndash;Gewicht einer jeden Spalte (<i>w</i><sub>S</sub>) und für den <i>Check Node Degree</i> gilt: <i>d</i><sub>C</sub> = <i>w</i><sub>Z</sub> (Hamming&ndash;Gewicht einer jeden Zeile).
 
  
*In der folgenden Beschreibung verwenden wir auch die Begriffe <i>Nachbarn eines VN</i> &nbsp;&#8658;&nbsp; <i>N</i>(<i>V<sub>i</sub></i>) sowie <i>Nachbarn eines CN</i> &nbsp;&#8658;&nbsp; <i>N</i>(<i>C<sub>j</sub></i>), wobei wir uns hier auf  implizite Definitionen beschränken:
+
The exchange of information happens in two directions:
 +
*$L(V_i &#8594; C_j)$:&nbsp; Extrinsic information from&nbsp; $V_i$&nbsp; point of view, &nbsp; a-priori information from&nbsp; $C_j$&nbsp; point of view.<br>
  
::<math>N(V_1) \hspace{-0.15cm}  =  \hspace{-0.15cm} \{ C_1, C_2\}\hspace{0.05cm}, \hspace{0.3cm}N(V_1) = \{ C_3, C_4\}\hspace{0.05cm}, \hspace{0.05cm}.\hspace{0.05cm}.\hspace{0.05cm}.\hspace{0.15cm},\hspace{0.3cm}N(V_8) = \{ C_1, C_4\}\hspace{0.05cm},</math>
+
*<b>$L(C_j &#8594; V_i)$</b>:&nbsp; Extrinsic information from&nbsp; $C_j$&nbsp; point of view, &nbsp;a-priori information from&nbsp; $V_i$&nbsp; point of view.}}
::<math>N(C_1) \hspace{-0.15cm}  =  \hspace{-0.15cm} \{ V_1, V_4, V_5, V_8\}\hspace{0.05cm}, \hspace{0.05cm}.\hspace{0.05cm}.\hspace{0.05cm}.\hspace{0.15cm}\hspace{0.05cm}, \hspace{0.3cm}N(C_4) = \{ V_2, V_3, V_6, V_8\}\hspace{0.05cm}.</math>
 
  
[[File:P ID3085 KC T 4 4 S3c v2.png|rahmenlos|rechts|Informationsaustausch zwischen VNs und CNs]]
 
  
Die Skizze aus [Liv15]<ref>Liva, G.: ''Channels Codes for Iterative Decoding.'' Vorlesungsmanuskript, Lehrstuhl für Nachrichtentechnik, TU München und DLR Oberpfaffenhofen, 2015.</ref> zeigt den Austausch von Information zwischen dem <i>Variable Node</i> <i>V<sub>i</sub></i> und dem <i>Check Node</i>  <i>C<sub>j</sub></i> &ndash; ausgedrückt durch Log&ndash;Likelihood Ratios (kurz: <i>L</i>&ndash;Werte). Der Informationsaustausch geschieht in zwei Richtungen:
+
The description of the decoding algorithm continues:<br>
*<b><i>L</i>(<i>V<sub>i</sub></i> &#8594; <i>C<sub>j</sub></i>)</b>: Extrinsische Information aus Sicht von <i>V<sub>i</sub></i>, Apriori&ndash;Information  aus Sicht von <i>C<sub>j</sub></i>.<br>
 
  
*<b><i>L</i>(<i>C<sub>j</sub></i> &#8594; <i>V<sub>i</sub></i>)</b>: Extrinsische Information aus Sicht von <i>C<sub>j</sub></i>, Apriori&ndash;Information  aus Sicht von <i>V<sub>i</sub></i>.<br>
+
<b>(1)&nbsp; Initialization:</b>&nbsp; At the beginning of decoding,&nbsp; the variable nodes receive no a-priori information from the check nodes,&nbsp; and it applies for&nbsp; $1 &#8804; i &#8804; n \text{:}$ &nbsp;
 +
:$$L(V_i &#8594; C_j) = L_{\rm K}(V_i).$$
  
== Iterative Decodierung von LDPC–Codes (2) ==
+
As can be seen from the graph at the top of the page,&nbsp; these channel log likelihood values&nbsp; $L_{\rm K}(V_i)$&nbsp; result from the received values&nbsp; $y_i$.<br><br>
<br>
 
Die Beschreibung des Decodieralgorithmus wird fortgesetzt:<br>
 
  
<b>Initialisierung:</b> Zu Beginn der Decodierung erhalten die <i>Variable Nodes</i> (VNs) keine Apriori&ndash;Information von den <i>Check Nodes</i> (CNs), und es gilt für 1 &#8804; <i>i</i> &#8804; <i>n</i>: <i>L</i>(<i>V<sub>i</sub></i> &#8594; <i>C<sub>j</sub></i>) = <i>L</i><sub>K</sub>(<i>V<sub>i</sub></i>). Wie aus der letzten Grafik ersichtlich, ergeben sich diese Kanal&ndash;<i>L</i>&ndash;Werte <i>L</i><sub>K</sub>(<i>V<sub>i</sub></i>) aus den Empfangswerten <i>y<sub>i</sub></i>.<br><br>
+
<b>(2)&nbsp; Check Node Decoder (CND)</b>:&nbsp; Each node&nbsp; $C_j$&nbsp; represents one parity-check equation.&nbsp; Thus&nbsp; $C_1$&nbsp; represents the equation&nbsp; $V_1 + V_4 + V_5 + V_8 = 0$.&nbsp; One can see the connection to extrinsic information in the symbol-wise decoding of the single parity&ndash;check code.  
  
<b>Check Node Decoder</b>: Jeder Knoten <i>C<sub>j</sub></i> repräsentiert eine Prüfgleichung. So steht <i>C</i><sub>1</sub> für &bdquo;<i>V</i><sub>1</sub> + <i>V</i><sub>4</sub> + <i>V</i><sub>5</sub> + <i>V</i><sub>8</sub> = 0&rdquo;.  Man erkennt den Zusammenhang zur extrinsischen Information bei der symbolweisen Decodierung des <i>Single Parity&ndash;check Codes</i>. In Analogie zu Kapitel 4.1 und Aufgabe A4.4 gilt somit  für den extrinsischen <i>L</i>&ndash;Wert von <i>C<sub>j</sub></i> und gleichzeitig für die Apriori&ndash;Information bezüglich <i>V<sub>i</sub></i>:
+
In analogy to the section&nbsp; [[Channel_Coding/Soft-in_Soft-Out_Decoder#Calculation_of_extrinsic_log_likelihood_ratios|"Calculation of extrinsic log likelihood ratios"]]&nbsp; and to&nbsp; [[Aufgaben:Exercise_4.4:_Extrinsic_L-values_at_SPC|"Exercise 4.4"]]&nbsp; thus applies to the extrinsic log likelihood value of&nbsp; $C_j$&nbsp; and at the same time to the a-priori information concerning&nbsp; $V_i$:
  
:<math>L(C_j \rightarrow V_i) = 2 \cdot  {\rm tanh}^{-1}\left  [ \prod\limits_{V \in N(C_j)\hspace{0.05cm},\hspace{0.1cm} V \ne V_i} \hspace{-0.35cm}{\rm tanh}\left [L(V \rightarrow C_j \right ] /2) \right ]
+
::<math>L(C_j \rightarrow V_i) = 2 \cdot  {\rm tanh}^{-1}\left  [ \prod\limits_{V \in N(C_j)\hspace{0.05cm},\hspace{0.1cm} V \ne V_i} \hspace{-0.35cm}{\rm tanh}\left [L(V \rightarrow C_j \right ] /2) \right ]
 
  \hspace{0.05cm}.</math>
 
  \hspace{0.05cm}.</math>
  
<b>Variable Node Decoder</b>: Im Gegensatz zum <i>Check Node Decoder</i> (CND) besteht beim <i>Variable Node Decoder</i> (VND) eine Verwandtschaft zur Decodierung eines <i>Repetition Codes</i>, weil alle mit <i>V<sub>i</sub></i> verbundenen <i>Check Nodes</i> <i>C<sub>j</sub></i> demselben Bit  entsprechen &nbsp;&#8658;&nbsp; dieses Bit wird quasi  <i>d</i><sub>V</sub> mal wiederholt.<br>
 
  
In Analogie zu Kapitel 4.1 gilt für den extrinsischen <i>L</i>&ndash;Wert von <i>V<sub>i</sub></i> und gleichzeitig für die Apriori&ndash;Information bezüglich <i>C<sub>j</sub></i>:
+
<b>(3)&nbsp; Variable Node Decoder (VND)</b>:&nbsp; In contrast to the check node decoder,&nbsp; the variable node decoder is related to the decoding of a repetition code because all check nodes connected to&nbsp; $V_i$&nbsp; correspond to the same bit&nbsp; $C_j$&nbsp; &#8658; &nbsp; this bit is quasi repeated&nbsp; $d_{\rm V}$&nbsp; times.<br>
  
:<math>L(V_i  \rightarrow C_j) = L_{\rm K}(V_i) + \hspace{-0.55cm} \sum\limits_{C \hspace{0.05cm}\in\hspace{0.05cm} N(V_i)\hspace{0.05cm},\hspace{0.1cm} C \hspace{0.05cm}\ne\hspace{0.05cm} C_j} \hspace{-0.55cm}L(C \rightarrow V_i)  
+
In analogy to to the section&nbsp; [[Channel_Coding/Soft-in_Soft-Out_Decoder#Calculation_of_extrinsic_log_likelihood_ratios| "Calculation of extrinsic log likelihood ratios"]]&nbsp; applies to the extrinsic log likelihood value of&nbsp; $V_i$&nbsp; and at same time to the a-priori information concerning&nbsp; $C_j$:
 +
[[File:EN_KC_T_4_4_S3b_v4.png|right|frame|Relationship between LDPC decoding and serial turbo decoding |class=fit]]
 +
 
 +
::<math>L(V_i  \rightarrow C_j) = L_{\rm K}(V_i) + \hspace{-0.55cm} \sum\limits_{C \hspace{0.05cm}\in\hspace{0.05cm} N(V_i)\hspace{0.05cm},\hspace{0.1cm} C \hspace{0.05cm}\ne\hspace{0.05cm} C_j} \hspace{-0.55cm}L(C \rightarrow V_i)  
 
  \hspace{0.05cm}.</math>
 
  \hspace{0.05cm}.</math>
  
Das folgende Schaubild des beschriebenen Decodieralgorithmus' für LDPC&ndash;Codes zeigt Ähnlichkeiten mit der Vorgehensweise bei seriell verketteten Turbocodes. Um eine vollständige Analogie zwischen der LDPC&ndash; und der Turbodecodierung herzustellen, ist auch hier zwischen dem <i>Variable Node Decoder</i> (VND) und dem <i>Check Node Decoder</i> (CND) ein <i>Interleaver</i> sowie ein <i>De&ndash;Interleaver</i> eingezeichnet. Da es sich hierbei nicht um reale Systemkomponenten handelt, sondern nur um Analogien, haben wir diese Begriffe in Hochkommata gesetzt.<br>
+
The chart on the right describes the decoding algorithm for LDPC codes.&nbsp;  
 +
*It shows similarities with the decoding method for&nbsp; [[Channel_Coding/The_Basics_of_Turbo_Codes#Serial_concatenated_turbo_codes_.E2.80.93_SCCC| $\text{serial concatenated turbo codes}$]].
  
[[File:P ID3078 KC T 4 4 S3b v3.png|Zusammenhang zwischen  LDPC– und serieller Turbo–Decodierung|class=fit]]<br>
+
*To establish a complete analogy between LDPC and turbo decoding,&nbsp; an&nbsp; "interleaver"&nbsp; as well as a "de-interleaver"&nbsp; are also drawn here between&nbsp; $\rm VND$&nbsp; and&nbsp; $\rm CND$.  
  
== Leistungsfähigkeit der LDPC–Codes (1) ==
+
*Since these are not real system components,&nbsp; but only analogies,&nbsp; we have enclosed these terms in quotation marks.<br>
 +
<br clear=all>
 +
== Performance of regular LDPC codes ==
 
<br>
 
<br>
Wir betrachten nun wie in [Str14] fünf reguläre LDPC&ndash;Codes mit den folgenden Eigenschaften:
+
We now consider as in&nbsp; [Str14]<ref name='Str14'>Strutz, T.:&nbsp; Low-density parity-check codes - An introduction.&nbsp; Lecture material. Hochschule für Telekommunikation, Leipzig, 2014. PDF document.</ref>&nbsp; five regular LDPC codes.&nbsp; The graph shows the bit error rate&nbsp; $\rm (BER)$&nbsp; depending on the AWGN parameter&nbsp; $10 \cdot {\rm lg} \, E_{\rm B}/N_0$.&nbsp; The curve for uncoded transmission is also plotted for comparison.<br>
*Die Prüfmatrizen <b>H</b> weisen jeweils <i>n</i> Spalten und <i>m</i> = <i>n</i>/2 linear voneinander unabhängige Zeilen auf. In jeder Zeile gibt es <i>w</i><sub>Z</sub> = 6 Einsen und in jeder Spalte <i>w</i><sub>S</sub> = 3 Einsen.<br>
+
[[File:EN_KC_T_4_4_S4a_v2.png|right|frame|Bit error rate of LDPC codes]]
  
*Der Einsen&ndash;Anteil beträgt <i>w</i><sub>Z</sub>/<i>n</i> = <i>w</i><sub>S</sub>/<i>m</i>, so dass bei großer Codewortlänge <i>n</i> die Klassifizierung &bdquo;<i>Low&ndash;density</i>&rdquo; gerechtfertigt ist. Für die rote Kurve (<i>n</i> = 2<sup>10</sup>) ist der Einsen&ndash;Anteil 0.6%.<br>
+
These LDPC codes exhibit the following properties:
 +
*The parity-check matrices&nbsp; $\mathbf{H}$&nbsp; each have&nbsp; $n$&nbsp; columns and&nbsp; $m = n/2$&nbsp; linearly independent rows.&nbsp; In each row there are&nbsp; $w_{\rm R} = 6$&nbsp; "ones"&nbsp; and in each column&nbsp; $w_{\rm C} = 3$&nbsp; "ones".<br>
  
*Die Rate aller Codes beträgt <i>R</i> = 1 &ndash; <i>w</i><sub>S</sub>/<i>w</i><sub>Z</sub> = 1/2. Wegen der linearen Unabhängigkeit der Matrixzeilen gilt aber auch  <i>R</i> = <i>k</i>/<i>n</i> mit der Informationswortlänge <i>k</i> = <i>n</i> &ndash; <i>m</i> = <i>n</i>/2.<br><br>
+
*The share of&nbsp; "ones"&nbsp; is&nbsp; $w_{\rm R}/n = w_{\rm C}/m$,&nbsp; so for large code word length&nbsp; $n$&nbsp; the classification "low&ndash;density" is justified.&nbsp; For the red curve&nbsp; $(n = 2^{10})$&nbsp; the share of&nbsp; "ones"&nbsp; is&nbsp; $0.6\%$.<br>
  
[[File:P ID3079 KC T 4 4 S4a v5.png|rahmenlos|rechts|Bitfehlerrate von LDPC–Codes]]
+
*The rate of all codes is&nbsp; $R = 1 - w_{\rm C}/w_{\rm R} = 1/2$.&nbsp; However,&nbsp; because of the linear independence of the matrix rows,&nbsp; $R = k/n$&nbsp; with the information word length&nbsp; $k = n - m = n/2$&nbsp; also holds.<br><br>
  
Die Grafik zeigt die Bitfehlerrate (BER) abhängig vom AWGN&ndash;Parameter 10&nbsp;&middot;&nbsp;lg&nbsp;<i>E</i><sub>B</sub>/<i>N</i><sub>0</sub>. Zum Vergleich ist die Kurve für uncodierte Übertragung  eingezeichnet.<br>
+
From the graph you can see:
 +
*The bit error rate is smaller the longer the code:
 +
:*For&nbsp; $10 \cdot {\rm lg} \, E_{\rm B}/N_0 = 2 \ \rm dB$&nbsp; and&nbsp; $n = 2^8 = 256$&nbsp; we get&nbsp; ${\rm BER} \approx 10^{-2}$.  
 +
:*For&nbsp; $n = 2^{12} = 4096$&nbsp; on the other hand,&nbsp; only&nbsp; ${\rm BER} \approx 2 \cdot 10^{-7}$.<br>
  
Man erkennt:
+
*With&nbsp; $n = 2^{15} = 32768$&nbsp; $($violet curve$)$&nbsp; one needs &nbsp; $10 \cdot {\rm lg} \, E_{\rm B}/N_0 \approx 1.35 \ \rm dB$&nbsp; for&nbsp; ${\rm BER} = 10^{-5}$.
*Die Bitfehlerrate ist um so kleiner, je länger der  Code ist. Für 10 &middot; lg <i>E</i><sub>B</sub>/<i>N</i><sub>0</sub> = 2 dB und <i>n</i> = 2<sup>8</sup> = 256 ergibt sich BER &asymp; 10<sup>&ndash;2</sup>. Für <i>n</i> = 2<sup>12</sup> = 4096 dagegen nur BER &asymp; 2 &middot; 10<sup>&ndash;7</sup>.<br>
+
 +
*The distance from the Shannon bound &nbsp;$(0.18 \ \rm dB$&nbsp; for&nbsp; $R = 1/2$&nbsp; and BPSK$)$&nbsp; is approximately&nbsp; $1.2 \ \rm dB$.
  
*Mit <i>n</i> = 2<sup>15</sup> = 32768 (violette Kurve) benötigt man 10 &middot; lg <i>E</i><sub>B</sub>/<i>N</i><sub>0</sub> &asymp; 1.35 dB für BER = 10<sup>&ndash;5</sup>. Der Abstand von der  Shannon&ndash;Grenze (0.18 dB für <i>R</i> = 1/2 und BPSK) beträgt ca. 1.2 dB.<br><br>
 
  
[[File:P ID3080 KC T 4 4 S4b v4.png|rahmenlos|links| „Waterfall Region” und „Error Floor”]]
+
[[File:EN_KC_T_4_4_S4b_v1.png|left|frame| Waterfall region & error floor]]  
 +
<br><br>The curves for&nbsp; $n = 2^8$&nbsp; to&nbsp; $n = 2^{10}$&nbsp; also point to an effect we already noticed with the&nbsp; [[Channel_Coding/The_Basics_of_Turbo_Codes#Performance_of_the_turbo_codes| $\text{turbo codes}$]]&nbsp; $($see qualitative graph on the left$)$:
  
<br><br><br><br><br>
+
#First,&nbsp; the BER curve drops steeply &nbsp; &#8658; &nbsp; "waterfall region".
Die Kurven für <i>n</i> = 2<sup>8</sup> bis <i>n</i> = 2<sup>10</sup> weisen zudem auf einen Effekt hin, den wir schon bei den Turbocodes festgestellt haben: Zuerst fällt die BER&ndash;Kurve steil ab &nbsp;&#8658;&nbsp; &bdquo;Waterfall Region&rdquo;, danach folgt ein Knick und ein Verlauf mit deutlich geringerer Steigung  &nbsp;&#8658;&nbsp; &bdquo;Error Floor&rdquo;. Die qualitative Grafik links verdeutlicht den Effekt, der natürlich nicht abrupt einsetzt (Übergang nicht eingezeichnet).<br>
+
#That is followed by a kink and a course with a significantly lower slope &nbsp; &#8658; &nbsp; "error floor".
 +
#The graphic illustrates the effect,&nbsp; which of course does not start abruptly&nbsp; $($transition not drawn$)$.<br>
  
Ein (LDPC&ndash;)Code ist immer dann als gut zu bezeichnen, wenn
 
*die  BER&ndash;Kurve nahe der Shannon&ndash;Grenze steil abfällt,<br>
 
  
*der &bdquo;Error Floor&rdquo; (Ursachen hierfür siehe nächste Seite) bei sehr niedrigen BER&ndash;Werten liegt,<br>
+
An&nbsp; $($LDPC$)$&nbsp; code is considered good whenever
 +
* the&nbsp; $\rm BER$&nbsp; curve drops steeply near the Shannon bound,<br>
  
*die  Anzahl der erforderlichen Iterationen handhabbar ist, und<br>
+
* the error floor is at very low&nbsp; $\rm BER$&nbsp; values&nbsp; $($for causes see next section and&nbsp; $\text{Example 5)}$,<br>
  
*diese Eigenschaften nicht erst bei nicht mehr praktikablen Blocklängen erreicht werden.<br><br>
+
* the number of required iterations is manageable,&nbsp; and<br>
  
== Leistungsfähigkeit der LDPC–Codes (2) ==
+
* these properties are not reached only at no more practicable block lengths.<br>
 +
<br clear=all>
 +
 
 +
== Performance of irregular LDPC codes  ==
 
<br>
 
<br>
[[File:P ID3087 KC T 4 4 S5a v3.png|rahmenlos|rechts|LDPC–Codes im Vergleich zur Shannon–Grenze]] In diesem Kapitel wurden vorwiegend reguläre LDPC&ndash;Codes behandelt, auch im BER&ndash;Diagramm auf der letzten Seite.<br>
+
[[File:KC T 4 4 S5b v3.png|right|frame|LDPC codes compared <br>to the Shannon bound]]  
 +
This chapter has dealt mainly with regular LDPC codes, including in the&nbsp; $\rm BER$&nbsp;  diagram in the last section.&nbsp; The ignorance of irregular LDPC codes is only due to the brevity of this chapter,&nbsp; not their performance.
 +
 +
On the contrary:
 +
* Irregular LDPC codes are among the best channel codes ever.
 +
 +
*The yellow cross is practically on the information-theoretical limit curve for binary input signals&nbsp; $($green &nbsp; $\rm BPSK$&nbsp; curve$)$.  
  
Die Ignoranz der irregulären LDPC&ndash;Codes ist nur der Kürze dieses Kapitels geschuldet, nicht deren Leistungsfähigkeit.<br>
+
*The code word length of this irregular rate&nbsp; $1/2$&nbsp; code from&nbsp; [CFRU01]<ref>Chung S.Y; Forney Jr., G.D.; Richardson, T.J.; Urbanke, R.:&nbsp; On the Design of Low-Density Parity- Check Codes within 0.0045 dB of the Shannon Limit.&nbsp; - In: IEEE Communications Letters, vol. 5, no. 2 (2001), pp. 58-60.</ref> is&nbsp; $n = 2 \cdot 10^6$.
 +
 +
*From this it is already obvious that this code was not intended for practical use,&nbsp; but was even tuned for a record attempt:<br>
  
Im Gegenteil: Irreguläre LDPC&ndash;Codes gehören zu den besten Kanalcodes überhaupt. Das gelbe Kreuz in der Grafik liegt praktisch auf der informationstheoretischen Grenzkurve für binäre Eingangssignale (grüne Kurve, mit BPSK beschriftet). Die Codewortlänge dieses irregulären Rate&ndash;1/2&ndash;Codes von [CFRU01]<ref>Chung S.Y; Forney Jr., G.D.; Richardson, T.J.; Urbanke, R.: ''On the Design of Low-Density Parity- Check Codes within 0.0045 dB of the Shannon Limit.'' – In: IEEE Communications Letters, vol. 5, no. 2 (2001), pp. 58–60.</ref> beträgt 2 &middot; 10<sup>6</sup>. Daraus ist schon ersichtlich, dass dieser Code nicht für den praktischen Einsatz gedacht war, sondern für einen Rekordversuch getunt wurde.<br>
 
  
Bei der LDPC&ndash;Codekonstruktion geht man ja stets von der Prüfmatrix <b>H</b> aus. Für den gerade genannten Code hat diese die Dimension 1000000&times;2000000, beinhaltet also 2 &middot; 10<sup>12</sup> Matrixelemente.<br>
+
<u>Note:</u>
 +
#The LDPC code construction always starts from the parity-check matrix&nbsp; $\mathbf{H}$.&nbsp;
 +
#For the just mentioned code this has the dimension&nbsp; $1 \cdot 10^6 &times; 2 \cdot 10^6$,&nbsp; thus contains&nbsp; $2 \cdot 10^{12}$&nbsp; matrix elements.
 +
<br clear=all>
 +
{{BlaueBox|TEXT= 
 +
$\text{Conclusion:}$&nbsp; Filling the matrix randomly with&nbsp; $($few$)$&nbsp; "ones" &nbsp; &#8658; &nbsp; "low&ndash;density"&nbsp; is called&nbsp; &raquo;<b>unstructured code design</b>&laquo;.  
  
Füllt man die Matrix per Zufallsgenerator mit (wenigen) Einsen &nbsp;&#8658;&nbsp; &bdquo;<i>Low&ndash;density</i>&rdquo;. So spricht man von <i>unstrukturiertem Code&ndash;Design</i>. Dies kann bei langen Codes zu folgenden Problemen führen:
+
This can lead to long codes with good performance,&nbsp; but sometimes also to the following problems:
*Die Komplexität des Coders kann zunehmen, da trotz Modifikation der Prüfmatrix <b>H</b> sichergestellt werden muss, dass die Generatormatrix <b>G</b> systematisch sein muss.<br>
+
*The complexity of the encoder can increase,&nbsp; because despite modification of the parity-check matrix&nbsp; $\mathbf{H}$&nbsp; it must be ensured that the generator matrix&nbsp; $\mathbf{G}$&nbsp; is systematic.<br>
  
*Aufwändige Hardware&ndash;Realisierung des iterativen Decoders.<br>
+
*It requires a complex hardware&ndash;realization of the iterative decoder.<br>
  
*&bdquo;Error Floor&rdquo; durch einzelne Einsen in einer Spalte (oder Zeile) sowie kurze Schleifen.<br><br>
+
*It comes to an&nbsp; "error floor"&nbsp; by single&nbsp; "ones"&nbsp; in a column&nbsp; $($or row$)$&nbsp; as well as by short loops &nbsp; &rArr; &nbsp; see following example.}}<br>
  
{{Beispiel}}''':''' Im linken Teil der Grafik ist der Tanner&ndash;Graph für einen regulären LDPC&ndash;Code mit der Prüfmatrix <b>H</b><sub>1</sub> dargestellt. Grün eingezeichnet ist ein Beispiel für die minimale Schleifenlänge (englisch: <i>Girth</i>). Diese Kenngröße gibt an, wieviele Kanten man mindestens durchläuft, bis man von einem <i>Check Node</i> <i>C<sub>j</sub></i> wieder bei diesem landet (oder von <i>V<sub>i</sub></i> zu  <i>V<sub>i</sub></i>). Im linken Beispiel ergibt sich die minimale Kantenlänge 6, zum Beispiel der Weg <i>C</i><sub>1</sub> &#8594; <i>V</i><sub>1</sub> &#8594; <i>C</i><sub>3</sub> &#8594; <i>V</i><sub>5</sub> &#8594; <i>C</i><sub>2</sub> &#8594; <i>V</i><sub>2</sub> &#8594; <i>C</i><sub>1</sub>.<br>
+
{{GraueBox|TEXT= 
 +
$\text{Example 5:}$&nbsp; The left part of the graph shows the Tanner graph for a regular LDPC code with the parity-check matrix&nbsp; $\mathbf{H}_1$.  
 +
[[File:P ID3088 KC T 4 4 S4c v3.png|right|frame|Definition of a "girth"|class=fit]]
 +
*Drawn in green is an example of the&nbsp; "minimum girth".  
  
[[File:P ID3088 KC T 4 4 S4c v3.png|Zur Definition eines „Girth”|class=fit]]<br>
+
*This parameter indicates the minimum number of edges one passes through before ending up at a check node&nbsp; $C_j$&nbsp; again $($or from&nbsp; $V_i$&nbsp; to&nbsp; $V_i)$.  
  
Vertauscht man in der Prüfmatrix nur zwei Einsen &nbsp;&#8658;&nbsp; Matrix <b>H</b><sub>2</sub>, so ist die minimale Schleifenlänge 4, von <i>C</i><sub>1</sub> &#8594; <i>V</i><sub>4</sub> &#8594; <i>C</i><sub>4</sub> &#8594; <i>V</i><sub>6</sub> &#8594; <i>C</i><sub>1</sub>. Ein kleiner <i>Girth</i> führt zu einem &bdquo;Error Floor&rdquo; im BER&ndash;Verlauf.{{end}}<br>
+
*In the left example,&nbsp; the minimum edge length&nbsp; $6$,&nbsp; for example,&nbsp; results in the path&nbsp;
 +
:$$C_1 &#8594; V_1 &#8594; C_3 &#8594; V_5 &#8594; C_2 &#8594; V_2 &#8594; C_1.$$
  
== Einige Anwendungsgebiete für LDPC–Codes ==
+
&rArr; &nbsp; Swapping only two&nbsp; "ones"&nbsp; in the parity-check matrix &nbsp; &#8658; &nbsp; matrix&nbsp; $\mathbf{H}_2$,&nbsp; the LDPC code becomes irregular:
 +
*The minimum loop length is now&nbsp; $4$,&nbsp; from&nbsp;
 +
:$$C_1 &#8594; V_4 &#8594; C_4 &#8594; V_6 &#8594; C_1.$$
 +
*A small&nbsp; "girth"&nbsp; leads to a pronounced&nbsp; "error floor"&nbsp; in the BER process.}}<br>
 +
 
 +
== Some application areas for LDPC codes ==
 
<br>
 
<br>
[[File:P ID3081 KC T 4 4 S5a v3.png|rahmenlos|rechts|Einige standardisierte LDPC–Codes im Vergleich zur Shannon–Grenze]] In dem Schaubild sind zwei Kommunikations&ndash;Standards, die auf strukturierten LDPC&ndash;Codes basierenim Vergleich zur AWGN&ndash;Kanalkapazität eingetragen.<br>
+
In the adjacent diagram,&nbsp; two communication standards based on structured&nbsp; $($regular$)$&nbsp; LDPC codes are entered in comparison to the AWGN channel capacity.<br>
 +
[[File:KC T 4 4 S5b v3.png|right|frame|Some standardized LDPC codes compared to the Shannon bound]]  
 +
 
 +
It should be noted that the bit error rate&nbsp; ${\rm BER}=10^{-5}$&nbsp; is the basis for the plotted standardized codes,&nbsp; while the capacity curves&nbsp; $($according to information theory$)$&nbsp; are for&nbsp; "zero"&nbsp; error probability.
 +
 
 +
&rArr; &nbsp; Red crosses indicate the &nbsp; &raquo;'''LDPC codes according to CCSDS'''&laquo; &nbsp; developed for distant space missions:
 +
*This class provides codes of rate&nbsp; $1/3$,&nbsp; $1/2$,&nbsp; $2/3$&nbsp; and&nbsp; $4/5$.
 +
 +
*All points are located&nbsp; $\approx 1 \ \rm dB$&nbsp; to the right of the capacity curve for binary input&nbsp; $($green curve "BPSK"$)$.<br>
 +
 
 +
 
 +
&rArr; &nbsp; The blue rectangles mark the &nbsp; &raquo;'''LDPC codes for DVB&ndash;T2/S2'''&laquo;.  &nbsp; 
 +
 
 +
The abbreviations stand for &nbsp;  "Digital Video Broadcasting &ndash; Terrestrial"&nbsp; resp.&nbsp; "Digital Video Broadcasting &ndash; Satellite",&nbsp; and the&nbsp; "$2$"&nbsp; marking makes it clear that each is the second generation&nbsp; $($from 2005 resp. 2009$)$.
 +
*The standard is defined by&nbsp; $22$&nbsp; test matrices providing rates from about&nbsp; $0.2$&nbsp; up to&nbsp; $19/20$.
 +
   
 +
*Each eleven variants apply to the code length&nbsp; $n= 64800$&nbsp; bit&nbsp; $($"Normal FECFRAME"$)$&nbsp; and&nbsp; $16200$&nbsp; bit&nbsp; $($"Short FECFRAME"$),$&nbsp;  respectively.
 +
 +
*Combined with&nbsp; [[Modulation_Methods/Quadrature_Amplitude_Modulation#Other_signal_space_constellations| $\text{high order modulation methods}$]]&nbsp; $($8PSK,&nbsp;  16&ndash;ASK/PSK, ...&nbsp;$)$&nbsp; the codes are characterized by a large spectral efficiency.<br>
 +
 
 +
 
 +
 
 +
&rArr; &nbsp; The&nbsp; "digital video broadcast"&nbsp; $\rm (DVB)$&nbsp; codes belong to the&nbsp; "irregular repeat accumulate"&nbsp; $\rm (IRA)$&nbsp; codes first presented in 2000 in&nbsp; [JKE00]<ref name='JKE00'>Jin, H.; Khandekar, A.; McEliece, R.:&nbsp; Irregular Repeat-Accumulate Codes.&nbsp; Proc. of the 2nd Int. Symp. on Turbo Codes and Related Topics, Brest, France, pp. 1-8, Sept. 2000.</ref>.&nbsp; The following graph shows the basic encoder structure:
 +
 
 +
[[File:EN_KC_T_4_4_S6a_v1.png|right|frame|Irregular Repeat Accumulate coder for DVB-S2/T2.&nbsp; Not taken into account in the graphic are <br>&nbsp;$\star$&nbsp; LDPC codes for the standard&nbsp; "DVB Return Channel Terrestrial"&nbsp; $\rm (RCS)$, <br>&nbsp;$\star$&nbsp; LDPC codes for the WiMax&ndash;standard&nbsp; $\rm (IEEE 802.16)$,&nbsp; as well as<br>&nbsp;$\star$&nbsp; LDPC codes for&nbsp; "10GBASE&ndash;T&ndash;Ethernet".<br>&nbsp;  These codes have certain similarities with the IRA codes.|class=fit]]
 +
 +
*The green highlighted part
 +
:*with repetition code&nbsp; $\rm (RC)$,
 +
:*interleaver,
 +
:*single parity-check code&nbsp; $\rm (SPC)$,&nbsp; and
 +
:*accumulator
 +
 
 +
:corresponds exactly to a serial&ndash;concatenated turbo code &nbsp; &#8658; &nbsp; see&nbsp; [[Channel_Coding/The_Basics_of_Turbo_Codes#Some_application_areas_for_turbo_codes| $\text{RA encoder}$]].
  
Anzumerken ist, dass für die eingezeichneten standardisierten Codes die Bitfehlerrate 10<sup>&ndash;5</sup> zugrunde liegt, während die Kapazitätskurven (entsprechend der Informationstheorie) für die Fehlerwahrscheinlichkeit 0 gelten.
+
*The description of the&nbsp; "irregular repeat accumulate code"&nbsp; is based solely on the parity-check matrix&nbsp; $\mathbf{H}$,&nbsp; which can be transformed into a form favorable for decoding by the&nbsp; "irregular repetition code".
*Rote Kreuze zeigen die LDPC&ndash;Codes nach CCSDS (<i>Consultative Comittee for Space Data Systems</i>), entwickelt für ferne Weltraummissionen. Diese Klasse stellt Codes der Rate 1/3, 1/2, 2/3 und  4/5 bereit. Alle Punkte liegen ca. 1 dB rechts von der Kapazitätskurve für binären Eingang (grüne Kurve &bdquo;BPSK&rdquo;).<br>
+
 
 +
*A high-rate&nbsp; &raquo;'''BCH code'''&laquo;&nbsp; $($from&nbsp; $\rm B$ose&ndash;$\rm C$haudhuri&ndash;$\rm H$ocquenghem$)$&nbsp; is often used as an outer encoder to lower the&nbsp; "error floor".
  
*Die blauen Rechtecke markieren die LDPC&ndash;Codes für DVB&ndash;T2/S2. Die
 
Abkürzungen stehen für  &bdquo;Digital Video Broadcasting &ndash; Satellite&rdquo; bzw. &bdquo;Digital Video Broadcasting &ndash; Terrestrial&rdquo;, und die &bdquo;2&rdquo; macht deutlich, dass es sich jeweils um die  zweite Generation (von 2005 bzw. 2009)  handelt. Der Standard ist durch 22 Prüfmatrizen definiert, die Raten von etwa 0.2 bis zu 19/20 zur Verfügung stellen. Je elf Varianten gelten für die  Codelänge 64800 Bit (<i>Normal FECFRAME</i>) bzw. 16200 Bit (<i>Short FECFRAME</i>). Kombiniert mit Modulationsverfahren hoher Ordnung (8PSK, 16&ndash;ASK/PSK, ...) zeichnen sich die Codes durch große spektrale Effizienz aus.<br>
 
  
[[File:P ID3082 KC T 4 4 S6a v3.png|IRA–Coder bei DVB–S2/T2|class=fit]]<br>
 
  
DVB&ndash;Codes gehören zu den <i>Irregular Repeat Accumulate</i> (IRA) Codes die erstmals im Jahr 2000 in [JKE00]<ref>Jin, H.; Khandekar, A.; McEliece, R.: ''Irregular Repeat–Accumulate Codes.'' Proc. of the 2nd Int. Symp. on Turbo Codes and Related Topics, Best, France, S. 1–8., Sept. 2000.</ref> vorgestellt wurden. Die Grafik zeigt die Grundstruktur des Coders. Der grün hinterlegte Teil &ndash; mit Repetition Code (RC), Interleaver, Single Parity&ndash;Code (SPC) sowie Akkumulator &ndash; entspricht exakt einem seriell&ndash;verketteten Turbocode &nbsp;&#8658;&nbsp; siehe RA&ndash;Coder. Die Beschreibung des IRA&ndash;Codes basiert aber allein auf der Prüfmatrix <b>H</b>, die sich durch den <i>irregulären Repetition Code</i> in eine für die Decodierung günstige Form bringen lässt.  Als äußerer Code wird zudem ein hochratiger BCH&ndash;Code (von <i>Bose&ndash;Chaudhuri&ndash;Hocquenghem</i>) verwendet, der den <i>Error Floor</i> herabsetzen soll.<br>
 
  
In der oberen Grafik nicht eingetragen sind die LDPC&ndash;Codes für den Standard <i>DVB Return Channel Terrestrial</i> (RCS), für den WiMax&ndash;Standard (IEEE 802.16) sowie für das 10GBASE&ndash;T&ndash;Ethernet,  die gewisse Ähnlichkeiten mit den IRA&ndash;Codes aufweisen.<br>
 
  
== Aufgaben ==
+
== Exercises for the chapter ==
 
<br>
 
<br>
[[Aufgaben:4.11 Analyse von Prüfmatrizen|A4.11 Analyse von Prüfmatrizen]]
+
[[Aufgaben:Exercise_4.11:_Analysis_of_Parity-check_Matrices|Exercise 4.11: Analysis of Parity-check Matrices]]
  
[[Zusatzaufgaben:4.11 Coderate aus der Prüfmatrix]]
+
[[Aufgaben:Exercise_4.11Z:_Code_Rate_from_the_Parity-check_Matrix|Exercise 4.11Z: Code Rate from the Parity-check Matrix]]
  
[[Aufgaben:4.12 Regulärer/irregulärer Tanner–Graph|A4.12 Regulärer/irregulärer Tanner–Graph]]
+
[[Aufgaben:Exercise_4.12:_Regular_and_Irregular_Tanner_Graph|Exercise 4.12: Regular and Irregular Tanner Graph]]
  
[[Aufgaben:4.13 Decodierung von LDPC–Codes|A4.13 Decodierung von LDPC–Codes]]
+
[[Aufgaben:Exercise_4.13:_Decoding_LDPC_Codes|Exercise 4.13: Decoding LDPC Codes]]
  
==Quellenverzeichnis==
+
==References==
 
<references/>
 
<references/>
  
 
{{Display}}
 
{{Display}}

Latest revision as of 18:10, 20 April 2023



Some characteristics of LDPC codes


The  "Low–density Parity–check Codes"  $($in short:  »LDPC codes«$)$  were invented as early as the early 1960s and date back to the dissertation  [Gal63][1]  by  $\text{Robert G. Gallager}$.

However,  the idea came several decades too early due to the processor technology of the time.  Only three years after Berrou's invention of the turbo codes in 1993,  however,  $\text{David J. C. MacKay}$  and  $\text{Radford M. Neal}$  recognized the huge potential of the LDPC codes if they were decoded iteratively symbol by symbol just like the turbo codes.  They virtually reinvented the LDPC codes.

As can already be seen from the name component  "parity–check"  that these codes are linear block codes according to the explanations in the  "first main chapter" .  Therefore,  the same applies here:

  • The code word results from the information word  $\underline{u}$  $($represented with  $k$  binary symbols$)$  and the  $\text{generator matrix}$  $\mathbf{G}$  of dimension  $k × n$  to  $\underline{x} = \underline{u} \cdot \mathbf{G}$  ⇒   code word length  $n$.
  • The parity-check equations result from the identity   $\underline{x} \cdot \mathbf{H}^{\rm T} ≡ 0$,   where  $\mathbf{H}$  denotes the parity-check matrix.  This consists of  $m$  rows and  $n$  columns.  While in the first chapter basically  $m = n -k$  was valid,  for the LPDC codes we only require  $m ≥ n -k$.
  • A serious difference between an LDPC code and a conventional block code as described in the first main chapter is that the parity-check matrix  $\mathbf{H}$  is here sparsely populated with  "ones"   ⇒   "low-density".


Parity-check matrices of a Hamming code and a LDPC code

$\text{Example 1:}$  The graph shows parity-check matrices  $\mathbf{H}$  for

  • the Hamming code with code length  $n = 15$  and with  $m = 4$  parity-check equations   ⇒   $k = 11$  information bits,
  • the LDPC code from  [Liv15][2]  of length  $n = 12$  and with  $m = 9$  parity-check equations   ⇒   $k ≥ 3$  information bits.

Remarks:

  1. In the left graph,  the proportion of  "ones"  is  $32/60 \approx 53.3\%$. 
  2. In the right graph the share of  "ones"  is lower with  $36/108 = 33.3\%$.
  3. For LDPC codes  $($relevant for practice   ⇒   with long length$)$,  the share of  "ones"  is even significantly lower.


We now analyze the two parity-check matrices using the rate and Hamming weight:

  • The rate of the Hamming code under consideration  $($left graph$)$  is  $R = k/n = 11/15 \approx 0.733$.  The Hamming weight of each of the four rows is  $w_{\rm R}= 8$,  while the Hamming weights  $w_{\rm C}(i)$  of the columns vary between  $1$  and  $4$.  For the columns index variable here:   $1 ≤ i ≤ 15$.
  • In the considered LDPC code there are four  "ones"  in all rows   ⇒   $w_{\rm R} = 4$  and three  "ones"  in all columns   ⇒   $w_{\rm C} = 3$.  The code label  $(w_{\rm R}, \ w_{\rm C})$  of LDPC code uses exactly these parameters.  Note the different nomenclature to the  "$(n, \ k, \ m)$  Hamming code".
  • This is called a  »regular LDPC code«,  since all row weights  $w_{\rm R}(j)$  for  $1 ≤ j ≤ m$  are constant equal  $w_{\rm R}$ and also all column weights  $($with indices  $1 ≤ i ≤ n)$  are equal:   $w_{\rm C}(i) = w_{\rm C} = {\rm const.}$  If this condition is not met,  there is an  "irregular LDPC code".


$\text{Feature of LDPC codes}$ 

  • For the code rate,  one can generally  $($if  $k$  is not known$)$  specify only a bound:  
$$R ≥ 1 - w_{\rm C}/w_{\rm R}.$$
  • The equal sign holds if all rows of  $\mathbf{H}$  are linearly independent   ⇒   $m = n \, – k$.  Then the conventional equation is obtained:
$$R = 1 - w_{\rm C}/w_{\rm R} = 1 - m/n = k/n.$$
  • In contrast,  for the code rate of an irregular LDPC code and also for the  $(15, 11, 4)$  Hamming code sketched on the left:
$$R \ge 1 - \frac{ {\rm E}[w_{\rm C}]}{ {\rm E}[w_{\rm R}]} \hspace{0.5cm}{\rm with}\hspace{0.5cm} {\rm E}[w_{\rm C}] =\frac{1}{n} \cdot \sum_{i = 1}^{n}w_{\rm C}(i) \hspace{0.5cm}{\rm and}\hspace{0.5cm} {\rm E}[w_{\rm R}] =\frac{1}{m} \cdot \sum_{j = 1}^{ m}w_{\rm R}(j) \hspace{0.05cm}.$$
  • In Hamming codes  the  $m = n - k$  parity-check equations are linearly independent,  the  "$≥$" sign can be replaced by the  "$=$" sign, which simultaneously means:
$$R = k/n.$$


For more information on this topic,  see  "Exercise 4.11"  and  "Exercise 4.11Z".

Two-part LDPC graph representation - Tanner graph


All essential features of a LDPC ode are contained in the parity-check matrix  $\mathbf{H} = (h_{j,\hspace{0.05cm}i})$  and can be represented by a so-called  "Tanner graph".  It is a  "bipartite graph representation".  Before we examine and analyze exemplary Tanner graphs more exactly,  first still some suitable description variables must be defined:

  • The  $n$  columns of the parity-check matrix  $\mathbf{H}$  each represent one bit of a code word.  Since each code word bit can be both an information bit and a parity bit,  the neutral name   »variable node «  $\rm (VN)$  has become accepted for this.  The  $i$th  code word bit is called  $V_i$  and the set of all  variable nodes is  $\{V_1, \text{...}\hspace{0.05cm} , \ V_i, \ \text{...}\hspace{0.05cm} , \ V_n\}$.
  • The  $m$  rows of  $\mathbf{H}$  each describe a parity-check equation.  We refer to such a parity-check equation in the following as   »check node«  $\rm (CN)$.  The set of all  check nodes is  $\{C_1, \ \text{...}\hspace{0.05cm} , \ C_j, \ \text{...}\hspace{0.05cm} , \ C_m\}$,  where  $C_j$  denotes the parity-check equation of the  $j$th  row.
  • In the Tanner graph, the  $n$  variable nodes  $V_i$  are represented as circles and the  $m$  check nodes  $C_j$  as squares.  If the  $\mathbf{H}$  matrix element in row  $j$  and column  $i$  is $h_{j,\hspace{0.05cm}i} = 1$,  there is an edge between the variable node  $V_i$  and the check node  $C_j$.

Example of a Tanner graph

$\text{Example 2:}$  To clarify the above terms,  an exemplary Tanner graph is given on the right with

  • the variable nodes  $V_1$  to  $V_4$,  and
  • the check nodes  $C_1$  to  $C_3$.

However,  the associated code has no practical meaning.

One can see from the graph:

  1. The code length is  $n = 4$  and there are  $m = 3$  parity-check equations. 
  2. Thus the parity-check matrix  $\mathbf{H}$  has dimension  $3×4$.
  3. There are six edges in total.  Thus six of the twelve elements  $h_{j,\hspace{0.05cm}i}$  of matrix  $\mathbf{H}$  are  "ones".
  4. At each check node two lines arrive   ⇒   the Hamming weights of all rows are equal:   $w_{\rm R}(j) = 2 = w_{\rm R}$.
  5. From the nodes  $V_1$  and  $V_4$  there is only one transition to a check node each,  from  $V_2$  and  $V_3$,  however,  there are two.
  6. For this reason,  it is an  "irregular code".

Accordingly,  the parity-check matrix is:

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


$\text{Example 3:}$  Now a more practical example follows.  In  "Exercise 4.11"  two parity-check matrices were analyzed:

Tanner graph of a regular and an irregular code

⇒   The encoder corresponding to the matrix  $\mathbf{H}_1$  is systematic.

  1. The code parameters are  $n = 8, \ k = 4,\ m = 4$  ⇒   rate  $R=1/2$.
  2. The code is irregular because the Hamming weights are not the same for all columns.
  3. In the graph,  this  "irregular  $\mathbf{H}$ matrix"  is given above.


⇒   Bottom indicated is the "regular  $\mathbf{H}$ matrix" corresponding to the matrix  $\mathbf{H}_3$  from Exercise 4.11.

  1. The rows are linear combinations of the upper matrix  $\mathbf{H}_1$.
  2. For this non-systematic encoder holds  $w_{\rm C} = 2, \ w_{\rm R} = 4$.
  3. Thus for the rate:   $R \ge 1 - w_{\rm C}/w_{\rm R} = 1/2$.


On the right you see the corresponding Tanner graphs:

  • The left Tanner graph refers to the upper  $($irregular$)$  matrix.  The eight variable nodes  $V_i$  are connected to the four check nodes  $C_j$  if the element in row  $j$  and column  $i$  is a  "one" $\hspace{0.15cm} ⇒ \hspace{0.15cm} h_{j,\hspace{0.05cm}i}=1$.
  • This graph is not particularly well suited for  $\text{iterative symbol-wise decoding}$.  The variable nodes  $V_5, \ \text{...}\hspace{0.05cm} , \ V_8$  are each associated with only one check node,  which provides no information for decoding.
  • In the right Tanner graph for the regular code,  you can see that here from each variable node  $V_i$  two edges come off and from each check node  $C_j$  their four.  This allows information to be gained during decoding in each iteration loop.
  • It can also be seen that here,  in the transition from the irregular to the equivalent regular code,  the proportion of  "ones"  increases,  in the example from  $37.5\%$  to $50\%$.  However,  this statement cannot be generalized.


Iterative decoding of LDPC codes


As an example of iterative LDPC decoding,  the so-called  "message passing algorithm"  is now described.  We illustrate this using the right-hand Tanner graph in  $\text{Example 3}$  in the previous section and thus for the regular parity-check matrix given there.

$\text{Principle:}$  In the  »message passing algorithm«  there is an alternating  $($or iterative$)$  exchange of information between the variable nodes  $V_1, \ \text{...}\hspace{0.05cm} , \ V_n$  and the check nodes  $C_1 , \ \text{...}\hspace{0.05cm} , \ C_m$.


Iterative decoding of LDPC codes

For the regular LDPC code under consideration:

  1. There are  $n = 8$  variable nodes and  $m = 4$  check nodes.
  2. From each variable node go  $d_{\rm V} = 2$  connecting lines to a check node and each check node is connected to  $d_{\rm C} = 4$  variable nodes.
  3. The variable node degree  $d_{\rm V}$  is equal to the Hamming weight of each column  $(w_{\rm C})$  and for the check node degree holds:  $d_{\rm C} = w_{\rm R}$  (Hamming weight of each row).
  4. In the following description we use the terms  "neighbors of a variable node"   ⇒   $N(V_i)$  and  "neighbors of a check node"   ⇒   $N(C_j)$.
  5. We restrict ourselves here to implicit definitions:
$$N(V_1) = \{ C_1, C_2\}\hspace{0.05cm},$$
$$ N(V_2) = \{ C_3, C_4\},$$
$$\text{........}$$
$$N(V_8) = \{ C_1, C_4\},$$
$$N(C_1) = \{ V_1, V_4, V_5, V_8\},$$
$$\text{........}$$
$$N(C_4) = \{ V_2, V_3, V_6, V_8\}.$$
Information exchange between variable and check nodes

$\text{Example 4:}$The sketch from  [Liv15][2]  shows the information exchange

  • between the yariable node  $V_i$  and the check node  $C_j$,


The exchange of information happens in two directions:

  • $L(V_i → C_j)$:  Extrinsic information from  $V_i$  point of view,   a-priori information from  $C_j$  point of view.
  • $L(C_j → V_i)$:  Extrinsic information from  $C_j$  point of view,  a-priori information from  $V_i$  point of view.


The description of the decoding algorithm continues:

(1)  Initialization:  At the beginning of decoding,  the variable nodes receive no a-priori information from the check nodes,  and it applies for  $1 ≤ i ≤ n \text{:}$  

$$L(V_i → C_j) = L_{\rm K}(V_i).$$

As can be seen from the graph at the top of the page,  these channel log likelihood values  $L_{\rm K}(V_i)$  result from the received values  $y_i$.

(2)  Check Node Decoder (CND):  Each node  $C_j$  represents one parity-check equation.  Thus  $C_1$  represents the equation  $V_1 + V_4 + V_5 + V_8 = 0$.  One can see the connection to extrinsic information in the symbol-wise decoding of the single parity–check code.

In analogy to the section  "Calculation of extrinsic log likelihood ratios"  and to  "Exercise 4.4"  thus applies to the extrinsic log likelihood value of  $C_j$  and at the same time to the a-priori information concerning  $V_i$:

\[L(C_j \rightarrow V_i) = 2 \cdot {\rm tanh}^{-1}\left [ \prod\limits_{V \in N(C_j)\hspace{0.05cm},\hspace{0.1cm} V \ne V_i} \hspace{-0.35cm}{\rm tanh}\left [L(V \rightarrow C_j \right ] /2) \right ] \hspace{0.05cm}.\]


(3)  Variable Node Decoder (VND):  In contrast to the check node decoder,  the variable node decoder is related to the decoding of a repetition code because all check nodes connected to  $V_i$  correspond to the same bit  $C_j$  ⇒   this bit is quasi repeated  $d_{\rm V}$  times.

In analogy to to the section  "Calculation of extrinsic log likelihood ratios"  applies to the extrinsic log likelihood value of  $V_i$  and at same time to the a-priori information concerning  $C_j$:

Relationship between LDPC decoding and serial turbo decoding
\[L(V_i \rightarrow C_j) = L_{\rm K}(V_i) + \hspace{-0.55cm} \sum\limits_{C \hspace{0.05cm}\in\hspace{0.05cm} N(V_i)\hspace{0.05cm},\hspace{0.1cm} C \hspace{0.05cm}\ne\hspace{0.05cm} C_j} \hspace{-0.55cm}L(C \rightarrow V_i) \hspace{0.05cm}.\]

The chart on the right describes the decoding algorithm for LDPC codes. 

  • To establish a complete analogy between LDPC and turbo decoding,  an  "interleaver"  as well as a "de-interleaver"  are also drawn here between  $\rm VND$  and  $\rm CND$.
  • Since these are not real system components,  but only analogies,  we have enclosed these terms in quotation marks.


Performance of regular LDPC codes


We now consider as in  [Str14][3]  five regular LDPC codes.  The graph shows the bit error rate  $\rm (BER)$  depending on the AWGN parameter  $10 \cdot {\rm lg} \, E_{\rm B}/N_0$.  The curve for uncoded transmission is also plotted for comparison.

Bit error rate of LDPC codes

These LDPC codes exhibit the following properties:

  • The parity-check matrices  $\mathbf{H}$  each have  $n$  columns and  $m = n/2$  linearly independent rows.  In each row there are  $w_{\rm R} = 6$  "ones"  and in each column  $w_{\rm C} = 3$  "ones".
  • The share of  "ones"  is  $w_{\rm R}/n = w_{\rm C}/m$,  so for large code word length  $n$  the classification "low–density" is justified.  For the red curve  $(n = 2^{10})$  the share of  "ones"  is  $0.6\%$.
  • The rate of all codes is  $R = 1 - w_{\rm C}/w_{\rm R} = 1/2$.  However,  because of the linear independence of the matrix rows,  $R = k/n$  with the information word length  $k = n - m = n/2$  also holds.

From the graph you can see:

  • The bit error rate is smaller the longer the code:
  • For  $10 \cdot {\rm lg} \, E_{\rm B}/N_0 = 2 \ \rm dB$  and  $n = 2^8 = 256$  we get  ${\rm BER} \approx 10^{-2}$.
  • For  $n = 2^{12} = 4096$  on the other hand,  only  ${\rm BER} \approx 2 \cdot 10^{-7}$.
  • With  $n = 2^{15} = 32768$  $($violet curve$)$  one needs   $10 \cdot {\rm lg} \, E_{\rm B}/N_0 \approx 1.35 \ \rm dB$  for  ${\rm BER} = 10^{-5}$.
  • The distance from the Shannon bound  $(0.18 \ \rm dB$  for  $R = 1/2$  and BPSK$)$  is approximately  $1.2 \ \rm dB$.


Waterfall region & error floor



The curves for  $n = 2^8$  to  $n = 2^{10}$  also point to an effect we already noticed with the  $\text{turbo codes}$  $($see qualitative graph on the left$)$:

  1. First,  the BER curve drops steeply   ⇒   "waterfall region".
  2. That is followed by a kink and a course with a significantly lower slope   ⇒   "error floor".
  3. The graphic illustrates the effect,  which of course does not start abruptly  $($transition not drawn$)$.


An  $($LDPC$)$  code is considered good whenever

  • the  $\rm BER$  curve drops steeply near the Shannon bound,
  • the error floor is at very low  $\rm BER$  values  $($for causes see next section and  $\text{Example 5)}$,
  • the number of required iterations is manageable,  and
  • these properties are not reached only at no more practicable block lengths.


Performance of irregular LDPC codes


LDPC codes compared
to the Shannon bound

This chapter has dealt mainly with regular LDPC codes, including in the  $\rm BER$  diagram in the last section.  The ignorance of irregular LDPC codes is only due to the brevity of this chapter,  not their performance.

On the contrary:

  • Irregular LDPC codes are among the best channel codes ever.
  • The yellow cross is practically on the information-theoretical limit curve for binary input signals  $($green   $\rm BPSK$  curve$)$.
  • The code word length of this irregular rate  $1/2$  code from  [CFRU01][4] is  $n = 2 \cdot 10^6$.
  • From this it is already obvious that this code was not intended for practical use,  but was even tuned for a record attempt:


Note:

  1. The LDPC code construction always starts from the parity-check matrix  $\mathbf{H}$. 
  2. For the just mentioned code this has the dimension  $1 \cdot 10^6 × 2 \cdot 10^6$,  thus contains  $2 \cdot 10^{12}$  matrix elements.


$\text{Conclusion:}$  Filling the matrix randomly with  $($few$)$  "ones"   ⇒   "low–density"  is called  »unstructured code design«.

This can lead to long codes with good performance,  but sometimes also to the following problems:

  • The complexity of the encoder can increase,  because despite modification of the parity-check matrix  $\mathbf{H}$  it must be ensured that the generator matrix  $\mathbf{G}$  is systematic.
  • It requires a complex hardware–realization of the iterative decoder.
  • It comes to an  "error floor"  by single  "ones"  in a column  $($or row$)$  as well as by short loops   ⇒   see following example.


$\text{Example 5:}$  The left part of the graph shows the Tanner graph for a regular LDPC code with the parity-check matrix  $\mathbf{H}_1$.

Definition of a "girth"
  • Drawn in green is an example of the  "minimum girth".
  • This parameter indicates the minimum number of edges one passes through before ending up at a check node  $C_j$  again $($or from  $V_i$  to  $V_i)$.
  • In the left example,  the minimum edge length  $6$,  for example,  results in the path 
$$C_1 → V_1 → C_3 → V_5 → C_2 → V_2 → C_1.$$

⇒   Swapping only two  "ones"  in the parity-check matrix   ⇒   matrix  $\mathbf{H}_2$,  the LDPC code becomes irregular:

  • The minimum loop length is now  $4$,  from 
$$C_1 → V_4 → C_4 → V_6 → C_1.$$
  • A small  "girth"  leads to a pronounced  "error floor"  in the BER process.


Some application areas for LDPC codes


In the adjacent diagram,  two communication standards based on structured  $($regular$)$  LDPC codes are entered in comparison to the AWGN channel capacity.

Some standardized LDPC codes compared to the Shannon bound

It should be noted that the bit error rate  ${\rm BER}=10^{-5}$  is the basis for the plotted standardized codes,  while the capacity curves  $($according to information theory$)$  are for  "zero"  error probability.

⇒   Red crosses indicate the   »LDPC codes according to CCSDS«   developed for distant space missions:

  • This class provides codes of rate  $1/3$,  $1/2$,  $2/3$  and  $4/5$.
  • All points are located  $\approx 1 \ \rm dB$  to the right of the capacity curve for binary input  $($green curve "BPSK"$)$.


⇒   The blue rectangles mark the   »LDPC codes for DVB–T2/S2«.  

The abbreviations stand for   "Digital Video Broadcasting – Terrestrial"  resp.  "Digital Video Broadcasting – Satellite",  and the  "$2$"  marking makes it clear that each is the second generation  $($from 2005 resp. 2009$)$.

  • The standard is defined by  $22$  test matrices providing rates from about  $0.2$  up to  $19/20$.
  • Each eleven variants apply to the code length  $n= 64800$  bit  $($"Normal FECFRAME"$)$  and  $16200$  bit  $($"Short FECFRAME"$),$  respectively.


⇒   The  "digital video broadcast"  $\rm (DVB)$  codes belong to the  "irregular repeat accumulate"  $\rm (IRA)$  codes first presented in 2000 in  [JKE00][5].  The following graph shows the basic encoder structure:

Irregular Repeat Accumulate coder for DVB-S2/T2.  Not taken into account in the graphic are
 $\star$  LDPC codes for the standard  "DVB Return Channel Terrestrial"  $\rm (RCS)$,
 $\star$  LDPC codes for the WiMax–standard  $\rm (IEEE 802.16)$,  as well as
 $\star$  LDPC codes for  "10GBASE–T–Ethernet".
  These codes have certain similarities with the IRA codes.
  • The green highlighted part
  • with repetition code  $\rm (RC)$,
  • interleaver,
  • single parity-check code  $\rm (SPC)$,  and
  • accumulator
corresponds exactly to a serial–concatenated turbo code   ⇒   see  $\text{RA encoder}$.
  • The description of the  "irregular repeat accumulate code"  is based solely on the parity-check matrix  $\mathbf{H}$,  which can be transformed into a form favorable for decoding by the  "irregular repetition code".
  • A high-rate  »BCH code«  $($from  $\rm B$ose–$\rm C$haudhuri–$\rm H$ocquenghem$)$  is often used as an outer encoder to lower the  "error floor".



Exercises for the chapter


Exercise 4.11: Analysis of Parity-check Matrices

Exercise 4.11Z: Code Rate from the Parity-check Matrix

Exercise 4.12: Regular and Irregular Tanner Graph

Exercise 4.13: Decoding LDPC Codes

References

  1. Gallager, R. G.:  Low-density parity-check codes.  MIT Press, Cambridge, MA, 1963.
  2. 2.0 2.1 Liva, G.:  Channels Codes for Iterative Decoding.  Lecture notes, Chair of Communications Engineering, TU Munich and DLR Oberpfaffenhofen, 2015.
  3. Strutz, T.:  Low-density parity-check codes - An introduction.  Lecture material. Hochschule für Telekommunikation, Leipzig, 2014. PDF document.
  4. Chung S.Y; Forney Jr., G.D.; Richardson, T.J.; Urbanke, R.:  On the Design of Low-Density Parity- Check Codes within 0.0045 dB of the Shannon Limit.  - In: IEEE Communications Letters, vol. 5, no. 2 (2001), pp. 58-60.
  5. Jin, H.; Khandekar, A.; McEliece, R.:  Irregular Repeat-Accumulate Codes.  Proc. of the 2nd Int. Symp. on Turbo Codes and Related Topics, Brest, France, pp. 1-8, Sept. 2000.