Add SC-LDPC Tanner Graph, fix qualitative LDPC plot, add decoding paragraph

This commit is contained in:
2026-04-08 23:58:34 +02:00
parent 1d822dac8b
commit 5c4bad30e2
2 changed files with 137 additions and 143 deletions

View File

@@ -122,24 +122,17 @@ An input message $\bm{u}\in \mathbb{F}_2^k$ is mapped onto a codeword $\bm{x}
\in \mathbb{F}_2^n$. This is passed on to a modulator, which
interacts with the physical channel.
A demodulator processes the channel output and forwards the result
$\bm{y} \in \mathbb{R}^n$ to a decoder.
$\bm{y}$ to a decoder.
We differentiate between \textit{soft-decision} decoding, where
$\bm{y} \in \mathbb{R}^n$, and \textit{hard-decision} decoding, where
$\bm{y} \in \mathbb{F}_2^n$ \cite[Sec.~1.5.1.3]{ryan_channel_2009}.
Finally, the decoder is responsible for obtaining an estimate
$\hat{\bm{u}} \in \mathbb{F}_2^k$ of the original input message.
This is done by first finding an estimate $\hat{\bm{x}}$ of the sent
codeword and undoing the encoding.
The decoding problem that we generally attempt to solve thus consists
in finding the best estimate $\hat{\bm{x}}$ given $\bm{y}$.
One approach is to use the \ac{ml} criterion \cite[Sec.
1.4]{ryan_channel_2009}
\begin{align*}
\hat{\bm{u}}_\text{ML} = \arg\max_{\bm{x} \in \mathcal{C}}
P(\bm{Y} = \bm{y} \vert \bm{X} = \bm{x})
.
\end{align*}
Finally, we differentiate between \textit{soft-decision} decoding, where
$\bm{y} \in \mathbb{R}^n$, and \textit{hard-decision} decoding, where
$\bm{y} \in \mathbb{F}_2^n$ \cite[Sec.~1.5.1.3]{ryan_channel_2009}.
%
\begin{figure}[t]
\centering
@@ -186,7 +179,7 @@ $\bm{y} \in \mathbb{F}_2^n$ \cite[Sec.~1.5.1.3]{ryan_channel_2009}.
Shannon's noisy-channel coding theorem is stated for codes whose block
length approaches infinity. This suggests that as the block length
becomes larger, the performance of the considered condes should
becomes larger, the performance of the considered codes should
generally improve.
However, the size of the \ac{pcm}, and thus in general the decoding complexity,
of a linear block code grows quadratically with $n$.
@@ -316,9 +309,10 @@ qualitative performance characteristic of an \ac{ldpc} code
\begin{axis}[
width=12cm,
height=9cm,
xlabel={$E_b/N_0$ (dB)},
ylabel={\ac{ber}},
xmin=0, xmax=6,
xlabel={Signal-to-noise ratio},
ylabel={Error rate},
% xmin=0, xmax=6,
enlarge x limits=false,
ymin=1e-9, ymax=1,
ticks=none,
% y tick label={},
@@ -330,57 +324,51 @@ qualitative performance characteristic of an \ac{ldpc} code
legend cell align={left},
]
\addplot+[mark=none, solid, thick, smooth] coordinates {
(0.0, 1.2e-1)
(0.3, 1.1e-1)
(0.5, 9e-2)
(0.7, 5e-2)
(0.8, 2e-2)
(0.9, 5e-3)
(1.0, 8e-4)
(1.1, 1e-4)
(1.2, 1.5e-5)
(1.3, 3e-6)
(1.4, 5e-7)
(1.5, 8e-8)
(1.6, 2e-8)
(1.8, 8e-9)
(2.0, 5e-9)
(2.5, 3e-9)
(3.0, 2e-9)
\addplot+[mark=none, solid, smooth, KITblue] coordinates {
(4.5789E-01, 1.1821E-01)
(6.6842E-01, 9.4575E-02)
(8.6316E-01, 5.2657E-02)
(1.0421E+00, 2.2183E-02)
(1.1789E+00, 8.3588E-03)
(1.3368E+00, 1.4835E-03)
(1.4895E+00, 1.6852E-04)
(1.5842E+00, 2.8285E-05)
(1.6737E+00, 4.2465E-06)
(1.7684E+00, 3.4519E-07)
(1.8316E+00, 3.9213E-08)
(1.8684E+00, 6.2247E-09)
(1.9053E+00, 1E-09)
};
\addlegendentry{Regular LDPC-BC}
\addlegendentry{Regular}
\addplot+[mark=none, solid, thick, smooth] coordinates {
(0.0, 1.5e-1)
(0.3, 1.4e-1)
(0.5, 1.2e-1)
(0.6, 1.0e-1)
(0.7, 6e-2)
(0.8, 1e-2)
(0.85, 2e-3)
(0.9, 2e-4)
(0.95, 2e-5)
(1.0, 1.5e-6)
(1.05, 1e-7)
(1.1, 1e-8)
(1.2, 3e-9)
(1.5, 1.5e-9)
(2.0, 1e-9)
(2.5, 8e-10)
(3.0, 6e-10)
\addplot+[mark=none, solid, smooth, KITorange] coordinates {
(4.5789E-01, 1.1821E-01)
(6.4211E-01, 4.9800E-02)
(7.5263E-01, 1.2700E-02)
(8.1579E-01, 2.3177E-03)
(8.6842E-01, 3.5779E-04)
(9.1053E-01, 5.3716E-05)
(9.4737E-01, 4.8818E-06)
(9.8947E-01, 6.5555E-07)
(1.0421E+00, 9.5713E-08)
% (1.0684E+00, 2.9670E-08)
(1.1474E+00, 1.2499E-08)
(1.3000E+00, 7.1560E-09)
(1.4579E+00, 6.0535E-09)
% (1.6105E+00, 5E-09)
(1.9579E+00, 4E-09)
(2.2947E+00, 3.1876E-09)
% (2.8842E+00, 2.0403E-09)
};
\addlegendentry{Irregular LDPC-BC}
\addlegendentry{Irregular}
\draw[red, thick, rounded corners=12pt]
(axis cs:0.55, 2e-3) rectangle (axis cs:1.55, 5e-5);
\node[red, font=\small\bfseries, anchor=west] at (axis
cs:1.6, 4e-4) {Waterfall};
\draw[gray, densely dashed]
(axis cs:0.65, 2e-3) rectangle (axis cs:1.65, 5e-5);
\node[below] at (axis cs:1.15, 6e-5) {Waterfall};
\draw[red, thick, rounded corners=12pt]
(axis cs:1.6, 8e-9) rectangle (axis cs:3.2, 4e-10);
\node[red, font=\small\bfseries, anchor=west] at (axis
cs:3.3, 2e-9) {Error floor};
\draw[gray, densely dashed]
(axis cs:1, 6e-8) rectangle (axis cs:2, 2e-9);
\node[above] at (axis cs:1.5, 7e-8) {Error floor};
\end{axis}
\end{tikzpicture}
@@ -427,16 +415,17 @@ This is achieved by connecting some \acp{vn} of one spatial position to
\begin{align*}
\bm{H} =
\begin{pmatrix}
\bm{H}_0(1) & & & & \\
\vdots & \ddots & & & \\
\bm{H}_W(1) & & \bm{H}_0(L) & & \\
& \ddots & & & \\
& & \bm{H}_W(L) & & \\
\bm{H}_0(1) & & \\
\vdots & \ddots & \\
\bm{H}_W(1) & & \bm{H}_0(L) \\
& \ddots & \\
& & \bm{H}_W(L) \\
\end{pmatrix}
,
\end{align*}
%
where $W \in \mathbb{N}$ is the \textit{coupling width}.
where $W \in \mathbb{N}$ is the \textit{coupling width} and $L \in
\mathbb{N}$ is the number of spatial positions.
This construction results in a Tanner graph as depicted in
\autoref{fig:sc-ldpc-tanner}.
@@ -463,7 +452,7 @@ This construction results in a Tanner graph as depicted in
\coordinate (temp) at ($(vn01)!0.5!(vn02)$);
\node[CN, left = of temp] (cn00) {};
\node[CN, right = of temp] (cn00) {};
\node[CN, below = of cn00] (cn01) {};
\draw (vn00) -- (cn00);
@@ -473,19 +462,19 @@ This construction results in a Tanner graph as depicted in
\draw (vn02) -- (cn01);
\draw (vn04) -- (cn01);
\foreach \i in {1,2,3,4} {
\pgfmathtruncatemacro{\prev}{\i-1}
\foreach \i in {1,2,3} {
\pgfmathtruncatemacro{\previ}{\i-1}
\node[VN, right = 25mm of vn\previ 0] (vn\i0) {};
\node[VN, right = 25mm of vn\prev 0] (vn\i0) {};
\node[VN, below = of vn\i0] (vn\i1) {};
\node[VN, below = of vn\i1] (vn\i2) {};
\node[VN, below = of vn\i2] (vn\i3) {};
\node[VN, below = of vn\i3] (vn\i4) {};
\foreach \j in {1,...,4} {
\pgfmathtruncatemacro{\prevj}{\j-1}
\node[VN, below = of vn\i\prevj] (vn\i\j) {};
}
\coordinate (temp) at ($(vn\i1)!0.5!(vn\i2)$);
\node[CN, left = of temp] (cn\i0) {};
\node[CN, below = of cn\i0] (cn\i1) {};
\node[CN, right = of temp] (cn\i0) {};
\node[CN, below = of cn\i0] (cn\i1) {};
\draw (vn\i0) -- (cn\i0);
\draw (vn\i1) -- (cn\i0);
@@ -495,12 +484,33 @@ This construction results in a Tanner graph as depicted in
\draw (vn\i4) -- (cn\i1);
}
\foreach \i in {1,2,3,4} {
\pgfmathtruncatemacro{\prev}{\i-1}
\node[right = 25mm of vn30] (vn40) {};
\node[below = of vn40] (vn41) {};
\node[below = of vn41] (vn42) {};
\node[below = of vn42] (vn43) {};
\node[below = of vn43] (vn44) {};
\draw (vn\prev 3) -- (cn\i 0);
\draw (vn\prev 4) -- (cn\i 1);
\coordinate (temp) at ($(vn41)!0.5!(vn42)$);
\node[right = of temp] (cn40) {};
\node[below = of cn40] (cn41) {};
\foreach \i in {0,1,2} {
\pgfmathtruncatemacro{\next}{\i+1}
\pgfmathtruncatemacro{\nextnext}{\i+2}
\draw (vn\i 3) to[bend right] (cn\next 1);
\draw (vn\i 1) to[bend left] (cn\nextnext 0);
}
\draw (vn33) to[bend right] (cn41);
\node at ($(cn40)!0.5!(cn41)$) {\dots};
\draw[decorate, decoration={brace, amplitude=10pt}]
([xshift=-5mm,yshift=2mm]vn00.north) --
([xshift=5mm,yshift=2mm]vn00.north -| cn20.north)
node[midway, above=4mm] {W};
\end{tikzpicture}
\caption{
@@ -518,71 +528,36 @@ later passed to subsequent spatial positions during decoding.
This is precisely the effect that leads to the good performance of
\ac{sc}-\ac{ldpc} codes in the waterfall region \cite{costello_spatially_2014}.
\subsection{Belief Propagation}
\subsection{Iterative Decoding}
% TODO: Add exact reference
As mentioned above, \ac{ldpc} codes are generally decoded using
efficient iterative algorithms, something that is possilbe due to
their sparsity \cite[\red{WHERE?}]{ryan_channel_2009}.
Specifically, the \ac{spa} is a general decoder that provides
near-optimal performance across many different scenarios.
Often, the term \ac{bp} is used to denote a whole class of variants
of the \ac{spa}, e.g., the \ac{nms} algorithm.
\ac{ldpc} codes are generally decoded using efficient iterative
algorithms, something that is possilbe due to their sparsity
\cite[Sec.~5.3]{ryan_channel_2009}.
The algorithm originally proposed for this purpose by Gallager in
1960 is now known as the \ac{spa} \cite[5.4.1]{ryan_channel_2009},
also called \ac{bp}.
%
% Preliminaires (LLRs, etc.)
%
% - SPA uses symbol-wise MAP as decision criterion for each symmbol
% - Optimal when Tanner graph is a tree, suboptimal with cycles
% - Use of LLRs instead of probabilties directly
% - Actual algorithm
% - CNs: single parity-check codes; VNs: repetition codes
% - Algorithm
% TODO: Make this about the SPA or message passing decoders in general?
The \ac{spa} approximates the marginals of the
probability distributions of the \acp{vn} by passing
\textit{messages} along the edges of the Tanner graph \red{[CITATION]}.
The messages take the form of \acp{llr}
%
% TODO: Proper LLR equation
\begin{align*}
L(x) = \log\left( \frac{P(X=0)}{P(X=1)} \right)
.%
\end{align*}
%
\noindent\red{[LLRs]}
% Min-sum algorithm
% Approximation of CN update by min sum operation
%
% SPA equations
%
For \ac{sc}-\ac{ldpc} codes, the iterative decoding procedure is wrapped by a
windowing step. This is done to reduce the latency and memory and
also the overall computational complexity \cite{costello_spatially_2014}.
To this end, the \ac{pcm} is split into several overlapping windows.
During decoding, the messages that are passed along the edges of the
graph in the overlapping regions are kept in memory and used for the
decoding of subsequent blocks \cite[Sec.~III~C.]{costello_spatially_2014}.
\noindent\red{[SPA]}
%
% NMS equations
%
\noindent\red{[NMS]}
%
% SC-LDPC decoding
%
\noindent\red{[BP for SC-LDPC codes]}
\red{
\begin{itemize}
\item SPA and NMS algorithms
% TODO: Would it be better to split this into a separate section?
\item Sliding-window decoding of SC-LDPC codes
\cite{costello_spatially_2014} \cite{hassan_fully_2016}
\begin{itemize}
\item Windowed decoding
\item The core property of SC-LDPC decoders is the
passing of reliability information (in the form
of LLRs, i.e., soft information) from one window
to the next.
This way, the highly reliable information from
the initial windows is passed on to subsequent
windows \cite{costello_spatially_2014}.
\end{itemize}
\end{itemize}
}
% BP for SC-LDPC codes
% Windowed decoding
\section{Quantum Mechanics and Quantum Information Science}
\label{sec:Quantum Mechanics and Quantum Information Science}