\appendix

\chapter{A Comparison of the Behaviour of Proximal Decoding for Various Codes}

In this chapter, the results obtained with the proximal decoding algorithm,
shown in chapter \ref{chapter:proximal_decoding},
are revisited and expanded to a number of different codes.
These codes include a BCH code with $n=31$, four \ac{LDPC} codes with
lengths $n=96, n=204, n=204$ and $n=408$, respectively,  and a progressive
edge growth construction \ac{LDPC} code with $n=504$.
All \ac{LDPC} codes have been taken from \cite{mackay_enc}.
This selection of codes was chosen as it comprises a variety of codes of
different lengths, rates and construction schemes.

Figure \ref{fig:prox:results_3d_multiple} depicts how the choice of the
parameter $\gamma$ affects the decoding performance.
The \ac{BER} curves for three values of $\gamma$ are highlighted in each case:
$\gamma = 0.01, \gamma=0.05$ and $\gamma=0.15$.
These are the same values chosen by Wadayama et al. for the presentation of
their results in \cite[Sec. 5.1]{proximal_paper}
and they seem to suitably describe the behaviour of the decoding performance
over a wide range of values for $\gamma$.
The parameter $\omega$ is chosen to be $0.05$ and the maximum number of
iterations $K$ performed is 100.
$\eta$ is set to $1.5$.

In figure \ref{fig:prox:gamma_omega_multiple}, the relationship between
$\gamma$ and $\omega$ and how they affect the \ac{BER} is shown.
This time a constant $E_b / N_0$ of $\SI{4}{dB}$ is chosen.
Again, the maximum number of iterations is set to $K=100$ and $\eta$
is set to $1.5$.


The possible gain in the decoding performance achievable using the
improved proximal decoding algorithm presented in section
\ref{sec:prox:Improved Implementation} is illustrated in figure
\ref{fig:prox:improved:comp}.
The parameters chosen are the same as for the reconstruction of the results
of Wadayama et al. in section \ref{sec:prox:Analysis and Simulation Results},
i.e., $\omega = 0.05, K=100, \eta=1.5$ and
$\gamma \in \left\{ 0.01, 0.05, 0.15 \right\}$.


\begin{figure}[H]
    \centering

    \begin{subfigure}[t]{0.48\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,]
                \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 \ac{LDPC} code with $n=96, k=48$
            \cite[\text{96.3.965}]{mackay_enc}}
    \end{subfigure}%
    \hfill
    \begin{subfigure}[t]{0.48\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,]
                \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}

    \vspace{3mm}

    \begin{subfigure}[t]{0.48\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,]
                \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_20433484_fewer_SNR.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_fewer_SNR.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_fewer_SNR.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_fewer_SNR.csv};
            \end{axis}
        \end{tikzpicture}
        \caption{$\left( 3, 6 \right)$-regular \ac{LDPC} code with $n=204, k=102$
            \cite[\text{204.33.484}]{mackay_enc}}
    \end{subfigure}%
    \hfill
    \begin{subfigure}[t]{0.48\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,]
                \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 \ac{LDPC} code with $n=204, k=102$
            \cite[\text{204.55.187}]{mackay_enc}}
    \end{subfigure}%

    \vspace{3mm}

    \begin{subfigure}[t]{0.48\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,]
                \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 \ac{LDPC} code with $n=408, k=204$
            \cite[\text{408.33.844}]{mackay_enc}}
    \end{subfigure}%
    \hfill
    \begin{subfigure}[t]{0.48\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,]
                \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}%

    \vspace{5mm}

    \begin{subfigure}[t]{\textwidth}
        \centering
        \begin{tikzpicture}
            \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{subfigure}

    \caption{Dependence of the \ac{BER} on the value of the parameter $\gamma$ for various codes}
    \label{fig:prox:results_3d_multiple}
\end{figure}

\begin{figure}[H]
    \centering
    
    \begin{subfigure}[t]{0.48\textwidth}
        \centering

        \begin{tikzpicture}
            \begin{axis}[
                colormap/viridis,
                xlabel={$\omega$}, ylabel={$\gamma$},
                at={(0,0)}, view={0}{90},
                zmode=log,
                ytick={0, 0.05, 0.1, 0.15},
                yticklabels={0, 0.05, 0.1, 0.15},
                xtick={0.05, 0.1, 0.15, 0.2},
                xticklabels={0.05, 0.1, 0.15, 0.2},
                width=\textwidth,
                height=0.75\textwidth,
                point meta min=-5.7,
                point meta max=-0.5,
            ]
                \addplot3[
                    surf, 
                    shader=flat, 
                    mesh/rows=17, mesh/cols=10,
                ]
                    table [col sep=comma, x=omega, y=gamma, z=BER]
                        {res/proximal/2d_ber_fer_dfr_gamma_omega_963965.csv};
            \end{axis}
        \end{tikzpicture}
        
        \caption{$\left( 3, 6 \right)$-regular \ac{LDPC} code with $n=96, k=48$
            \cite[\text{96.3.965}]{mackay_enc}}
    \end{subfigure}%
    \hfill
    \begin{subfigure}[t]{0.48\textwidth}
        \centering

        \begin{tikzpicture}
            \begin{axis}[
                colormap/viridis,
                xlabel={$\omega$}, ylabel={$\gamma$},
                at={(0,0)}, view={0}{90},
                zmode=log,
                ytick={0, 0.05, 0.1, 0.15},
                yticklabels={0, 0.05, 0.1, 0.15},
                xtick={0.05, 0.1, 0.15, 0.2},
                xticklabels={0.05, 0.1, 0.15, 0.2},
                width=\textwidth,
                height=0.75\textwidth,
                point meta min=-5.7,
                point meta max=-0.5,
            ]
                \addplot3[
                    surf, 
                    shader=flat, 
                    mesh/rows=17, mesh/cols=10,
                ]
                    table [col sep=comma, x=omega, y=gamma, z=BER]
                        {res/proximal/2d_ber_fer_dfr_gamma_omega_bch_31_26.csv};
            \end{axis}
        \end{tikzpicture}

        \caption{BCH code with $n=31, k=26$\\[2\baselineskip]}
    \end{subfigure}%

    \vspace{3mm}

    \begin{subfigure}[t]{0.48\textwidth}
        \centering

        \begin{tikzpicture}
            \begin{axis}[
                colormap/viridis,
                xlabel={$\omega$}, ylabel={$\gamma$},
                at={(0,0)}, view={0}{90},
                zmode=log,
                ytick={0, 0.05, 0.1, 0.15},
                yticklabels={0, 0.05, 0.1, 0.15},
                xtick={0.05, 0.1, 0.15, 0.2},
                xticklabels={0.05, 0.1, 0.15, 0.2},
                width=\textwidth,
                height=0.75\textwidth,
                point meta min=-5.7,
                point meta max=-0.5,
            ]
                \addplot3[
                    surf, 
                    shader=flat, 
                    mesh/rows=17, mesh/cols=10,
                ]
                    table [col sep=comma, x=omega, y=gamma, z=BER]
                        {res/proximal/2d_ber_fer_dfr_gamma_omega_20433484.csv};
            \end{axis}
        \end{tikzpicture}
        
        \caption{$\left( 3, 6 \right)$-regular \ac{LDPC} code with $n=204, k=102$
            \cite[\text{204.33.484}]{mackay_enc}}
    \end{subfigure}%
    \hfill
    \begin{subfigure}[t]{0.48\textwidth}
        \centering

        \begin{tikzpicture}
            \begin{axis}[
                colormap/viridis,
                xlabel={$\omega$}, ylabel={$\gamma$},
                at={(0,0)}, view={0}{90},
                zmode=log,
                ytick={0, 0.05, 0.1, 0.15},
                yticklabels={0, 0.05, 0.1, 0.15},
                xtick={0.05, 0.1, 0.15, 0.2},
                xticklabels={0.05, 0.1, 0.15, 0.2},
                width=\textwidth,
                height=0.75\textwidth,
                point meta min=-5.7,
                point meta max=-0.5,
            ]
                \addplot3[
                    surf, 
                    shader=flat, 
                    mesh/rows=17, mesh/cols=10,
                ]
                    table [col sep=comma, x=omega, y=gamma, z=BER]
                        {res/proximal/2d_ber_fer_dfr_gamma_omega_20455187.csv};
            \end{axis}
        \end{tikzpicture}
        
        \caption{$\left( 5, 10 \right)$-regular \ac{LDPC} code with $n=204, k=102$
            \cite[\text{204.55.187}]{mackay_enc}}
    \end{subfigure}%

    \vspace{3mm}

    \begin{subfigure}[t]{0.48\textwidth}
        \centering

        \begin{tikzpicture}
            \begin{axis}[
                colormap/viridis,
                xlabel={$\omega$}, ylabel={$\gamma$},
                at={(0,0)}, view={0}{90},
                zmode=log,
                ytick={0, 0.05, 0.1, 0.15},
                yticklabels={0, 0.05, 0.1, 0.15},
                xtick={0.05, 0.1, 0.15, 0.2},
                xticklabels={0.05, 0.1, 0.15, 0.2},
                width=\textwidth,
                height=0.75\textwidth,
                point meta min=-5.7,
                point meta max=-0.5,
            ]
                \addplot3[
                    surf, 
                    shader=flat, 
                    mesh/rows=17, mesh/cols=10,
                ]
                    table [col sep=comma, x=omega, y=gamma, z=BER]
                        {res/proximal/2d_ber_fer_dfr_gamma_omega_40833844.csv};
            \end{axis}
        \end{tikzpicture}
        
        \caption{$\left( 3, 6 \right)$-regular \ac{LDPC} code with $n=408, k=204$
            \cite[\text{408.33.844}]{mackay_enc}}
    \end{subfigure}%
    \hfill
    \begin{subfigure}[t]{0.48\textwidth}
        \centering

        \begin{tikzpicture}
            \begin{axis}[
                colormap/viridis,
                xlabel={$\omega$}, ylabel={$\gamma$},
                at={(0,0)}, view={0}{90},
                zmode=log,
                ytick={0, 0.05, 0.1, 0.15},
                yticklabels={0, 0.05, 0.1, 0.15},
                xtick={0.05, 0.1, 0.15, 0.2},
                xticklabels={0.05, 0.1, 0.15, 0.2},
                width=\textwidth,
                height=0.75\textwidth,
                point meta min=-5.7,
                point meta max=-0.5,
            ]
                \addplot3[
                    surf, 
                    shader=flat, 
                    mesh/rows=17, mesh/cols=10,
                ]
                    table [col sep=comma, x=omega, y=gamma, z=BER]
                        {res/proximal/2d_ber_fer_dfr_gamma_omega_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}%

    \vspace{5mm}

    \begin{subfigure}{\textwidth}
        \centering
    
        \begin{tikzpicture}
            \begin{axis}[
                hide axis,
                scale only axis,
                height=0pt,
                width=0pt,
                colormap/viridis,
                colorbar horizontal,
                point meta min=-5.7,
                point meta max=-0.5,
                colorbar style={
                    title={BER},
                    width=10cm,
                    xtick={-5,-4,...,-1},
                    xticklabels={$10^{-5}$,$10^{-4}$,$10^{-3}$,$10^{-2}$,$10^{-1}$}
                }]
                \addplot [draw=none] coordinates {(0,0)};
            \end{axis}
        \end{tikzpicture} 
    \end{subfigure}%

    \caption{The \ac{BER} as a function of $\gamma$ and $\omega$ for various codes}
    \label{fig:prox:gamma_omega_multiple}
\end{figure}

\begin{figure}[H]
    \centering

    \begin{subfigure}[t]{0.48\textwidth}
        \centering

        \begin{tikzpicture}
            \begin{axis}[
                grid=both,
                xlabel={$E_b / N_0$ (dB)}, ylabel={FER},
                ymode=log,
                legend columns=1,
                legend pos=outer north east,
                ymax=1.5, ymin=8e-5,
                width=\textwidth,
                height=0.75\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_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 \ac{LDPC} code with $n=96, k=48$
            \cite[\text{96.3.965}]{mackay_enc}}
    \end{subfigure}%
    \hfill%
    \begin{subfigure}[t]{0.48\textwidth}
        \centering
        \begin{tikzpicture}
            \begin{axis}[
                grid=both,
                xlabel={$E_b / N_0$ (dB)}, 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,
                width=\textwidth,
                height=0.75\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_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}%

    \vspace{3mm}

    \begin{subfigure}[t]{0.48\textwidth}
        \centering
        \begin{tikzpicture}
            \begin{axis}[
                grid=both,
                xlabel={$E_b / N_0$ (dB)}, 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,
                width=\textwidth,
                height=0.75\textwidth,
            ]

                \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 \ac{LDPC} code with $n=204, k=102$
            \cite[\text{204.33.484}]{mackay_enc}}
    \end{subfigure}%
    \hfill%
    \begin{subfigure}[t]{0.48\textwidth}
        \centering
        \begin{tikzpicture}
            \begin{axis}[
                grid=both,
                xlabel={$E_b / N_0$ (dB)}, 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,
                width=\textwidth,
                height=0.75\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_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 \ac{LDPC} code with $n=204, k=102$
            \cite[\text{204.55.187}]{mackay_enc}}
    \end{subfigure}%

    \vspace{3mm}

    \begin{subfigure}[t]{0.48\textwidth}
        \centering
        \begin{tikzpicture}
            \begin{axis}[
                grid=both,
                xlabel={$E_b / N_0$ (dB)}, 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,
                width=\textwidth,
                height=0.75\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_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 \ac{LDPC} code with $n=408, k=204$
            \cite[\text{408.33.844}]{mackay_enc}}
    \end{subfigure}%
    \hfill%
    \begin{subfigure}[t]{0.48\textwidth}
        \centering
        \begin{tikzpicture}
            \begin{axis}[
                grid=both,
                xlabel={$E_b / N_0$ (dB)}, ylabel={FER},
                ymode=log,
                legend columns=1,
                legend pos=outer north east,
                ymax=1.5, ymin=8e-5,
                width=\textwidth,
                height=0.75\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_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{\ac{LDPC} code (progressive edge growth construction) with $n=504, k=252$
            \cite[\text{PEGReg252x504}]{mackay_enc}}
    \label{fig:prox:improved:comp:504}
    \end{subfigure}%

    \vspace{5mm}
    
    \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, 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}
    \end{subfigure}

    \caption{Comparison of improvement in decoding performance for various
        codes}
    \label{fig:prox:improved:comp} 
\end{figure}


%\chapter{\acs{LP} Decoding using \acs{ADMM} as a Proximal Algorithm}%
%\label{chapter:LD Decoding using ADMM as a Proximal Algorithm}
%
%\todo{Find out how to properly title and section appendix}
%
%%For problems of the form%
%%\begin{align*}
%%    \text{minimize}\hspace{2mm} & f\left( \boldsymbol{x} \right)
%%        + g\left( \boldsymbol{A}\boldsymbol{x} \right) \\
%%    \text{subject to}\hspace{2mm} & \boldsymbol{x} \in \mathbb{R}^n
%%,\end{align*}%
%%%
%%a version of \ac{ADMM}, \textit{linearized \ac{ADMM}}, can be expressed
%%as a proximal algorithm \cite[Sec. 4.4.2]{proximal_algorithms}:
%%%
%%\begin{align*}
%%    \boldsymbol{x} &\leftarrow \textbf{prox}_{\mu f}\left( \boldsymbol{x}
%%        - \frac{\mu}{\lambda}\boldsymbol{A}^\text{T}\left( \boldsymbol{A}\boldsymbol{x}
%%        - \boldsymbol{z} + \boldsymbol{u} \right)  \right) \\
%%    \boldsymbol{z} &\leftarrow \textbf{prox}_{\lambda g}\left( \boldsymbol{A}\boldsymbol{x}
%%        + \boldsymbol{u} \right) \\
%%    \boldsymbol{u} &\leftarrow \boldsymbol{u} + \boldsymbol{A} \boldsymbol{x} - \boldsymbol{z}
%%.\end{align*}
%
%In order to express \ac{LP} decoding using \ac{ADMM} through proximal operators,
%it can be rewritten to fit the template for \textit{linearized \ac{ADMM}} given
%in \cite[Sec. 4.4.2]{proximal_algorithms}.
%We start with the general formulation of the \ac{LP} decoding problem:%
%%
%\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{5mm} \forall j \in \mathcal{J}
%.\end{align*}
%%
%The constraints can be moved into the objective function: %
%%
%\begin{align}
%    \begin{aligned}
%        \text{minimize}\hspace{2mm} & \boldsymbol{\gamma}^\text{T}\tilde{\boldsymbol{c}}
%            + \sum_{j\in \mathcal{J}} I_{P_{d_j}}\left(
%                \boldsymbol{T}_j\tilde{\boldsymbol{c}} \right) \\
%        \text{subject to}\hspace{2mm} & \tilde{\boldsymbol{c}} \in \mathbb{R}^n,
%    \end{aligned}
%    \label{eq:app:sum_reformulated}
%\end{align}%
%%
%using the \textit{indicator functions}
%$I_{\mathcal{P}_{d_j}} : \mathbb{R}^{d_j} \rightarrow \left\{ 0, +\infty \right\},
%\hspace{3mm} j\in \mathcal{J}$, defined as%
%%
%\begin{align*}
%    I_{\mathcal{P}_{d_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*}%
%%
%Further defining
%%
%\begin{align*}
%    \boldsymbol{T} := \begin{bmatrix}
%        \boldsymbol{T}_1 \\
%        \boldsymbol{T}_2 \\
%        \vdots \\
%        \boldsymbol{T}_m
%    \end{bmatrix}
%    \hspace{5mm}\text{and}\hspace{5mm}
%    g\left( \boldsymbol{t} \right) = \sum_{j\in\mathcal{J}} I_{\mathcal{P}_{d_j}}\left(
%        \boldsymbol{B}_j \boldsymbol{t} \right)
%,\end{align*}%
%%
%\todo{Define $\boldsymbol{B}_j$}%
%problem (\ref{eq:app:sum_reformulated}) becomes%
%%
%\begin{align}
%    \begin{aligned}
%        \text{minimize}\hspace{2mm} & \boldsymbol{\gamma}^\text{T}\tilde{\boldsymbol{c}}
%            + g\left( \boldsymbol{T}\tilde{\boldsymbol{c}} \right) \\
%        \text{subject to}\hspace{2mm} & \tilde{\boldsymbol{c}} \in \mathbb{R}^n.
%    \end{aligned}
%    \label{eq:app:func_reformulated}
%\end{align}
%%
%\todo{Fix $\mu f$ and $\lambda g$ in the steps below}%
%In this form, it fits the template for linearized \ac{ADMM}.
%The iterative algorithm can then be expressed as%
%%
%\begin{align}
%    \begin{aligned}
%        \tilde{\boldsymbol{c}} &\leftarrow \textbf{prox}_{\mu f}\left( \tilde{\boldsymbol{c}}
%            - \frac{\mu}{\lambda}\boldsymbol{T}^\text{T}\left( \boldsymbol{T}\tilde{\boldsymbol{c}}
%            - \boldsymbol{z} + \boldsymbol{u} \right)  \right) \\
%        \boldsymbol{z} &\leftarrow \textbf{prox}_{\lambda g}\left(\boldsymbol{T}\tilde{\boldsymbol{c}}
%            + \boldsymbol{u} \right) \\
%        \boldsymbol{u} &\leftarrow \boldsymbol{u} + \boldsymbol{T} \tilde{\boldsymbol{c}}
%            - \boldsymbol{z}.
%    \end{aligned}
%    \label{eq:app:admm_prox}
%\end{align}
%%
%
%Using the definition of the proximal operator, the $\tilde{\boldsymbol{c}}$ update step
%can be rewritten to match the definition given in section \ref{sec:lp:Decoding Algorithm}:%
%%
%\begin{align*}
%    \tilde{\boldsymbol{c}} &\leftarrow \textbf{prox}_{\mu f}\left( \tilde{\boldsymbol{c}}
%        - \frac{\mu}{\lambda}\boldsymbol{T}^\text{T}\left( \boldsymbol{T}\tilde{\boldsymbol{c}}
%        - \boldsymbol{z} + \boldsymbol{u} \right)  \right) \\
%    &= \argmin_{\tilde{\boldsymbol{c}}}\left( \boldsymbol{\gamma}^\text{T}\tilde{\boldsymbol{c}}
%        - \frac{\mu}{2} \left\Vert \boldsymbol{T}^\text{T}
%            \left( \boldsymbol{T}\tilde{\boldsymbol{c}}
%        - \boldsymbol{z} + \boldsymbol{u} \right)  \right\Vert_2^2 \right) \\
%    &\overset{\text{(a)}}{=} \argmin_{\tilde{\boldsymbol{c}}}\left( \boldsymbol{\gamma}^\text{T}
%        \tilde{\boldsymbol{c}}
%        - \frac{\mu}{2} \left\Vert \boldsymbol{T}\tilde{\boldsymbol{c}}
%        - \boldsymbol{z} + \boldsymbol{u} \right\Vert_2^2 \right) \\
%    &= \argmin_{\tilde{\boldsymbol{c}}}\left( \boldsymbol{\gamma}^\text{T}\tilde{\boldsymbol{c}}
%    - \frac{\mu}{2} \left\Vert \begin{bmatrix}
%        \boldsymbol{T}_1 \\
%        \boldsymbol{T}_2 \\
%            \vdots \\
%            \boldsymbol{T}_m
%        \end{bmatrix}
%        \tilde{\boldsymbol{c}}
%        - \begin{bmatrix}
%            \boldsymbol{z}_1 \\
%            \boldsymbol{z}_2 \\
%            \vdots \\
%            \boldsymbol{z}_m
%        \end{bmatrix}
%        + \begin{bmatrix}
%            \boldsymbol{u}_1 \\
%            \boldsymbol{u}_2 \\
%            \vdots \\
%            \boldsymbol{u}_m
%    \end{bmatrix} \right\Vert_2^2 \right),
%        \hspace{5mm}\boldsymbol{z}_j,\boldsymbol{u}_j \in \mathbb{F}_2^{d_j},
%            \hspace{2mm} j\in\mathcal{J}\\
%    &= \argmin_{\tilde{\boldsymbol{c}}} \left( \boldsymbol{\gamma}^\text{T} \tilde{\boldsymbol{c}}
%        - \frac{\mu}{2} \sum_{j \in J} \left\Vert \boldsymbol{T}_j \tilde{\boldsymbol{c}}
%        - \boldsymbol{z}_j + \boldsymbol{u}_j \right\Vert_2^2 \right)
%.\end{align*}
%%
%Step (a) can be justified by observing that multiplication with $\boldsymbol{T}^\text{T}$
%only reorders components, leaving their values unchanged.
%Similarly to the $\boldsymbol{c}$ update, the $\boldsymbol{z}$ update step can be rewritten.
%Since $g\left( \cdot \right)$ is separable, so is its proximal operator
%\cite[Sec. 2.1]{proximal_algorithms}. The $\boldsymbol{z}$ update step can then
%be expressed as a number of smaller steps:%
%%
%\begin{gather*}
%    \boldsymbol{z} \leftarrow \textbf{prox}_{\lambda g} \left(\boldsymbol{T}\tilde{\boldsymbol{c}}
%    + \boldsymbol{u} \right) \\[0.5em]
%    \iff \\[0.5em]
%    \begin{alignedat}{3}
%        \boldsymbol{z}_j &\leftarrow \textbf{prox}_{\lambda I_{\mathcal{P}_{d_j}}}\left(
%            \boldsymbol{T}_j \tilde{\boldsymbol{c}} + \boldsymbol{u}_j \right),
%            \hspace{5mm} && \forall j\in\mathcal{J} \\
%        & \overset{\text{(b)}}{=} \Pi_{\mathcal{P}_{d_j}}\left( \boldsymbol{T}_j
%            \tilde{\boldsymbol{c}}
%            + \boldsymbol{u}_j \right), \hspace{5mm} && \forall j\in\mathcal{J}
%    ,\end{alignedat}
%\end{gather*}
%%
%where (b) results from the fact that appying the proximal operator on the
%indicator function of a convex set amounts to a projection onto the set
%\cite[Sec. 1.2]{proximal_algorithms}.
