diff --git a/src/thesis/chapters/2_fundamentals.tex b/src/thesis/chapters/2_fundamentals.tex index 597906a..c1c6195 100644 --- a/src/thesis/chapters/2_fundamentals.tex +++ b/src/thesis/chapters/2_fundamentals.tex @@ -416,32 +416,154 @@ good error floor behavior, and capacity approaching iterative decoding behavior, promising good performance in the waterfall region \cite[Intro.]{costello_spatially_2014}. -\red{ - \begin{itemize} - \item Core construction idea - \item Tanner graph \cite[Fig.~3]{costello_spatially_2014} + - PCM \cite[Eq. 1]{hassan_fully_2016} - \end{itemize} -} +The essential property of \ac{sc}-\ac{ldpc} codes is that codewords +from different \textit{spatial positions}, that would ordinarily be sent +one after the other independently, are coupled. +This is achieved by connecting some \acp{vn} of one spatial position to +\acp{cn} of another, resulting in a \ac{pcm} of the form +\cite[Eq.~1]{hassan_fully_2016} +% TODO: Find reference and make sure notation is correct +% +\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) & & \\ + \end{pmatrix} + , +\end{align*} +% +where $W \in \mathbb{N}$ is the \textit{coupling width}. +This construction results in a Tanner graph as depicted in +\autoref{fig:sc-ldpc-tanner}. + +% TODO: Create SC-LDPC graphic +\begin{figure}[t] + \centering + + \tikzset{ + VN/.style={ + circle, fill=KITgreen, minimum width=1mm, minimum height=1mm, + }, + CN/.style={ + rectangle, fill=KITblue, minimum width=1mm, minimum height=1mm, + }, + } + + % TODO: Coupling over more spatial positions + \begin{tikzpicture}[node distance=7mm and 1cm] + \node[VN] (vn00) {}; + \node[VN, below = of vn00] (vn01) {}; + \node[VN, below = of vn01] (vn02) {}; + \node[VN, below = of vn02] (vn03) {}; + \node[VN, below = of vn03] (vn04) {}; + + \coordinate (temp) at ($(vn01)!0.5!(vn02)$); + + \node[CN, left = of temp] (cn00) {}; + \node[CN, below = of cn00] (cn01) {}; + + \draw (vn00) -- (cn00); + \draw (vn01) -- (cn00); + \draw (vn03) -- (cn00); + \draw (vn01) -- (cn01); + \draw (vn02) -- (cn01); + \draw (vn04) -- (cn01); + + \foreach \i in {1,2,3,4} { + \pgfmathtruncatemacro{\prev}{\i-1} + + \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) {}; + + \coordinate (temp) at ($(vn\i1)!0.5!(vn\i2)$); + + \node[CN, left = of temp] (cn\i0) {}; + \node[CN, below = of cn\i0] (cn\i1) {}; + + \draw (vn\i0) -- (cn\i0); + \draw (vn\i1) -- (cn\i0); + \draw (vn\i3) -- (cn\i0); + \draw (vn\i1) -- (cn\i1); + \draw (vn\i2) -- (cn\i1); + \draw (vn\i4) -- (cn\i1); + } + + \foreach \i in {1,2,3,4} { + \pgfmathtruncatemacro{\prev}{\i-1} + + \draw (vn\prev 3) -- (cn\i 0); + \draw (vn\prev 4) -- (cn\i 1); + } + \end{tikzpicture} + + \caption{ + Visualization of the coupling between the Tanner graphs + of individual spatial positions. + } + \label{fig:sc-ldpc-tanner} +\end{figure} + +Note that at the first and last few spatial positions, some \acp{cn} +have lower degrees. +This leads to more reliable information about the +\acp{vn} at those positions, that, as we will see, is +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} % 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}. +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. -The \ac{spa} is an algorithm that approximates the marginals of the -probability distributions of the \acp{vn} by passing -\textit{messages} in the form of \ac{llr} values along the edges of -the Tanner graph. -\noindent\red{[SPA]} \\ -\red{[NMS]} \\ -\red{[BP for SC-LDPC codes]} +% +% Preliminaires (LLRs, etc.) +% + +% 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]} + +% +% SPA equations +% + +\noindent\red{[SPA]} + +% +% NMS equations +% + +\noindent\red{[NMS]} + +% +% SC-LDPC decoding +% + +\noindent\red{[BP for SC-LDPC codes]} \red{ \begin{itemize} diff --git a/src/thesis/main.tex b/src/thesis/main.tex index 32c2f26..e336750 100644 --- a/src/thesis/main.tex +++ b/src/thesis/main.tex @@ -19,7 +19,14 @@ % ]{biblatex} \usepackage{todonotes} -\usetikzlibrary{calc, positioning, arrows} +\usetikzlibrary{calc, positioning, arrows, fit} + +\usetikzlibrary{external} +\tikzexternalize + +\makeatletter +\renewcommand{\todo}[2][]{\tikzexternaldisable\@todo[#1]{#2}\tikzexternalenable} +\makeatother % %