\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 performed $K$ 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$}, 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$}, 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$}, 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$}, 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$}, 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$}, 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}.