ba-thesis/latex/thesis/chapters/appendix.tex

706 lines
33 KiB
TeX

\appendix
\chapter{A Comparison of the Behaviour of Various Codes}
\begin{figure}[H]
\centering
\begin{subfigure}[c]{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}[c]{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}
\begin{subfigure}[c]{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=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 \ac{LDPC} code with $n=204, k=102$
\cite[\text{204.33.484}]{mackay_enc}}
\end{subfigure}%
\hfill
\begin{subfigure}[c]{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}%
\begin{subfigure}[c]{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}[c]{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{1cm}
\begin{subfigure}[c]{\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{BER for $\omega = 0.05, K=100$ (different codes)}
\label{fig:prox:results_3d_multiple}
\end{figure}
\begin{figure}[H]
\centering
\begin{subfigure}[c]{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}[c]{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}%
\begin{subfigure}[c]{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}[c]{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}%
\begin{subfigure}[c]{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}[c]{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{1cm}
\begin{subfigure}[c]{\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}.