From 6bf75ae5bd84f286e3bc9348a98fbf9fe62f5141 Mon Sep 17 00:00:00 2001 From: Andreas Tsouchlos Date: Tue, 18 Apr 2023 17:04:55 +0200 Subject: [PATCH] Restructured presentation --- latex/presentations/final/presentation.tex | 11 +- .../final/sections/decoding_algorithms.tex | 957 -------- .../final/sections/examination_results.tex | 1923 ----------------- .../final/sections/lp_dec_using_admm.tex | 1141 ++++++++++ .../final/sections/proximal_decoding.tex | 1705 +++++++++++++++ 5 files changed, 2854 insertions(+), 2883 deletions(-) create mode 100644 latex/presentations/final/sections/lp_dec_using_admm.tex create mode 100644 latex/presentations/final/sections/proximal_decoding.tex diff --git a/latex/presentations/final/presentation.tex b/latex/presentations/final/presentation.tex index 2d6b155..02f8ea2 100644 --- a/latex/presentations/final/presentation.tex +++ b/latex/presentations/final/presentation.tex @@ -288,12 +288,17 @@ \setnextsection{0} \input{sections/theoretical_background.tex} - \input{sections/decoding_algorithms.tex} - \input{sections/examination_results.tex} - %\input{sections/forthcoming_examination.tex} + \input{sections/proximal_decoding.tex} + \input{sections/lp_dec_using_admm.tex} \input{sections/comparison.tex} \input{sections/question_slide.tex} +% \input{sections/decoding_algorithms.tex} +% \input{sections/examination_results.tex} + %\input{sections/forthcoming_examination.tex} +% \input{sections/comparison.tex} + + \begin{frame}[allowframebreaks] \frametitle{Bibliography} \printbibliography[heading=none] diff --git a/latex/presentations/final/sections/decoding_algorithms.tex b/latex/presentations/final/sections/decoding_algorithms.tex index 784baaf..8b13789 100644 --- a/latex/presentations/final/sections/decoding_algorithms.tex +++ b/latex/presentations/final/sections/decoding_algorithms.tex @@ -1,958 +1 @@ -\section{Decoding Algorithms}% -\label{sec:Decoding Algorithms} - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\subsection{Proximal Decoding}% -\label{sub:Alg Proximal Decoding} - -\begin{frame}[t] - \frametitle{Proximal Decoding: General Idea \cite{proximal_paper}} - - \vspace*{-0.3cm} - - \begin{itemize} - \item MAP rule as continuous maximization problem: - \begin{align*} - \hat{\boldsymbol{x}} - &= \argmax_{\tilde{\boldsymbol{x}}\in\mathbb{R}^n} - f_{\boldsymbol{Y}}\left( \boldsymbol{y} | \tilde{\boldsymbol{x}} \right) - f_{\boldsymbol{X}}\left( \tilde{\boldsymbol{x}} \right)\\ - &= \argmax_{\tilde{\boldsymbol{x}}\in\mathbb{R}^n} - e^{-L\left( \boldsymbol{y} | \tilde{\boldsymbol{x}}\right)} - f_{\boldsymbol{X}}\left( \tilde{\boldsymbol{x}} \right), - \hspace{5mm} L\left( \boldsymbol{y} | \tilde{\boldsymbol{x}} \right) - = - \ln\left( f_{\boldsymbol{Y}} - \left( \boldsymbol{y} | \tilde{\boldsymbol{x}} \right) \right) - \end{align*} - \item Approximation of prior PDF: - \begin{align*} - f_{\boldsymbol{X}}\left( \tilde{\boldsymbol{x}} \right) - = \frac{1}{\left| \mathcal{C} \right| } - \sum_{\boldsymbol{c} \in \mathcal{C} } - \delta\left( \tilde{\boldsymbol{x}} - \left( -1 \right)^{\boldsymbol{c}} - \right) - \approx \frac{1}{Z} e^{-\gamma h\left( \tilde{\boldsymbol{x}} \right) } - \end{align*} - \item Code constraint polynomial: - \begin{minipage}[c]{0.56\textwidth} - \raggedright - - \begin{align*} - h\left( \tilde{\boldsymbol{x}} \right) = - \underbrace{\sum_{i=1}^{n} \left( \tilde{x}_i^2 - 1 \right)^2}_{\text{Bipolar - constraint}} - + \underbrace{\sum_{j=1}^{m} \left[ \left( - \prod_{i\in N_v\left( j \right)} \tilde{x}_i\right) -1 \right]^2} - _{\text{Parity constraint}}, - \end{align*} - \end{minipage}% - \begin{minipage}[c]{0.4\textwidth} - \raggedleft - \begin{flalign*} - \mathcal{I} &:= \left[1\text{ : }n\right], - \hspace{2mm} \mathcal{J} := \left[1\text{ : }m\right] \\ - N_v\left( j \right) &:= \left\{i | i\in \mathcal{I}, - \boldsymbol{H}_{j,i} = 1 - \right\}, j\in\mathcal{J}\\ - \end{flalign*} - \end{minipage} - \hfill - \end{itemize} -\end{frame} - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\begin{frame}[t] - \frametitle{Proximal Decoding: General Idea} - - \begin{itemize} - \item Objective function: - \begin{align*} - g\left( \tilde{\boldsymbol{x}} \right) - = L\left( \boldsymbol{y} | \tilde{\boldsymbol{x}} \right) - + \gamma h\left( \tilde{\boldsymbol{x}} \right) - \end{align*} - \note{Notational difference between $f$ and $f_X$ or $f_Y$} - \item Proximal operator \cite{proximal_algorithms}: - \begin{align*} - \text{prox}_{\gamma h} \left( \tilde{\boldsymbol{x}} \right) &\equiv - \argmin_{\boldsymbol{t}\in\mathbb{R}^n} - \gamma h\left( \boldsymbol{t} \right) + \frac{1}{2} \lVert \boldsymbol{t} - - \tilde{\boldsymbol{x}} \rVert^2 \\ - &\approx \tilde{\boldsymbol{x}} - - \gamma \nabla h\left( \tilde{\boldsymbol{x}} \right), - \hspace{5mm} \gamma \text{ small} - \end{align*} - \item Iterative decoding process: - \begin{align*} - \boldsymbol{r} &\leftarrow \boldsymbol{s} - - \omega \nabla L\left( \boldsymbol{y} | \boldsymbol{s} - \right), \hspace{5mm} \omega > 0 - \hspace{10mm} \text{``Gradient descent step''}\\ - \boldsymbol{s} &\leftarrow \boldsymbol{r} - - \gamma \nabla h\left( \boldsymbol{r} - \right), \hspace{9mm} \gamma > 0 - \hspace{10mm} \text{``Code proximal step''} - \end{align*} - \end{itemize} -\end{frame} - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\begin{frame}[t, fragile] - \frametitle{Proximal Decoding: Algorithm} - \begin{itemize} - \item Iterative decoding algorithm \cite{proximal_paper}: - \end{itemize} - - \vspace{2mm} - \begin{algorithm}[caption={}, label={}] -$\boldsymbol{s} \leftarrow \boldsymbol{0}$ -for $K$ iterations do - $\boldsymbol{r} \leftarrow \boldsymbol{s} - \omega \nabla L \left( \boldsymbol{y} \mid \boldsymbol{s} \right) $ - $\boldsymbol{s} \leftarrow \boldsymbol{r} - \gamma \nabla h\left( \boldsymbol{r} \right) $ - $\boldsymbol{\hat{x}} \leftarrow \text{sign}\left( \boldsymbol{s} \right) $ - if $\boldsymbol{H}\boldsymbol{\hat{c}} = \boldsymbol{0}$ do - return $\boldsymbol{\hat{c}}$ - end if -end for -return $\boldsymbol{\hat{c}}$ - \end{algorithm} -\end{frame} - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\subsection{LP Decoding using ADMM}% -\label{sub:LP Decoding using ADMM} - -\begin{frame}[t] - \frametitle{LP Decoding \cite{feldman_paper}} - - \begin{itemize} - \item General reformulation of ML decoding as a linear program (LP) -% \item Codeword polytope: -% \begin{align*} -% \text{poly}\left( \mathcal{C} \right) = -% \left\{ -% \sum_{\boldsymbol{c}\in\mathcal{C}}\alpha_{\boldsymbol{c}} -% \boldsymbol{c} : \alpha_{\boldsymbol{c}} \ge 0, -% \sum_{\boldsymbol{c}\in\mathcal{C}}\alpha_{\boldsymbol{c}} = 1 -% \right\}, -% \hspace{5mm} \alpha_{\boldsymbol{c}} \in \mathbb{R}_{\ge 0} -% \end{align*} - \item Cost function: - \begin{align*} - \boldsymbol{\gamma}^{T} \boldsymbol{c} = \sum_{i=1}^{n} - \gamma_i c_i, - \hspace{5mm}\gamma_i = \ln\left( - \frac{f_{Y_i \mid C_i}\left( y_i | c_i = 0 \right) } - {f_{Y_i \mid C_i}\left(y_i | c_i=1 \right) } \right) - \end{align*} - \item Exact \textit{integer linear programming} (ILP) formulation of ML decoding: - \begin{align*} - &\text{minimize } \boldsymbol{\gamma}^\text{T} \boldsymbol{c}\\ - &\text{subject to } \boldsymbol{c}\in \mathcal{C} - \end{align*} - \item Goal: relaxation of constraints to make a practical solution to the problem feasible - \end{itemize} -\end{frame} - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\begin{frame}[t] - \frametitle{LP Relaxation: Motivation} - - \vspace*{-1cm} - - \begin{gather*} -% \boldsymbol{G} = -% \begin{bmatrix} -% 0 & 1 & 1 -% \end{bmatrix} \hspace{1cm} - \boldsymbol{H} = - \begin{bmatrix} - 1 & 1 & 1\\ - 0 & 1 & 1 - \end{bmatrix} \hspace{1cm} -% \\[1em] - \mathcal{C} = \left\{ \begin{bmatrix} 0 \\ 0 \\ 0 \end{bmatrix}, - \begin{bmatrix} 0 \\ 1 \\ 1 \end{bmatrix} \right\} - \end{gather*}% - - \vspace*{-5mm} - - \begin{figure}[H] - \centering - - \begin{subfigure}[c]{0.4\textwidth} - \centering - - \tikzstyle{codeword} = [color=KITblue, fill=KITblue, - draw, circle, inner sep=0pt, minimum size=4pt] - - \tdplotsetmaincoords{60}{25} - \begin{tikzpicture}[scale=0.9, tdplot_main_coords] - \tikzstyle{every node}=[font=\normalsize] - - % Cube - - \coordinate (p000) at (0, 0, 0); - \coordinate (p001) at (0, 0, 2); - \coordinate (p010) at (0, 2, 0); - \coordinate (p011) at (0, 2, 2); - \coordinate (p100) at (2, 0, 0); - \coordinate (p101) at (2, 0, 2); - \coordinate (p110) at (2, 2, 0); - \coordinate (p111) at (2, 2, 2); - - \draw[] (p000) -- (p100); - \draw[] (p100) -- (p101); - \draw[] (p101) -- (p001); - \draw[] (p001) -- (p000); - - \draw[dashed] (p010) -- (p110); - \draw[] (p110) -- (p111); - \draw[] (p111) -- (p011); - \draw[dashed] (p011) -- (p010); - - \draw[dashed] (p000) -- (p010); - \draw[] (p100) -- (p110); - \draw[] (p101) -- (p111); - \draw[] (p001) -- (p011); - - % Polytope Vertices - - \node[codeword] (c000) at (p000) {}; - \node[codeword] (c011) at (p011) {}; - - % Polytope Annotations - - \node[color=KITblue, below=0cm of c000] {$\left( 0, 0, 0 \right) $}; - \node[color=KITblue, above=0cm of c011] {$\left( 0, 1, 1 \right) $}; - \end{tikzpicture} - - \caption{Set of all codewords $\mathcal{C}$} - \label{fig:lp:poly:exact_ilp} - \end{subfigure}% - \begin{subfigure}[c]{0.16\textwidth} - \centering - \begin{tikzpicture} - \node (relaxation) at (0, 0) {Relaxation}; - - \draw (-1.5, 0) -- (relaxation); - \draw[->] (relaxation) -- (1.5, 0); - \end{tikzpicture} - \end{subfigure}% - \begin{subfigure}[c]{0.4\textwidth} - \centering - - \tikzstyle{codeword} = [color=KITblue, fill=KITblue, - draw, circle, inner sep=0pt, minimum size=4pt] - - \tdplotsetmaincoords{60}{25} - \begin{tikzpicture}[scale=0.9, tdplot_main_coords] - \tikzstyle{every node}=[font=\normalsize] - - % Cube - - \coordinate (p000) at (0, 0, 0); - \coordinate (p001) at (0, 0, 2); - \coordinate (p010) at (0, 2, 0); - \coordinate (p011) at (0, 2, 2); - \coordinate (p100) at (2, 0, 0); - \coordinate (p101) at (2, 0, 2); - \coordinate (p110) at (2, 2, 0); - \coordinate (p111) at (2, 2, 2); - - \draw[] (p000) -- (p100); - \draw[] (p100) -- (p101); - \draw[] (p101) -- (p001); - \draw[] (p001) -- (p000); - - \draw[dashed] (p010) -- (p110); - \draw[] (p110) -- (p111); - \draw[] (p111) -- (p011); - \draw[dashed] (p011) -- (p010); - - \draw[dashed] (p000) -- (p010); - \draw[] (p100) -- (p110); - \draw[] (p101) -- (p111); - \draw[] (p001) -- (p011); - - % Polytope Vertices - - \node[codeword] (c000) at (p000) {}; - \node[codeword] (c011) at (p011) {}; - - % Polytope Edges - - \draw[line width=1pt, color=KITblue] (c000) -- (c011); - - % Polytope Annotations - - \node[color=KITblue, below=0cm of c000] {$\left( 0, 0, 0 \right) $}; - \node[color=KITblue, above=0cm of c011] {$\left( 0, 1, 1 \right) $}; - \end{tikzpicture} - - \caption{Codeword polytope $\text{poly}\left( \mathcal{C} \right) $} - \label{fig:lp:poly:exact} - \end{subfigure} - \end{figure} - -% \vspace*{-5mm} - - \begin{align*} - \text{poly}\left( \mathcal{C} \right) = - \left\{ - \sum_{\boldsymbol{c}\in\mathcal{C}}\alpha_{\boldsymbol{c}} - \boldsymbol{c} : \alpha_{\boldsymbol{c}} \ge 0, - \sum_{\boldsymbol{c}\in\mathcal{C}}\alpha_{\boldsymbol{c}} = 1 - \right\}, - \hspace{5mm} \alpha_{\boldsymbol{c}} \in \mathbb{R}_{\ge 0} - \end{align*} -\end{frame} - -\begin{frame}[t] - \frametitle{LP Relaxation} - - \vspace*{-1cm} - - \begin{figure}[H] - \centering - - \begin{subfigure}[c]{0.48\textwidth} - \centering - - \begin{minipage}{\textwidth} - \centering - - \tikzstyle{codeword} = [color=KITblue, fill=KITblue, - draw, circle, inner sep=0pt, minimum size=4pt] - - \tdplotsetmaincoords{60}{25} - \begin{tikzpicture}[scale=0.7, tdplot_main_coords] - \tikzstyle{every node}=[font=\normalsize] - - % Cube - - \coordinate (p000) at (0, 0, 0); - \coordinate (p001) at (0, 0, 2); - \coordinate (p010) at (0, 2, 0); - \coordinate (p011) at (0, 2, 2); - \coordinate (p100) at (2, 0, 0); - \coordinate (p101) at (2, 0, 2); - \coordinate (p110) at (2, 2, 0); - \coordinate (p111) at (2, 2, 2); - - \draw[] (p000) -- (p100); - \draw[] (p100) -- (p101); - \draw[] (p101) -- (p001); - \draw[] (p001) -- (p000); - - \draw[dashed] (p010) -- (p110); - \draw[] (p110) -- (p111); - \draw[] (p111) -- (p011); - \draw[dashed] (p011) -- (p010); - - \draw[dashed] (p000) -- (p010); - \draw[] (p100) -- (p110); - \draw[] (p101) -- (p111); - \draw[] (p001) -- (p011); - - % Polytope Vertices - - \node[codeword] (c000) at (p000) {}; - \node[codeword] (c101) at (p101) {}; - \node[codeword] (c110) at (p110) {}; - \node[codeword] (c011) at (p011) {}; - - % Polytope Edges & Faces - - \draw[line width=1pt, color=KITblue] (c000) -- (c101); - \draw[line width=1pt, color=KITblue] (c000) -- (c110); - \draw[line width=1pt, color=KITblue] (c000) -- (c011); - - \draw[line width=1pt, color=KITblue] (c101) -- (c110); - \draw[line width=1pt, color=KITblue] (c101) -- (c011); - - \draw[line width=1pt, color=KITblue] (c011) -- (c110); - - \fill[KITblue, opacity=0.15] (p000) -- (p101) -- (p011) -- cycle; - \fill[KITblue, opacity=0.15] (p000) -- (p110) -- (p101) -- cycle; - \fill[KITblue, opacity=0.15] (p110) -- (p011) -- (p101) -- cycle; - - % Polytope Annotations - - \node[color=KITblue, below=0cm of c000] {$\left( 0, 0, 0 \right) $}; - \node[color=KITblue, right=0.07cm of c101] {$\left( 1, 0, 1 \right) $}; - \node[color=KITblue, right=0cm of c110] {$\left( 1, 1, 0 \right) $}; - \node[color=KITblue, above=0cm of c011] {$\left( 0, 1, 1 \right) $}; - - \node[color=KITblue, align=center] at (-4,1) - {$j=1$\\ $\left( c_1 + c_2+ c_3 = 0 \right) $}; - \end{tikzpicture} - \end{minipage} - - \vspace{5mm} - - \begin{minipage}{\textwidth} - \centering - - \tikzstyle{codeword} = [color=KITblue, fill=KITblue, - draw, circle, inner sep=0pt, minimum size=4pt] - - \tdplotsetmaincoords{60}{25} - \begin{tikzpicture}[scale=0.7, tdplot_main_coords] - \tikzstyle{every node}=[font=\normalsize] - - % Cube - - \coordinate (p000) at (0, 0, 0); - \coordinate (p001) at (0, 0, 2); - \coordinate (p010) at (0, 2, 0); - \coordinate (p011) at (0, 2, 2); - \coordinate (p100) at (2, 0, 0); - \coordinate (p101) at (2, 0, 2); - \coordinate (p110) at (2, 2, 0); - \coordinate (p111) at (2, 2, 2); - - \draw[] (p000) -- (p100); - \draw[] (p100) -- (p101); - \draw[] (p101) -- (p001); - \draw[] (p001) -- (p000); - - \draw[dashed] (p010) -- (p110); - \draw[] (p110) -- (p111); - \draw[] (p111) -- (p011); - \draw[dashed] (p011) -- (p010); - - \draw[dashed] (p000) -- (p010); - \draw[] (p100) -- (p110); - \draw[] (p101) -- (p111); - \draw[] (p001) -- (p011); - - % Polytope Vertices - - \node[codeword] (c000) at (p000) {}; - \node[codeword] (c011) at (p011) {}; - \node[codeword] (c100) at (p100) {}; - \node[codeword] (c111) at (p111) {}; - - % Polytope Edges & Faces - - \draw[line width=1pt, color=KITblue] (c000) -- (c011); - \draw[line width=1pt, color=KITblue] (c000) -- (c100); - \draw[line width=1pt, color=KITblue] (c100) -- (c111); - \draw[line width=1pt, color=KITblue] (c111) -- (c011); - - \fill[KITblue, opacity=0.2] (p000) -- (p100) -- (p111) -- (p011) -- cycle; - - % Polytope Annotations - - \node[color=KITblue, below=0cm of c000] {$\left( 0, 0, 0 \right) $}; - \node[color=KITblue, above=0cm of c011] {$\left( 0, 1, 1 \right) $}; - \node[color=KITblue, below=0cm of c100] {$\left( 1, 0, 0 \right) $}; - \node[color=KITblue, above=0cm of c111] {$\left( 1, 1, 1 \right) $}; - - \node[color=KITblue, align=center] at (-4,1) - {$j=2$\\ $\left(c_2 + c_3 = 0\right)$}; - \end{tikzpicture} - \end{minipage} - - \caption{Local codeword polytopes $\mathcal{P}_{d_j}$ of the check nodes} - \label{fig:lp:poly:local} - \end{subfigure}% - \begin{subfigure}[c]{0.18\textwidth} - \centering - \begin{tikzpicture} - \draw[densely dashed] (0, -2) -- (0, 2); - \draw[densely dashed] (-0.5, -2) -- (0, -2); - \draw[densely dashed] (-0.5, 2) -- (0, 2); - - \node (intersection) at (1.5, 0) {Intersection}; - - \draw[densely dashed] (0, 0) -- (intersection); - \draw[densely dashed, ->] (intersection) -- (3,0); - \end{tikzpicture} - \end{subfigure}% - \begin{subfigure}[c]{0.32\textwidth} - \centering - - \vspace*{1.5cm} - \tikzstyle{codeword} = [color=KITblue, fill=KITblue, - draw, circle, inner sep=0pt, minimum size=4pt] - \tikzstyle{pseudocodeword} = [color=KITred, fill=KITred, - draw, circle, inner sep=0pt, minimum size=4pt] - - \tdplotsetmaincoords{60}{25} - \begin{tikzpicture}[scale=0.9, tdplot_main_coords] - \tikzstyle{every node}=[font=\normalsize] - - % Cube - - \coordinate (p000) at (0, 0, 0); - \coordinate (p001) at (0, 0, 2); - \coordinate (p010) at (0, 2, 0); - \coordinate (p011) at (0, 2, 2); - \coordinate (p100) at (2, 0, 0); - \coordinate (p101) at (2, 0, 2); - \coordinate (p110) at (2, 2, 0); - \coordinate (p111) at (2, 2, 2); - - \draw[] (p000) -- (p100); - \draw[] (p100) -- (p101); - \draw[] (p101) -- (p001); - \draw[] (p001) -- (p000); - - \draw[dashed] (p010) -- (p110); - \draw[] (p110) -- (p111); - \draw[] (p111) -- (p011); - \draw[dashed] (p011) -- (p010); - - \draw[dashed] (p000) -- (p010); - \draw[] (p100) -- (p110); - \draw[] (p101) -- (p111); - \draw[] (p001) -- (p011); - - % Polytope Vertices - - \node[codeword] (c000) at (p000) {}; - \node[codeword] (c011) at (p011) {}; - \node[pseudocodeword] (cpseudo) at (2, 1, 1) {}; - - % Polytope Edges & Faces - - \draw[line width=1pt, color=KITblue] (c000) -- (c011); - \draw[line width=1pt, color=KITred] (cpseudo) -- (c000); - \draw[line width=1pt, color=KITred] (cpseudo) -- (c011); - - \fill[KITred, opacity=0.2] (p000) -- (p011) -- (2,1,1) -- cycle; - - % Polytope Annotations - - \node[color=KITblue, below=0cm of c000] {$\left( 0, 0, 0 \right) $}; - \node[color=KITblue, above=0cm of c011] {$\left( 0, 1, 1 \right) $}; - \node[color=KITred, right=0cm of cpseudo] - {$\left( 1, \frac{1}{2}, \frac{1}{2} \right) $}; - \end{tikzpicture} - - \vspace*{-5mm} - - \begin{gather*} - \boldsymbol{T}_j\tilde{\boldsymbol{c}} \in \mathcal{P}_{d_j}, \hspace{2mm} - \forall j\in \mathcal{J} \\[0.5em] - \boldsymbol{T}_j \in \mathbb{F}_2^{d_j \times n} - \end{gather*} - - \vspace*{-2mm} - - \caption{Relaxed codeword polytope $\overline{Q}$} - \label{fig:lp:poly:relaxed} - \end{subfigure} - \end{figure} -\end{frame} - - -\begin{frame}[t] - \frametitle{LP Relaxation} - - \vspace{-5mm} - - \begin{figure}[H] - \centering - - \begin{subfigure}[t]{0.3\textwidth} - \centering - \tikzstyle{codeword} = [color=KITblue, fill=KITblue, - draw, circle, inner sep=0pt, minimum size=4pt] - \tdplotsetmaincoords{60}{25} - \begin{tikzpicture}[scale=0.8, tdplot_main_coords] - \tikzstyle{every node}=[font=\normalsize] - - % Cube - - \coordinate (p000) at (0, 0, 0); - \coordinate (p001) at (0, 0, 2); - \coordinate (p010) at (0, 2, 0); - \coordinate (p011) at (0, 2, 2); - \coordinate (p100) at (2, 0, 0); - \coordinate (p101) at (2, 0, 2); - \coordinate (p110) at (2, 2, 0); - \coordinate (p111) at (2, 2, 2); - - \draw[] (p000) -- (p100); - \draw[] (p100) -- (p101); - \draw[] (p101) -- (p001); - \draw[] (p001) -- (p000); - - \draw[dashed] (p010) -- (p110); - \draw[] (p110) -- (p111); - \draw[] (p111) -- (p011); - \draw[dashed] (p011) -- (p010); - - \draw[dashed] (p000) -- (p010); - \draw[] (p100) -- (p110); - \draw[] (p101) -- (p111); - \draw[] (p001) -- (p011); - - % Polytope Vertices - - \node[codeword] (c000) at (p000) {}; - \node[codeword] (c011) at (p011) {}; - - % Polytope Annotations - - \node[color=KITblue, below=0cm of c000] {$\left( 0, 0, 0 \right) $}; - \node[color=KITblue, above=0cm of c011] {$\left( 0, 1, 1 \right) $}; - \end{tikzpicture} - - \begin{align*} - \text{minimize}\hspace{2mm} &\boldsymbol{\gamma}^\text{T} \boldsymbol{c} \\ - \text{subject to}\hspace{2mm} &\boldsymbol{c} \in \mathcal{C} - \end{align*} - - \caption{\textit{Integer linear program} (ILP)} - \end{subfigure}% - \hfill% - \begin{subfigure}[t]{0.3\textwidth} - \centering - \tikzstyle{codeword} = [color=KITblue, fill=KITblue, - draw, circle, inner sep=0pt, minimum size=4pt] - \tdplotsetmaincoords{60}{25} - \begin{tikzpicture}[scale=0.8, tdplot_main_coords] - \tikzstyle{every node}=[font=\normalsize] - - % Cube - - \coordinate (p000) at (0, 0, 0); - \coordinate (p001) at (0, 0, 2); - \coordinate (p010) at (0, 2, 0); - \coordinate (p011) at (0, 2, 2); - \coordinate (p100) at (2, 0, 0); - \coordinate (p101) at (2, 0, 2); - \coordinate (p110) at (2, 2, 0); - \coordinate (p111) at (2, 2, 2); - - \draw[] (p000) -- (p100); - \draw[] (p100) -- (p101); - \draw[] (p101) -- (p001); - \draw[] (p001) -- (p000); - - \draw[dashed] (p010) -- (p110); - \draw[] (p110) -- (p111); - \draw[] (p111) -- (p011); - \draw[dashed] (p011) -- (p010); - - \draw[dashed] (p000) -- (p010); - \draw[] (p100) -- (p110); - \draw[] (p101) -- (p111); - \draw[] (p001) -- (p011); - - % Polytope Vertices - - \node[codeword] (c000) at (p000) {}; - \node[codeword] (c011) at (p011) {}; - - % Polytope Edges - - \draw[line width=1pt, color=KITblue] (c000) -- (c011); - - % Polytope Annotations - - \node[color=KITblue, below=0cm of c000] {$\left( 0, 0, 0 \right) $}; - \node[color=KITblue, above=0cm of c011] {$\left( 0, 1, 1 \right) $}; - \end{tikzpicture} - - \begin{align*} - \text{minimize}\hspace{2mm} &\boldsymbol{\gamma}^\text{T} \tilde{\boldsymbol{c}} \\ - \text{subject to}\hspace{2mm} &\tilde{\boldsymbol{c}} \in - \text{poly}\left( \mathcal{C} \right) &\ - \end{align*} - - \caption{Motivation} - \end{subfigure}% - \hfill% - \begin{subfigure}[t]{0.3\textwidth} - \centering - \tikzstyle{codeword} = [color=KITblue, fill=KITblue, - draw, circle, inner sep=0pt, minimum size=4pt] - \tikzstyle{pseudocodeword} = [color=KITred, fill=KITred, - draw, circle, inner sep=0pt, minimum size=4pt] - \tdplotsetmaincoords{60}{25} - \begin{tikzpicture}[scale=0.8, tdplot_main_coords] - \tikzstyle{every node}=[font=\normalsize] - - % Cube - - \coordinate (p000) at (0, 0, 0); - \coordinate (p001) at (0, 0, 2); - \coordinate (p010) at (0, 2, 0); - \coordinate (p011) at (0, 2, 2); - \coordinate (p100) at (2, 0, 0); - \coordinate (p101) at (2, 0, 2); - \coordinate (p110) at (2, 2, 0); - \coordinate (p111) at (2, 2, 2); - - \draw[] (p000) -- (p100); - \draw[] (p100) -- (p101); - \draw[] (p101) -- (p001); - \draw[] (p001) -- (p000); - - \draw[dashed] (p010) -- (p110); - \draw[] (p110) -- (p111); - \draw[] (p111) -- (p011); - \draw[dashed] (p011) -- (p010); - - \draw[dashed] (p000) -- (p010); - \draw[] (p100) -- (p110); - \draw[] (p101) -- (p111); - \draw[] (p001) -- (p011); - - % Polytope Vertices - - \node[codeword] (c000) at (p000) {}; - \node[codeword] (c011) at (p011) {}; - \node[pseudocodeword] (cpseudo) at (2, 1, 1) {}; - - % Polytope Edges & Faces - - \draw[line width=1pt, color=KITblue] (c000) -- (c011); - \draw[line width=1pt, color=KITred] (cpseudo) -- (c000); - \draw[line width=1pt, color=KITred] (cpseudo) -- (c011); - - \fill[KITred, opacity=0.2] (p000) -- (p011) -- (2,1,1) -- cycle; - - % Polytope Annotations - - \node[color=KITblue, below=0cm of c000] {$\left( 0, 0, 0 \right) $}; - \node[color=KITblue, above=0cm of c011] {$\left( 0, 1, 1 \right) $}; - \node[color=KITred, right=0cm of cpseudo] - {$\left( 1, \frac{1}{2}, \frac{1}{2} \right) $}; - \end{tikzpicture} - - \begin{align*} - \text{minimize}\hspace{2mm} &\boldsymbol{\gamma}^\text{T} \tilde{\boldsymbol{c}} \\ - \text{subject to}\hspace{2mm} & - \boldsymbol{T}_j\tilde{\boldsymbol{c}} \in \mathcal{P}_{d_j}, \hspace{2mm} - \forall j\in \mathcal{J} - \end{align*} - - \caption{\textit{Linear code linear program} (LCLP)} - \end{subfigure}% - \end{figure} - - \vspace*{-5.75cm} - \begin{figure}[H] - \centering - - \begin{subfigure}[t]{0.36\textwidth} - \centering - - \begin{tikzpicture} - \node (relaxation) at (0, 0) {Relaxation}; - - \draw[->] (-1, -0.25) -- (1, -0.25); -% \draw (-1.5, 0) -- (relaxation); -% \draw[->] (relaxation) -- (1.5, 0); - \end{tikzpicture} - \end{subfigure}% - \begin{subfigure}[t]{0.31\textwidth} - \centering - \begin{tikzpicture} - \node (relaxation) at (0, 0) {Relaxation}; - - \draw[->] (-1, -0.25) -- (1, -0.25); -% \draw (-1.5, 0) -- (relaxation); -% \draw[->] (relaxation) -- (1.5, 0); - \end{tikzpicture} - \end{subfigure}% - \end{figure} - -\end{frame} - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\begin{frame}[t] - \frametitle{LP Decoding using ADMM} - - \begin{itemize} - \item Solution using the \textit{alternating direction method of multipliers} (ADMM) - \item Slight reformulation of the LCLP: - \begin{align*} - \begin{aligned} - \text{minimize}\hspace{2mm} &\boldsymbol{\gamma}^\text{T}\tilde{\boldsymbol{c}} - + \sum_{j\in\mathcal{J}} g_j\left( \boldsymbol{z}_j \right) \\ - \text{subject to}\hspace{2mm} & - \boldsymbol{T}_j\tilde{\boldsymbol{c}} = \boldsymbol{z}_j, \hspace{2mm} - \forall j\in \mathcal{J} - \end{aligned}\hspace{2mm},\hspace{1cm} - g_j\left( \boldsymbol{t} \right) := \begin{cases} - 0, & \boldsymbol{t} \in \mathcal{P}_{d_j} \\ - +\infty, & \boldsymbol{t} \not\in \mathcal{P}_{d_j} - \end{cases} - \end{align*} - \item Iterative algorithm: - \begin{alignat*}{3} - \tilde{\boldsymbol{c}} &\leftarrow \argmin_{\tilde{\boldsymbol{c}}} - \left( \boldsymbol{\gamma}^\text{T}\tilde{\boldsymbol{c}} - + \frac{\mu}{2}\sum_{j\in\mathcal{J}} \left\Vert - \boldsymbol{T}_j\tilde{\boldsymbol{c}} - \boldsymbol{z}_j - + \boldsymbol{u}_j \right\Vert \right) \\ - \boldsymbol{z}_j &\leftarrow \argmin_{\boldsymbol{z}_j} - \left( g\left( \boldsymbol{z}_j \right) - + \frac{\mu}{2} \left\Vert \boldsymbol{T}_j \tilde{\boldsymbol{c}} - - \boldsymbol{z}_j + \boldsymbol{u}_j \right\Vert \right), - \hspace{5mm} &&\forall j\in\mathcal{J} \\ - \boldsymbol{u}_j &\leftarrow \boldsymbol{u}_j - + \boldsymbol{T}_j\tilde{\boldsymbol{c}} - \boldsymbol{z}_j, - \hspace{5mm} &&\forall j\in\mathcal{J} -% \left( g\left( \boldsymbol{\boldsymbol{z}_j} \right) -% + \frac{\mu}{2} \left\Vert \boldsymbol{T}_j\tilde{\boldsymbol{c}} -% - \boldsymbol{z}_j + \boldsymbol{u}_j\right\Vert \right) - \end{alignat*} - \end{itemize} -\end{frame} - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\begin{frame}[t] - \frametitle{LP Decoding using ADMM} - - \vspace*{-7mm} - - \begin{itemize} - \item Convergence properties enhanced by over-relaxation with parameter $\rho$ - \item Simplified rules% - \footnote{$\left( \boldsymbol{z}_j \right)_i $ is a slight abuse of notation. - What is actually meant is the component of $\boldsymbol{z}_j$ that is associated - with the VN $i$, i.e., $\left( \boldsymbol{T}_j^\text{T} \boldsymbol{z}_j \right)_i$.\\ - The same is true for $\left( \boldsymbol{u}_j \right)_i$}% - : - - \begin{alignat*}{3} - \tilde{c}_i &\leftarrow \frac{1}{\left| N_v\left( i \right) \right|} \left( - \sum_{j\in N_v\left( i \right) } \Big( \left( \boldsymbol{z}_j \right)_i - - \left( \boldsymbol{u}_j \right)_i \Big) - - \frac{\gamma_i}{\mu} \right) - \hspace{5mm} && \forall i\in\mathcal{I} \\ - \boldsymbol{z}_j &\leftarrow \Pi_{\mathcal{P}_{d_j}}\left( - \boldsymbol{T}_j\tilde{\boldsymbol{c}} + \boldsymbol{u}_j \right) - \hspace{5mm} && \forall j\in\mathcal{J} \\ - \boldsymbol{u}_j &\leftarrow \boldsymbol{u}_j - + \boldsymbol{T}_j\tilde{\boldsymbol{c}} - - \boldsymbol{z}_j - \hspace{5mm} && \forall j\in\mathcal{J} - \end{alignat*} - \item The projections $\Pi_{\mathcal{P}_{d_j}}, \hspace{1mm} j\in\mathcal{J}$ - are the main computational effort - \item Many approaches exist \cite{original_admm}, \cite{efficient_lp_dec_admm}, - \cite{lautern} - \item The approach chosen here is the one described in \cite{original_admm} - \end{itemize} -\end{frame} - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%\begin{frame}[t] -% \frametitle{LP Relaxation} -% -% \begin{minipage}[c]{0.6\linewidth} -% \begin{itemize} -% \item Set of all variable nodes incident to a check node: -% \begin{align*} -% N\left( j \right) \equiv \left\{ -% i | i\in \mathcal{I}, -% \boldsymbol{H}_{j,i} = 1 -% \right\}, -% j \in \mathcal{J} -% \end{align*} -% \begin{align*} -% S \subseteq N\left( j \right), \left| S \right| \text{odd} -% \end{align*} -% \item Relaxed polytope representation: -% \begin{align*} -% \sum_{i\in \left( N\left( j \right) \setminus S\right) } f_i -% + \sum_{i\in S} \left( 1 - f_i \right) \ge 1 -% \end{align*} -% ``$\boldsymbol{f}$ is separated by at least one bitflip -% from all illegal configurations'' -% \end{itemize} -% \end{minipage}% -% \hfill% -% \begin{minipage}[c]{0.4\linewidth} -% \begin{figure}[H] -% \centering -% -% \tikzstyle{codeword} = [color=KITblue, fill=KITblue, -% draw, circle, inner sep=0pt, minimum size=4pt] -% -% \tdplotsetmaincoords{60}{245} -% \begin{tikzpicture}[scale=1, transform shape, tdplot_main_coords] -% % Cube -% -% \draw[dashed] (0, 0, 0) -- (2, 0, 0); -% \draw[dashed] (2, 0, 0) -- (2, 0, 2); -% \draw[] (2, 0, 2) -- (0, 0, 2); -% \draw[] (0, 0, 2) -- (0, 0, 0); -% -% \draw[] (0, 2, 0) -- (2, 2, 0); -% \draw[] (2, 2, 0) -- (2, 2, 2); -% \draw[] (2, 2, 2) -- (0, 2, 2); -% \draw[] (0, 2, 2) -- (0, 2, 0); -% -% \draw[] (0, 0, 0) -- (0, 2, 0); -% \draw[dashed] (2, 0, 0) -- (2, 2, 0); -% \draw[] (2, 0, 2) -- (2, 2, 2); -% \draw[] (0, 0, 2) -- (0, 2, 2); -% -% % Codeword Polytope -% -% \draw[line width=1pt, color=KITblue] (0, 0, 0) -- (2, 0, 2); -% \draw[line width=1pt, color=KITblue] (0, 0, 0) -- (2, 2, 0); -% \draw[line width=1pt, color=KITblue] (0, 0, 0) -- (0, 2, 2); -% -% \draw[line width=1pt, color=KITblue] (2, 0, 2) -- (2, 2, 0); -% \draw[line width=1pt, color=KITblue] (2, 0, 2) -- (0, 2, 2); -% -% \draw[line width=1pt, color=KITblue] (0, 2, 2) -- (2, 2, 0); -% -% % Polytope Annotations -% -% \node[codeword, color=KITred] (c111) at (2, 2, 2) {};% {$\left( 0, 0, 0 \right) $}; -% \node[codeword, color=KITred] (c001) at (0, 0, 2) {};% {$\left( 1, 0, 1 \right) $}; -% \node[codeword, color=KITred] (c100) at (2, 0, 0) {};% {$\left( 1, 1, 0 \right) $}; -% \node[codeword, color=KITred] (c010) at (0, 2, 0) {};% {$\left( 0, 1, 1 \right) $}; -% -% \node[color=KITred, left=0cm of c111] {$\left( 1, 1, 1 \right) $}; -% \node[color=KITred, right=0cm of c001] {$\left( 0, 0, 1 \right) $}; -% \node[color=KITred, right=0.35cm of c100] {$\left( 1, 0, 0 \right) $}; -% \node[color=KITred, below=0cm of c010] {$\left( 0, 1, 0 \right) $}; -% \end{tikzpicture} -% \caption{Relaxed polytope for $n=3$} -% \end{figure} -% \end{minipage} -% \todo{How is this a relaxation and not just an alternative formulation? -% We have just switched out valid codewords for invalid ones} -% \todo{Is LP Relaxation relevant as theoretical background?} -%\end{frame} - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%\subsection{ADMM}% -%\label{sub:Alg ADMM} -% -%\begin{frame}[t] -% \frametitle{ADMM Decoding: General Idea} -% -% \todo{TODO} -%\end{frame} -% -% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%\begin{frame}[t] -% \frametitle{ADMM Decoding: Algorithm} -% -% \todo{TODO} -%\end{frame} diff --git a/latex/presentations/final/sections/examination_results.tex b/latex/presentations/final/sections/examination_results.tex index ec87c55..2d76e07 100644 --- a/latex/presentations/final/sections/examination_results.tex +++ b/latex/presentations/final/sections/examination_results.tex @@ -2,1927 +2,4 @@ \label{sec:Analysis} -\subsection{Proximal Decoding}% -\label{sub:Ex Proximal Decoding} - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\begin{frame}[t] - \frametitle{Proximal Decoding: Bit Error Rate and Performance} - \vspace*{-0.5cm} - \begin{itemize} - \item Comparison of simulation% - \footnote{(3,6) regular LDPC code with $n=204, k=102$ - \cite[\text{204.33.484}]{mackay_enc}} - with results of Wadayama et al. \cite{proximal_paper} - \end{itemize} - - \begin{figure}[H] - \centering - - \begin{tikzpicture} - \begin{axis}[ - grid=both, grid style={line width=.1pt}, - xlabel={$E_b / N_0$ (dB)}, ylabel={BER}, - ymode=log, - legend pos=outer north east, - width=0.45\textwidth, - height=0.3375\textwidth, - ymax=1.2, ymin=0.8e-4, - xtick={1, 2, ..., 5}, - xmin=0.9, xmax=5.6, - legend columns=2, - ] - - \addplot [ForestGreen, mark=triangle, dashed, line width=1pt] - table [x=SNR, y=BER, col sep=comma, - discard if not={gamma}{0.15}, - discard if gt={SNR}{5.5},] - {res/proximal/2d_ber_fer_dfr_20433484.csv}; - \addlegendentry{$\gamma = 0.15$} - \addplot [ForestGreen, mark=*, line width=1pt] - table [x=SNR, y=gamma_0_15, col sep=comma] {res/ber_paper.csv}; - \addlegendentry{$\gamma = 0.15$ (Wadayama et al.)} - - \addplot [NavyBlue, mark=triangle, dashed, line width=1pt] - table [x=SNR, y=BER, col sep=comma, - discard if not={gamma}{0.01}, - discard if gt={SNR}{5.5},] - {res/proximal/2d_ber_fer_dfr_20433484.csv}; - \addlegendentry{$\gamma = 0.01$} - \addplot [NavyBlue, mark=*, line width=1pt] - table [x=SNR, y=gamma_0_01, col sep=comma] {res/ber_paper.csv}; - \addlegendentry{$\gamma = 0.01$ (Wadayama et al.)} - - \addplot [RedOrange, mark=triangle, dashed, line width=1pt] - table [x=SNR, y=BER, col sep=comma, - discard if not={gamma}{0.05}, - discard if gt={SNR}{5.5},] - {res/proximal/2d_ber_fer_dfr_20433484.csv}; - \addlegendentry{$\gamma = 0.05$} - \addplot [RedOrange, mark=*, line width=1pt] - table [x=SNR, y=gamma_0_05, col sep=comma] {res/ber_paper.csv}; - \addlegendentry{$\gamma = 0.05$ (Wadayama et al.)} - - \addplot [RoyalPurple, mark=*, line width=1pt] - table [x=SNR, y=BP, col sep=comma] {res/ber_paper.csv}; - \addlegendentry{BP} - - \end{axis} - \end{tikzpicture} - - \caption{Simulation results for $\omega = 0.05, K=100$} - \label{fig:sim_results_prox} - \end{figure} - -% \vspace*{-0.5cm} -% \begin{itemize} -% \item $\mathcal{O}\left(n \right) $ time complexity - same as BP; -% only multiplication and addition necessary \cite{proximal_paper} -% \item Measured performance: $\sim\SI{10000}{}$ frames/s -% on Intel Core i7-7700HQ @ 2.80GHz; $n=204$ -% \end{itemize} -% \vspace{3mm} -\end{frame} - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\begin{frame}[t] - \frametitle{Proximal Decoding: Choice of $\gamma$} - - \begin{itemize} - \item Simulation% - \footnote{(3,6) regular LDPC code with $n=204, k=102$ - \cite[\text{204.33.484}]{mackay_enc}} - results for different values of $\gamma$ - \end{itemize} - - \begin{figure}[H] - \centering - \hspace*{-3.5cm} - \begin{subfigure}[c]{0.4\textwidth} - \centering - \begin{tikzpicture} - \begin{semilogyaxis}[xlabel={$E_b / N_0$ (dB)}, ylabel={BER}, - grid=both, grid style={line width=.1pt}, - width=\textwidth, - height=0.75\textwidth, - legend style={at={(0.05,0.05)},anchor=south west}, - ymin=3e-7, ymax=1.5,] - \addplot [ForestGreen, mark=*] table [x=SNR, y=BER, - col sep=comma, discard if not={gamma}{0.15}] - {res/proximal/2d_ber_fer_dfr_20433484.csv}; - \addlegendentry{$\gamma = 0.15$} - \addplot [NavyBlue, mark=*] table [x=SNR, y=BER, - col sep=comma, discard if not={gamma}{0.01}] - {res/proximal/2d_ber_fer_dfr_20433484.csv}; - \addlegendentry{$\gamma = 0.01$} - \addplot [RedOrange, mark=*] table [x=SNR, y=BER, - col sep=comma, discard if not={gamma}{0.05}] - {res/proximal/2d_ber_fer_dfr_20433484.csv}; - \addlegendentry{$\gamma = 0.05$} - \end{semilogyaxis} - \end{tikzpicture} - \end{subfigure}% - \hspace{5mm} - \begin{subfigure}[c]{0.4\textwidth} - \centering - - \begin{tikzpicture} - \begin{axis}[view={75}{30}, - zmode=log, - xlabel={$E_b / N_0$ (dB)}, - ylabel={$\gamma$}, - zlabel={BER}, - width=\textwidth, - height=0.75\textwidth, - legend pos=outer north east,] - - \addplot3[surf, - mesh/rows=17, mesh/cols=14, - colormap/viridis] table [col sep=comma, - x=SNR, y=gamma, z=BER] - {res/proximal/2d_ber_fer_dfr_20433484.csv}; - \addlegendentry{$\gamma = \left[ 0\text{:}0.01\text{:}0.16 \right] $} - \addplot3[NavyBlue, line width=1.5] table [col sep=comma, - discard if not={gamma}{0.01}, - x=SNR, y=gamma, z=BER] - {res/proximal/2d_ber_fer_dfr_20433484.csv}; - \addlegendentry{$\gamma = 0.01$} - \addplot3[RedOrange, line width=1.5] table [col sep=comma, - discard if not={gamma}{0.05}, - x=SNR, y=gamma, z=BER] - {res/proximal/2d_ber_fer_dfr_20433484.csv}; - \addlegendentry{$\gamma = 0.05$} - \addplot3[ForestGreen, line width=1.5] table [col sep=comma, - discard if not={gamma}{0.15}, - x=SNR, y=gamma, z=BER] - {res/proximal/2d_ber_fer_dfr_20433484.csv}; - \addlegendentry{$\gamma = 0.15$} - \end{axis} - \end{tikzpicture} - \end{subfigure} - - \caption{BER for $\omega = 0.05, K=100$} - \label{fig:ber_3d} - \end{figure} - - \begin{itemize} - \item Not great benefit in finding the optimal value for $\gamma$ - \end{itemize} - \vspace{3mm} -\end{frame} - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%\begin{frame}[t] -% \frametitle{Proximal Decoding: Choice of $\gamma$} -% -% \begin{minipage}[c]{0.9\textwidth} -% \centering -% -% \begin{figure}[H] -% \vspace*{-0.5cm} -% \hspace*{-0.7cm} -% \centering -% \begin{subfigure}[c]{0.33\textwidth} -% \centering -% \begin{tikzpicture}[scale=0.4] -% \begin{axis}[view={75}{30}, -% zmode=log, -% xlabel={$E_b / N_0$ (dB)}, -% ylabel={$\gamma$}, -% zlabel={BER},] -% \addplot3[surf, -% mesh/rows=17, mesh/cols=10, -% colormap/viridis] table [col sep=comma, -% x=SNR, y=gamma, z=BER] -% {res/proximal/2d_ber_fer_dfr_963965.csv}; -% \addplot3[RedOrange, line width=1.5] table[col sep=comma, -% discard if not={gamma}{0.05}, -% x=SNR, y=gamma, z=BER] -% {res/proximal/2d_ber_fer_dfr_963965.csv}; -% \addplot3[NavyBlue, line width=1.5] table[col sep=comma, -% discard if not={gamma}{0.01}, -% x=SNR, y=gamma, z=BER] -% {res/proximal/2d_ber_fer_dfr_963965.csv}; -% \addplot3[ForestGreen, line width=1.5] table[col sep=comma, -% discard if not={gamma}{0.15}, -% x=SNR, y=gamma, z=BER] -% {res/proximal/2d_ber_fer_dfr_963965.csv}; -% \end{axis} -% \end{tikzpicture} -% \caption{$\left( 3, 6 \right)$-regular LDPC code with $n=96, k=48$ \cite[\text{96.3.965}]{mackay_enc}} -% \end{subfigure}% -% \begin{subfigure}[c]{0.33\textwidth} -% \centering -% \begin{tikzpicture}[scale=0.4] -% \begin{axis}[view={75}{30}, -% zmode=log, -% xlabel={$E_b/N_0$ (dB)}, -% ylabel={$\gamma$}, -% zlabel={BER},] -% \addplot3[surf, -% mesh/rows=17, mesh/cols=14, -% colormap/viridis] table [col sep=comma, -% x=SNR, y=gamma, z=BER] -% {res/proximal/2d_ber_fer_dfr_20433484.csv}; -% \addplot3[RedOrange, line width=1.5] table[col sep=comma, -% discard if not={gamma}{0.05}, -% x=SNR, y=gamma, z=BER] -% {res/proximal/2d_ber_fer_dfr_20433484.csv}; -% \addplot3[NavyBlue, line width=1.5] table[col sep=comma, -% discard if not={gamma}{0.01}, -% x=SNR, y=gamma, z=BER] -% {res/proximal/2d_ber_fer_dfr_20433484.csv}; -% \addplot3[ForestGreen, line width=1.5] table[col sep=comma, -% discard if not={gamma}{0.15}, -% x=SNR, y=gamma, z=BER] -% {res/proximal/2d_ber_fer_dfr_20433484.csv}; -% \end{axis} -% \end{tikzpicture} -% \caption{$\left( 3, 6 \right)$-regular LDPC code with $n=204, k=102$ \cite[\text{204.33.484}]{mackay_enc}} -% \end{subfigure}% -% \begin{subfigure}[c]{0.33\textwidth} -% \centering -% \begin{tikzpicture}[scale=0.4] -% \begin{axis}[view={75}{30}, -% zmode=log, -% xlabel={$E_b / N_0$ (dB)}, -% ylabel={$\gamma$}, -% zlabel={BER},] -% \addplot3[surf, -% mesh/rows=17, mesh/cols=10, -% colormap/viridis] table [col sep=comma, -% x=SNR, y=gamma, z=BER] -% {res/proximal/2d_ber_fer_dfr_40833844.csv}; -% \addplot3[RedOrange, line width=1.5] table[col sep=comma, -% discard if not={gamma}{0.05}, -% x=SNR, y=gamma, z=BER] -% {res/proximal/2d_ber_fer_dfr_40833844.csv}; -% \addplot3[NavyBlue, line width=1.5] table[col sep=comma, -% discard if not={gamma}{0.01}, -% x=SNR, y=gamma, z=BER] -% {res/proximal/2d_ber_fer_dfr_40833844.csv}; -% \addplot3[ForestGreen, line width=1.5] table[col sep=comma, -% discard if not={gamma}{0.15}, -% x=SNR, y=gamma, z=BER] -% {res/proximal/2d_ber_fer_dfr_40833844.csv}; -% \end{axis} -% \end{tikzpicture} -% \caption{$\left( 3, 6 \right)$-regular LDPC code with $n=408, k=204$ \cite[\text{408.33.844}]{mackay_enc}} -% \end{subfigure} -% \hspace*{-0.7cm} -% \begin{subfigure}[c]{0.33\textwidth} -% \centering -% \begin{tikzpicture}[scale=0.4] -% \begin{axis}[view={75}{30}, -% zmode=log, -% xlabel={$E_b / N_0$ (dB)}, -% ylabel={$\gamma$}, -% zlabel={BER},] -% \addplot3[surf, -% mesh/rows=17, mesh/cols=10, -% colormap/viridis] table [col sep=comma, -% x=SNR, y=gamma, z=BER] -% {res/proximal/2d_ber_fer_dfr_bch_31_26.csv}; -% \addplot3[RedOrange, line width=1.5] table[col sep=comma, -% discard if not={gamma}{0.05}, -% x=SNR, y=gamma, z=BER] -% {res/proximal/2d_ber_fer_dfr_bch_31_26.csv}; -% \addplot3[NavyBlue, line width=1.5] table[col sep=comma, -% discard if not={gamma}{0.01}, -% x=SNR, y=gamma, z=BER] -% {res/proximal/2d_ber_fer_dfr_bch_31_26.csv}; -% \addplot3[ForestGreen, line width=1.5] table[col sep=comma, -% discard if not={gamma}{0.15}, -% x=SNR, y=gamma, z=BER] -% {res/proximal/2d_ber_fer_dfr_bch_31_26.csv}; -% \end{axis} -% \end{tikzpicture} -% \caption{BCH code with $n=31, k=26$\\[2\baselineskip]} -% \end{subfigure}% -% \begin{subfigure}[c]{0.33\textwidth} -% \centering -% \begin{tikzpicture}[scale=0.4] -% \begin{axis}[view={75}{30}, -% zmode=log, -% xlabel={$E_b / N_0$ (dB)}, -% ylabel={$\gamma$}, -% zlabel={BER},] -% \addplot3[surf, -% mesh/rows=17, mesh/cols=10, -% colormap/viridis] table [col sep=comma, -% x=SNR, y=gamma, z=BER] -% {res/proximal/2d_ber_fer_dfr_20455187.csv}; -% \addplot3[RedOrange, line width=1.5] table[col sep=comma, -% discard if not={gamma}{0.05}, -% x=SNR, y=gamma, z=BER] -% {res/proximal/2d_ber_fer_dfr_20455187.csv}; -% \addplot3[NavyBlue, line width=1.5] table[col sep=comma, -% discard if not={gamma}{0.01}, -% x=SNR, y=gamma, z=BER] -% {res/proximal/2d_ber_fer_dfr_20455187.csv}; -% \addplot3[ForestGreen, line width=1.5] table[col sep=comma, -% discard if not={gamma}{0.15}, -% x=SNR, y=gamma, z=BER] -% {res/proximal/2d_ber_fer_dfr_20455187.csv}; -% \end{axis} -% \end{tikzpicture} -% \caption{$\left( 5, 10 \right)$-regular LDPC code with $n=204, k=102$ \cite[\text{204.55.187}]{mackay_enc}} -% \end{subfigure}% -% \begin{subfigure}[c]{0.33\textwidth} -% \centering -% \begin{tikzpicture}[scale=0.4] -% \begin{axis}[view={75}{30}, -% zmode=log, -% xlabel={$E_b / N_0$ (dB)}, -% ylabel={$\gamma$}, -% zlabel={BER},] -% \addplot3[surf, -% mesh/rows=17, mesh/cols=10, -% colormap/viridis] table [col sep=comma, -% x=SNR, y=gamma, z=BER] -% {res/proximal/2d_ber_fer_dfr_pegreg252x504.csv}; -% \addplot3[RedOrange, line width=1.5] table[col sep=comma, -% discard if not={gamma}{0.05}, -% x=SNR, y=gamma, z=BER] -% {res/proximal/2d_ber_fer_dfr_pegreg252x504.csv}; -% \addplot3[NavyBlue, line width=1.5] table[col sep=comma, -% discard if not={gamma}{0.01}, -% x=SNR, y=gamma, z=BER] -% {res/proximal/2d_ber_fer_dfr_pegreg252x504.csv}; -% \addplot3[ForestGreen, line width=1.5] table[col sep=comma, -% discard if not={gamma}{0.15}, -% x=SNR, y=gamma, z=BER] -% {res/proximal/2d_ber_fer_dfr_pegreg252x504.csv}; -% \end{axis} -% \end{tikzpicture} -% \caption{LDPC code (Progressive Edge Growth Construction) with $n=504, k=252$ \cite[\text{PEGReg252x504}]{mackay_enc}} -% \end{subfigure}% -% \end{figure} -% \end{minipage}% -% \begin{minipage}[c]{0.1\textwidth} -% \centering -% -% \begin{figure}[H] -% \vspace*{-1.5cm} -% \hspace*{-0.75cm} -% \centering -% \begin{tikzpicture}[scale=0.7] -% \begin{axis}[hide axis, -% xmin=10, xmax=50, -% ymin=0, ymax=0.4, -% legend style={draw=white!15!black,legend cell align=left}] -% \addlegendimage{surf, colormap/viridis} -% \addlegendentry{$\gamma = \left[ 0\text{ : }0.01\text{ : }0.16 \right] $}; -% \addlegendimage{NavyBlue, line width=1.5pt} -% \addlegendentry{$\gamma = 0.01$}; -% \addlegendimage{RedOrange, line width=1.5pt} -% \addlegendentry{$\gamma = 0.05$}; -% \addlegendimage{ForestGreen, line width=1.5pt} -% \addlegendentry{$\gamma = 0.15$}; -% \end{axis} -% \end{tikzpicture} -% \end{figure} -% \end{minipage} -%\end{frame} - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\begin{frame}[t, fragile] - \frametitle{Proximal Decoding: Frame Error Rate} - - \begin{itemize} - \item Analysis of simulated% - \footnote{(3,6) regular LDPC code with $n=204, k=102$ - \cite[\text{204.33.484}]{mackay_enc}} - BER and FER - \end{itemize} - - \begin{minipage}{.4\textwidth} - \centering - - \begin{figure}[htpb] - \centering - - \begin{algorithm}[caption={}, label={}] -$\boldsymbol{s} \leftarrow \boldsymbol{0}$ -for $K$ iterations do - $\boldsymbol{r} \leftarrow \boldsymbol{s} - \omega \nabla L \left( \boldsymbol{y} \mid \boldsymbol{s} \right) $ - $\boldsymbol{s} \leftarrow \boldsymbol{r} - \gamma \nabla h\left( \boldsymbol{r} \right) $ - $\boldsymbol{\hat{x}} \leftarrow \text{sign}\left( \boldsymbol{s} \right) $ - if $\boldsymbol{H}\boldsymbol{\hat{c}} = \boldsymbol{0}$ do - return $\boldsymbol{\hat{c}}$ - end if -end for -return $\boldsymbol{\hat{c}}$ - \end{algorithm} - - \vspace*{-5mm} - - \caption{Proximal decoding algorithm \cite{proximal_paper}} - \end{figure} - \end{minipage}% - \begin{minipage}{.6\textwidth} - \centering - \begin{figure}[H] - \vspace*{-9mm} - \centering - - \begin{tikzpicture}[scale=0.7] - \begin{axis}[ - grid=both, - xlabel={$E_b / N_0$ (dB)}, ylabel={BER}, - ymode=log, - legend style={at={(0.05,0.05)},anchor=south west}, - ymax=1.5, ymin=3e-7, - width=0.7\textwidth, - height=0.6\textwidth, - ] - \addplot [ForestGreen, mark=*] - table [x=SNR, y=BER, col sep=comma, discard if not={gamma}{0.15}] - {res/proximal/2d_ber_fer_dfr_20433484.csv}; - \addlegendentry{$\gamma = 0.15$} - \addplot [NavyBlue, mark=*] - table [x=SNR, y=BER, col sep=comma, discard if not={gamma}{0.01}] - {res/proximal/2d_ber_fer_dfr_20433484.csv}; - \addlegendentry{$\gamma = 0.01$} - \addplot [RedOrange, mark=*] - table [x=SNR, y=BER, col sep=comma, discard if not={gamma}{0.05}] - {res/proximal/2d_ber_fer_dfr_20433484.csv}; - \addlegendentry{$\gamma = 0.05$} - \end{axis} - \end{tikzpicture} - \begin{tikzpicture}[scale=0.7] - \begin{axis}[ - grid=both, - xlabel={$E_b / N_0$ (dB)}, ylabel={FER}, - ymode=log, - legend style={at={(0.05,0.05)},anchor=south west}, - ymax=1.5, ymin=3e-7, - width=0.7\textwidth, - height=0.6\textwidth, - ] - \addplot [ForestGreen, mark=*] - table [x=SNR, y=FER, col sep=comma, discard if not={gamma}{0.15}] - {res/proximal/2d_ber_fer_dfr_20433484.csv}; - \addlegendentry{$\gamma = 0.15$} - \addplot [NavyBlue, mark=*] - table [x=SNR, y=FER, col sep=comma, discard if not={gamma}{0.01}] - {res/proximal/2d_ber_fer_dfr_20433484.csv}; - \addlegendentry{$\gamma = 0.01$} - \addplot [RedOrange, mark=*] - table [x=SNR, y=FER, col sep=comma, discard if not={gamma}{0.05}] - {res/proximal/2d_ber_fer_dfr_20433484.csv}; - \addlegendentry{$\gamma = 0.05$} - \end{axis} - \end{tikzpicture}\\ - \begin{tikzpicture}[scale=0.7] - \begin{axis}[ - grid=both, - xlabel={$E_b / N_0$ (dB)}, ylabel={Decoding Failure Rate}, - ymode=log, - legend style={at={(0.05,0.05)},anchor=south west}, - ymax=1.5, ymin=3e-7, - width=0.7\textwidth, - height=0.6\textwidth, - ] - \addplot [ForestGreen, mark=*] - table [x=SNR, y=DFR, col sep=comma, discard if not={gamma}{0.15}] - {res/proximal/2d_ber_fer_dfr_20433484.csv}; - \addlegendentry{$\gamma = 0.15$} - \addplot [NavyBlue, mark=*] - table [x=SNR, y=DFR, col sep=comma, discard if not={gamma}{0.01}] - {res/proximal/2d_ber_fer_dfr_20433484.csv}; - \addlegendentry{$\gamma = 0.01$} - \addplot [RedOrange, mark=*] - table [x=SNR, y=DFR, col sep=comma, discard if not={gamma}{0.05}] - {res/proximal/2d_ber_fer_dfr_20433484.csv}; - \addlegendentry{$\gamma = 0.05$} - \end{axis} - \end{tikzpicture} - - \caption{Simulation results for $\omega = 0.05, K=100$} - \label{fig:simulation_results_ber_fer_dfr} - \end{figure} - \end{minipage} -\end{frame} - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\begin{frame}[t] - \frametitle{Proximal Decoding: Oscillation of Estimate} - - \begin{itemize} - \item $\nabla L \left( \boldsymbol{y} \mid \tilde{\boldsymbol{x}} \right) $ - and $\nabla h \left( \tilde{\boldsymbol{x}} \right) $ generally end up - in an equilibrium - \end{itemize} - - \begin{figure}[H] - \centering - \begin{minipage}[c]{0.25\textwidth} - \centering - - \begin{tikzpicture}[scale = 0.7] - \begin{axis}[ - grid=both, - xlabel={Iterations}, - width=1.2\textwidth, - height=0.45\textwidth, - scale only axis, - xtick={0, 50, ..., 200}, - xticklabels={0, 25, ..., 100}, - ] - \addplot [NavyBlue, mark=none, line width=1] - table [col sep=comma, x=k, y=comb_r_s_1] - {res/proximal/comp_bch_7_4_combined.csv}; - \addplot [ForestGreen, mark=none, line width=1] - table [col sep=comma, x=k, y=grad_L_1] - {res/proximal/comp_bch_7_4_combined.csv}; - \addplot [RedOrange, mark=none, line width=1] - table [col sep=comma, x=k, y=grad_h_1] - {res/proximal/comp_bch_7_4_combined.csv}; - \addlegendentry{est} - \addlegendentry{$\left(\nabla L \right)_2$} - \addlegendentry{$\left(\nabla h \right)_2 $} - \end{axis} - \end{tikzpicture}\\ - \begin{tikzpicture}[scale = 0.7] - \begin{axis}[ - grid=both, - xlabel={Iterations}, - width=1.2\textwidth, - height=0.45\textwidth, - scale only axis, - xtick={0, 50, ..., 200}, - xticklabels={0, 25, ..., 100}, - ] - \addplot [NavyBlue, mark=none, line width=1] - table [col sep=comma, x=k, y=comb_r_s_2] - {res/proximal/comp_bch_7_4_combined.csv}; - \addplot [ForestGreen, mark=none, line width=1] - table [col sep=comma, x=k, y=grad_L_2] - {res/proximal/comp_bch_7_4_combined.csv}; - \addplot [RedOrange, mark=none, line width=1] - table [col sep=comma, x=k, y=grad_h_2] - {res/proximal/comp_bch_7_4_combined.csv}; - \addlegendentry{est} - \addlegendentry{$\left(\nabla L \right)_3$} - \addlegendentry{$\left(\nabla h \right)_3 $} - \end{axis} - \end{tikzpicture}\\ - \begin{tikzpicture}[scale = 0.7] - \begin{axis}[ - grid=both, - xlabel={Iterations}, - width=1.2\textwidth, - height=0.45\textwidth, - scale only axis, - xtick={0, 50, ..., 200}, - xticklabels={0, 25, ..., 100}, - ] - \addplot [NavyBlue, mark=none, line width=1] - table [col sep=comma, x=k, y=comb_r_s_3] - {res/proximal/comp_bch_7_4_combined.csv}; - \addplot [ForestGreen, mark=none, line width=1] - table [col sep=comma, x=k, y=grad_L_3] - {res/proximal/comp_bch_7_4_combined.csv}; - \addplot [RedOrange, mark=none, line width=1] - table [col sep=comma, x=k, y=grad_h_3] - {res/proximal/comp_bch_7_4_combined.csv}; - \addlegendentry{est} - \addlegendentry{$\left(\nabla L \right)_4$} - \addlegendentry{$\left(\nabla h \right)_4 $} - \end{axis} - \end{tikzpicture} - \end{minipage}% - \begin{minipage}[c]{0.5\textwidth} - \vspace*{-1cm} - \centering - - \begin{tikzpicture}[, spy using outlines={circle, magnification=6, - connect spies}] - \begin{axis}[ - grid=both, - xlabel={Iterations}, - width=0.8\textwidth, - height=0.35\textwidth, - scale only axis, - xtick={0, 50, ..., 200}, - xticklabels={0, 25, ..., 100}, - ] - \addplot [NavyBlue, mark=none, line width=1] - table [col sep=comma, x=k, y=comb_r_s_0] - {res/proximal/comp_bch_7_4_combined.csv}; - \addplot [ForestGreen, mark=none, line width=1] - table [col sep=comma, x=k, y=grad_L_0] - {res/proximal/comp_bch_7_4_combined.csv}; - \addplot [RedOrange, mark=none, line width=1] - table [col sep=comma, x=k, y=grad_h_0] - {res/proximal/comp_bch_7_4_combined.csv}; - \addlegendentry{est} - \addlegendentry{$\left(\nabla L \right)_1$} - \addlegendentry{$\left(\nabla h \right)_1 $} - - \coordinate (spypoint) at (axis cs:100,1.12); - \coordinate (magnifyglass) at (axis cs:180,2.75); - \end{axis} - \spy [black, size=2cm] on (spypoint) - in node[fill=white] at (magnifyglass); - \end{tikzpicture} - \end{minipage}% - \begin{minipage}[c]{0.25\textwidth} - \centering - - \begin{tikzpicture}[scale = 0.7] - \begin{axis}[ - grid=both, - xlabel={Iterations}, - width=1.2\textwidth, - height=0.45\textwidth, - scale only axis, - xtick={0, 50, ..., 200}, - xticklabels={0, 25, ..., 100}, - ] - \addplot [NavyBlue, mark=none, line width=1] - table [col sep=comma, x=k, y=comb_r_s_4] - {res/proximal/comp_bch_7_4_combined.csv}; - \addplot [ForestGreen, mark=none, line width=1] - table [col sep=comma, x=k, y=grad_L_4] - {res/proximal/comp_bch_7_4_combined.csv}; - \addplot [RedOrange, mark=none, line width=1] - table [col sep=comma, x=k, y=grad_h_4] - {res/proximal/comp_bch_7_4_combined.csv}; - \addlegendentry{est} - \addlegendentry{$\left(\nabla L \right)_5$} - \addlegendentry{$\left(\nabla h \right)_5 $} - \end{axis} - \end{tikzpicture}\\ - \begin{tikzpicture}[scale = 0.7] - \begin{axis}[ - grid=both, - xlabel={Iterations}, - width=1.2\textwidth, - height=0.45\textwidth, - scale only axis, - xtick={0, 50, ..., 200}, - xticklabels={0, 25, ..., 100}, - ] - \addplot [NavyBlue, mark=none, line width=1] - table [col sep=comma, x=k, y=comb_r_s_5] - {res/proximal/comp_bch_7_4_combined.csv}; - \addplot [ForestGreen, mark=none, line width=1] - table [col sep=comma, x=k, y=grad_L_5] - {res/proximal/comp_bch_7_4_combined.csv}; - \addplot [RedOrange, mark=none, line width=1] - table [col sep=comma, x=k, y=grad_h_5] - {res/proximal/comp_bch_7_4_combined.csv}; - \addlegendentry{est} - \addlegendentry{$\left(\nabla L \right)_6$} - \addlegendentry{$\left(\nabla h \right)_6 $} - \end{axis} - \end{tikzpicture}\\ - \begin{tikzpicture}[scale = 0.7] - \begin{axis}[ - grid=both, - xlabel={Iterations}, - width=1.2\textwidth, - height=0.45\textwidth, - scale only axis, - xtick={0, 50, ..., 200}, - xticklabels={0, 25, ..., 100}, - ] - \addplot [NavyBlue, mark=none, line width=1] - table [col sep=comma, x=k, y=comb_r_s_6] - {res/proximal/comp_bch_7_4_combined.csv}; - \addplot [ForestGreen, mark=none, line width=1] - table [col sep=comma, x=k, y=grad_L_6] - {res/proximal/comp_bch_7_4_combined.csv}; - \addplot [RedOrange, mark=none, line width=1] - table [col sep=comma, x=k, y=grad_h_6] - {res/proximal/comp_bch_7_4_combined.csv}; - \addlegendentry{est} - \addlegendentry{$\left(\nabla L \right)_7$} - \addlegendentry{$\left(\nabla h \right)_7 $} - \end{axis} - \end{tikzpicture} - \end{minipage} - - \caption{Internal variables of proximal decoder - as a function of the number of iterations ($n=7$)\footnotemark} - - \footnotetext{A single decoding is shown, using the BCH$\left( 7,4 \right) $ code; - $\gamma = 0.05, \omega = 0.05, E_b / N_0 = \SI{5}{dB}$} - \end{figure} -\end{frame} - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\begin{frame}[t] - \frametitle{Proximal Decoding: Visualization of Gradients} - - \begin{figure}[H] - \centering - - \begin{subfigure}[c]{0.5\textwidth} - - \centering - - \begin{tikzpicture} - \begin{axis}[xmin = -1.25, xmax=1.25, - ymin = -1.25, ymax=1.25, - xlabel={$x_1$}, ylabel={$x_2$}, - width=0.9\textwidth, - height=0.8\textwidth, - grid=major, grid style={dotted}, - view={0}{90}] - \addplot3[point meta=\thisrow{grad_norm}, - point meta min=1, - point meta max=3, - quiver={u=\thisrow{grad_0}, - v=\thisrow{grad_1}, - scale arrows=.05, - every arrow/.append style={% - line width=.3+\pgfplotspointmetatransformed/1000, - -{Latex[length=0pt 5,width=0pt 3]} - }, - }, - quiver/colored = {mapped color}, - colormap/rocket, - -stealth, - ] - table[col sep=comma] {res/proximal/2d_grad_L.csv}; - \end{axis} - \end{tikzpicture} - - \caption{$\nabla L \left(\boldsymbol{y} \mid \tilde{\boldsymbol{x}} \right)$ - for a repetition code with $n=2$\footnotemark} - \end{subfigure}% - \begin{subfigure}[c]{0.5\textwidth} - \centering - - \begin{tikzpicture} - \begin{axis}[xmin = -1.25, xmax=1.25, - ymin = -1.25, ymax=1.25, - width=0.9\textwidth, - height=0.8\textwidth, - xlabel={$x_1$}, ylabel={$x_2$}, - grid=major, grid style={dotted}, - view={0}{90}] - \addplot3[point meta=\thisrow{grad_norm}, - point meta min=1, - point meta max=4, - quiver={u=\thisrow{grad_0}, - v=\thisrow{grad_1}, - scale arrows=.03, - every arrow/.append style={% - line width=.3+\pgfplotspointmetatransformed/1000, - -{Latex[length=0pt 5,width=0pt 3]} - }, - }, - quiver/colored = {mapped color}, - colormap/rocket, - -stealth, - ] - table[col sep=comma] {res/proximal/2d_grad_h.csv}; - \end{axis} - \end{tikzpicture} - - \caption{$\nabla h \left( \tilde{\boldsymbol{x}} \right) $ for a repetition code - with $n=2$} - \end{subfigure}% - \end{figure} - - \footnotetext{In an AWGN Channel $\nabla L\left( \boldsymbol{y} \mid - \tilde{\boldsymbol{x}}\right) - \propto \left( \tilde{\boldsymbol{x}} - \boldsymbol{y} \right)$ - \cite[Sec. 4.1]{proximal_paper}} - -\end{frame} - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\begin{frame}[t] - \frametitle{Proximal Decoder: Oscillation of $\nabla h\left( \tilde{\boldsymbol{x}} \right) $} - - \begin{itemize} - \item For larger $n$, the gradient itself starts to oscillate - \item The dynamic range of the oscillation is highly correlated - with the probability of a bit error - \end{itemize} - - \begin{figure} - \centering - - \begin{subfigure}[t]{0.5\textwidth} - \centering - - \begin{tikzpicture} - \begin{axis}[ - grid=both, - xlabel={Iterations}, - width=0.85\textwidth, - height=0.4\textwidth, - scale only axis, - xtick={0, 100, ..., 400}, - xticklabels={0, 50, ..., 200}, - ] - \addplot [NavyBlue, mark=none, line width=1] - table [col sep=comma, x=k, y=comb_r_s_0] - {res/proximal/extreme_components_20433484_combined.csv}; - \addplot [ForestGreen, mark=none, line width=1] - table [col sep=comma, x=k, y=grad_L_0] - {res/proximal/extreme_components_20433484_combined.csv}; - \addplot [RedOrange, mark=none, line width=1] - table [col sep=comma, x=k, y=grad_h_0] - {res/proximal/extreme_components_20433484_combined.csv}; - \addlegendentry{est} - \addlegendentry{$\left(\nabla L \right)_1$} - \addlegendentry{$\left(\nabla h \right)_1$} - \end{axis} - \end{tikzpicture} - - \caption{Internal variables of proximal decoder as a function of the iteration - ($n=204$)\footnotemark} - \end{subfigure}% - \begin{subfigure}[t]{0.5\textwidth} - \centering - - \begin{tikzpicture} - \begin{axis}[ - point meta min = -1, - point meta max = 1, - grid=both, - xlabel={$Var\left( \nabla h\left( \tilde{\boldsymbol{x}} \right) \right) $}, - ylabel={Bit error (bool)}, - ytick={0, 1}, - width=0.85\textwidth, - height=0.4\textwidth, - scale only axis, -% colormap/viridis, - ] - \addplot [RoyalPurple, only marks,] - table [col sep=comma, x=grad_h_vars, y=bit_error] - {res/proximal/extreme_components_20433484_variance.csv}; - \end{axis} - \end{tikzpicture} - - \caption{Correlation between bit error and dynamic range of oscillation} - \end{subfigure} - \end{figure} - - - \footnotetext{A single decoding is shown, using a (3,6) regular LDPC code - with $n=204, k=102$ \cite[\text{204.33.484}]{mackay_enc}; - $\gamma = 0.05, \omega = 0.05, E_b / N_0 = \SI{5}{dB}$} -\end{frame} - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%\newcommand{\tikzbracemark}[1]{\tikz[overlay,remember picture] \node (#1) {};} -% -%\newcommand*{\AddNote}[4]{% -% \begin{tikzpicture}[overlay, remember picture] -% \draw [decoration={brace,amplitude=0.5em},decorate,ultra thick] -% ($(#3)!([yshift=1.5ex]#1)!($(#3)-(0,1)$)$) -- -% ($(#3)!(#2)!($(#3)-(0,1)$)$) -% node [align=center, text width=2cm, pos=0.5, anchor=west] {#4}; -% \end{tikzpicture} -%}% -% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%\begin{frame}[t, fragile] -% \frametitle{Proximal Decoding: Improvement using ``ML-on-List''} -% -% \begin{itemize} -% \item Comparison of proximal \& hybrid-proximal-ML\\ -% decoding simulation -% \footnote{(3,6) regular LDPC Code with $n=204, k=102$ -% \cite[Code: 204.33.484]{mackay_enc}} -% results -% \end{itemize} -% -% \begin{minipage}{.4\textwidth} -% \centering -% -% \begin{algorithm}[caption={}, label={}, -% basicstyle=\fontsize{6.5}{7.5}\selectfont -% ] -%$\boldsymbol{s}^{\left( 0 \right)} = \boldsymbol{0}$$\hspace{4.185cm}\tikzbracemark{prox-start}$ -%for $k=0$ to $K-1$ do -% $\boldsymbol{r}^{\left( k+1 \right)} = \boldsymbol{s}^{(k)} - \omega \nabla L \left( \boldsymbol{s}^{(k)}; \boldsymbol{y} \right) $ -% Compute $\nabla h\left( \boldsymbol{r}^{\left( k+1 \right) } \right)$ -% $\boldsymbol{s}^{\left( k+1 \right)} = \boldsymbol{r}^{(k+1)} - \gamma \nabla h\left( \boldsymbol{r}^{\left( k+1 \right) } \right) $ -% $\boldsymbol{\hat{x}} = \text{sign}\left( \boldsymbol{s}^{\left( k+1 \right) } \right) $ -% If $\boldsymbol{\hat{x}}$ passes the parity check condition, output $\boldsymbol{\hat{x}}$ -%end for $\tikzbracemark{prox-end}$ -%Find $N$ most probably wrong bits $\hspace{2cm}\tikzbracemark{ml-start}$ -%Generate variations $\boldsymbol{\tilde{x}}_n$ of $\boldsymbol{\hat{x}}$ with the $N$ bits modified -%Compute $d\left( \boldsymbol{ \tilde{x}}_n, \boldsymbol{\hat{x}} \right) \forall n \in \left[ 1 : N-1 \right] $ -%Output $\boldsymbol{\tilde{x}}_n$ with lowest $d\left( \boldsymbol{ \tilde{x}}_n, \boldsymbol{\hat{x}} \right)$ $\tikzbracemark{ml-end}$ -% \end{algorithm} -% -% \AddNote{prox-start}{prox-end}{prox-start}{\small Proximal\\Decoding} -% \AddNote{ml-start}{ml-end}{ml-start}{\small ML-on-List} -% \end{minipage}% -% \begin{minipage}{.6\textwidth} -% \centering -% \begin{figure}[H] -% \centering -% \vspace*{-12mm} -% -% \begin{tikzpicture}[scale=0.42] -% \begin{axis}[ -% grid=both, -% xlabel={SNR}, ylabel={BER}, -% ymode=log, -% legend style={at={(0.05,0.05)},anchor=south west}, -% ymax=1.5, ymin=3e-8, -% ] -% -% \addplot table [x=SNR, y=BER, col sep=comma, discard if not={gamma}{0.05}] -% {res/proximal/2d_ber_fer_dfr_20433484.csv}; -% \addlegendentry{proximal} -% \addplot table [x=SNR, y=BER, col sep=comma, discard if not={gamma}{0.05}] -% {res/hybrid/2d_ber_fer_dfr_20433484.csv}; -% \addlegendentry{hybrid prox. \& ML} -% \end{axis} -% \end{tikzpicture} -% \begin{tikzpicture}[scale=0.42] -% \begin{axis}[ -% grid=both, -% xlabel={SNR}, ylabel={FER}, -% ymode=log, -% legend style={at={(0.05,0.05)},anchor=south west}, -% ymax=1.5, ymin=3e-8, -% ] -% -% \addplot table [x=SNR, y=FER, col sep=comma, discard if not={gamma}{0.05}] -% {res/proximal/2d_ber_fer_dfr_20433484.csv}; -% \addlegendentry{proximal} -% \addplot table [x=SNR, y=FER, col sep=comma, discard if not={gamma}{0.05}] -% {res/hybrid/2d_ber_fer_dfr_20433484.csv}; -% \addlegendentry{hybrid prox. \& ML} -% \end{axis} -% \end{tikzpicture}\\ -% \begin{tikzpicture}[scale=0.42] -% \begin{axis}[ -% grid=both, -% xlabel={SNR}, ylabel={Decoding Failure Rate}, -% ymode=log, -% legend style={at={(0.05,0.05)},anchor=south west}, -% ymax=1.5, ymin=3e-8, -% ] -% -% \addplot table [x=SNR, y=DFR, col sep=comma, discard if not={gamma}{0.05}] -% {res/proximal/2d_ber_fer_dfr_20433484.csv}; -% \addlegendentry{proximal} -% \addplot table [x=SNR, y=DFR, col sep=comma, discard if not={gamma}{0.05}] -% {res/hybrid/2d_ber_fer_dfr_20433484.csv}; -% \addlegendentry{hybrid prox. \& ML} -% \end{axis} -% \end{tikzpicture} -% -% \caption{Simulation results for $\gamma = 0.05, \omega = 0.05, K=200, N=12$} -% \label{fig:simulation_results_hybrid} -% \end{figure} -% \end{minipage} -%\end{frame} - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\begin{frame}[t, fragile] - \frametitle{Proximal Decoding: Improvement using \\``ML-in-the-List''} - - \vspace*{-0.5cm} - - \begin{itemize} - \item Improvement of proximal decoding by adding an ``ML-in-the-List'' step after - iterating - \end{itemize} - - \vspace*{-2mm} - - \begin{minipage}[t]{.48\textwidth} - \centering - - \begin{figure} - \centering - - \begin{algorithm}[caption={}, label={}, basicstyle=\fontsize{9.5}{11.5}\selectfont] -$\boldsymbol{s} \leftarrow \boldsymbol{0}$ -for $K$ iterations do - $\boldsymbol{r} \leftarrow \boldsymbol{s} - \omega \nabla L \left( \boldsymbol{y} \mid \boldsymbol{s} \right) $ - $\boldsymbol{s} \leftarrow \boldsymbol{r} - \gamma \nabla h\left( \boldsymbol{r} \right) $ - $\boldsymbol{\hat{x}} \leftarrow \text{sign}\left( \boldsymbol{s} \right) $ - if $\boldsymbol{H}\boldsymbol{\hat{c}} = \boldsymbol{0}$ do - return $\boldsymbol{\hat{c}}$ - end if -end for -return $\boldsymbol{\hat{c}}$ |\Suppressnumber| - - -|\phantom{a}||\Reactivatenumber| - \end{algorithm} - \end{figure} - - \end{minipage}% - \hfill\begin{minipage}[t]{.48\textwidth} - \centering - \begin{figure} - \centering - - \begin{algorithm}[caption={}, label={}, basicstyle=\fontsize{9.5}{11.5}\selectfont] -$\boldsymbol{s} \leftarrow \boldsymbol{0}$ -for $K$ iterations do - $\boldsymbol{r} \leftarrow \boldsymbol{s} - \omega \nabla L \left( \boldsymbol{y} \mid \boldsymbol{s} \right) $ - $\boldsymbol{s} \leftarrow \boldsymbol{r} - \gamma \nabla h\left( \boldsymbol{r} \right) $ - $\boldsymbol{\hat{x}} \leftarrow \text{sign}\left( \boldsymbol{s} \right) $ - if $\boldsymbol{H}\boldsymbol{\hat{c}} = \boldsymbol{0}$ - return $\boldsymbol{\hat{c}}$ - end if -end for -$\textcolor{KITblue}{\text{Find }N\text{ most probably wrong bits.}}$ -$\textcolor{KITblue}{\text{Generate variations } \boldsymbol{\hat{c}}_l\text{ of }\boldsymbol{\hat{c}}\text{ with the }N\text{ bits modified.}}$ -$\textcolor{KITblue}{\text{Compute }d_H\left( \boldsymbol{ \hat{c}}_l, \boldsymbol{\hat{c}} \right) \text{ for all valid codewords } \boldsymbol{\hat{c}}_l}$ -$\textcolor{KITblue}{\textbf{return }\boldsymbol{\hat{c}}_l\text{ with lowest }d_H\left( \boldsymbol{ \hat{c}}_l, \boldsymbol{\hat{c}} \right)}$ - \end{algorithm} - \end{figure} - \end{minipage} -\end{frame} - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\begin{frame}[t] - \frametitle{Proximal Decoding: Improvement using \\``ML-in-the-List''} - - \vspace{-0.5cm} - - \begin{itemize} - \item Comparison of proximal \& improved (correction of $N = \SI{12}{\bit}$) - decoding simulation% - \footnote{(3,6) regular LDPC code with $n=204, k=102$ - \cite[Code: 204.33.484]{mackay_enc}} - results - \end{itemize} - - \begin{figure}[H] - \centering - - \begin{tikzpicture} - \begin{axis}[ - grid=both, - xlabel={$E_b / N_0$}, ylabel={BER}, - ymode=log, - legend columns=2, - legend style={at={(0.5,-0.45)},anchor=south}, - ymax=1.5, ymin=3e-8, - width=0.33\textwidth, - height=0.28\textwidth, - ] - \addplot[ForestGreen, mark=*, solid] - table [x=SNR, y=BER, col sep=comma, discard if not={gamma}{0.15}] - {res/proximal/2d_ber_fer_dfr_20433484.csv}; - \addplot[Emerald, mark=triangle, densely dashed] - table [x=SNR, y=BER, col sep=comma, discard if not={gamma}{0.15}] - {res/hybrid/2d_ber_fer_dfr_20433484.csv}; - - \addplot[NavyBlue, mark=*, solid] - table [x=SNR, y=BER, col sep=comma, discard if not={gamma}{0.01}] - {res/proximal/2d_ber_fer_dfr_20433484.csv}; - \addplot[RoyalPurple, mark=triangle, densely dashed] - table [x=SNR, y=BER, col sep=comma, discard if not={gamma}{0.01}] - {res/hybrid/2d_ber_fer_dfr_20433484.csv}; - - \addplot[RedOrange, mark=*, solid] - table [x=SNR, y=BER, col sep=comma, discard if not={gamma}{0.05}] - {res/proximal/2d_ber_fer_dfr_20433484.csv}; - \addplot[red, mark=triangle, densely dashed] - table [x=SNR, y=BER, col sep=comma, discard if not={gamma}{0.05}] - {res/hybrid/2d_ber_fer_dfr_20433484.csv}; - \end{axis} - \end{tikzpicture} - \begin{tikzpicture} - \begin{axis}[ - grid=both, - xlabel={$E_b / N_0$}, ylabel={FER}, - ymode=log, - legend columns=2, - legend style={at={(0.5,-0.45)},anchor=south}, - ymax=1.5, ymin=3e-8, - width=0.33\textwidth, - height=0.28\textwidth, - ] - - \addplot[ForestGreen, mark=*, solid] - table [x=SNR, y=FER, col sep=comma, discard if not={gamma}{0.15}] - {res/proximal/2d_ber_fer_dfr_20433484.csv}; - \addplot[Emerald, mark=triangle, densely dashed] - table [x=SNR, y=FER, col sep=comma, discard if not={gamma}{0.15}] - {res/hybrid/2d_ber_fer_dfr_20433484.csv}; - - \addplot[NavyBlue, mark=*, solid] - table [x=SNR, y=FER, col sep=comma, discard if not={gamma}{0.01}] - {res/proximal/2d_ber_fer_dfr_20433484.csv}; - \addplot[RoyalPurple, mark=triangle, densely dashed] - table [x=SNR, y=FER, col sep=comma, discard if not={gamma}{0.01}] - {res/hybrid/2d_ber_fer_dfr_20433484.csv}; - - \addplot[RedOrange, mark=*, solid] - table [x=SNR, y=FER, col sep=comma, discard if not={gamma}{0.05}] - {res/proximal/2d_ber_fer_dfr_20433484.csv}; - \addplot[red, mark=triangle, densely dashed] - table [x=SNR, y=FER, col sep=comma, discard if not={gamma}{0.05}] - {res/hybrid/2d_ber_fer_dfr_20433484.csv}; - \end{axis} - \end{tikzpicture} - \begin{tikzpicture} - \begin{axis}[ - grid=both, - xlabel={$E_b / N_0$}, ylabel={Decoding Failure Rate}, - ymode=log, - legend columns=2, - legend style={at={(0.5,-0.45)},anchor=south}, - ymax=1.5, ymin=3e-8, - width=0.33\textwidth, - height=0.28\textwidth, - ] - - \addplot[ForestGreen, mark=*, solid] - table [x=SNR, y=DFR, col sep=comma, discard if not={gamma}{0.15}] - {res/proximal/2d_ber_fer_dfr_20433484.csv}; - \addplot[Emerald, mark=triangle, densely dashed] - table [x=SNR, y=DFR, col sep=comma, discard if not={gamma}{0.15}] - {res/hybrid/2d_ber_fer_dfr_20433484.csv}; - - \addplot[NavyBlue, mark=*, solid] - table [x=SNR, y=DFR, col sep=comma, discard if not={gamma}{0.01}] - {res/proximal/2d_ber_fer_dfr_20433484.csv}; - \addplot[RoyalPurple, mark=triangle, densely dashed] - table [x=SNR, y=DFR, col sep=comma, discard if not={gamma}{0.01}] - {res/hybrid/2d_ber_fer_dfr_20433484.csv}; - - \addplot[RedOrange, mark=*, solid] - table [x=SNR, y=DFR, col sep=comma, discard if not={gamma}{0.05}] - {res/proximal/2d_ber_fer_dfr_20433484.csv}; - \addplot[red, mark=triangle, densely dashed] - table [x=SNR, y=DFR, col sep=comma, discard if not={gamma}{0.05}] - {res/hybrid/2d_ber_fer_dfr_20433484.csv}; - \end{axis} - \end{tikzpicture} - \begin{tikzpicture} - \begin{axis}[hide axis, - xmin=10, xmax=50, - ymin=0, ymax=0.4, - legend columns=3, - legend style={draw=white!15!black,legend cell align=left}] - \addlegendimage{ForestGreen, mark=*, solid} - \addlegendentry{proximal, $\gamma = 0.15$} - - \addlegendimage{NavyBlue, mark=*, solid} - \addlegendentry{proximal, $\gamma = 0.01$} - - \addlegendimage{RedOrange, mark=*, solid} - \addlegendentry{proximal, $\gamma = 0.05$} - - \addlegendimage{Emerald, mark=triangle, densely dashed} - \addlegendentry{improved, $\gamma = 0.15$} - - \addlegendimage{RoyalPurple, mark=triangle, densely dashed} - \addlegendentry{improved, $\gamma = 0.01$} - - \addlegendimage{red, mark=triangle, densely dashed} - \addlegendentry{improved, $\gamma = 0.05$} - \end{axis} - \end{tikzpicture} - - \caption{Simulation results for $\gamma = 0.05, \omega = 0.05, K=200, N=12$} - \label{fig:simulation_results_hybrid} - \end{figure} -\end{frame} - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%\begin{frame}[t] -% \frametitle{Proximal Decoding: Improvement} -% -% \begin{minipage}[c]{0.9\textwidth} -% \centering -% \begin{figure}[H] -% \vspace*{-0.6cm} -% \hspace*{-0.7cm} -% \centering -% \begin{subfigure}[c]{0.33\textwidth} -% \centering -% -% \begin{tikzpicture}[scale=0.4] -% \begin{axis}[ -% grid=both, -% xlabel={$E_b / N_0$}, ylabel={FER}, -% ymode=log, -% legend columns=1, -% legend pos=outer north east, -% %legend columns=2, -% %legend style={at={(0.5,-0.45)},anchor=south}, -% ymax=1.5, ymin=8e-5, -% ] -% -% \addplot[ForestGreen, mark=*, solid] -% table [x=SNR, y=FER, col sep=comma, discard if not={gamma}{0.15}] -% {res/proximal/2d_ber_fer_dfr_963965.csv}; -% \addplot[Emerald, mark=triangle, densely dashed] -% table [x=SNR, y=FER, col sep=comma, discard if not={gamma}{0.15}] -% {res/hybrid/2d_ber_fer_dfr_963965.csv}; -% -% \addplot[NavyBlue, mark=*, solid] -% table [x=SNR, y=FER, col sep=comma, discard if not={gamma}{0.01}] -% {res/proximal/2d_ber_fer_dfr_963965.csv}; -% \addplot[RoyalPurple, mark=triangle, densely dashed] -% table [x=SNR, y=FER, col sep=comma, discard if not={gamma}{0.01}] -% {res/hybrid/2d_ber_fer_dfr_963965.csv}; -% -% \addplot[RedOrange, mark=*, solid] -% table [x=SNR, y=FER, col sep=comma, discard if not={gamma}{0.05}] -% {res/proximal/2d_ber_fer_dfr_963965.csv}; -% \addplot[red, mark=triangle, densely dashed] -% table [x=SNR, y=FER, col sep=comma, discard if not={gamma}{0.05}] -% {res/hybrid/2d_ber_fer_dfr_963965.csv}; -% \end{axis} -% \end{tikzpicture} -% \caption{$\left( 3, 6 \right)$-regular LDPC code with $n=96, k=48$ \cite[\text{96.3.965}]{mackay_enc}} -% \end{subfigure}% -% \begin{subfigure}[c]{0.33\textwidth} -% \centering -% \begin{tikzpicture}[scale=0.4] -% \begin{axis}[ -% grid=both, -% xlabel={$E_b / N_0$}, ylabel={FER}, -% ymode=log, -% legend columns=1, -% legend pos=outer north east, -% xmin=0.5, xmax=6, xtick={1, ..., 5}, -% ymax=1.5, ymin=8e-5, -% ] -% -% \addplot[ForestGreen, mark=*, solid,] -% table [x=SNR, y=FER, col sep=comma, -% discard if not={gamma}{0.15}, -% discard if gt={SNR}{5.5},] -% {res/proximal/2d_ber_fer_dfr_20433484.csv}; -% \addplot[Emerald, mark=triangle, densely dashed] -% table [x=SNR, y=FER, col sep=comma, -% discard if not={gamma}{0.15}, -% discard if gt={SNR}{5.5},] -% {res/hybrid/2d_ber_fer_dfr_20433484.csv}; -% -% \addplot[NavyBlue, mark=*, solid] -% table [x=SNR, y=FER, col sep=comma, -% discard if not={gamma}{0.01}, -% discard if gt={SNR}{5.5},] -% {res/proximal/2d_ber_fer_dfr_20433484.csv}; -% \addplot[RoyalPurple, mark=triangle, densely dashed] -% table [x=SNR, y=FER, col sep=comma, -% discard if not={gamma}{0.01}, -% discard if gt={SNR}{5.5},] -% {res/hybrid/2d_ber_fer_dfr_20433484.csv}; -% -% \addplot[RedOrange, mark=*, solid] -% table [x=SNR, y=FER, col sep=comma, -% discard if not={gamma}{0.05}, -% discard if gt={SNR}{5.5},] -% {res/proximal/2d_ber_fer_dfr_20433484.csv}; -% \addplot[red, mark=triangle, densely dashed] -% table [x=SNR, y=FER, col sep=comma, -% discard if not={gamma}{0.05}, -% discard if gt={SNR}{5.5},] -% {res/hybrid/2d_ber_fer_dfr_20433484.csv}; -% \end{axis} -% \end{tikzpicture} -% \caption{$\left( 3, 6 \right)$-regular LDPC code with $n=204, k=102$ \cite[\text{204.33.484}]{mackay_enc}} -% \end{subfigure}% -% \begin{subfigure}[c]{0.33\textwidth} -% \centering -% \begin{tikzpicture}[scale=0.4] -% \begin{axis}[ -% grid=both, -% xlabel={$E_b / N_0$}, ylabel={FER}, -% ymode=log, -% legend columns=1, -% legend pos=outer north east, -% %legend columns=2, -% %legend style={at={(0.5,-0.45)},anchor=south}, -% ymax=1.5, ymin=8e-5, -% ] -% -% \addplot[ForestGreen, mark=*, solid] -% table [x=SNR, y=FER, col sep=comma, discard if not={gamma}{0.15}] -% {res/proximal/2d_ber_fer_dfr_40833844.csv}; -% \addplot[Emerald, mark=triangle, densely dashed] -% table [x=SNR, y=FER, col sep=comma, discard if not={gamma}{0.15}] -% {res/hybrid/2d_ber_fer_dfr_40833844.csv}; -% -% \addplot[NavyBlue, mark=*, solid] -% table [x=SNR, y=FER, col sep=comma, discard if not={gamma}{0.01}] -% {res/proximal/2d_ber_fer_dfr_40833844.csv}; -% \addplot[RoyalPurple, mark=triangle, densely dashed] -% table [x=SNR, y=FER, col sep=comma, discard if not={gamma}{0.01}] -% {res/hybrid/2d_ber_fer_dfr_40833844.csv}; -% -% \addplot[RedOrange, mark=*, solid] -% table [x=SNR, y=FER, col sep=comma, discard if not={gamma}{0.05}] -% {res/proximal/2d_ber_fer_dfr_40833844.csv}; -% \addplot[red, mark=triangle, densely dashed] -% table [x=SNR, y=FER, col sep=comma, discard if not={gamma}{0.05}] -% {res/hybrid/2d_ber_fer_dfr_40833844.csv}; -% \end{axis} -% \end{tikzpicture} -% \caption{$\left( 3, 6 \right)$-regular LDPC code with $n=408, k=204$ \cite[\text{408.33.844}]{mackay_enc}} -% \end{subfigure} -% \hspace*{-0.7cm} -% \begin{subfigure}[c]{0.33\textwidth} -% \centering -% \begin{tikzpicture}[scale=0.4] -% \begin{axis}[ -% grid=both, -% xlabel={$E_b / N_0$}, ylabel={FER}, -% ymode=log, -% legend columns=1, -% legend pos=outer north east, -% %legend columns=2, -% %legend style={at={(0.5,-0.45)},anchor=south}, -% ymax=1.5, ymin=8e-5, -% ] -% -% \addplot[ForestGreen, mark=*, solid] -% table [x=SNR, y=FER, col sep=comma, discard if not={gamma}{0.15}] -% {res/proximal/2d_ber_fer_dfr_bch_31_26.csv}; -% \addplot[Emerald, mark=triangle, densely dashed] -% table [x=SNR, y=FER, col sep=comma, discard if not={gamma}{0.15}] -% {res/hybrid/2d_ber_fer_dfr_bch_31_26.csv}; -% -% \addplot[NavyBlue, mark=*, solid] -% table [x=SNR, y=FER, col sep=comma, discard if not={gamma}{0.01}] -% {res/proximal/2d_ber_fer_dfr_bch_31_26.csv}; -% \addplot[RoyalPurple, mark=triangle, densely dashed] -% table [x=SNR, y=FER, col sep=comma, discard if not={gamma}{0.01}] -% {res/hybrid/2d_ber_fer_dfr_bch_31_26.csv}; -% -% \addplot[RedOrange, mark=*, solid] -% table [x=SNR, y=FER, col sep=comma, discard if not={gamma}{0.05}] -% {res/proximal/2d_ber_fer_dfr_bch_31_26.csv}; -% \addplot[red, mark=triangle, densely dashed] -% table [x=SNR, y=FER, col sep=comma, discard if not={gamma}{0.05}] -% {res/hybrid/2d_ber_fer_dfr_bch_31_26.csv}; -% \end{axis} -% \end{tikzpicture} -% \caption{BCH code with $n=31, k=26$\\[\baselineskip]} -% \end{subfigure}% -% \begin{subfigure}[c]{0.33\textwidth} -% \centering -% \begin{tikzpicture}[scale=0.4] -% \begin{axis}[ -% grid=both, -% xlabel={$E_b / N_0$}, ylabel={FER}, -% ymode=log, -% legend columns=1, -% legend pos=outer north east, -% %legend columns=2, -% %legend style={at={(0.5,-0.45)},anchor=south}, -% ymax=1.5, ymin=8e-5, -% ] -% -% \addplot[ForestGreen, mark=*, solid] -% table [x=SNR, y=FER, col sep=comma, discard if not={gamma}{0.15}] -% {res/proximal/2d_ber_fer_dfr_20455187.csv}; -% \addplot[Emerald, mark=triangle, densely dashed] -% table [x=SNR, y=FER, col sep=comma, discard if not={gamma}{0.15}] -% {res/hybrid/2d_ber_fer_dfr_20455187.csv}; -% -% \addplot[NavyBlue, mark=*, solid] -% table [x=SNR, y=FER, col sep=comma, discard if not={gamma}{0.01}] -% {res/proximal/2d_ber_fer_dfr_20455187.csv}; -% \addplot[RoyalPurple, mark=triangle, densely dashed] -% table [x=SNR, y=FER, col sep=comma, discard if not={gamma}{0.01}] -% {res/hybrid/2d_ber_fer_dfr_20455187.csv}; -% -% \addplot[RedOrange, mark=*, solid] -% table [x=SNR, y=FER, col sep=comma, discard if not={gamma}{0.05}] -% {res/proximal/2d_ber_fer_dfr_20455187.csv}; -% \addplot[red, mark=triangle, densely dashed] -% table [x=SNR, y=FER, col sep=comma, discard if not={gamma}{0.05}] -% {res/hybrid/2d_ber_fer_dfr_20455187.csv}; -% \end{axis} -% \end{tikzpicture} -% \caption{$\left( 5, 10 \right)$-regular LDPC code with $n=204, k=102$ \cite[\text{204.55.187}]{mackay_enc}} -% \end{subfigure}% -% \begin{subfigure}[c]{0.33\textwidth} -% \centering -% \begin{tikzpicture}[scale=0.4] -% \begin{axis}[ -% grid=both, -% xlabel={$E_b / N_0$}, ylabel={FER}, -% ymode=log, -% legend columns=1, -% legend pos=outer north east, -% ymax=1.5, ymin=8e-5, -% ] -% -% \addplot[ForestGreen, mark=*, solid] -% table [x=SNR, y=FER, col sep=comma, discard if not={gamma}{0.15}] -% {res/proximal/2d_ber_fer_dfr_pegreg252x504.csv}; -% \addplot[Emerald, mark=triangle, densely dashed] -% table [x=SNR, y=FER, col sep=comma, discard if not={gamma}{0.15}] -% {res/hybrid/2d_ber_fer_dfr_pegreg252x504.csv}; -% -% \addplot[NavyBlue, mark=*, solid] -% table [x=SNR, y=FER, col sep=comma, discard if not={gamma}{0.01}] -% {res/proximal/2d_ber_fer_dfr_pegreg252x504.csv}; -% \addplot[RoyalPurple, mark=triangle, densely dashed] -% table [x=SNR, y=FER, col sep=comma, discard if not={gamma}{0.01}] -% {res/hybrid/2d_ber_fer_dfr_pegreg252x504.csv}; -% -% \addplot[RedOrange, mark=*, solid] -% table [x=SNR, y=FER, col sep=comma, discard if not={gamma}{0.05}] -% {res/proximal/2d_ber_fer_dfr_pegreg252x504.csv}; -% \addplot[red, mark=triangle, densely dashed] -% table [x=SNR, y=FER, col sep=comma, discard if not={gamma}{0.05}] -% {res/hybrid/2d_ber_fer_dfr_pegreg252x504.csv}; -% \end{axis} -% \end{tikzpicture} -% \caption{LDPC code (progressive edge growth construction) with $n=504, k=252$ \cite[\text{PEGReg252x504}]{mackay_enc}} -% \end{subfigure}% -% \end{figure} -% \end{minipage}% -% \begin{minipage}[c]{0.1\textwidth} -% \centering -% -% \begin{figure} -% \vspace*{-1.5cm} -% \hspace*{-0.7cm} -% \centering -% \begin{tikzpicture}[scale=0.7] -% \begin{axis}[hide axis, -% xmin=10, xmax=50, -% ymin=0, ymax=0.4, -% legend style={draw=white!15!black,legend cell align=left}] -% \addlegendimage{ForestGreen, mark=*, solid} -% \addlegendentry{proximal, $\gamma = 0.15$} -% -% \addlegendimage{Emerald, mark=triangle, densely dashed} -% \addlegendentry{improved, $\gamma = 0.15$} -% -% \addlegendimage{NavyBlue, mark=*, solid} -% \addlegendentry{proximal, $\gamma = 0.01$} -% -% \addlegendimage{RoyalPurple, mark=triangle, densely dashed} -% \addlegendentry{improved, $\gamma = 0.01$} -% -% \addlegendimage{RedOrange, mark=*, solid} -% \addlegendentry{proximal, $\gamma = 0.05$} -% -% \addlegendimage{red, mark=triangle, densely dashed} -% \addlegendentry{improved, $\gamma = 0.05$} -% \end{axis} -% \end{tikzpicture} -% -% \end{figure} -% \end{minipage} -%\end{frame} - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\begin{frame}[t] - \frametitle{Proximal Decoding: Average Error} - - \begin{figure}[H] - \centering - - \begin{tikzpicture} - \begin{axis}[ - grid=both, - xlabel={Iterations}, - ylabel={Average $\lVert \boldsymbol{c}-\boldsymbol{\hat{c}} \rVert$}, - width=0.45\textwidth, - height=0.3375\textwidth, - legend pos=outer north east, - ] - \addplot [ForestGreen, mark=none, line width=1pt] - table [col sep=comma, discard if not={omega}{0.0774263682681127}, x=k, y=err] - {res/proximal/2d_avg_error_20433484_1db.csv}; - \addlegendentry{$E_b / N_0 = \SI{1}{dB}$} - \addplot [NavyBlue, mark=none, line width=1pt] - table [col sep=comma, discard if not={omega}{0.0774263682681127}, x=k, y=err] - {res/proximal/2d_avg_error_20433484_3db.csv}; - \addlegendentry{$E_b / N_0 = \SI{3}{dB}$} - \addplot [RedOrange, mark=none, line width=1pt] - table [col sep=comma, discard if not={omega}{0.052233450742668434}, x=k, y=err] - {res/proximal/2d_avg_error_20433484_5db.csv}; - \addlegendentry{$E_b / N_0 = \SI{5}{dB}$} - \addplot [RoyalPurple, mark=none, line width=1pt] - table [col sep=comma, discard if not={omega}{0.052233450742668434}, x=k, y=err] - {res/proximal/2d_avg_error_20433484_8db.csv}; - \addlegendentry{$E_b / N_0 = \SI{8}{dB}$} - \end{axis} - \end{tikzpicture} - - \caption{Average error for $\SI{500000}{}$ decodings, $ - \omega = 0.05, \gamma = 0.05, K=200$\footnotemark} - \end{figure} - - \footnotetext{Simulation performed with (3,6) regular LDPC code with $n=204, k=102$ - \cite[Code: 204.33.484]{mackay_enc}} - - \begin{itemize} - \item With increasing iterations, the average error asymptotically - approaches a minimum, non-zero value - \end{itemize} -\end{frame} - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\begin{frame}[t] - \frametitle{Proximal Decoding: Time Complexity} - - \begin{figure}[H] - \centering - - \begin{tikzpicture} - \begin{axis}[ - grid=both, - xlabel={$n$}, ylabel={time per frame (s)}, - legend style={at={(0.05,0.7)},anchor=south west}, - legend cell align={left}, - width=0.45\textwidth, - height=0.3375\textwidth, - ] - \addplot[RedOrange, only marks, mark=*] - table [col sep=comma, x=n, y=spf] - {res/proximal/fps_vs_n.csv}; - \addlegendentry{proximal} - - \addplot[RoyalPurple, only marks, mark=triangle*] - table [col sep=comma, x=n, y=spf] - {res/hybrid/fps_vs_n.csv}; - \addlegendentry{improved ($\SI{12}{\bit}$)} - \end{axis} - \end{tikzpicture} - - \caption{Time complexity of proximal decoding and improved implementation\footnotemark} - \label{fig:fps_vs_n} - \end{figure} - - \footnotetext{The points shown were calculated by evaluating the metadata - of BER simulation results for the following codes: - BCH $\left( 31, 11 \right)$; - BCH $\left( 31, 26 \right)$; - \cite[\text{96.3.965; 204.33.484; - 204.55.187; 408.33.844; PEGReg252x504}]{mackay_enc} - } - -\end{frame} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%\begin{frame}[t] -% \frametitle{Conclusion} -% -% \begin{itemize} -% \item Analysis of proximal decoding for AWGN channels: -% \begin{itemize} -% \item Error correcting performance (BER, FER, decoding failures) -% \item Computational performance ($\mathcal{O}\left( n \right) $ time complexity, -% fast implementation possible) -% \item Number of iterations independent of SNR -% \end{itemize} -% \item Suggestion for improvement of proximal decoding: -% \begin{itemize} -% \item Addition of ``ML-in-the-list'' step -% \item Up to $\sim\SI{1}{dB}$ gain under certain conditions -% \end{itemize} -% \end{itemize} -%\end{frame} - - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\subsection{LP Decoding using ADMM}% -\label{sub:LP Decoding using ADMM} - -\begin{frame}[t] - \frametitle{LP Decoding using ADMM} - - \begin{figure}[H] - \centering - - \begin{tikzpicture} - \begin{axis}[ - grid=both, - xlabel={$E_b / N_0 \left( \text{dB} \right) $}, ylabel={FER}, - ymode=log, - width=0.45\textwidth, - height=0.325\textwidth, - %legend style={at={(0.03,0.04)},anchor=south west}, - legend pos=outer north east, - ] - \addplot[RedOrange, line width=1pt] - table [col sep=comma, x=SNR, y=FER, - discard if gt={SNR}{2.2}, - ] - {res/admm/fer_paper_margulis.csv}; - \addlegendentry{ADMM (Barman et al.)} - \addplot[NavyBlue, only marks, mark=o, line width=1pt] - table [col sep=comma, x=SNR, y=FER,] - {res/admm/ber_margulis264013203.csv}; - \addlegendentry{ADMM (Own results)} - \addplot[RoyalPurple, line width=1pt, densely dashed] - table [col sep=comma, x=SNR, y=FER, discard if gt={SNR}{2.2},] - {res/generic/fer_bp_mackay_margulis.csv}; - \addlegendentry{BP (Barman et al.)} - \end{axis} - \end{tikzpicture} - - \caption{Comparison of datapoints from Barman et al. with own simulation results% - \protect\footnotemark{}} - \label{fig:admm:results} - \end{figure}% - % - \footnotetext{``Margulis'' LDPC code with $n = 2640$, $k = 1320$ - \cite[\text{Margulis2640.1320.3}]{mackay_enc}; $K=200, \mu = 3.3, \rho=1.9, - \epsilon_{\text{pri}} = 10^{-5}, \epsilon_{\text{dual}} = 10^{-5}$ - }% - % - -\end{frame} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\begin{frame}[t] - \frametitle{LP Decoding using ADMM: Choice of Penalty\\ - Parameters} - - \begin{figure}[H] - \centering - - \begin{subfigure}[c]{0.48\textwidth} - \centering - - \begin{tikzpicture} - \begin{axis}[ - grid=both, - xlabel={$\mu$}, ylabel={FER}, - ymode=log, - width=0.9\textwidth, - height=0.675\textwidth, - ] - \addplot[ForestGreen, line width=1pt, densely dashed, mark=*] - table [col sep=comma, x=mu, y=FER, - discard if not={SNR}{2.0},] - {res/admm/ber_2d_20433484.csv}; - \addplot[RedOrange, line width=1pt, densely dashed, mark=*] - table [col sep=comma, x=mu, y=FER, - discard if not={SNR}{3.0},] - {res/admm/ber_2d_20433484.csv}; - \addplot[NavyBlue, line width=1pt, densely dashed, mark=*] - table [col sep=comma, x=mu, y=FER, - discard if not={SNR}{4.0},] - {res/admm/ber_2d_20433484.csv}; - \end{axis} - \end{tikzpicture} - \end{subfigure}% - \begin{subfigure}[c]{0.48\textwidth} - \centering - - \begin{tikzpicture} - \begin{axis}[ - grid=both, - xlabel={$\rho$}, ylabel={FER}, - ymode=log, - width=0.9\textwidth, - height=0.675\textwidth, - ] - \addplot[ForestGreen, line width=1pt, densely dashed, mark=*] - table [col sep=comma, x=rho, y=FER, - discard if not={SNR}{2.0},] - {res/admm/ber_2d_20433484_rho.csv}; - \addplot[RedOrange, line width=1pt, densely dashed, mark=*] - table [col sep=comma, x=rho, y=FER, - discard if not={SNR}{3.0},] - {res/admm/ber_2d_20433484_rho.csv}; - \addplot[NavyBlue, line width=1pt, densely dashed, mark=*] - table [col sep=comma, x=rho, y=FER, - discard if not={SNR}{4.0},] - {res/admm/ber_2d_20433484_rho.csv}; - \end{axis} - \end{tikzpicture} - \end{subfigure}% - - \begin{subfigure}[t]{\textwidth} - \centering - - \begin{tikzpicture} - \begin{axis}[hide axis, - xmin=10, xmax=50, - ymin=0, ymax=0.4, - legend columns=3, - legend style={draw=white!15!black,legend cell align=left}] - - \addlegendimage{ForestGreen, line width=1pt, densely dashed, mark=*} - \addlegendentry{$E_b / N_0 = \SI{2}{dB}$} - \addlegendimage{RedOrange, line width=1pt, densely dashed, mark=*} - \addlegendentry{$E_b / N_0 = \SI{3}{dB}$} - \addlegendimage{NavyBlue, line width=1pt, densely dashed, mark=*} - \addlegendentry{$E_b / N_0 = \SI{4}{dB}$} - \end{axis} - \end{tikzpicture} - \end{subfigure} - - \caption{Relation between $\mu$ and $\rho$ and decoding performance% - \protect\footnotemark{}} - \end{figure}% - - \footnotetext{Simulation performed with (3,6) regular LDPC code with $n=204, k=102$ - \cite[Code: 204.33.484]{mackay_enc}} - -\end{frame} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\begin{frame}[t] - \frametitle{LP Decoding using ADMM: Choice of Penalty\\ - Parameters} - - \begin{figure}[H] - \centering - - \begin{subfigure}[c]{0.48\textwidth} - \centering - - \begin{tikzpicture} - \begin{axis}[ - grid=both, - xlabel={$\mu$}, ylabel={Average \# of iterations}, - width=0.9\textwidth, - height=0.675\textwidth, - ] - \addplot[ForestGreen, line width=1pt, densely dashed, mark=*] - table [col sep=comma, x=mu, y=k_avg, - discard if not={SNR}{2.0},] - {res/admm/mu_kavg_20433484.csv}; - \addplot[RedOrange, line width=1pt, densely dashed, mark=*] - table [col sep=comma, x=mu, y=k_avg, - discard if not={SNR}{3.0},] - {res/admm/mu_kavg_20433484.csv}; - \addplot[NavyBlue, line width=1pt, densely dashed, mark=*] - table [col sep=comma, x=mu, y=k_avg, - discard if not={SNR}{4.0},] - {res/admm/mu_kavg_20433484.csv}; - \end{axis} - \end{tikzpicture} - \end{subfigure}% - \begin{subfigure}[c]{0.48\textwidth} - \centering - - \begin{tikzpicture} - \begin{axis}[ - grid=both, - xlabel={$\rho$}, ylabel={Average \# of iterations}, - width=0.9\textwidth, - height=0.675\textwidth, - ] - \addplot[ForestGreen, line width=1pt, densely dashed, mark=*] - table [col sep=comma, x=rho, y=k_avg, - discard if not={SNR}{2.0},] - {res/admm/rho_kavg_20433484.csv}; - \addplot[RedOrange, line width=1pt, densely dashed, mark=*] - table [col sep=comma, x=rho, y=k_avg, - discard if not={SNR}{3.0},] - {res/admm/rho_kavg_20433484.csv}; - \addplot[NavyBlue, line width=1pt, densely dashed, mark=*] - table [col sep=comma, x=rho, y=k_avg, - discard if not={SNR}{4.0},] - {res/admm/rho_kavg_20433484.csv}; - \end{axis} - \end{tikzpicture} - \end{subfigure}% - - \begin{subfigure}[t]{\textwidth} - \centering - - \begin{tikzpicture} - \begin{axis}[hide axis, - xmin=10, xmax=50, - ymin=0, ymax=0.4, - legend columns=3, - legend style={draw=white!15!black,legend cell align=left}] - - \addlegendimage{ForestGreen, line width=1pt, densely dashed, mark=*} - \addlegendentry{$E_b / N_0 = \SI{2}{dB}$} - \addlegendimage{RedOrange, line width=1pt, densely dashed, mark=*} - \addlegendentry{$E_b / N_0 = \SI{3}{dB}$} - \addlegendimage{NavyBlue, line width=1pt, densely dashed, mark=*} - \addlegendentry{$E_b / N_0 = \SI{4}{dB}$} - \end{axis} - \end{tikzpicture} - \end{subfigure} - - \caption{Relation between $\mu$ and $\rho$ and speed of convergence% - \protect\footnotemark{}} - \end{figure}% - - \footnotetext{Simulation performed with (3,6) regular LDPC code with $n=204, k=102$ - \cite[Code: 204.33.484]{mackay_enc}} -\end{frame} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\begin{frame}[t] - \frametitle{LP Decoding using ADMM: Average Error} - - \begin{figure}[H] - \centering - - \begin{tikzpicture} - \begin{axis}[ - grid=both, - width=0.45\textwidth, - height=0.3375\textwidth, - legend pos=outer north east, - xlabel={Iteration}, ylabel={Average $\left\Vert \hat{\boldsymbol{c}} - - \boldsymbol{c} \right\Vert$} - ] - \addplot[ForestGreen, line width=1pt] - table [col sep=comma, x=k, y=err, - discard if not={SNR}{1.0}, - discard if gt={k}{100}] - {res/admm/avg_error_20433484.csv}; - \addlegendentry{$E_b / N_0 = \SI{1}{dB}$} - - \addplot[RedOrange, line width=1pt] - table [col sep=comma, x=k, y=err, - discard if not={SNR}{2.0}, - discard if gt={k}{100}] - {res/admm/avg_error_20433484.csv}; - \addlegendentry{$E_b / N_0 = \SI{2}{dB}$} - - \addplot[NavyBlue, line width=1pt] - table [col sep=comma, x=k, y=err, - discard if not={SNR}{3.0}, - discard if gt={k}{100}] - {res/admm/avg_error_20433484.csv}; - \addlegendentry{$E_b / N_0 = \SI{3}{dB}$} - - \addplot[RoyalPurple, line width=1pt] - table [col sep=comma, x=k, y=err, - discard if not={SNR}{4.0}, - discard if gt={k}{100}] - {res/admm/avg_error_20433484.csv}; - \addlegendentry{$E_b / N_0 = \SI{4}{dB}$} - \end{axis} - \end{tikzpicture} - - \caption{Average error for $\SI{100000}{}$ decodings\protect\footnotemark{}} - \end{figure}% - - \footnotetext{Simulation performed with (3,6) regular LDPC code with $n=204, k=102$ - \cite[Code: 204.33.484]{mackay_enc}} -\end{frame} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\begin{frame}[t] - \frametitle{LP Decoding using ADMM: Time Complexity} - - \begin{figure}[h] - \centering - - \begin{tikzpicture} - \begin{axis}[grid=both, - xlabel={$n$}, ylabel={Time per frame (s)}, - width=0.45\textwidth, - height=0.3375\textwidth, - legend style={at={(0.03,0.96)},anchor=north west}, - %legend pos=outer north east, - legend cell align={left},] - -% \addplot[RedOrange, only marks, mark=*] -% table [col sep=comma, x=n, y=spf] -% {res/proximal/fps_vs_n.csv}; -% \addlegendentry{Proximal decoding} - \addplot[RoyalPurple, only marks, mark=triangle*] - table [col sep=comma, x=n, y=spf] - {res/admm/fps_vs_n.csv}; -% \addlegendentry{LP decoding using ADMM} - \end{axis} - \end{tikzpicture} - - \caption{Timing requirements of the LP decoding imlementation% - \protect\footnotemark{}} - \end{figure}% - - \footnotetext{The points shown were calculated by evaluating the metadata - of BER simulation results for the following codes: - BCH $\left( 31, 11 \right)$; - BCH $\left( 31, 26 \right)$; - \cite[\text{96.3.965; 204.33.484; - 204.55.187; 408.33.844; PEGReg252x504}]{mackay_enc} - } - -\end{frame} diff --git a/latex/presentations/final/sections/lp_dec_using_admm.tex b/latex/presentations/final/sections/lp_dec_using_admm.tex new file mode 100644 index 0000000..b38f89a --- /dev/null +++ b/latex/presentations/final/sections/lp_dec_using_admm.tex @@ -0,0 +1,1141 @@ +\section{LP Decoding using ADMM}% +\label{sec:LP Decoding using ADMM} + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\subsection{LP Decoding using ADMM}% +\label{sub:LP Decoding using ADMM} + +\begin{frame}[t] + \frametitle{LP Decoding \cite{feldman_paper}} + + \begin{itemize} + \item General reformulation of ML decoding as a linear program (LP) +% \item Codeword polytope: +% \begin{align*} +% \text{poly}\left( \mathcal{C} \right) = +% \left\{ +% \sum_{\boldsymbol{c}\in\mathcal{C}}\alpha_{\boldsymbol{c}} +% \boldsymbol{c} : \alpha_{\boldsymbol{c}} \ge 0, +% \sum_{\boldsymbol{c}\in\mathcal{C}}\alpha_{\boldsymbol{c}} = 1 +% \right\}, +% \hspace{5mm} \alpha_{\boldsymbol{c}} \in \mathbb{R}_{\ge 0} +% \end{align*} + \item Cost function: + \begin{align*} + \boldsymbol{\gamma}^{T} \boldsymbol{c} = \sum_{i=1}^{n} + \gamma_i c_i, + \hspace{5mm}\gamma_i = \ln\left( + \frac{f_{Y_i \mid C_i}\left( y_i | c_i = 0 \right) } + {f_{Y_i \mid C_i}\left(y_i | c_i=1 \right) } \right) + \end{align*} + \item Exact \textit{integer linear programming} (ILP) formulation of ML decoding: + \begin{align*} + &\text{minimize } \boldsymbol{\gamma}^\text{T} \boldsymbol{c}\\ + &\text{subject to } \boldsymbol{c}\in \mathcal{C} + \end{align*} + \item Goal: relaxation of constraints to make a practical solution to the problem feasible + \end{itemize} +\end{frame} + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\begin{frame}[t] + \frametitle{LP Relaxation: Motivation} + + \vspace*{-1cm} + + \begin{gather*} +% \boldsymbol{G} = +% \begin{bmatrix} +% 0 & 1 & 1 +% \end{bmatrix} \hspace{1cm} + \boldsymbol{H} = + \begin{bmatrix} + 1 & 1 & 1\\ + 0 & 1 & 1 + \end{bmatrix} \hspace{1cm} +% \\[1em] + \mathcal{C} = \left\{ \begin{bmatrix} 0 \\ 0 \\ 0 \end{bmatrix}, + \begin{bmatrix} 0 \\ 1 \\ 1 \end{bmatrix} \right\} + \end{gather*}% + + \vspace*{-5mm} + + \begin{figure}[H] + \centering + + \begin{subfigure}[c]{0.4\textwidth} + \centering + + \tikzstyle{codeword} = [color=KITblue, fill=KITblue, + draw, circle, inner sep=0pt, minimum size=4pt] + + \tdplotsetmaincoords{60}{25} + \begin{tikzpicture}[scale=0.9, tdplot_main_coords] + \tikzstyle{every node}=[font=\normalsize] + + % Cube + + \coordinate (p000) at (0, 0, 0); + \coordinate (p001) at (0, 0, 2); + \coordinate (p010) at (0, 2, 0); + \coordinate (p011) at (0, 2, 2); + \coordinate (p100) at (2, 0, 0); + \coordinate (p101) at (2, 0, 2); + \coordinate (p110) at (2, 2, 0); + \coordinate (p111) at (2, 2, 2); + + \draw[] (p000) -- (p100); + \draw[] (p100) -- (p101); + \draw[] (p101) -- (p001); + \draw[] (p001) -- (p000); + + \draw[dashed] (p010) -- (p110); + \draw[] (p110) -- (p111); + \draw[] (p111) -- (p011); + \draw[dashed] (p011) -- (p010); + + \draw[dashed] (p000) -- (p010); + \draw[] (p100) -- (p110); + \draw[] (p101) -- (p111); + \draw[] (p001) -- (p011); + + % Polytope Vertices + + \node[codeword] (c000) at (p000) {}; + \node[codeword] (c011) at (p011) {}; + + % Polytope Annotations + + \node[color=KITblue, below=0cm of c000] {$\left( 0, 0, 0 \right) $}; + \node[color=KITblue, above=0cm of c011] {$\left( 0, 1, 1 \right) $}; + \end{tikzpicture} + + \caption{Set of all codewords $\mathcal{C}$} + \label{fig:lp:poly:exact_ilp} + \end{subfigure}% + \begin{subfigure}[c]{0.16\textwidth} + \centering + \begin{tikzpicture} + \node (relaxation) at (0, 0) {Relaxation}; + + \draw (-1.5, 0) -- (relaxation); + \draw[->] (relaxation) -- (1.5, 0); + \end{tikzpicture} + \end{subfigure}% + \begin{subfigure}[c]{0.4\textwidth} + \centering + + \tikzstyle{codeword} = [color=KITblue, fill=KITblue, + draw, circle, inner sep=0pt, minimum size=4pt] + + \tdplotsetmaincoords{60}{25} + \begin{tikzpicture}[scale=0.9, tdplot_main_coords] + \tikzstyle{every node}=[font=\normalsize] + + % Cube + + \coordinate (p000) at (0, 0, 0); + \coordinate (p001) at (0, 0, 2); + \coordinate (p010) at (0, 2, 0); + \coordinate (p011) at (0, 2, 2); + \coordinate (p100) at (2, 0, 0); + \coordinate (p101) at (2, 0, 2); + \coordinate (p110) at (2, 2, 0); + \coordinate (p111) at (2, 2, 2); + + \draw[] (p000) -- (p100); + \draw[] (p100) -- (p101); + \draw[] (p101) -- (p001); + \draw[] (p001) -- (p000); + + \draw[dashed] (p010) -- (p110); + \draw[] (p110) -- (p111); + \draw[] (p111) -- (p011); + \draw[dashed] (p011) -- (p010); + + \draw[dashed] (p000) -- (p010); + \draw[] (p100) -- (p110); + \draw[] (p101) -- (p111); + \draw[] (p001) -- (p011); + + % Polytope Vertices + + \node[codeword] (c000) at (p000) {}; + \node[codeword] (c011) at (p011) {}; + + % Polytope Edges + + \draw[line width=1pt, color=KITblue] (c000) -- (c011); + + % Polytope Annotations + + \node[color=KITblue, below=0cm of c000] {$\left( 0, 0, 0 \right) $}; + \node[color=KITblue, above=0cm of c011] {$\left( 0, 1, 1 \right) $}; + \end{tikzpicture} + + \caption{Codeword polytope $\text{poly}\left( \mathcal{C} \right) $} + \label{fig:lp:poly:exact} + \end{subfigure} + \end{figure} + +% \vspace*{-5mm} + + \begin{align*} + \text{poly}\left( \mathcal{C} \right) = + \left\{ + \sum_{\boldsymbol{c}\in\mathcal{C}}\alpha_{\boldsymbol{c}} + \boldsymbol{c} : \alpha_{\boldsymbol{c}} \ge 0, + \sum_{\boldsymbol{c}\in\mathcal{C}}\alpha_{\boldsymbol{c}} = 1 + \right\}, + \hspace{5mm} \alpha_{\boldsymbol{c}} \in \mathbb{R}_{\ge 0} + \end{align*} +\end{frame} + +\begin{frame}[t] + \frametitle{LP Relaxation} + + \vspace*{-1cm} + + \begin{figure}[H] + \centering + + \begin{subfigure}[c]{0.48\textwidth} + \centering + + \begin{minipage}{\textwidth} + \centering + + \tikzstyle{codeword} = [color=KITblue, fill=KITblue, + draw, circle, inner sep=0pt, minimum size=4pt] + + \tdplotsetmaincoords{60}{25} + \begin{tikzpicture}[scale=0.7, tdplot_main_coords] + \tikzstyle{every node}=[font=\normalsize] + + % Cube + + \coordinate (p000) at (0, 0, 0); + \coordinate (p001) at (0, 0, 2); + \coordinate (p010) at (0, 2, 0); + \coordinate (p011) at (0, 2, 2); + \coordinate (p100) at (2, 0, 0); + \coordinate (p101) at (2, 0, 2); + \coordinate (p110) at (2, 2, 0); + \coordinate (p111) at (2, 2, 2); + + \draw[] (p000) -- (p100); + \draw[] (p100) -- (p101); + \draw[] (p101) -- (p001); + \draw[] (p001) -- (p000); + + \draw[dashed] (p010) -- (p110); + \draw[] (p110) -- (p111); + \draw[] (p111) -- (p011); + \draw[dashed] (p011) -- (p010); + + \draw[dashed] (p000) -- (p010); + \draw[] (p100) -- (p110); + \draw[] (p101) -- (p111); + \draw[] (p001) -- (p011); + + % Polytope Vertices + + \node[codeword] (c000) at (p000) {}; + \node[codeword] (c101) at (p101) {}; + \node[codeword] (c110) at (p110) {}; + \node[codeword] (c011) at (p011) {}; + + % Polytope Edges & Faces + + \draw[line width=1pt, color=KITblue] (c000) -- (c101); + \draw[line width=1pt, color=KITblue] (c000) -- (c110); + \draw[line width=1pt, color=KITblue] (c000) -- (c011); + + \draw[line width=1pt, color=KITblue] (c101) -- (c110); + \draw[line width=1pt, color=KITblue] (c101) -- (c011); + + \draw[line width=1pt, color=KITblue] (c011) -- (c110); + + \fill[KITblue, opacity=0.15] (p000) -- (p101) -- (p011) -- cycle; + \fill[KITblue, opacity=0.15] (p000) -- (p110) -- (p101) -- cycle; + \fill[KITblue, opacity=0.15] (p110) -- (p011) -- (p101) -- cycle; + + % Polytope Annotations + + \node[color=KITblue, below=0cm of c000] {$\left( 0, 0, 0 \right) $}; + \node[color=KITblue, right=0.07cm of c101] {$\left( 1, 0, 1 \right) $}; + \node[color=KITblue, right=0cm of c110] {$\left( 1, 1, 0 \right) $}; + \node[color=KITblue, above=0cm of c011] {$\left( 0, 1, 1 \right) $}; + + \node[color=KITblue, align=center] at (-4,1) + {$j=1$\\ $\left( c_1 + c_2+ c_3 = 0 \right) $}; + \end{tikzpicture} + \end{minipage} + + \vspace{5mm} + + \begin{minipage}{\textwidth} + \centering + + \tikzstyle{codeword} = [color=KITblue, fill=KITblue, + draw, circle, inner sep=0pt, minimum size=4pt] + + \tdplotsetmaincoords{60}{25} + \begin{tikzpicture}[scale=0.7, tdplot_main_coords] + \tikzstyle{every node}=[font=\normalsize] + + % Cube + + \coordinate (p000) at (0, 0, 0); + \coordinate (p001) at (0, 0, 2); + \coordinate (p010) at (0, 2, 0); + \coordinate (p011) at (0, 2, 2); + \coordinate (p100) at (2, 0, 0); + \coordinate (p101) at (2, 0, 2); + \coordinate (p110) at (2, 2, 0); + \coordinate (p111) at (2, 2, 2); + + \draw[] (p000) -- (p100); + \draw[] (p100) -- (p101); + \draw[] (p101) -- (p001); + \draw[] (p001) -- (p000); + + \draw[dashed] (p010) -- (p110); + \draw[] (p110) -- (p111); + \draw[] (p111) -- (p011); + \draw[dashed] (p011) -- (p010); + + \draw[dashed] (p000) -- (p010); + \draw[] (p100) -- (p110); + \draw[] (p101) -- (p111); + \draw[] (p001) -- (p011); + + % Polytope Vertices + + \node[codeword] (c000) at (p000) {}; + \node[codeword] (c011) at (p011) {}; + \node[codeword] (c100) at (p100) {}; + \node[codeword] (c111) at (p111) {}; + + % Polytope Edges & Faces + + \draw[line width=1pt, color=KITblue] (c000) -- (c011); + \draw[line width=1pt, color=KITblue] (c000) -- (c100); + \draw[line width=1pt, color=KITblue] (c100) -- (c111); + \draw[line width=1pt, color=KITblue] (c111) -- (c011); + + \fill[KITblue, opacity=0.2] (p000) -- (p100) -- (p111) -- (p011) -- cycle; + + % Polytope Annotations + + \node[color=KITblue, below=0cm of c000] {$\left( 0, 0, 0 \right) $}; + \node[color=KITblue, above=0cm of c011] {$\left( 0, 1, 1 \right) $}; + \node[color=KITblue, below=0cm of c100] {$\left( 1, 0, 0 \right) $}; + \node[color=KITblue, above=0cm of c111] {$\left( 1, 1, 1 \right) $}; + + \node[color=KITblue, align=center] at (-4,1) + {$j=2$\\ $\left(c_2 + c_3 = 0\right)$}; + \end{tikzpicture} + \end{minipage} + + \caption{Local codeword polytopes $\mathcal{P}_{d_j}$ of the check nodes} + \label{fig:lp:poly:local} + \end{subfigure}% + \begin{subfigure}[c]{0.18\textwidth} + \centering + \begin{tikzpicture} + \draw[densely dashed] (0, -2) -- (0, 2); + \draw[densely dashed] (-0.5, -2) -- (0, -2); + \draw[densely dashed] (-0.5, 2) -- (0, 2); + + \node (intersection) at (1.5, 0) {Intersection}; + + \draw[densely dashed] (0, 0) -- (intersection); + \draw[densely dashed, ->] (intersection) -- (3,0); + \end{tikzpicture} + \end{subfigure}% + \begin{subfigure}[c]{0.32\textwidth} + \centering + + \vspace*{1.5cm} + \tikzstyle{codeword} = [color=KITblue, fill=KITblue, + draw, circle, inner sep=0pt, minimum size=4pt] + \tikzstyle{pseudocodeword} = [color=KITred, fill=KITred, + draw, circle, inner sep=0pt, minimum size=4pt] + + \tdplotsetmaincoords{60}{25} + \begin{tikzpicture}[scale=0.9, tdplot_main_coords] + \tikzstyle{every node}=[font=\normalsize] + + % Cube + + \coordinate (p000) at (0, 0, 0); + \coordinate (p001) at (0, 0, 2); + \coordinate (p010) at (0, 2, 0); + \coordinate (p011) at (0, 2, 2); + \coordinate (p100) at (2, 0, 0); + \coordinate (p101) at (2, 0, 2); + \coordinate (p110) at (2, 2, 0); + \coordinate (p111) at (2, 2, 2); + + \draw[] (p000) -- (p100); + \draw[] (p100) -- (p101); + \draw[] (p101) -- (p001); + \draw[] (p001) -- (p000); + + \draw[dashed] (p010) -- (p110); + \draw[] (p110) -- (p111); + \draw[] (p111) -- (p011); + \draw[dashed] (p011) -- (p010); + + \draw[dashed] (p000) -- (p010); + \draw[] (p100) -- (p110); + \draw[] (p101) -- (p111); + \draw[] (p001) -- (p011); + + % Polytope Vertices + + \node[codeword] (c000) at (p000) {}; + \node[codeword] (c011) at (p011) {}; + \node[pseudocodeword] (cpseudo) at (2, 1, 1) {}; + + % Polytope Edges & Faces + + \draw[line width=1pt, color=KITblue] (c000) -- (c011); + \draw[line width=1pt, color=KITred] (cpseudo) -- (c000); + \draw[line width=1pt, color=KITred] (cpseudo) -- (c011); + + \fill[KITred, opacity=0.2] (p000) -- (p011) -- (2,1,1) -- cycle; + + % Polytope Annotations + + \node[color=KITblue, below=0cm of c000] {$\left( 0, 0, 0 \right) $}; + \node[color=KITblue, above=0cm of c011] {$\left( 0, 1, 1 \right) $}; + \node[color=KITred, right=0cm of cpseudo] + {$\left( 1, \frac{1}{2}, \frac{1}{2} \right) $}; + \end{tikzpicture} + + \vspace*{-5mm} + + \begin{gather*} + \boldsymbol{T}_j\tilde{\boldsymbol{c}} \in \mathcal{P}_{d_j}, \hspace{2mm} + \forall j\in \mathcal{J} \\[0.5em] + \boldsymbol{T}_j \in \mathbb{F}_2^{d_j \times n} + \end{gather*} + + \vspace*{-2mm} + + \caption{Relaxed codeword polytope $\overline{Q}$} + \label{fig:lp:poly:relaxed} + \end{subfigure} + \end{figure} +\end{frame} + + +\begin{frame}[t] + \frametitle{LP Relaxation} + + \vspace{-5mm} + + \begin{figure}[H] + \centering + + \begin{subfigure}[t]{0.3\textwidth} + \centering + \tikzstyle{codeword} = [color=KITblue, fill=KITblue, + draw, circle, inner sep=0pt, minimum size=4pt] + \tdplotsetmaincoords{60}{25} + \begin{tikzpicture}[scale=0.8, tdplot_main_coords] + \tikzstyle{every node}=[font=\normalsize] + + % Cube + + \coordinate (p000) at (0, 0, 0); + \coordinate (p001) at (0, 0, 2); + \coordinate (p010) at (0, 2, 0); + \coordinate (p011) at (0, 2, 2); + \coordinate (p100) at (2, 0, 0); + \coordinate (p101) at (2, 0, 2); + \coordinate (p110) at (2, 2, 0); + \coordinate (p111) at (2, 2, 2); + + \draw[] (p000) -- (p100); + \draw[] (p100) -- (p101); + \draw[] (p101) -- (p001); + \draw[] (p001) -- (p000); + + \draw[dashed] (p010) -- (p110); + \draw[] (p110) -- (p111); + \draw[] (p111) -- (p011); + \draw[dashed] (p011) -- (p010); + + \draw[dashed] (p000) -- (p010); + \draw[] (p100) -- (p110); + \draw[] (p101) -- (p111); + \draw[] (p001) -- (p011); + + % Polytope Vertices + + \node[codeword] (c000) at (p000) {}; + \node[codeword] (c011) at (p011) {}; + + % Polytope Annotations + + \node[color=KITblue, below=0cm of c000] {$\left( 0, 0, 0 \right) $}; + \node[color=KITblue, above=0cm of c011] {$\left( 0, 1, 1 \right) $}; + \end{tikzpicture} + + \begin{align*} + \text{minimize}\hspace{2mm} &\boldsymbol{\gamma}^\text{T} \boldsymbol{c} \\ + \text{subject to}\hspace{2mm} &\boldsymbol{c} \in \mathcal{C} + \end{align*} + + \caption{\textit{Integer linear program} (ILP)} + \end{subfigure}% + \hfill% + \begin{subfigure}[t]{0.3\textwidth} + \centering + \tikzstyle{codeword} = [color=KITblue, fill=KITblue, + draw, circle, inner sep=0pt, minimum size=4pt] + \tdplotsetmaincoords{60}{25} + \begin{tikzpicture}[scale=0.8, tdplot_main_coords] + \tikzstyle{every node}=[font=\normalsize] + + % Cube + + \coordinate (p000) at (0, 0, 0); + \coordinate (p001) at (0, 0, 2); + \coordinate (p010) at (0, 2, 0); + \coordinate (p011) at (0, 2, 2); + \coordinate (p100) at (2, 0, 0); + \coordinate (p101) at (2, 0, 2); + \coordinate (p110) at (2, 2, 0); + \coordinate (p111) at (2, 2, 2); + + \draw[] (p000) -- (p100); + \draw[] (p100) -- (p101); + \draw[] (p101) -- (p001); + \draw[] (p001) -- (p000); + + \draw[dashed] (p010) -- (p110); + \draw[] (p110) -- (p111); + \draw[] (p111) -- (p011); + \draw[dashed] (p011) -- (p010); + + \draw[dashed] (p000) -- (p010); + \draw[] (p100) -- (p110); + \draw[] (p101) -- (p111); + \draw[] (p001) -- (p011); + + % Polytope Vertices + + \node[codeword] (c000) at (p000) {}; + \node[codeword] (c011) at (p011) {}; + + % Polytope Edges + + \draw[line width=1pt, color=KITblue] (c000) -- (c011); + + % Polytope Annotations + + \node[color=KITblue, below=0cm of c000] {$\left( 0, 0, 0 \right) $}; + \node[color=KITblue, above=0cm of c011] {$\left( 0, 1, 1 \right) $}; + \end{tikzpicture} + + \begin{align*} + \text{minimize}\hspace{2mm} &\boldsymbol{\gamma}^\text{T} \tilde{\boldsymbol{c}} \\ + \text{subject to}\hspace{2mm} &\tilde{\boldsymbol{c}} \in + \text{poly}\left( \mathcal{C} \right) &\ + \end{align*} + + \caption{Motivation} + \end{subfigure}% + \hfill% + \begin{subfigure}[t]{0.3\textwidth} + \centering + \tikzstyle{codeword} = [color=KITblue, fill=KITblue, + draw, circle, inner sep=0pt, minimum size=4pt] + \tikzstyle{pseudocodeword} = [color=KITred, fill=KITred, + draw, circle, inner sep=0pt, minimum size=4pt] + \tdplotsetmaincoords{60}{25} + \begin{tikzpicture}[scale=0.8, tdplot_main_coords] + \tikzstyle{every node}=[font=\normalsize] + + % Cube + + \coordinate (p000) at (0, 0, 0); + \coordinate (p001) at (0, 0, 2); + \coordinate (p010) at (0, 2, 0); + \coordinate (p011) at (0, 2, 2); + \coordinate (p100) at (2, 0, 0); + \coordinate (p101) at (2, 0, 2); + \coordinate (p110) at (2, 2, 0); + \coordinate (p111) at (2, 2, 2); + + \draw[] (p000) -- (p100); + \draw[] (p100) -- (p101); + \draw[] (p101) -- (p001); + \draw[] (p001) -- (p000); + + \draw[dashed] (p010) -- (p110); + \draw[] (p110) -- (p111); + \draw[] (p111) -- (p011); + \draw[dashed] (p011) -- (p010); + + \draw[dashed] (p000) -- (p010); + \draw[] (p100) -- (p110); + \draw[] (p101) -- (p111); + \draw[] (p001) -- (p011); + + % Polytope Vertices + + \node[codeword] (c000) at (p000) {}; + \node[codeword] (c011) at (p011) {}; + \node[pseudocodeword] (cpseudo) at (2, 1, 1) {}; + + % Polytope Edges & Faces + + \draw[line width=1pt, color=KITblue] (c000) -- (c011); + \draw[line width=1pt, color=KITred] (cpseudo) -- (c000); + \draw[line width=1pt, color=KITred] (cpseudo) -- (c011); + + \fill[KITred, opacity=0.2] (p000) -- (p011) -- (2,1,1) -- cycle; + + % Polytope Annotations + + \node[color=KITblue, below=0cm of c000] {$\left( 0, 0, 0 \right) $}; + \node[color=KITblue, above=0cm of c011] {$\left( 0, 1, 1 \right) $}; + \node[color=KITred, right=0cm of cpseudo] + {$\left( 1, \frac{1}{2}, \frac{1}{2} \right) $}; + \end{tikzpicture} + + \begin{align*} + \text{minimize}\hspace{2mm} &\boldsymbol{\gamma}^\text{T} \tilde{\boldsymbol{c}} \\ + \text{subject to}\hspace{2mm} & + \boldsymbol{T}_j\tilde{\boldsymbol{c}} \in \mathcal{P}_{d_j}, \hspace{2mm} + \forall j\in \mathcal{J} + \end{align*} + + \caption{\textit{Linear code linear program} (LCLP)} + \end{subfigure}% + \end{figure} + + \vspace*{-5.75cm} + \begin{figure}[H] + \centering + + \begin{subfigure}[t]{0.36\textwidth} + \centering + + \begin{tikzpicture} + \node (relaxation) at (0, 0) {Relaxation}; + + \draw[->] (-1, -0.25) -- (1, -0.25); +% \draw (-1.5, 0) -- (relaxation); +% \draw[->] (relaxation) -- (1.5, 0); + \end{tikzpicture} + \end{subfigure}% + \begin{subfigure}[t]{0.31\textwidth} + \centering + \begin{tikzpicture} + \node (relaxation) at (0, 0) {Relaxation}; + + \draw[->] (-1, -0.25) -- (1, -0.25); +% \draw (-1.5, 0) -- (relaxation); +% \draw[->] (relaxation) -- (1.5, 0); + \end{tikzpicture} + \end{subfigure}% + \end{figure} + +\end{frame} + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\begin{frame}[t] + \frametitle{LP Decoding using ADMM} + + \begin{itemize} + \item Solution using the \textit{alternating direction method of multipliers} (ADMM) + \item Slight reformulation of the LCLP: + \begin{align*} + \begin{aligned} + \text{minimize}\hspace{2mm} &\boldsymbol{\gamma}^\text{T}\tilde{\boldsymbol{c}} + + \sum_{j\in\mathcal{J}} g_j\left( \boldsymbol{z}_j \right) \\ + \text{subject to}\hspace{2mm} & + \boldsymbol{T}_j\tilde{\boldsymbol{c}} = \boldsymbol{z}_j, \hspace{2mm} + \forall j\in \mathcal{J} + \end{aligned}\hspace{2mm},\hspace{1cm} + g_j\left( \boldsymbol{t} \right) := \begin{cases} + 0, & \boldsymbol{t} \in \mathcal{P}_{d_j} \\ + +\infty, & \boldsymbol{t} \not\in \mathcal{P}_{d_j} + \end{cases} + \end{align*} + \item Iterative algorithm: + \begin{alignat*}{3} + \tilde{\boldsymbol{c}} &\leftarrow \argmin_{\tilde{\boldsymbol{c}}} + \left( \boldsymbol{\gamma}^\text{T}\tilde{\boldsymbol{c}} + + \frac{\mu}{2}\sum_{j\in\mathcal{J}} \left\Vert + \boldsymbol{T}_j\tilde{\boldsymbol{c}} - \boldsymbol{z}_j + + \boldsymbol{u}_j \right\Vert \right) \\ + \boldsymbol{z}_j &\leftarrow \argmin_{\boldsymbol{z}_j} + \left( g\left( \boldsymbol{z}_j \right) + + \frac{\mu}{2} \left\Vert \boldsymbol{T}_j \tilde{\boldsymbol{c}} + - \boldsymbol{z}_j + \boldsymbol{u}_j \right\Vert \right), + \hspace{5mm} &&\forall j\in\mathcal{J} \\ + \boldsymbol{u}_j &\leftarrow \boldsymbol{u}_j + + \boldsymbol{T}_j\tilde{\boldsymbol{c}} - \boldsymbol{z}_j, + \hspace{5mm} &&\forall j\in\mathcal{J} +% \left( g\left( \boldsymbol{\boldsymbol{z}_j} \right) +% + \frac{\mu}{2} \left\Vert \boldsymbol{T}_j\tilde{\boldsymbol{c}} +% - \boldsymbol{z}_j + \boldsymbol{u}_j\right\Vert \right) + \end{alignat*} + \end{itemize} +\end{frame} + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\begin{frame}[t] + \frametitle{LP Decoding using ADMM} + + \vspace*{-7mm} + + \begin{itemize} + \item Convergence properties enhanced by over-relaxation with parameter $\rho$ + \item Simplified rules% + \footnote{$\left( \boldsymbol{z}_j \right)_i $ is a slight abuse of notation. + What is actually meant is the component of $\boldsymbol{z}_j$ that is associated + with the VN $i$, i.e., $\left( \boldsymbol{T}_j^\text{T} \boldsymbol{z}_j \right)_i$.\\ + The same is true for $\left( \boldsymbol{u}_j \right)_i$}% + : + + \begin{alignat*}{3} + \tilde{c}_i &\leftarrow \frac{1}{\left| N_v\left( i \right) \right|} \left( + \sum_{j\in N_v\left( i \right) } \Big( \left( \boldsymbol{z}_j \right)_i + - \left( \boldsymbol{u}_j \right)_i \Big) + - \frac{\gamma_i}{\mu} \right) + \hspace{5mm} && \forall i\in\mathcal{I} \\ + \boldsymbol{z}_j &\leftarrow \Pi_{\mathcal{P}_{d_j}}\left( + \boldsymbol{T}_j\tilde{\boldsymbol{c}} + \boldsymbol{u}_j \right) + \hspace{5mm} && \forall j\in\mathcal{J} \\ + \boldsymbol{u}_j &\leftarrow \boldsymbol{u}_j + + \boldsymbol{T}_j\tilde{\boldsymbol{c}} + - \boldsymbol{z}_j + \hspace{5mm} && \forall j\in\mathcal{J} + \end{alignat*} + \item The projections $\Pi_{\mathcal{P}_{d_j}}, \hspace{1mm} j\in\mathcal{J}$ + are the main computational effort + \item Many approaches exist \cite{original_admm}, \cite{efficient_lp_dec_admm}, + \cite{lautern} + \item The approach chosen here is the one described in \cite{original_admm} + \end{itemize} +\end{frame} + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%\begin{frame}[t] +% \frametitle{LP Relaxation} +% +% \begin{minipage}[c]{0.6\linewidth} +% \begin{itemize} +% \item Set of all variable nodes incident to a check node: +% \begin{align*} +% N\left( j \right) \equiv \left\{ +% i | i\in \mathcal{I}, +% \boldsymbol{H}_{j,i} = 1 +% \right\}, +% j \in \mathcal{J} +% \end{align*} +% \begin{align*} +% S \subseteq N\left( j \right), \left| S \right| \text{odd} +% \end{align*} +% \item Relaxed polytope representation: +% \begin{align*} +% \sum_{i\in \left( N\left( j \right) \setminus S\right) } f_i +% + \sum_{i\in S} \left( 1 - f_i \right) \ge 1 +% \end{align*} +% ``$\boldsymbol{f}$ is separated by at least one bitflip +% from all illegal configurations'' +% \end{itemize} +% \end{minipage}% +% \hfill% +% \begin{minipage}[c]{0.4\linewidth} +% \begin{figure}[H] +% \centering +% +% \tikzstyle{codeword} = [color=KITblue, fill=KITblue, +% draw, circle, inner sep=0pt, minimum size=4pt] +% +% \tdplotsetmaincoords{60}{245} +% \begin{tikzpicture}[scale=1, transform shape, tdplot_main_coords] +% % Cube +% +% \draw[dashed] (0, 0, 0) -- (2, 0, 0); +% \draw[dashed] (2, 0, 0) -- (2, 0, 2); +% \draw[] (2, 0, 2) -- (0, 0, 2); +% \draw[] (0, 0, 2) -- (0, 0, 0); +% +% \draw[] (0, 2, 0) -- (2, 2, 0); +% \draw[] (2, 2, 0) -- (2, 2, 2); +% \draw[] (2, 2, 2) -- (0, 2, 2); +% \draw[] (0, 2, 2) -- (0, 2, 0); +% +% \draw[] (0, 0, 0) -- (0, 2, 0); +% \draw[dashed] (2, 0, 0) -- (2, 2, 0); +% \draw[] (2, 0, 2) -- (2, 2, 2); +% \draw[] (0, 0, 2) -- (0, 2, 2); +% +% % Codeword Polytope +% +% \draw[line width=1pt, color=KITblue] (0, 0, 0) -- (2, 0, 2); +% \draw[line width=1pt, color=KITblue] (0, 0, 0) -- (2, 2, 0); +% \draw[line width=1pt, color=KITblue] (0, 0, 0) -- (0, 2, 2); +% +% \draw[line width=1pt, color=KITblue] (2, 0, 2) -- (2, 2, 0); +% \draw[line width=1pt, color=KITblue] (2, 0, 2) -- (0, 2, 2); +% +% \draw[line width=1pt, color=KITblue] (0, 2, 2) -- (2, 2, 0); +% +% % Polytope Annotations +% +% \node[codeword, color=KITred] (c111) at (2, 2, 2) {};% {$\left( 0, 0, 0 \right) $}; +% \node[codeword, color=KITred] (c001) at (0, 0, 2) {};% {$\left( 1, 0, 1 \right) $}; +% \node[codeword, color=KITred] (c100) at (2, 0, 0) {};% {$\left( 1, 1, 0 \right) $}; +% \node[codeword, color=KITred] (c010) at (0, 2, 0) {};% {$\left( 0, 1, 1 \right) $}; +% +% \node[color=KITred, left=0cm of c111] {$\left( 1, 1, 1 \right) $}; +% \node[color=KITred, right=0cm of c001] {$\left( 0, 0, 1 \right) $}; +% \node[color=KITred, right=0.35cm of c100] {$\left( 1, 0, 0 \right) $}; +% \node[color=KITred, below=0cm of c010] {$\left( 0, 1, 0 \right) $}; +% \end{tikzpicture} +% \caption{Relaxed polytope for $n=3$} +% \end{figure} +% \end{minipage} +% \todo{How is this a relaxation and not just an alternative formulation? +% We have just switched out valid codewords for invalid ones} +% \todo{Is LP Relaxation relevant as theoretical background?} +%\end{frame} + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\subsection{Analysis of Simulation Results}% +\label{sub:Analysis of Simulation Results} + +\begin{frame}[t] + \frametitle{LP Decoding using ADMM} + + \begin{figure}[H] + \centering + + \begin{tikzpicture} + \begin{axis}[ + grid=both, + xlabel={$E_b / N_0 \left( \text{dB} \right) $}, ylabel={FER}, + ymode=log, + width=0.45\textwidth, + height=0.325\textwidth, + %legend style={at={(0.03,0.04)},anchor=south west}, + legend pos=outer north east, + ] + \addplot[RedOrange, line width=1pt] + table [col sep=comma, x=SNR, y=FER, + discard if gt={SNR}{2.2}, + ] + {res/admm/fer_paper_margulis.csv}; + \addlegendentry{ADMM (Barman et al.)} + \addplot[NavyBlue, only marks, mark=o, line width=1pt] + table [col sep=comma, x=SNR, y=FER,] + {res/admm/ber_margulis264013203.csv}; + \addlegendentry{ADMM (Own results)} + \addplot[RoyalPurple, line width=1pt, densely dashed] + table [col sep=comma, x=SNR, y=FER, discard if gt={SNR}{2.2},] + {res/generic/fer_bp_mackay_margulis.csv}; + \addlegendentry{BP (Barman et al.)} + \end{axis} + \end{tikzpicture} + + \caption{Comparison of datapoints from Barman et al. with own simulation results% + \protect\footnotemark{}} + \label{fig:admm:results} + \end{figure}% + % + \footnotetext{``Margulis'' LDPC code with $n = 2640$, $k = 1320$ + \cite[\text{Margulis2640.1320.3}]{mackay_enc}; $K=200, \mu = 3.3, \rho=1.9, + \epsilon_{\text{pri}} = 10^{-5}, \epsilon_{\text{dual}} = 10^{-5}$ + }% + % + +\end{frame} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\begin{frame}[t] + \frametitle{LP Decoding using ADMM: Choice of Penalty\\ + Parameters} + + \begin{figure}[H] + \centering + + \begin{subfigure}[c]{0.48\textwidth} + \centering + + \begin{tikzpicture} + \begin{axis}[ + grid=both, + xlabel={$\mu$}, ylabel={FER}, + ymode=log, + width=0.9\textwidth, + height=0.675\textwidth, + ] + \addplot[ForestGreen, line width=1pt, densely dashed, mark=*] + table [col sep=comma, x=mu, y=FER, + discard if not={SNR}{2.0},] + {res/admm/ber_2d_20433484.csv}; + \addplot[RedOrange, line width=1pt, densely dashed, mark=*] + table [col sep=comma, x=mu, y=FER, + discard if not={SNR}{3.0},] + {res/admm/ber_2d_20433484.csv}; + \addplot[NavyBlue, line width=1pt, densely dashed, mark=*] + table [col sep=comma, x=mu, y=FER, + discard if not={SNR}{4.0},] + {res/admm/ber_2d_20433484.csv}; + \end{axis} + \end{tikzpicture} + \end{subfigure}% + \begin{subfigure}[c]{0.48\textwidth} + \centering + + \begin{tikzpicture} + \begin{axis}[ + grid=both, + xlabel={$\rho$}, ylabel={FER}, + ymode=log, + width=0.9\textwidth, + height=0.675\textwidth, + ] + \addplot[ForestGreen, line width=1pt, densely dashed, mark=*] + table [col sep=comma, x=rho, y=FER, + discard if not={SNR}{2.0},] + {res/admm/ber_2d_20433484_rho.csv}; + \addplot[RedOrange, line width=1pt, densely dashed, mark=*] + table [col sep=comma, x=rho, y=FER, + discard if not={SNR}{3.0},] + {res/admm/ber_2d_20433484_rho.csv}; + \addplot[NavyBlue, line width=1pt, densely dashed, mark=*] + table [col sep=comma, x=rho, y=FER, + discard if not={SNR}{4.0},] + {res/admm/ber_2d_20433484_rho.csv}; + \end{axis} + \end{tikzpicture} + \end{subfigure}% + + \begin{subfigure}[t]{\textwidth} + \centering + + \begin{tikzpicture} + \begin{axis}[hide axis, + xmin=10, xmax=50, + ymin=0, ymax=0.4, + legend columns=3, + legend style={draw=white!15!black,legend cell align=left}] + + \addlegendimage{ForestGreen, line width=1pt, densely dashed, mark=*} + \addlegendentry{$E_b / N_0 = \SI{2}{dB}$} + \addlegendimage{RedOrange, line width=1pt, densely dashed, mark=*} + \addlegendentry{$E_b / N_0 = \SI{3}{dB}$} + \addlegendimage{NavyBlue, line width=1pt, densely dashed, mark=*} + \addlegendentry{$E_b / N_0 = \SI{4}{dB}$} + \end{axis} + \end{tikzpicture} + \end{subfigure} + + \caption{Relation between $\mu$ and $\rho$ and decoding performance% + \protect\footnotemark{}} + \end{figure}% + + \footnotetext{Simulation performed with (3,6) regular LDPC code with $n=204, k=102$ + \cite[Code: 204.33.484]{mackay_enc}} + +\end{frame} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\begin{frame}[t] + \frametitle{LP Decoding using ADMM: Choice of Penalty\\ + Parameters} + + \begin{figure}[H] + \centering + + \begin{subfigure}[c]{0.48\textwidth} + \centering + + \begin{tikzpicture} + \begin{axis}[ + grid=both, + xlabel={$\mu$}, ylabel={Average \# of iterations}, + width=0.9\textwidth, + height=0.675\textwidth, + ] + \addplot[ForestGreen, line width=1pt, densely dashed, mark=*] + table [col sep=comma, x=mu, y=k_avg, + discard if not={SNR}{2.0},] + {res/admm/mu_kavg_20433484.csv}; + \addplot[RedOrange, line width=1pt, densely dashed, mark=*] + table [col sep=comma, x=mu, y=k_avg, + discard if not={SNR}{3.0},] + {res/admm/mu_kavg_20433484.csv}; + \addplot[NavyBlue, line width=1pt, densely dashed, mark=*] + table [col sep=comma, x=mu, y=k_avg, + discard if not={SNR}{4.0},] + {res/admm/mu_kavg_20433484.csv}; + \end{axis} + \end{tikzpicture} + \end{subfigure}% + \begin{subfigure}[c]{0.48\textwidth} + \centering + + \begin{tikzpicture} + \begin{axis}[ + grid=both, + xlabel={$\rho$}, ylabel={Average \# of iterations}, + width=0.9\textwidth, + height=0.675\textwidth, + ] + \addplot[ForestGreen, line width=1pt, densely dashed, mark=*] + table [col sep=comma, x=rho, y=k_avg, + discard if not={SNR}{2.0},] + {res/admm/rho_kavg_20433484.csv}; + \addplot[RedOrange, line width=1pt, densely dashed, mark=*] + table [col sep=comma, x=rho, y=k_avg, + discard if not={SNR}{3.0},] + {res/admm/rho_kavg_20433484.csv}; + \addplot[NavyBlue, line width=1pt, densely dashed, mark=*] + table [col sep=comma, x=rho, y=k_avg, + discard if not={SNR}{4.0},] + {res/admm/rho_kavg_20433484.csv}; + \end{axis} + \end{tikzpicture} + \end{subfigure}% + + \begin{subfigure}[t]{\textwidth} + \centering + + \begin{tikzpicture} + \begin{axis}[hide axis, + xmin=10, xmax=50, + ymin=0, ymax=0.4, + legend columns=3, + legend style={draw=white!15!black,legend cell align=left}] + + \addlegendimage{ForestGreen, line width=1pt, densely dashed, mark=*} + \addlegendentry{$E_b / N_0 = \SI{2}{dB}$} + \addlegendimage{RedOrange, line width=1pt, densely dashed, mark=*} + \addlegendentry{$E_b / N_0 = \SI{3}{dB}$} + \addlegendimage{NavyBlue, line width=1pt, densely dashed, mark=*} + \addlegendentry{$E_b / N_0 = \SI{4}{dB}$} + \end{axis} + \end{tikzpicture} + \end{subfigure} + + \caption{Relation between $\mu$ and $\rho$ and speed of convergence% + \protect\footnotemark{}} + \end{figure}% + + \footnotetext{Simulation performed with (3,6) regular LDPC code with $n=204, k=102$ + \cite[Code: 204.33.484]{mackay_enc}} +\end{frame} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\begin{frame}[t] + \frametitle{LP Decoding using ADMM: Average Error} + + \begin{figure}[H] + \centering + + \begin{tikzpicture} + \begin{axis}[ + grid=both, + width=0.45\textwidth, + height=0.3375\textwidth, + legend pos=outer north east, + xlabel={Iteration}, ylabel={Average $\left\Vert \hat{\boldsymbol{c}} + - \boldsymbol{c} \right\Vert$} + ] + \addplot[ForestGreen, line width=1pt] + table [col sep=comma, x=k, y=err, + discard if not={SNR}{1.0}, + discard if gt={k}{100}] + {res/admm/avg_error_20433484.csv}; + \addlegendentry{$E_b / N_0 = \SI{1}{dB}$} + + \addplot[RedOrange, line width=1pt] + table [col sep=comma, x=k, y=err, + discard if not={SNR}{2.0}, + discard if gt={k}{100}] + {res/admm/avg_error_20433484.csv}; + \addlegendentry{$E_b / N_0 = \SI{2}{dB}$} + + \addplot[NavyBlue, line width=1pt] + table [col sep=comma, x=k, y=err, + discard if not={SNR}{3.0}, + discard if gt={k}{100}] + {res/admm/avg_error_20433484.csv}; + \addlegendentry{$E_b / N_0 = \SI{3}{dB}$} + + \addplot[RoyalPurple, line width=1pt] + table [col sep=comma, x=k, y=err, + discard if not={SNR}{4.0}, + discard if gt={k}{100}] + {res/admm/avg_error_20433484.csv}; + \addlegendentry{$E_b / N_0 = \SI{4}{dB}$} + \end{axis} + \end{tikzpicture} + + \caption{Average error for $\SI{100000}{}$ decodings\protect\footnotemark{}} + \end{figure}% + + \footnotetext{Simulation performed with (3,6) regular LDPC code with $n=204, k=102$ + \cite[Code: 204.33.484]{mackay_enc}} +\end{frame} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\begin{frame}[t] + \frametitle{LP Decoding using ADMM: Time Complexity} + + \begin{figure}[h] + \centering + + \begin{tikzpicture} + \begin{axis}[grid=both, + xlabel={$n$}, ylabel={Time per frame (s)}, + width=0.45\textwidth, + height=0.3375\textwidth, + legend style={at={(0.03,0.96)},anchor=north west}, + %legend pos=outer north east, + legend cell align={left},] + +% \addplot[RedOrange, only marks, mark=*] +% table [col sep=comma, x=n, y=spf] +% {res/proximal/fps_vs_n.csv}; +% \addlegendentry{Proximal decoding} + \addplot[RoyalPurple, only marks, mark=triangle*] + table [col sep=comma, x=n, y=spf] + {res/admm/fps_vs_n.csv}; +% \addlegendentry{LP decoding using ADMM} + \end{axis} + \end{tikzpicture} + + \caption{Timing requirements of the LP decoding imlementation% + \protect\footnotemark{}} + \end{figure}% + + \footnotetext{The points shown were calculated by evaluating the metadata + of BER simulation results for the following codes: + BCH $\left( 31, 11 \right)$; + BCH $\left( 31, 26 \right)$; + \cite[\text{96.3.965; 204.33.484; + 204.55.187; 408.33.844; PEGReg252x504}]{mackay_enc} + } + +\end{frame} + diff --git a/latex/presentations/final/sections/proximal_decoding.tex b/latex/presentations/final/sections/proximal_decoding.tex new file mode 100644 index 0000000..8254ee3 --- /dev/null +++ b/latex/presentations/final/sections/proximal_decoding.tex @@ -0,0 +1,1705 @@ +\section{Proximal Decoding}% +\label{sec:Proximal Decoding} + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\subsection{Decoding Algorithm}% +\label{sub:Decoding Algorithm} + +\begin{frame}[t] + \frametitle{Proximal Decoding: General Idea \cite{proximal_paper}} + + \vspace*{-0.3cm} + + \begin{itemize} + \item MAP rule as continuous maximization problem: + \begin{align*} + \hat{\boldsymbol{x}} + &= \argmax_{\tilde{\boldsymbol{x}}\in\mathbb{R}^n} + f_{\boldsymbol{Y}}\left( \boldsymbol{y} | \tilde{\boldsymbol{x}} \right) + f_{\boldsymbol{X}}\left( \tilde{\boldsymbol{x}} \right)\\ + &= \argmax_{\tilde{\boldsymbol{x}}\in\mathbb{R}^n} + e^{-L\left( \boldsymbol{y} | \tilde{\boldsymbol{x}}\right)} + f_{\boldsymbol{X}}\left( \tilde{\boldsymbol{x}} \right), + \hspace{5mm} L\left( \boldsymbol{y} | \tilde{\boldsymbol{x}} \right) + = - \ln\left( f_{\boldsymbol{Y}} + \left( \boldsymbol{y} | \tilde{\boldsymbol{x}} \right) \right) + \end{align*} + \item Approximation of prior PDF: + \begin{align*} + f_{\boldsymbol{X}}\left( \tilde{\boldsymbol{x}} \right) + = \frac{1}{\left| \mathcal{C} \right| } + \sum_{\boldsymbol{c} \in \mathcal{C} } + \delta\left( \tilde{\boldsymbol{x}} - \left( -1 \right)^{\boldsymbol{c}} + \right) + \approx \frac{1}{Z} e^{-\gamma h\left( \tilde{\boldsymbol{x}} \right) } + \end{align*} + \item Code constraint polynomial: + \begin{minipage}[c]{0.56\textwidth} + \raggedright + + \begin{align*} + h\left( \tilde{\boldsymbol{x}} \right) = + \underbrace{\sum_{i=1}^{n} \left( \tilde{x}_i^2 - 1 \right)^2}_{\text{Bipolar + constraint}} + + \underbrace{\sum_{j=1}^{m} \left[ \left( + \prod_{i\in N_v\left( j \right)} \tilde{x}_i\right) -1 \right]^2} + _{\text{Parity constraint}}, + \end{align*} + \end{minipage}% + \begin{minipage}[c]{0.4\textwidth} + \raggedleft + \begin{flalign*} + \mathcal{I} &:= \left[1\text{ : }n\right], + \hspace{2mm} \mathcal{J} := \left[1\text{ : }m\right] \\ + N_v\left( j \right) &:= \left\{i | i\in \mathcal{I}, + \boldsymbol{H}_{j,i} = 1 + \right\}, j\in\mathcal{J}\\ + \end{flalign*} + \end{minipage} + \hfill + \end{itemize} +\end{frame} + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\begin{frame}[t] + \frametitle{Proximal Decoding: General Idea} + + \begin{itemize} + \item Objective function: + \begin{align*} + g\left( \tilde{\boldsymbol{x}} \right) + = L\left( \boldsymbol{y} | \tilde{\boldsymbol{x}} \right) + + \gamma h\left( \tilde{\boldsymbol{x}} \right) + \end{align*} + \note{Notational difference between $f$ and $f_X$ or $f_Y$} + \item Proximal operator \cite{proximal_algorithms}: + \begin{align*} + \text{prox}_{\gamma h} \left( \tilde{\boldsymbol{x}} \right) &\equiv + \argmin_{\boldsymbol{t}\in\mathbb{R}^n} + \gamma h\left( \boldsymbol{t} \right) + \frac{1}{2} \lVert \boldsymbol{t} + - \tilde{\boldsymbol{x}} \rVert^2 \\ + &\approx \tilde{\boldsymbol{x}} + - \gamma \nabla h\left( \tilde{\boldsymbol{x}} \right), + \hspace{5mm} \gamma \text{ small} + \end{align*} + \item Iterative decoding process: + \begin{align*} + \boldsymbol{r} &\leftarrow \boldsymbol{s} + - \omega \nabla L\left( \boldsymbol{y} | \boldsymbol{s} + \right), \hspace{5mm} \omega > 0 + \hspace{10mm} \text{``Gradient descent step''}\\ + \boldsymbol{s} &\leftarrow \boldsymbol{r} + - \gamma \nabla h\left( \boldsymbol{r} + \right), \hspace{9mm} \gamma > 0 + \hspace{10mm} \text{``Code proximal step''} + \end{align*} + \end{itemize} +\end{frame} + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\begin{frame}[t, fragile] + \frametitle{Proximal Decoding: Algorithm} + \begin{itemize} + \item Iterative decoding algorithm \cite{proximal_paper}: + \end{itemize} + + \vspace{2mm} + \begin{algorithm}[caption={}, label={}] +$\boldsymbol{s} \leftarrow \boldsymbol{0}$ +for $K$ iterations do + $\boldsymbol{r} \leftarrow \boldsymbol{s} - \omega \nabla L \left( \boldsymbol{y} \mid \boldsymbol{s} \right) $ + $\boldsymbol{s} \leftarrow \boldsymbol{r} - \gamma \nabla h\left( \boldsymbol{r} \right) $ + $\boldsymbol{\hat{x}} \leftarrow \text{sign}\left( \boldsymbol{s} \right) $ + if $\boldsymbol{H}\boldsymbol{\hat{c}} = \boldsymbol{0}$ do + return $\boldsymbol{\hat{c}}$ + end if +end for +return $\boldsymbol{\hat{c}}$ + \end{algorithm} +\end{frame} + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\subsection{Analysis of Simulation Results}% +\label{sub:Analysis of Simulation Results} + + +\begin{frame}[t] + \frametitle{Proximal Decoding: Bit Error Rate and Performance} + \vspace*{-0.5cm} + \begin{itemize} + \item Comparison of simulation% + \footnote{(3,6) regular LDPC code with $n=204, k=102$ + \cite[\text{204.33.484}]{mackay_enc}} + with results of Wadayama et al. \cite{proximal_paper} + \end{itemize} + + \begin{figure}[H] + \centering + + \begin{tikzpicture} + \begin{axis}[ + grid=both, grid style={line width=.1pt}, + xlabel={$E_b / N_0$ (dB)}, ylabel={BER}, + ymode=log, + legend pos=outer north east, + width=0.45\textwidth, + height=0.3375\textwidth, + ymax=1.2, ymin=0.8e-4, + xtick={1, 2, ..., 5}, + xmin=0.9, xmax=5.6, + legend columns=2, + ] + + \addplot [ForestGreen, mark=triangle, dashed, line width=1pt] + table [x=SNR, y=BER, col sep=comma, + discard if not={gamma}{0.15}, + discard if gt={SNR}{5.5},] + {res/proximal/2d_ber_fer_dfr_20433484.csv}; + \addlegendentry{$\gamma = 0.15$} + \addplot [ForestGreen, mark=*, line width=1pt] + table [x=SNR, y=gamma_0_15, col sep=comma] {res/ber_paper.csv}; + \addlegendentry{$\gamma = 0.15$ (Wadayama et al.)} + + \addplot [NavyBlue, mark=triangle, dashed, line width=1pt] + table [x=SNR, y=BER, col sep=comma, + discard if not={gamma}{0.01}, + discard if gt={SNR}{5.5},] + {res/proximal/2d_ber_fer_dfr_20433484.csv}; + \addlegendentry{$\gamma = 0.01$} + \addplot [NavyBlue, mark=*, line width=1pt] + table [x=SNR, y=gamma_0_01, col sep=comma] {res/ber_paper.csv}; + \addlegendentry{$\gamma = 0.01$ (Wadayama et al.)} + + \addplot [RedOrange, mark=triangle, dashed, line width=1pt] + table [x=SNR, y=BER, col sep=comma, + discard if not={gamma}{0.05}, + discard if gt={SNR}{5.5},] + {res/proximal/2d_ber_fer_dfr_20433484.csv}; + \addlegendentry{$\gamma = 0.05$} + \addplot [RedOrange, mark=*, line width=1pt] + table [x=SNR, y=gamma_0_05, col sep=comma] {res/ber_paper.csv}; + \addlegendentry{$\gamma = 0.05$ (Wadayama et al.)} + + \addplot [RoyalPurple, mark=*, line width=1pt] + table [x=SNR, y=BP, col sep=comma] {res/ber_paper.csv}; + \addlegendentry{BP} + + \end{axis} + \end{tikzpicture} + + \caption{Simulation results for $\omega = 0.05, K=100$} + \label{fig:sim_results_prox} + \end{figure} + +% \vspace*{-0.5cm} +% \begin{itemize} +% \item $\mathcal{O}\left(n \right) $ time complexity - same as BP; +% only multiplication and addition necessary \cite{proximal_paper} +% \item Measured performance: $\sim\SI{10000}{}$ frames/s +% on Intel Core i7-7700HQ @ 2.80GHz; $n=204$ +% \end{itemize} +% \vspace{3mm} +\end{frame} + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\begin{frame}[t] + \frametitle{Proximal Decoding: Choice of $\gamma$} + + \begin{itemize} + \item Simulation% + \footnote{(3,6) regular LDPC code with $n=204, k=102$ + \cite[\text{204.33.484}]{mackay_enc}} + results for different values of $\gamma$ + \end{itemize} + + \begin{figure}[H] + \centering + \hspace*{-3.5cm} + \begin{subfigure}[c]{0.4\textwidth} + \centering + \begin{tikzpicture} + \begin{semilogyaxis}[xlabel={$E_b / N_0$ (dB)}, ylabel={BER}, + grid=both, grid style={line width=.1pt}, + width=\textwidth, + height=0.75\textwidth, + legend style={at={(0.05,0.05)},anchor=south west}, + ymin=3e-7, ymax=1.5,] + \addplot [ForestGreen, mark=*] table [x=SNR, y=BER, + col sep=comma, discard if not={gamma}{0.15}] + {res/proximal/2d_ber_fer_dfr_20433484.csv}; + \addlegendentry{$\gamma = 0.15$} + \addplot [NavyBlue, mark=*] table [x=SNR, y=BER, + col sep=comma, discard if not={gamma}{0.01}] + {res/proximal/2d_ber_fer_dfr_20433484.csv}; + \addlegendentry{$\gamma = 0.01$} + \addplot [RedOrange, mark=*] table [x=SNR, y=BER, + col sep=comma, discard if not={gamma}{0.05}] + {res/proximal/2d_ber_fer_dfr_20433484.csv}; + \addlegendentry{$\gamma = 0.05$} + \end{semilogyaxis} + \end{tikzpicture} + \end{subfigure}% + \hspace{5mm} + \begin{subfigure}[c]{0.4\textwidth} + \centering + + \begin{tikzpicture} + \begin{axis}[view={75}{30}, + zmode=log, + xlabel={$E_b / N_0$ (dB)}, + ylabel={$\gamma$}, + zlabel={BER}, + width=\textwidth, + height=0.75\textwidth, + legend pos=outer north east,] + + \addplot3[surf, + mesh/rows=17, mesh/cols=14, + colormap/viridis] table [col sep=comma, + x=SNR, y=gamma, z=BER] + {res/proximal/2d_ber_fer_dfr_20433484.csv}; + \addlegendentry{$\gamma = \left[ 0\text{:}0.01\text{:}0.16 \right] $} + \addplot3[NavyBlue, line width=1.5] table [col sep=comma, + discard if not={gamma}{0.01}, + x=SNR, y=gamma, z=BER] + {res/proximal/2d_ber_fer_dfr_20433484.csv}; + \addlegendentry{$\gamma = 0.01$} + \addplot3[RedOrange, line width=1.5] table [col sep=comma, + discard if not={gamma}{0.05}, + x=SNR, y=gamma, z=BER] + {res/proximal/2d_ber_fer_dfr_20433484.csv}; + \addlegendentry{$\gamma = 0.05$} + \addplot3[ForestGreen, line width=1.5] table [col sep=comma, + discard if not={gamma}{0.15}, + x=SNR, y=gamma, z=BER] + {res/proximal/2d_ber_fer_dfr_20433484.csv}; + \addlegendentry{$\gamma = 0.15$} + \end{axis} + \end{tikzpicture} + \end{subfigure} + + \caption{BER for $\omega = 0.05, K=100$} + \label{fig:ber_3d} + \end{figure} + + \begin{itemize} + \item Not great benefit in finding the optimal value for $\gamma$ + \end{itemize} + \vspace{3mm} +\end{frame} + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%\begin{frame}[t] +% \frametitle{Proximal Decoding: Choice of $\gamma$} +% +% \begin{minipage}[c]{0.9\textwidth} +% \centering +% +% \begin{figure}[H] +% \vspace*{-0.5cm} +% \hspace*{-0.7cm} +% \centering +% \begin{subfigure}[c]{0.33\textwidth} +% \centering +% \begin{tikzpicture}[scale=0.4] +% \begin{axis}[view={75}{30}, +% zmode=log, +% xlabel={$E_b / N_0$ (dB)}, +% ylabel={$\gamma$}, +% zlabel={BER},] +% \addplot3[surf, +% mesh/rows=17, mesh/cols=10, +% colormap/viridis] table [col sep=comma, +% x=SNR, y=gamma, z=BER] +% {res/proximal/2d_ber_fer_dfr_963965.csv}; +% \addplot3[RedOrange, line width=1.5] table[col sep=comma, +% discard if not={gamma}{0.05}, +% x=SNR, y=gamma, z=BER] +% {res/proximal/2d_ber_fer_dfr_963965.csv}; +% \addplot3[NavyBlue, line width=1.5] table[col sep=comma, +% discard if not={gamma}{0.01}, +% x=SNR, y=gamma, z=BER] +% {res/proximal/2d_ber_fer_dfr_963965.csv}; +% \addplot3[ForestGreen, line width=1.5] table[col sep=comma, +% discard if not={gamma}{0.15}, +% x=SNR, y=gamma, z=BER] +% {res/proximal/2d_ber_fer_dfr_963965.csv}; +% \end{axis} +% \end{tikzpicture} +% \caption{$\left( 3, 6 \right)$-regular LDPC code with $n=96, k=48$ \cite[\text{96.3.965}]{mackay_enc}} +% \end{subfigure}% +% \begin{subfigure}[c]{0.33\textwidth} +% \centering +% \begin{tikzpicture}[scale=0.4] +% \begin{axis}[view={75}{30}, +% zmode=log, +% xlabel={$E_b/N_0$ (dB)}, +% ylabel={$\gamma$}, +% zlabel={BER},] +% \addplot3[surf, +% mesh/rows=17, mesh/cols=14, +% colormap/viridis] table [col sep=comma, +% x=SNR, y=gamma, z=BER] +% {res/proximal/2d_ber_fer_dfr_20433484.csv}; +% \addplot3[RedOrange, line width=1.5] table[col sep=comma, +% discard if not={gamma}{0.05}, +% x=SNR, y=gamma, z=BER] +% {res/proximal/2d_ber_fer_dfr_20433484.csv}; +% \addplot3[NavyBlue, line width=1.5] table[col sep=comma, +% discard if not={gamma}{0.01}, +% x=SNR, y=gamma, z=BER] +% {res/proximal/2d_ber_fer_dfr_20433484.csv}; +% \addplot3[ForestGreen, line width=1.5] table[col sep=comma, +% discard if not={gamma}{0.15}, +% x=SNR, y=gamma, z=BER] +% {res/proximal/2d_ber_fer_dfr_20433484.csv}; +% \end{axis} +% \end{tikzpicture} +% \caption{$\left( 3, 6 \right)$-regular LDPC code with $n=204, k=102$ \cite[\text{204.33.484}]{mackay_enc}} +% \end{subfigure}% +% \begin{subfigure}[c]{0.33\textwidth} +% \centering +% \begin{tikzpicture}[scale=0.4] +% \begin{axis}[view={75}{30}, +% zmode=log, +% xlabel={$E_b / N_0$ (dB)}, +% ylabel={$\gamma$}, +% zlabel={BER},] +% \addplot3[surf, +% mesh/rows=17, mesh/cols=10, +% colormap/viridis] table [col sep=comma, +% x=SNR, y=gamma, z=BER] +% {res/proximal/2d_ber_fer_dfr_40833844.csv}; +% \addplot3[RedOrange, line width=1.5] table[col sep=comma, +% discard if not={gamma}{0.05}, +% x=SNR, y=gamma, z=BER] +% {res/proximal/2d_ber_fer_dfr_40833844.csv}; +% \addplot3[NavyBlue, line width=1.5] table[col sep=comma, +% discard if not={gamma}{0.01}, +% x=SNR, y=gamma, z=BER] +% {res/proximal/2d_ber_fer_dfr_40833844.csv}; +% \addplot3[ForestGreen, line width=1.5] table[col sep=comma, +% discard if not={gamma}{0.15}, +% x=SNR, y=gamma, z=BER] +% {res/proximal/2d_ber_fer_dfr_40833844.csv}; +% \end{axis} +% \end{tikzpicture} +% \caption{$\left( 3, 6 \right)$-regular LDPC code with $n=408, k=204$ \cite[\text{408.33.844}]{mackay_enc}} +% \end{subfigure} +% \hspace*{-0.7cm} +% \begin{subfigure}[c]{0.33\textwidth} +% \centering +% \begin{tikzpicture}[scale=0.4] +% \begin{axis}[view={75}{30}, +% zmode=log, +% xlabel={$E_b / N_0$ (dB)}, +% ylabel={$\gamma$}, +% zlabel={BER},] +% \addplot3[surf, +% mesh/rows=17, mesh/cols=10, +% colormap/viridis] table [col sep=comma, +% x=SNR, y=gamma, z=BER] +% {res/proximal/2d_ber_fer_dfr_bch_31_26.csv}; +% \addplot3[RedOrange, line width=1.5] table[col sep=comma, +% discard if not={gamma}{0.05}, +% x=SNR, y=gamma, z=BER] +% {res/proximal/2d_ber_fer_dfr_bch_31_26.csv}; +% \addplot3[NavyBlue, line width=1.5] table[col sep=comma, +% discard if not={gamma}{0.01}, +% x=SNR, y=gamma, z=BER] +% {res/proximal/2d_ber_fer_dfr_bch_31_26.csv}; +% \addplot3[ForestGreen, line width=1.5] table[col sep=comma, +% discard if not={gamma}{0.15}, +% x=SNR, y=gamma, z=BER] +% {res/proximal/2d_ber_fer_dfr_bch_31_26.csv}; +% \end{axis} +% \end{tikzpicture} +% \caption{BCH code with $n=31, k=26$\\[2\baselineskip]} +% \end{subfigure}% +% \begin{subfigure}[c]{0.33\textwidth} +% \centering +% \begin{tikzpicture}[scale=0.4] +% \begin{axis}[view={75}{30}, +% zmode=log, +% xlabel={$E_b / N_0$ (dB)}, +% ylabel={$\gamma$}, +% zlabel={BER},] +% \addplot3[surf, +% mesh/rows=17, mesh/cols=10, +% colormap/viridis] table [col sep=comma, +% x=SNR, y=gamma, z=BER] +% {res/proximal/2d_ber_fer_dfr_20455187.csv}; +% \addplot3[RedOrange, line width=1.5] table[col sep=comma, +% discard if not={gamma}{0.05}, +% x=SNR, y=gamma, z=BER] +% {res/proximal/2d_ber_fer_dfr_20455187.csv}; +% \addplot3[NavyBlue, line width=1.5] table[col sep=comma, +% discard if not={gamma}{0.01}, +% x=SNR, y=gamma, z=BER] +% {res/proximal/2d_ber_fer_dfr_20455187.csv}; +% \addplot3[ForestGreen, line width=1.5] table[col sep=comma, +% discard if not={gamma}{0.15}, +% x=SNR, y=gamma, z=BER] +% {res/proximal/2d_ber_fer_dfr_20455187.csv}; +% \end{axis} +% \end{tikzpicture} +% \caption{$\left( 5, 10 \right)$-regular LDPC code with $n=204, k=102$ \cite[\text{204.55.187}]{mackay_enc}} +% \end{subfigure}% +% \begin{subfigure}[c]{0.33\textwidth} +% \centering +% \begin{tikzpicture}[scale=0.4] +% \begin{axis}[view={75}{30}, +% zmode=log, +% xlabel={$E_b / N_0$ (dB)}, +% ylabel={$\gamma$}, +% zlabel={BER},] +% \addplot3[surf, +% mesh/rows=17, mesh/cols=10, +% colormap/viridis] table [col sep=comma, +% x=SNR, y=gamma, z=BER] +% {res/proximal/2d_ber_fer_dfr_pegreg252x504.csv}; +% \addplot3[RedOrange, line width=1.5] table[col sep=comma, +% discard if not={gamma}{0.05}, +% x=SNR, y=gamma, z=BER] +% {res/proximal/2d_ber_fer_dfr_pegreg252x504.csv}; +% \addplot3[NavyBlue, line width=1.5] table[col sep=comma, +% discard if not={gamma}{0.01}, +% x=SNR, y=gamma, z=BER] +% {res/proximal/2d_ber_fer_dfr_pegreg252x504.csv}; +% \addplot3[ForestGreen, line width=1.5] table[col sep=comma, +% discard if not={gamma}{0.15}, +% x=SNR, y=gamma, z=BER] +% {res/proximal/2d_ber_fer_dfr_pegreg252x504.csv}; +% \end{axis} +% \end{tikzpicture} +% \caption{LDPC code (Progressive Edge Growth Construction) with $n=504, k=252$ \cite[\text{PEGReg252x504}]{mackay_enc}} +% \end{subfigure}% +% \end{figure} +% \end{minipage}% +% \begin{minipage}[c]{0.1\textwidth} +% \centering +% +% \begin{figure}[H] +% \vspace*{-1.5cm} +% \hspace*{-0.75cm} +% \centering +% \begin{tikzpicture}[scale=0.7] +% \begin{axis}[hide axis, +% xmin=10, xmax=50, +% ymin=0, ymax=0.4, +% legend style={draw=white!15!black,legend cell align=left}] +% \addlegendimage{surf, colormap/viridis} +% \addlegendentry{$\gamma = \left[ 0\text{ : }0.01\text{ : }0.16 \right] $}; +% \addlegendimage{NavyBlue, line width=1.5pt} +% \addlegendentry{$\gamma = 0.01$}; +% \addlegendimage{RedOrange, line width=1.5pt} +% \addlegendentry{$\gamma = 0.05$}; +% \addlegendimage{ForestGreen, line width=1.5pt} +% \addlegendentry{$\gamma = 0.15$}; +% \end{axis} +% \end{tikzpicture} +% \end{figure} +% \end{minipage} +%\end{frame} + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\begin{frame}[t, fragile] + \frametitle{Proximal Decoding: Frame Error Rate} + + \begin{itemize} + \item Analysis of simulated% + \footnote{(3,6) regular LDPC code with $n=204, k=102$ + \cite[\text{204.33.484}]{mackay_enc}} + BER and FER + \end{itemize} + + \begin{minipage}{.4\textwidth} + \centering + + \begin{figure}[htpb] + \centering + + \begin{algorithm}[caption={}, label={}] +$\boldsymbol{s} \leftarrow \boldsymbol{0}$ +for $K$ iterations do + $\boldsymbol{r} \leftarrow \boldsymbol{s} - \omega \nabla L \left( \boldsymbol{y} \mid \boldsymbol{s} \right) $ + $\boldsymbol{s} \leftarrow \boldsymbol{r} - \gamma \nabla h\left( \boldsymbol{r} \right) $ + $\boldsymbol{\hat{x}} \leftarrow \text{sign}\left( \boldsymbol{s} \right) $ + if $\boldsymbol{H}\boldsymbol{\hat{c}} = \boldsymbol{0}$ do + return $\boldsymbol{\hat{c}}$ + end if +end for +return $\boldsymbol{\hat{c}}$ + \end{algorithm} + + \vspace*{-5mm} + + \caption{Proximal decoding algorithm \cite{proximal_paper}} + \end{figure} + \end{minipage}% + \begin{minipage}{.6\textwidth} + \centering + \begin{figure}[H] + \vspace*{-9mm} + \centering + + \begin{tikzpicture}[scale=0.7] + \begin{axis}[ + grid=both, + xlabel={$E_b / N_0$ (dB)}, ylabel={BER}, + ymode=log, + legend style={at={(0.05,0.05)},anchor=south west}, + ymax=1.5, ymin=3e-7, + width=0.7\textwidth, + height=0.6\textwidth, + ] + \addplot [ForestGreen, mark=*] + table [x=SNR, y=BER, col sep=comma, discard if not={gamma}{0.15}] + {res/proximal/2d_ber_fer_dfr_20433484.csv}; + \addlegendentry{$\gamma = 0.15$} + \addplot [NavyBlue, mark=*] + table [x=SNR, y=BER, col sep=comma, discard if not={gamma}{0.01}] + {res/proximal/2d_ber_fer_dfr_20433484.csv}; + \addlegendentry{$\gamma = 0.01$} + \addplot [RedOrange, mark=*] + table [x=SNR, y=BER, col sep=comma, discard if not={gamma}{0.05}] + {res/proximal/2d_ber_fer_dfr_20433484.csv}; + \addlegendentry{$\gamma = 0.05$} + \end{axis} + \end{tikzpicture} + \begin{tikzpicture}[scale=0.7] + \begin{axis}[ + grid=both, + xlabel={$E_b / N_0$ (dB)}, ylabel={FER}, + ymode=log, + legend style={at={(0.05,0.05)},anchor=south west}, + ymax=1.5, ymin=3e-7, + width=0.7\textwidth, + height=0.6\textwidth, + ] + \addplot [ForestGreen, mark=*] + table [x=SNR, y=FER, col sep=comma, discard if not={gamma}{0.15}] + {res/proximal/2d_ber_fer_dfr_20433484.csv}; + \addlegendentry{$\gamma = 0.15$} + \addplot [NavyBlue, mark=*] + table [x=SNR, y=FER, col sep=comma, discard if not={gamma}{0.01}] + {res/proximal/2d_ber_fer_dfr_20433484.csv}; + \addlegendentry{$\gamma = 0.01$} + \addplot [RedOrange, mark=*] + table [x=SNR, y=FER, col sep=comma, discard if not={gamma}{0.05}] + {res/proximal/2d_ber_fer_dfr_20433484.csv}; + \addlegendentry{$\gamma = 0.05$} + \end{axis} + \end{tikzpicture}\\ + \begin{tikzpicture}[scale=0.7] + \begin{axis}[ + grid=both, + xlabel={$E_b / N_0$ (dB)}, ylabel={Decoding Failure Rate}, + ymode=log, + legend style={at={(0.05,0.05)},anchor=south west}, + ymax=1.5, ymin=3e-7, + width=0.7\textwidth, + height=0.6\textwidth, + ] + \addplot [ForestGreen, mark=*] + table [x=SNR, y=DFR, col sep=comma, discard if not={gamma}{0.15}] + {res/proximal/2d_ber_fer_dfr_20433484.csv}; + \addlegendentry{$\gamma = 0.15$} + \addplot [NavyBlue, mark=*] + table [x=SNR, y=DFR, col sep=comma, discard if not={gamma}{0.01}] + {res/proximal/2d_ber_fer_dfr_20433484.csv}; + \addlegendentry{$\gamma = 0.01$} + \addplot [RedOrange, mark=*] + table [x=SNR, y=DFR, col sep=comma, discard if not={gamma}{0.05}] + {res/proximal/2d_ber_fer_dfr_20433484.csv}; + \addlegendentry{$\gamma = 0.05$} + \end{axis} + \end{tikzpicture} + + \caption{Simulation results for $\omega = 0.05, K=100$} + \label{fig:simulation_results_ber_fer_dfr} + \end{figure} + \end{minipage} +\end{frame} + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\begin{frame}[t] + \frametitle{Proximal Decoding: Oscillation of Estimate} + + \begin{itemize} + \item $\nabla L \left( \boldsymbol{y} \mid \tilde{\boldsymbol{x}} \right) $ + and $\nabla h \left( \tilde{\boldsymbol{x}} \right) $ generally end up + in an equilibrium + \end{itemize} + + \begin{figure}[H] + \centering + \begin{minipage}[c]{0.25\textwidth} + \centering + + \begin{tikzpicture}[scale = 0.7] + \begin{axis}[ + grid=both, + xlabel={Iterations}, + width=1.2\textwidth, + height=0.45\textwidth, + scale only axis, + xtick={0, 50, ..., 200}, + xticklabels={0, 25, ..., 100}, + ] + \addplot [NavyBlue, mark=none, line width=1] + table [col sep=comma, x=k, y=comb_r_s_1] + {res/proximal/comp_bch_7_4_combined.csv}; + \addplot [ForestGreen, mark=none, line width=1] + table [col sep=comma, x=k, y=grad_L_1] + {res/proximal/comp_bch_7_4_combined.csv}; + \addplot [RedOrange, mark=none, line width=1] + table [col sep=comma, x=k, y=grad_h_1] + {res/proximal/comp_bch_7_4_combined.csv}; + \addlegendentry{est} + \addlegendentry{$\left(\nabla L \right)_2$} + \addlegendentry{$\left(\nabla h \right)_2 $} + \end{axis} + \end{tikzpicture}\\ + \begin{tikzpicture}[scale = 0.7] + \begin{axis}[ + grid=both, + xlabel={Iterations}, + width=1.2\textwidth, + height=0.45\textwidth, + scale only axis, + xtick={0, 50, ..., 200}, + xticklabels={0, 25, ..., 100}, + ] + \addplot [NavyBlue, mark=none, line width=1] + table [col sep=comma, x=k, y=comb_r_s_2] + {res/proximal/comp_bch_7_4_combined.csv}; + \addplot [ForestGreen, mark=none, line width=1] + table [col sep=comma, x=k, y=grad_L_2] + {res/proximal/comp_bch_7_4_combined.csv}; + \addplot [RedOrange, mark=none, line width=1] + table [col sep=comma, x=k, y=grad_h_2] + {res/proximal/comp_bch_7_4_combined.csv}; + \addlegendentry{est} + \addlegendentry{$\left(\nabla L \right)_3$} + \addlegendentry{$\left(\nabla h \right)_3 $} + \end{axis} + \end{tikzpicture}\\ + \begin{tikzpicture}[scale = 0.7] + \begin{axis}[ + grid=both, + xlabel={Iterations}, + width=1.2\textwidth, + height=0.45\textwidth, + scale only axis, + xtick={0, 50, ..., 200}, + xticklabels={0, 25, ..., 100}, + ] + \addplot [NavyBlue, mark=none, line width=1] + table [col sep=comma, x=k, y=comb_r_s_3] + {res/proximal/comp_bch_7_4_combined.csv}; + \addplot [ForestGreen, mark=none, line width=1] + table [col sep=comma, x=k, y=grad_L_3] + {res/proximal/comp_bch_7_4_combined.csv}; + \addplot [RedOrange, mark=none, line width=1] + table [col sep=comma, x=k, y=grad_h_3] + {res/proximal/comp_bch_7_4_combined.csv}; + \addlegendentry{est} + \addlegendentry{$\left(\nabla L \right)_4$} + \addlegendentry{$\left(\nabla h \right)_4 $} + \end{axis} + \end{tikzpicture} + \end{minipage}% + \begin{minipage}[c]{0.5\textwidth} + \vspace*{-1cm} + \centering + + \begin{tikzpicture}[, spy using outlines={circle, magnification=6, + connect spies}] + \begin{axis}[ + grid=both, + xlabel={Iterations}, + width=0.8\textwidth, + height=0.35\textwidth, + scale only axis, + xtick={0, 50, ..., 200}, + xticklabels={0, 25, ..., 100}, + ] + \addplot [NavyBlue, mark=none, line width=1] + table [col sep=comma, x=k, y=comb_r_s_0] + {res/proximal/comp_bch_7_4_combined.csv}; + \addplot [ForestGreen, mark=none, line width=1] + table [col sep=comma, x=k, y=grad_L_0] + {res/proximal/comp_bch_7_4_combined.csv}; + \addplot [RedOrange, mark=none, line width=1] + table [col sep=comma, x=k, y=grad_h_0] + {res/proximal/comp_bch_7_4_combined.csv}; + \addlegendentry{est} + \addlegendentry{$\left(\nabla L \right)_1$} + \addlegendentry{$\left(\nabla h \right)_1 $} + + \coordinate (spypoint) at (axis cs:100,1.12); + \coordinate (magnifyglass) at (axis cs:180,2.75); + \end{axis} + \spy [black, size=2cm] on (spypoint) + in node[fill=white] at (magnifyglass); + \end{tikzpicture} + \end{minipage}% + \begin{minipage}[c]{0.25\textwidth} + \centering + + \begin{tikzpicture}[scale = 0.7] + \begin{axis}[ + grid=both, + xlabel={Iterations}, + width=1.2\textwidth, + height=0.45\textwidth, + scale only axis, + xtick={0, 50, ..., 200}, + xticklabels={0, 25, ..., 100}, + ] + \addplot [NavyBlue, mark=none, line width=1] + table [col sep=comma, x=k, y=comb_r_s_4] + {res/proximal/comp_bch_7_4_combined.csv}; + \addplot [ForestGreen, mark=none, line width=1] + table [col sep=comma, x=k, y=grad_L_4] + {res/proximal/comp_bch_7_4_combined.csv}; + \addplot [RedOrange, mark=none, line width=1] + table [col sep=comma, x=k, y=grad_h_4] + {res/proximal/comp_bch_7_4_combined.csv}; + \addlegendentry{est} + \addlegendentry{$\left(\nabla L \right)_5$} + \addlegendentry{$\left(\nabla h \right)_5 $} + \end{axis} + \end{tikzpicture}\\ + \begin{tikzpicture}[scale = 0.7] + \begin{axis}[ + grid=both, + xlabel={Iterations}, + width=1.2\textwidth, + height=0.45\textwidth, + scale only axis, + xtick={0, 50, ..., 200}, + xticklabels={0, 25, ..., 100}, + ] + \addplot [NavyBlue, mark=none, line width=1] + table [col sep=comma, x=k, y=comb_r_s_5] + {res/proximal/comp_bch_7_4_combined.csv}; + \addplot [ForestGreen, mark=none, line width=1] + table [col sep=comma, x=k, y=grad_L_5] + {res/proximal/comp_bch_7_4_combined.csv}; + \addplot [RedOrange, mark=none, line width=1] + table [col sep=comma, x=k, y=grad_h_5] + {res/proximal/comp_bch_7_4_combined.csv}; + \addlegendentry{est} + \addlegendentry{$\left(\nabla L \right)_6$} + \addlegendentry{$\left(\nabla h \right)_6 $} + \end{axis} + \end{tikzpicture}\\ + \begin{tikzpicture}[scale = 0.7] + \begin{axis}[ + grid=both, + xlabel={Iterations}, + width=1.2\textwidth, + height=0.45\textwidth, + scale only axis, + xtick={0, 50, ..., 200}, + xticklabels={0, 25, ..., 100}, + ] + \addplot [NavyBlue, mark=none, line width=1] + table [col sep=comma, x=k, y=comb_r_s_6] + {res/proximal/comp_bch_7_4_combined.csv}; + \addplot [ForestGreen, mark=none, line width=1] + table [col sep=comma, x=k, y=grad_L_6] + {res/proximal/comp_bch_7_4_combined.csv}; + \addplot [RedOrange, mark=none, line width=1] + table [col sep=comma, x=k, y=grad_h_6] + {res/proximal/comp_bch_7_4_combined.csv}; + \addlegendentry{est} + \addlegendentry{$\left(\nabla L \right)_7$} + \addlegendentry{$\left(\nabla h \right)_7 $} + \end{axis} + \end{tikzpicture} + \end{minipage} + + \caption{Internal variables of proximal decoder + as a function of the number of iterations ($n=7$)\footnotemark} + + \footnotetext{A single decoding is shown, using the BCH$\left( 7,4 \right) $ code; + $\gamma = 0.05, \omega = 0.05, E_b / N_0 = \SI{5}{dB}$} + \end{figure} +\end{frame} + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\begin{frame}[t] + \frametitle{Proximal Decoding: Visualization of Gradients} + + \begin{figure}[H] + \centering + + \begin{subfigure}[c]{0.5\textwidth} + + \centering + + \begin{tikzpicture} + \begin{axis}[xmin = -1.25, xmax=1.25, + ymin = -1.25, ymax=1.25, + xlabel={$x_1$}, ylabel={$x_2$}, + width=0.9\textwidth, + height=0.8\textwidth, + grid=major, grid style={dotted}, + view={0}{90}] + \addplot3[point meta=\thisrow{grad_norm}, + point meta min=1, + point meta max=3, + quiver={u=\thisrow{grad_0}, + v=\thisrow{grad_1}, + scale arrows=.05, + every arrow/.append style={% + line width=.3+\pgfplotspointmetatransformed/1000, + -{Latex[length=0pt 5,width=0pt 3]} + }, + }, + quiver/colored = {mapped color}, + colormap/rocket, + -stealth, + ] + table[col sep=comma] {res/proximal/2d_grad_L.csv}; + \end{axis} + \end{tikzpicture} + + \caption{$\nabla L \left(\boldsymbol{y} \mid \tilde{\boldsymbol{x}} \right)$ + for a repetition code with $n=2$\footnotemark} + \end{subfigure}% + \begin{subfigure}[c]{0.5\textwidth} + \centering + + \begin{tikzpicture} + \begin{axis}[xmin = -1.25, xmax=1.25, + ymin = -1.25, ymax=1.25, + width=0.9\textwidth, + height=0.8\textwidth, + xlabel={$x_1$}, ylabel={$x_2$}, + grid=major, grid style={dotted}, + view={0}{90}] + \addplot3[point meta=\thisrow{grad_norm}, + point meta min=1, + point meta max=4, + quiver={u=\thisrow{grad_0}, + v=\thisrow{grad_1}, + scale arrows=.03, + every arrow/.append style={% + line width=.3+\pgfplotspointmetatransformed/1000, + -{Latex[length=0pt 5,width=0pt 3]} + }, + }, + quiver/colored = {mapped color}, + colormap/rocket, + -stealth, + ] + table[col sep=comma] {res/proximal/2d_grad_h.csv}; + \end{axis} + \end{tikzpicture} + + \caption{$\nabla h \left( \tilde{\boldsymbol{x}} \right) $ for a repetition code + with $n=2$} + \end{subfigure}% + \end{figure} + + \footnotetext{In an AWGN Channel $\nabla L\left( \boldsymbol{y} \mid + \tilde{\boldsymbol{x}}\right) + \propto \left( \tilde{\boldsymbol{x}} - \boldsymbol{y} \right)$ + \cite[Sec. 4.1]{proximal_paper}} + +\end{frame} + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\begin{frame}[t] + \frametitle{Proximal Decoder: Oscillation of $\nabla h\left( \tilde{\boldsymbol{x}} \right) $} + + \begin{itemize} + \item For larger $n$, the gradient itself starts to oscillate + \item The dynamic range of the oscillation is highly correlated + with the probability of a bit error + \end{itemize} + + \begin{figure} + \centering + + \begin{subfigure}[t]{0.5\textwidth} + \centering + + \begin{tikzpicture} + \begin{axis}[ + grid=both, + xlabel={Iterations}, + width=0.85\textwidth, + height=0.4\textwidth, + scale only axis, + xtick={0, 100, ..., 400}, + xticklabels={0, 50, ..., 200}, + ] + \addplot [NavyBlue, mark=none, line width=1] + table [col sep=comma, x=k, y=comb_r_s_0] + {res/proximal/extreme_components_20433484_combined.csv}; + \addplot [ForestGreen, mark=none, line width=1] + table [col sep=comma, x=k, y=grad_L_0] + {res/proximal/extreme_components_20433484_combined.csv}; + \addplot [RedOrange, mark=none, line width=1] + table [col sep=comma, x=k, y=grad_h_0] + {res/proximal/extreme_components_20433484_combined.csv}; + \addlegendentry{est} + \addlegendentry{$\left(\nabla L \right)_1$} + \addlegendentry{$\left(\nabla h \right)_1$} + \end{axis} + \end{tikzpicture} + + \caption{Internal variables of proximal decoder as a function of the iteration + ($n=204$)\footnotemark} + \end{subfigure}% + \begin{subfigure}[t]{0.5\textwidth} + \centering + + \begin{tikzpicture} + \begin{axis}[ + point meta min = -1, + point meta max = 1, + grid=both, + xlabel={$Var\left( \nabla h\left( \tilde{\boldsymbol{x}} \right) \right) $}, + ylabel={Bit error (bool)}, + ytick={0, 1}, + width=0.85\textwidth, + height=0.4\textwidth, + scale only axis, +% colormap/viridis, + ] + \addplot [RoyalPurple, only marks,] + table [col sep=comma, x=grad_h_vars, y=bit_error] + {res/proximal/extreme_components_20433484_variance.csv}; + \end{axis} + \end{tikzpicture} + + \caption{Correlation between bit error and dynamic range of oscillation} + \end{subfigure} + \end{figure} + + + \footnotetext{A single decoding is shown, using a (3,6) regular LDPC code + with $n=204, k=102$ \cite[\text{204.33.484}]{mackay_enc}; + $\gamma = 0.05, \omega = 0.05, E_b / N_0 = \SI{5}{dB}$} +\end{frame} + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%\newcommand{\tikzbracemark}[1]{\tikz[overlay,remember picture] \node (#1) {};} +% +%\newcommand*{\AddNote}[4]{% +% \begin{tikzpicture}[overlay, remember picture] +% \draw [decoration={brace,amplitude=0.5em},decorate,ultra thick] +% ($(#3)!([yshift=1.5ex]#1)!($(#3)-(0,1)$)$) -- +% ($(#3)!(#2)!($(#3)-(0,1)$)$) +% node [align=center, text width=2cm, pos=0.5, anchor=west] {#4}; +% \end{tikzpicture} +%}% +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%\begin{frame}[t, fragile] +% \frametitle{Proximal Decoding: Improvement using ``ML-on-List''} +% +% \begin{itemize} +% \item Comparison of proximal \& hybrid-proximal-ML\\ +% decoding simulation +% \footnote{(3,6) regular LDPC Code with $n=204, k=102$ +% \cite[Code: 204.33.484]{mackay_enc}} +% results +% \end{itemize} +% +% \begin{minipage}{.4\textwidth} +% \centering +% +% \begin{algorithm}[caption={}, label={}, +% basicstyle=\fontsize{6.5}{7.5}\selectfont +% ] +%$\boldsymbol{s}^{\left( 0 \right)} = \boldsymbol{0}$$\hspace{4.185cm}\tikzbracemark{prox-start}$ +%for $k=0$ to $K-1$ do +% $\boldsymbol{r}^{\left( k+1 \right)} = \boldsymbol{s}^{(k)} - \omega \nabla L \left( \boldsymbol{s}^{(k)}; \boldsymbol{y} \right) $ +% Compute $\nabla h\left( \boldsymbol{r}^{\left( k+1 \right) } \right)$ +% $\boldsymbol{s}^{\left( k+1 \right)} = \boldsymbol{r}^{(k+1)} - \gamma \nabla h\left( \boldsymbol{r}^{\left( k+1 \right) } \right) $ +% $\boldsymbol{\hat{x}} = \text{sign}\left( \boldsymbol{s}^{\left( k+1 \right) } \right) $ +% If $\boldsymbol{\hat{x}}$ passes the parity check condition, output $\boldsymbol{\hat{x}}$ +%end for $\tikzbracemark{prox-end}$ +%Find $N$ most probably wrong bits $\hspace{2cm}\tikzbracemark{ml-start}$ +%Generate variations $\boldsymbol{\tilde{x}}_n$ of $\boldsymbol{\hat{x}}$ with the $N$ bits modified +%Compute $d\left( \boldsymbol{ \tilde{x}}_n, \boldsymbol{\hat{x}} \right) \forall n \in \left[ 1 : N-1 \right] $ +%Output $\boldsymbol{\tilde{x}}_n$ with lowest $d\left( \boldsymbol{ \tilde{x}}_n, \boldsymbol{\hat{x}} \right)$ $\tikzbracemark{ml-end}$ +% \end{algorithm} +% +% \AddNote{prox-start}{prox-end}{prox-start}{\small Proximal\\Decoding} +% \AddNote{ml-start}{ml-end}{ml-start}{\small ML-on-List} +% \end{minipage}% +% \begin{minipage}{.6\textwidth} +% \centering +% \begin{figure}[H] +% \centering +% \vspace*{-12mm} +% +% \begin{tikzpicture}[scale=0.42] +% \begin{axis}[ +% grid=both, +% xlabel={SNR}, ylabel={BER}, +% ymode=log, +% legend style={at={(0.05,0.05)},anchor=south west}, +% ymax=1.5, ymin=3e-8, +% ] +% +% \addplot table [x=SNR, y=BER, col sep=comma, discard if not={gamma}{0.05}] +% {res/proximal/2d_ber_fer_dfr_20433484.csv}; +% \addlegendentry{proximal} +% \addplot table [x=SNR, y=BER, col sep=comma, discard if not={gamma}{0.05}] +% {res/hybrid/2d_ber_fer_dfr_20433484.csv}; +% \addlegendentry{hybrid prox. \& ML} +% \end{axis} +% \end{tikzpicture} +% \begin{tikzpicture}[scale=0.42] +% \begin{axis}[ +% grid=both, +% xlabel={SNR}, ylabel={FER}, +% ymode=log, +% legend style={at={(0.05,0.05)},anchor=south west}, +% ymax=1.5, ymin=3e-8, +% ] +% +% \addplot table [x=SNR, y=FER, col sep=comma, discard if not={gamma}{0.05}] +% {res/proximal/2d_ber_fer_dfr_20433484.csv}; +% \addlegendentry{proximal} +% \addplot table [x=SNR, y=FER, col sep=comma, discard if not={gamma}{0.05}] +% {res/hybrid/2d_ber_fer_dfr_20433484.csv}; +% \addlegendentry{hybrid prox. \& ML} +% \end{axis} +% \end{tikzpicture}\\ +% \begin{tikzpicture}[scale=0.42] +% \begin{axis}[ +% grid=both, +% xlabel={SNR}, ylabel={Decoding Failure Rate}, +% ymode=log, +% legend style={at={(0.05,0.05)},anchor=south west}, +% ymax=1.5, ymin=3e-8, +% ] +% +% \addplot table [x=SNR, y=DFR, col sep=comma, discard if not={gamma}{0.05}] +% {res/proximal/2d_ber_fer_dfr_20433484.csv}; +% \addlegendentry{proximal} +% \addplot table [x=SNR, y=DFR, col sep=comma, discard if not={gamma}{0.05}] +% {res/hybrid/2d_ber_fer_dfr_20433484.csv}; +% \addlegendentry{hybrid prox. \& ML} +% \end{axis} +% \end{tikzpicture} +% +% \caption{Simulation results for $\gamma = 0.05, \omega = 0.05, K=200, N=12$} +% \label{fig:simulation_results_hybrid} +% \end{figure} +% \end{minipage} +%\end{frame} + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\begin{frame}[t, fragile] + \frametitle{Proximal Decoding: Improvement using \\``ML-in-the-List''} + + \vspace*{-0.5cm} + + \begin{itemize} + \item Improvement of proximal decoding by adding an ``ML-in-the-List'' step after + iterating + \end{itemize} + + \vspace*{-2mm} + + \begin{minipage}[t]{.48\textwidth} + \centering + + \begin{figure} + \centering + + \begin{algorithm}[caption={}, label={}, basicstyle=\fontsize{9.5}{11.5}\selectfont] +$\boldsymbol{s} \leftarrow \boldsymbol{0}$ +for $K$ iterations do + $\boldsymbol{r} \leftarrow \boldsymbol{s} - \omega \nabla L \left( \boldsymbol{y} \mid \boldsymbol{s} \right) $ + $\boldsymbol{s} \leftarrow \boldsymbol{r} - \gamma \nabla h\left( \boldsymbol{r} \right) $ + $\boldsymbol{\hat{x}} \leftarrow \text{sign}\left( \boldsymbol{s} \right) $ + if $\boldsymbol{H}\boldsymbol{\hat{c}} = \boldsymbol{0}$ do + return $\boldsymbol{\hat{c}}$ + end if +end for +return $\boldsymbol{\hat{c}}$ |\Suppressnumber| + + +|\phantom{a}||\Reactivatenumber| + \end{algorithm} + \end{figure} + + \end{minipage}% + \hfill\begin{minipage}[t]{.48\textwidth} + \centering + \begin{figure} + \centering + + \begin{algorithm}[caption={}, label={}, basicstyle=\fontsize{9.5}{11.5}\selectfont] +$\boldsymbol{s} \leftarrow \boldsymbol{0}$ +for $K$ iterations do + $\boldsymbol{r} \leftarrow \boldsymbol{s} - \omega \nabla L \left( \boldsymbol{y} \mid \boldsymbol{s} \right) $ + $\boldsymbol{s} \leftarrow \boldsymbol{r} - \gamma \nabla h\left( \boldsymbol{r} \right) $ + $\boldsymbol{\hat{x}} \leftarrow \text{sign}\left( \boldsymbol{s} \right) $ + if $\boldsymbol{H}\boldsymbol{\hat{c}} = \boldsymbol{0}$ + return $\boldsymbol{\hat{c}}$ + end if +end for +$\textcolor{KITblue}{\text{Find }N\text{ most probably wrong bits.}}$ +$\textcolor{KITblue}{\text{Generate variations } \boldsymbol{\hat{c}}_l\text{ of }\boldsymbol{\hat{c}}\text{ with the }N\text{ bits modified.}}$ +$\textcolor{KITblue}{\text{Compute }d_H\left( \boldsymbol{ \hat{c}}_l, \boldsymbol{\hat{c}} \right) \text{ for all valid codewords } \boldsymbol{\hat{c}}_l}$ +$\textcolor{KITblue}{\textbf{return }\boldsymbol{\hat{c}}_l\text{ with lowest }d_H\left( \boldsymbol{ \hat{c}}_l, \boldsymbol{\hat{c}} \right)}$ + \end{algorithm} + \end{figure} + \end{minipage} +\end{frame} + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\begin{frame}[t] + \frametitle{Proximal Decoding: Improvement using \\``ML-in-the-List''} + + \vspace{-0.5cm} + + \begin{itemize} + \item Comparison of proximal \& improved (correction of $N = \SI{12}{\bit}$) + decoding simulation% + \footnote{(3,6) regular LDPC code with $n=204, k=102$ + \cite[Code: 204.33.484]{mackay_enc}} + results + \end{itemize} + + \begin{figure}[H] + \centering + + \begin{tikzpicture} + \begin{axis}[ + grid=both, + xlabel={$E_b / N_0$}, ylabel={BER}, + ymode=log, + legend columns=2, + legend style={at={(0.5,-0.45)},anchor=south}, + ymax=1.5, ymin=3e-8, + width=0.33\textwidth, + height=0.28\textwidth, + ] + \addplot[ForestGreen, mark=*, solid] + table [x=SNR, y=BER, col sep=comma, discard if not={gamma}{0.15}] + {res/proximal/2d_ber_fer_dfr_20433484.csv}; + \addplot[Emerald, mark=triangle, densely dashed] + table [x=SNR, y=BER, col sep=comma, discard if not={gamma}{0.15}] + {res/hybrid/2d_ber_fer_dfr_20433484.csv}; + + \addplot[NavyBlue, mark=*, solid] + table [x=SNR, y=BER, col sep=comma, discard if not={gamma}{0.01}] + {res/proximal/2d_ber_fer_dfr_20433484.csv}; + \addplot[RoyalPurple, mark=triangle, densely dashed] + table [x=SNR, y=BER, col sep=comma, discard if not={gamma}{0.01}] + {res/hybrid/2d_ber_fer_dfr_20433484.csv}; + + \addplot[RedOrange, mark=*, solid] + table [x=SNR, y=BER, col sep=comma, discard if not={gamma}{0.05}] + {res/proximal/2d_ber_fer_dfr_20433484.csv}; + \addplot[red, mark=triangle, densely dashed] + table [x=SNR, y=BER, col sep=comma, discard if not={gamma}{0.05}] + {res/hybrid/2d_ber_fer_dfr_20433484.csv}; + \end{axis} + \end{tikzpicture} + \begin{tikzpicture} + \begin{axis}[ + grid=both, + xlabel={$E_b / N_0$}, ylabel={FER}, + ymode=log, + legend columns=2, + legend style={at={(0.5,-0.45)},anchor=south}, + ymax=1.5, ymin=3e-8, + width=0.33\textwidth, + height=0.28\textwidth, + ] + + \addplot[ForestGreen, mark=*, solid] + table [x=SNR, y=FER, col sep=comma, discard if not={gamma}{0.15}] + {res/proximal/2d_ber_fer_dfr_20433484.csv}; + \addplot[Emerald, mark=triangle, densely dashed] + table [x=SNR, y=FER, col sep=comma, discard if not={gamma}{0.15}] + {res/hybrid/2d_ber_fer_dfr_20433484.csv}; + + \addplot[NavyBlue, mark=*, solid] + table [x=SNR, y=FER, col sep=comma, discard if not={gamma}{0.01}] + {res/proximal/2d_ber_fer_dfr_20433484.csv}; + \addplot[RoyalPurple, mark=triangle, densely dashed] + table [x=SNR, y=FER, col sep=comma, discard if not={gamma}{0.01}] + {res/hybrid/2d_ber_fer_dfr_20433484.csv}; + + \addplot[RedOrange, mark=*, solid] + table [x=SNR, y=FER, col sep=comma, discard if not={gamma}{0.05}] + {res/proximal/2d_ber_fer_dfr_20433484.csv}; + \addplot[red, mark=triangle, densely dashed] + table [x=SNR, y=FER, col sep=comma, discard if not={gamma}{0.05}] + {res/hybrid/2d_ber_fer_dfr_20433484.csv}; + \end{axis} + \end{tikzpicture} + \begin{tikzpicture} + \begin{axis}[ + grid=both, + xlabel={$E_b / N_0$}, ylabel={Decoding Failure Rate}, + ymode=log, + legend columns=2, + legend style={at={(0.5,-0.45)},anchor=south}, + ymax=1.5, ymin=3e-8, + width=0.33\textwidth, + height=0.28\textwidth, + ] + + \addplot[ForestGreen, mark=*, solid] + table [x=SNR, y=DFR, col sep=comma, discard if not={gamma}{0.15}] + {res/proximal/2d_ber_fer_dfr_20433484.csv}; + \addplot[Emerald, mark=triangle, densely dashed] + table [x=SNR, y=DFR, col sep=comma, discard if not={gamma}{0.15}] + {res/hybrid/2d_ber_fer_dfr_20433484.csv}; + + \addplot[NavyBlue, mark=*, solid] + table [x=SNR, y=DFR, col sep=comma, discard if not={gamma}{0.01}] + {res/proximal/2d_ber_fer_dfr_20433484.csv}; + \addplot[RoyalPurple, mark=triangle, densely dashed] + table [x=SNR, y=DFR, col sep=comma, discard if not={gamma}{0.01}] + {res/hybrid/2d_ber_fer_dfr_20433484.csv}; + + \addplot[RedOrange, mark=*, solid] + table [x=SNR, y=DFR, col sep=comma, discard if not={gamma}{0.05}] + {res/proximal/2d_ber_fer_dfr_20433484.csv}; + \addplot[red, mark=triangle, densely dashed] + table [x=SNR, y=DFR, col sep=comma, discard if not={gamma}{0.05}] + {res/hybrid/2d_ber_fer_dfr_20433484.csv}; + \end{axis} + \end{tikzpicture} + \begin{tikzpicture} + \begin{axis}[hide axis, + xmin=10, xmax=50, + ymin=0, ymax=0.4, + legend columns=3, + legend style={draw=white!15!black,legend cell align=left}] + \addlegendimage{ForestGreen, mark=*, solid} + \addlegendentry{proximal, $\gamma = 0.15$} + + \addlegendimage{NavyBlue, mark=*, solid} + \addlegendentry{proximal, $\gamma = 0.01$} + + \addlegendimage{RedOrange, mark=*, solid} + \addlegendentry{proximal, $\gamma = 0.05$} + + \addlegendimage{Emerald, mark=triangle, densely dashed} + \addlegendentry{improved, $\gamma = 0.15$} + + \addlegendimage{RoyalPurple, mark=triangle, densely dashed} + \addlegendentry{improved, $\gamma = 0.01$} + + \addlegendimage{red, mark=triangle, densely dashed} + \addlegendentry{improved, $\gamma = 0.05$} + \end{axis} + \end{tikzpicture} + + \caption{Simulation results for $\gamma = 0.05, \omega = 0.05, K=200, N=12$} + \label{fig:simulation_results_hybrid} + \end{figure} +\end{frame} + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%\begin{frame}[t] +% \frametitle{Proximal Decoding: Improvement} +% +% \begin{minipage}[c]{0.9\textwidth} +% \centering +% \begin{figure}[H] +% \vspace*{-0.6cm} +% \hspace*{-0.7cm} +% \centering +% \begin{subfigure}[c]{0.33\textwidth} +% \centering +% +% \begin{tikzpicture}[scale=0.4] +% \begin{axis}[ +% grid=both, +% xlabel={$E_b / N_0$}, ylabel={FER}, +% ymode=log, +% legend columns=1, +% legend pos=outer north east, +% %legend columns=2, +% %legend style={at={(0.5,-0.45)},anchor=south}, +% ymax=1.5, ymin=8e-5, +% ] +% +% \addplot[ForestGreen, mark=*, solid] +% table [x=SNR, y=FER, col sep=comma, discard if not={gamma}{0.15}] +% {res/proximal/2d_ber_fer_dfr_963965.csv}; +% \addplot[Emerald, mark=triangle, densely dashed] +% table [x=SNR, y=FER, col sep=comma, discard if not={gamma}{0.15}] +% {res/hybrid/2d_ber_fer_dfr_963965.csv}; +% +% \addplot[NavyBlue, mark=*, solid] +% table [x=SNR, y=FER, col sep=comma, discard if not={gamma}{0.01}] +% {res/proximal/2d_ber_fer_dfr_963965.csv}; +% \addplot[RoyalPurple, mark=triangle, densely dashed] +% table [x=SNR, y=FER, col sep=comma, discard if not={gamma}{0.01}] +% {res/hybrid/2d_ber_fer_dfr_963965.csv}; +% +% \addplot[RedOrange, mark=*, solid] +% table [x=SNR, y=FER, col sep=comma, discard if not={gamma}{0.05}] +% {res/proximal/2d_ber_fer_dfr_963965.csv}; +% \addplot[red, mark=triangle, densely dashed] +% table [x=SNR, y=FER, col sep=comma, discard if not={gamma}{0.05}] +% {res/hybrid/2d_ber_fer_dfr_963965.csv}; +% \end{axis} +% \end{tikzpicture} +% \caption{$\left( 3, 6 \right)$-regular LDPC code with $n=96, k=48$ \cite[\text{96.3.965}]{mackay_enc}} +% \end{subfigure}% +% \begin{subfigure}[c]{0.33\textwidth} +% \centering +% \begin{tikzpicture}[scale=0.4] +% \begin{axis}[ +% grid=both, +% xlabel={$E_b / N_0$}, ylabel={FER}, +% ymode=log, +% legend columns=1, +% legend pos=outer north east, +% xmin=0.5, xmax=6, xtick={1, ..., 5}, +% ymax=1.5, ymin=8e-5, +% ] +% +% \addplot[ForestGreen, mark=*, solid,] +% table [x=SNR, y=FER, col sep=comma, +% discard if not={gamma}{0.15}, +% discard if gt={SNR}{5.5},] +% {res/proximal/2d_ber_fer_dfr_20433484.csv}; +% \addplot[Emerald, mark=triangle, densely dashed] +% table [x=SNR, y=FER, col sep=comma, +% discard if not={gamma}{0.15}, +% discard if gt={SNR}{5.5},] +% {res/hybrid/2d_ber_fer_dfr_20433484.csv}; +% +% \addplot[NavyBlue, mark=*, solid] +% table [x=SNR, y=FER, col sep=comma, +% discard if not={gamma}{0.01}, +% discard if gt={SNR}{5.5},] +% {res/proximal/2d_ber_fer_dfr_20433484.csv}; +% \addplot[RoyalPurple, mark=triangle, densely dashed] +% table [x=SNR, y=FER, col sep=comma, +% discard if not={gamma}{0.01}, +% discard if gt={SNR}{5.5},] +% {res/hybrid/2d_ber_fer_dfr_20433484.csv}; +% +% \addplot[RedOrange, mark=*, solid] +% table [x=SNR, y=FER, col sep=comma, +% discard if not={gamma}{0.05}, +% discard if gt={SNR}{5.5},] +% {res/proximal/2d_ber_fer_dfr_20433484.csv}; +% \addplot[red, mark=triangle, densely dashed] +% table [x=SNR, y=FER, col sep=comma, +% discard if not={gamma}{0.05}, +% discard if gt={SNR}{5.5},] +% {res/hybrid/2d_ber_fer_dfr_20433484.csv}; +% \end{axis} +% \end{tikzpicture} +% \caption{$\left( 3, 6 \right)$-regular LDPC code with $n=204, k=102$ \cite[\text{204.33.484}]{mackay_enc}} +% \end{subfigure}% +% \begin{subfigure}[c]{0.33\textwidth} +% \centering +% \begin{tikzpicture}[scale=0.4] +% \begin{axis}[ +% grid=both, +% xlabel={$E_b / N_0$}, ylabel={FER}, +% ymode=log, +% legend columns=1, +% legend pos=outer north east, +% %legend columns=2, +% %legend style={at={(0.5,-0.45)},anchor=south}, +% ymax=1.5, ymin=8e-5, +% ] +% +% \addplot[ForestGreen, mark=*, solid] +% table [x=SNR, y=FER, col sep=comma, discard if not={gamma}{0.15}] +% {res/proximal/2d_ber_fer_dfr_40833844.csv}; +% \addplot[Emerald, mark=triangle, densely dashed] +% table [x=SNR, y=FER, col sep=comma, discard if not={gamma}{0.15}] +% {res/hybrid/2d_ber_fer_dfr_40833844.csv}; +% +% \addplot[NavyBlue, mark=*, solid] +% table [x=SNR, y=FER, col sep=comma, discard if not={gamma}{0.01}] +% {res/proximal/2d_ber_fer_dfr_40833844.csv}; +% \addplot[RoyalPurple, mark=triangle, densely dashed] +% table [x=SNR, y=FER, col sep=comma, discard if not={gamma}{0.01}] +% {res/hybrid/2d_ber_fer_dfr_40833844.csv}; +% +% \addplot[RedOrange, mark=*, solid] +% table [x=SNR, y=FER, col sep=comma, discard if not={gamma}{0.05}] +% {res/proximal/2d_ber_fer_dfr_40833844.csv}; +% \addplot[red, mark=triangle, densely dashed] +% table [x=SNR, y=FER, col sep=comma, discard if not={gamma}{0.05}] +% {res/hybrid/2d_ber_fer_dfr_40833844.csv}; +% \end{axis} +% \end{tikzpicture} +% \caption{$\left( 3, 6 \right)$-regular LDPC code with $n=408, k=204$ \cite[\text{408.33.844}]{mackay_enc}} +% \end{subfigure} +% \hspace*{-0.7cm} +% \begin{subfigure}[c]{0.33\textwidth} +% \centering +% \begin{tikzpicture}[scale=0.4] +% \begin{axis}[ +% grid=both, +% xlabel={$E_b / N_0$}, ylabel={FER}, +% ymode=log, +% legend columns=1, +% legend pos=outer north east, +% %legend columns=2, +% %legend style={at={(0.5,-0.45)},anchor=south}, +% ymax=1.5, ymin=8e-5, +% ] +% +% \addplot[ForestGreen, mark=*, solid] +% table [x=SNR, y=FER, col sep=comma, discard if not={gamma}{0.15}] +% {res/proximal/2d_ber_fer_dfr_bch_31_26.csv}; +% \addplot[Emerald, mark=triangle, densely dashed] +% table [x=SNR, y=FER, col sep=comma, discard if not={gamma}{0.15}] +% {res/hybrid/2d_ber_fer_dfr_bch_31_26.csv}; +% +% \addplot[NavyBlue, mark=*, solid] +% table [x=SNR, y=FER, col sep=comma, discard if not={gamma}{0.01}] +% {res/proximal/2d_ber_fer_dfr_bch_31_26.csv}; +% \addplot[RoyalPurple, mark=triangle, densely dashed] +% table [x=SNR, y=FER, col sep=comma, discard if not={gamma}{0.01}] +% {res/hybrid/2d_ber_fer_dfr_bch_31_26.csv}; +% +% \addplot[RedOrange, mark=*, solid] +% table [x=SNR, y=FER, col sep=comma, discard if not={gamma}{0.05}] +% {res/proximal/2d_ber_fer_dfr_bch_31_26.csv}; +% \addplot[red, mark=triangle, densely dashed] +% table [x=SNR, y=FER, col sep=comma, discard if not={gamma}{0.05}] +% {res/hybrid/2d_ber_fer_dfr_bch_31_26.csv}; +% \end{axis} +% \end{tikzpicture} +% \caption{BCH code with $n=31, k=26$\\[\baselineskip]} +% \end{subfigure}% +% \begin{subfigure}[c]{0.33\textwidth} +% \centering +% \begin{tikzpicture}[scale=0.4] +% \begin{axis}[ +% grid=both, +% xlabel={$E_b / N_0$}, ylabel={FER}, +% ymode=log, +% legend columns=1, +% legend pos=outer north east, +% %legend columns=2, +% %legend style={at={(0.5,-0.45)},anchor=south}, +% ymax=1.5, ymin=8e-5, +% ] +% +% \addplot[ForestGreen, mark=*, solid] +% table [x=SNR, y=FER, col sep=comma, discard if not={gamma}{0.15}] +% {res/proximal/2d_ber_fer_dfr_20455187.csv}; +% \addplot[Emerald, mark=triangle, densely dashed] +% table [x=SNR, y=FER, col sep=comma, discard if not={gamma}{0.15}] +% {res/hybrid/2d_ber_fer_dfr_20455187.csv}; +% +% \addplot[NavyBlue, mark=*, solid] +% table [x=SNR, y=FER, col sep=comma, discard if not={gamma}{0.01}] +% {res/proximal/2d_ber_fer_dfr_20455187.csv}; +% \addplot[RoyalPurple, mark=triangle, densely dashed] +% table [x=SNR, y=FER, col sep=comma, discard if not={gamma}{0.01}] +% {res/hybrid/2d_ber_fer_dfr_20455187.csv}; +% +% \addplot[RedOrange, mark=*, solid] +% table [x=SNR, y=FER, col sep=comma, discard if not={gamma}{0.05}] +% {res/proximal/2d_ber_fer_dfr_20455187.csv}; +% \addplot[red, mark=triangle, densely dashed] +% table [x=SNR, y=FER, col sep=comma, discard if not={gamma}{0.05}] +% {res/hybrid/2d_ber_fer_dfr_20455187.csv}; +% \end{axis} +% \end{tikzpicture} +% \caption{$\left( 5, 10 \right)$-regular LDPC code with $n=204, k=102$ \cite[\text{204.55.187}]{mackay_enc}} +% \end{subfigure}% +% \begin{subfigure}[c]{0.33\textwidth} +% \centering +% \begin{tikzpicture}[scale=0.4] +% \begin{axis}[ +% grid=both, +% xlabel={$E_b / N_0$}, ylabel={FER}, +% ymode=log, +% legend columns=1, +% legend pos=outer north east, +% ymax=1.5, ymin=8e-5, +% ] +% +% \addplot[ForestGreen, mark=*, solid] +% table [x=SNR, y=FER, col sep=comma, discard if not={gamma}{0.15}] +% {res/proximal/2d_ber_fer_dfr_pegreg252x504.csv}; +% \addplot[Emerald, mark=triangle, densely dashed] +% table [x=SNR, y=FER, col sep=comma, discard if not={gamma}{0.15}] +% {res/hybrid/2d_ber_fer_dfr_pegreg252x504.csv}; +% +% \addplot[NavyBlue, mark=*, solid] +% table [x=SNR, y=FER, col sep=comma, discard if not={gamma}{0.01}] +% {res/proximal/2d_ber_fer_dfr_pegreg252x504.csv}; +% \addplot[RoyalPurple, mark=triangle, densely dashed] +% table [x=SNR, y=FER, col sep=comma, discard if not={gamma}{0.01}] +% {res/hybrid/2d_ber_fer_dfr_pegreg252x504.csv}; +% +% \addplot[RedOrange, mark=*, solid] +% table [x=SNR, y=FER, col sep=comma, discard if not={gamma}{0.05}] +% {res/proximal/2d_ber_fer_dfr_pegreg252x504.csv}; +% \addplot[red, mark=triangle, densely dashed] +% table [x=SNR, y=FER, col sep=comma, discard if not={gamma}{0.05}] +% {res/hybrid/2d_ber_fer_dfr_pegreg252x504.csv}; +% \end{axis} +% \end{tikzpicture} +% \caption{LDPC code (progressive edge growth construction) with $n=504, k=252$ \cite[\text{PEGReg252x504}]{mackay_enc}} +% \end{subfigure}% +% \end{figure} +% \end{minipage}% +% \begin{minipage}[c]{0.1\textwidth} +% \centering +% +% \begin{figure} +% \vspace*{-1.5cm} +% \hspace*{-0.7cm} +% \centering +% \begin{tikzpicture}[scale=0.7] +% \begin{axis}[hide axis, +% xmin=10, xmax=50, +% ymin=0, ymax=0.4, +% legend style={draw=white!15!black,legend cell align=left}] +% \addlegendimage{ForestGreen, mark=*, solid} +% \addlegendentry{proximal, $\gamma = 0.15$} +% +% \addlegendimage{Emerald, mark=triangle, densely dashed} +% \addlegendentry{improved, $\gamma = 0.15$} +% +% \addlegendimage{NavyBlue, mark=*, solid} +% \addlegendentry{proximal, $\gamma = 0.01$} +% +% \addlegendimage{RoyalPurple, mark=triangle, densely dashed} +% \addlegendentry{improved, $\gamma = 0.01$} +% +% \addlegendimage{RedOrange, mark=*, solid} +% \addlegendentry{proximal, $\gamma = 0.05$} +% +% \addlegendimage{red, mark=triangle, densely dashed} +% \addlegendentry{improved, $\gamma = 0.05$} +% \end{axis} +% \end{tikzpicture} +% +% \end{figure} +% \end{minipage} +%\end{frame} + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\begin{frame}[t] + \frametitle{Proximal Decoding: Average Error} + + \begin{figure}[H] + \centering + + \begin{tikzpicture} + \begin{axis}[ + grid=both, + xlabel={Iterations}, + ylabel={Average $\lVert \boldsymbol{c}-\boldsymbol{\hat{c}} \rVert$}, + width=0.45\textwidth, + height=0.3375\textwidth, + legend pos=outer north east, + ] + \addplot [ForestGreen, mark=none, line width=1pt] + table [col sep=comma, discard if not={omega}{0.0774263682681127}, x=k, y=err] + {res/proximal/2d_avg_error_20433484_1db.csv}; + \addlegendentry{$E_b / N_0 = \SI{1}{dB}$} + \addplot [NavyBlue, mark=none, line width=1pt] + table [col sep=comma, discard if not={omega}{0.0774263682681127}, x=k, y=err] + {res/proximal/2d_avg_error_20433484_3db.csv}; + \addlegendentry{$E_b / N_0 = \SI{3}{dB}$} + \addplot [RedOrange, mark=none, line width=1pt] + table [col sep=comma, discard if not={omega}{0.052233450742668434}, x=k, y=err] + {res/proximal/2d_avg_error_20433484_5db.csv}; + \addlegendentry{$E_b / N_0 = \SI{5}{dB}$} + \addplot [RoyalPurple, mark=none, line width=1pt] + table [col sep=comma, discard if not={omega}{0.052233450742668434}, x=k, y=err] + {res/proximal/2d_avg_error_20433484_8db.csv}; + \addlegendentry{$E_b / N_0 = \SI{8}{dB}$} + \end{axis} + \end{tikzpicture} + + \caption{Average error for $\SI{500000}{}$ decodings, $ + \omega = 0.05, \gamma = 0.05, K=200$\footnotemark} + \end{figure} + + \footnotetext{Simulation performed with (3,6) regular LDPC code with $n=204, k=102$ + \cite[Code: 204.33.484]{mackay_enc}} + + \begin{itemize} + \item With increasing iterations, the average error asymptotically + approaches a minimum, non-zero value + \end{itemize} +\end{frame} + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\begin{frame}[t] + \frametitle{Proximal Decoding: Time Complexity} + + \begin{figure}[H] + \centering + + \begin{tikzpicture} + \begin{axis}[ + grid=both, + xlabel={$n$}, ylabel={time per frame (s)}, + legend style={at={(0.05,0.7)},anchor=south west}, + legend cell align={left}, + width=0.45\textwidth, + height=0.3375\textwidth, + ] + \addplot[RedOrange, only marks, mark=*] + table [col sep=comma, x=n, y=spf] + {res/proximal/fps_vs_n.csv}; + \addlegendentry{proximal} + + \addplot[RoyalPurple, only marks, mark=triangle*] + table [col sep=comma, x=n, y=spf] + {res/hybrid/fps_vs_n.csv}; + \addlegendentry{improved ($\SI{12}{\bit}$)} + \end{axis} + \end{tikzpicture} + + \caption{Time complexity of proximal decoding and improved implementation\footnotemark} + \label{fig:fps_vs_n} + \end{figure} + + \footnotetext{The points shown were calculated by evaluating the metadata + of BER simulation results for the following codes: + BCH $\left( 31, 11 \right)$; + BCH $\left( 31, 26 \right)$; + \cite[\text{96.3.965; 204.33.484; + 204.55.187; 408.33.844; PEGReg252x504}]{mackay_enc} + } + +\end{frame} +