Added heatmaps showing relationship between gamma and omega
This commit is contained in:
@@ -1,11 +1,11 @@
|
||||
\appendix
|
||||
|
||||
\chapter{A Comparison of the Behaviour of Various Codes}
|
||||
\chapter{A Comparison of the Behaviour of Proximal Decoding for Various Codes}
|
||||
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
|
||||
\begin{subfigure}[c]{0.48\textwidth}
|
||||
\begin{subfigure}[t]{0.48\textwidth}
|
||||
\centering
|
||||
\begin{tikzpicture}
|
||||
\begin{axis}[view={75}{30},
|
||||
@@ -38,7 +38,7 @@
|
||||
\cite[\text{96.3.965}]{mackay_enc}}
|
||||
\end{subfigure}%
|
||||
\hfill
|
||||
\begin{subfigure}[c]{0.48\textwidth}
|
||||
\begin{subfigure}[t]{0.48\textwidth}
|
||||
\centering
|
||||
\begin{tikzpicture}
|
||||
\begin{axis}[view={75}{30},
|
||||
@@ -70,7 +70,9 @@
|
||||
\caption{BCH code with $n=31, k=26$\\[2\baselineskip]}
|
||||
\end{subfigure}
|
||||
|
||||
\begin{subfigure}[c]{0.48\textwidth}
|
||||
\vspace{3mm}
|
||||
|
||||
\begin{subfigure}[t]{0.48\textwidth}
|
||||
\centering
|
||||
\begin{tikzpicture}
|
||||
\begin{axis}[view={75}{30},
|
||||
@@ -81,29 +83,29 @@
|
||||
width=\textwidth,
|
||||
height=0.75\textwidth,]
|
||||
\addplot3[surf,
|
||||
mesh/rows=17, mesh/cols=14,
|
||||
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.csv};
|
||||
{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.csv};
|
||||
{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.csv};
|
||||
{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.csv};
|
||||
{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}[c]{0.48\textwidth}
|
||||
\begin{subfigure}[t]{0.48\textwidth}
|
||||
\centering
|
||||
\begin{tikzpicture}
|
||||
\begin{axis}[view={75}{30},
|
||||
@@ -136,7 +138,9 @@
|
||||
\cite[\text{204.55.187}]{mackay_enc}}
|
||||
\end{subfigure}%
|
||||
|
||||
\begin{subfigure}[c]{0.48\textwidth}
|
||||
\vspace{3mm}
|
||||
|
||||
\begin{subfigure}[t]{0.48\textwidth}
|
||||
\centering
|
||||
\begin{tikzpicture}
|
||||
\begin{axis}[view={75}{30},
|
||||
@@ -169,7 +173,7 @@
|
||||
\cite[\text{408.33.844}]{mackay_enc}}
|
||||
\end{subfigure}%
|
||||
\hfill
|
||||
\begin{subfigure}[c]{0.48\textwidth}
|
||||
\begin{subfigure}[t]{0.48\textwidth}
|
||||
\centering
|
||||
\begin{tikzpicture}
|
||||
\begin{axis}[view={75}{30},
|
||||
@@ -202,9 +206,9 @@
|
||||
\cite[\text{PEGReg252x504}]{mackay_enc}}
|
||||
\end{subfigure}%
|
||||
|
||||
\vspace{1cm}
|
||||
\vspace{5mm}
|
||||
|
||||
\begin{subfigure}[c]{\textwidth}
|
||||
\begin{subfigure}[t]{\textwidth}
|
||||
\centering
|
||||
\begin{tikzpicture}
|
||||
\begin{axis}[hide axis,
|
||||
@@ -231,7 +235,7 @@
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
|
||||
\begin{subfigure}[c]{0.48\textwidth}
|
||||
\begin{subfigure}[t]{0.48\textwidth}
|
||||
\centering
|
||||
|
||||
\begin{tikzpicture}
|
||||
@@ -273,7 +277,7 @@
|
||||
\cite[\text{96.3.965}]{mackay_enc}}
|
||||
\end{subfigure}%
|
||||
\hfill%
|
||||
\begin{subfigure}[c]{0.48\textwidth}
|
||||
\begin{subfigure}[t]{0.48\textwidth}
|
||||
\centering
|
||||
\begin{tikzpicture}
|
||||
\begin{axis}[
|
||||
@@ -315,7 +319,9 @@
|
||||
\caption{BCH code with $n=31, k=26$\\[\baselineskip]}
|
||||
\end{subfigure}%
|
||||
|
||||
\begin{subfigure}[c]{0.48\textwidth}
|
||||
\vspace{3mm}
|
||||
|
||||
\begin{subfigure}[t]{0.48\textwidth}
|
||||
\centering
|
||||
\begin{tikzpicture}
|
||||
\begin{axis}[
|
||||
@@ -369,7 +375,7 @@
|
||||
\cite[\text{204.33.484}]{mackay_enc}}
|
||||
\end{subfigure}%
|
||||
\hfill%
|
||||
\begin{subfigure}[c]{0.48\textwidth}
|
||||
\begin{subfigure}[t]{0.48\textwidth}
|
||||
\centering
|
||||
\begin{tikzpicture}
|
||||
\begin{axis}[
|
||||
@@ -412,7 +418,9 @@
|
||||
\cite[\text{204.55.187}]{mackay_enc}}
|
||||
\end{subfigure}%
|
||||
|
||||
\begin{subfigure}[c]{0.48\textwidth}
|
||||
\vspace{3mm}
|
||||
|
||||
\begin{subfigure}[t]{0.48\textwidth}
|
||||
\centering
|
||||
\begin{tikzpicture}
|
||||
\begin{axis}[
|
||||
@@ -455,7 +463,7 @@
|
||||
\cite[\text{408.33.844}]{mackay_enc}}
|
||||
\end{subfigure}%
|
||||
\hfill%
|
||||
\begin{subfigure}[c]{0.48\textwidth}
|
||||
\begin{subfigure}[t]{0.48\textwidth}
|
||||
\centering
|
||||
\begin{tikzpicture}
|
||||
\begin{axis}[
|
||||
@@ -497,9 +505,9 @@
|
||||
\label{fig:prox:improved:comp:504}
|
||||
\end{subfigure}%
|
||||
|
||||
\vspace{1cm}
|
||||
\vspace{5mm}
|
||||
|
||||
\begin{subfigure}[c]{\textwidth}
|
||||
\begin{subfigure}[t]{\textwidth}
|
||||
\centering
|
||||
|
||||
\begin{tikzpicture}
|
||||
@@ -534,172 +542,401 @@
|
||||
\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}
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
|
||||
\begin{subfigure}[t]{0.48\textwidth}
|
||||
\centering
|
||||
|
||||
\todo{Find out how to properly title and section appendix}
|
||||
\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
|
||||
|
||||
%For problems of the form%
|
||||
\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{}
|
||||
\label{fig:prox:gamma_omega_multiple}
|
||||
\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} & f\left( \boldsymbol{x} \right)
|
||||
% + g\left( \boldsymbol{A}\boldsymbol{x} \right) \\
|
||||
% \text{subject to}\hspace{2mm} & \boldsymbol{x} \in \mathbb{R}^n
|
||||
% \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*}%
|
||||
%%
|
||||
%a version of \ac{ADMM}, \textit{linearized \ac{ADMM}}, can be expressed
|
||||
%as a proximal algorithm \cite[Sec. 4.4.2]{proximal_algorithms}:
|
||||
%\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*}
|
||||
% \boldsymbol{x} &\leftarrow \textbf{prox}_{\mu f}\left( \boldsymbol{x}
|
||||
% - \frac{\mu}{\lambda}\boldsymbol{A}^\text{T}\left( \boldsymbol{A}\boldsymbol{x}
|
||||
% \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{A}\boldsymbol{x}
|
||||
% + \boldsymbol{u} \right) \\
|
||||
% \boldsymbol{u} &\leftarrow \boldsymbol{u} + \boldsymbol{A} \boldsymbol{x} - \boldsymbol{z}
|
||||
% &= \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*}
|
||||
|
||||
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}.
|
||||
%%
|
||||
%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}.
|
||||
|
||||
@@ -260,7 +260,7 @@ It was subsequently reimplemented in C++ using the Eigen%
|
||||
linear algebra library to achieve higher performance.
|
||||
The focus has been set on a fast implementation, sometimes at the expense of
|
||||
memory usage, somewhat limiting the size of the codes the implemenation can be
|
||||
used with \todo{Is this a appropriate for a bachelor's thesis?}.
|
||||
used with \todo{Is this sentence appropriate for a bachelor's thesis?}.
|
||||
The evaluation of the simulation results has been wholly realized in Python.
|
||||
|
||||
The gradient of the code-constraint polynomial \cite[Sec. 2.3]{proximal_paper}
|
||||
@@ -498,16 +498,60 @@ The parameter $\gamma$ describes the step-size for the optimization step
|
||||
dealing with the code-constraint polynomial;
|
||||
the parameter $\omega$ describes the step-size for the step dealing with the
|
||||
negative-log likelihood.
|
||||
The relationship between $\omega$ and $\gamma$ is studied in figure
|
||||
\ref{TODO}.
|
||||
The relationship between $\omega$ and $\gamma$ is portrayed in figure
|
||||
\ref{fig:prox:gamma_omega}.
|
||||
The \ac{SNR} is kept constant at $\SI{4}{dB}$.
|
||||
Similar behaviour to $\gamma$ is exhibited: the \ac{BER} is minimized when
|
||||
keeping the value within certain bounds, without displaying a clear
|
||||
optimum.
|
||||
It is noteworthy that the decoder seems to achieve the best performance for
|
||||
similar values of the two step sizes.
|
||||
Again, this consideration applies to a multitude of different codes, depicted
|
||||
in figure \ref{TODO}.
|
||||
Again, this consideration applies to a multitude of different codes, as
|
||||
depicted in figure \ref{fig:prox:gamma_omega_multiple}.
|
||||
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
|
||||
\begin{tikzpicture}
|
||||
\begin{axis}[
|
||||
colormap/viridis,
|
||||
colorbar,
|
||||
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=0.6\textwidth,
|
||||
height=0.45\textwidth,
|
||||
point meta min=-5.7,
|
||||
point meta max=-0.5,
|
||||
colorbar style={
|
||||
title={BER},
|
||||
ytick={-5,-4,...,-1},
|
||||
yticklabels={$10^{-5}$,$10^{-4}$,$10^{-3}$,$10^{-2}$,$10^{-1}$}
|
||||
}]
|
||||
]
|
||||
\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{The \ac{BER} as a function of the two step sizes\protect\footnotemark{}}
|
||||
\label{fig:prox:gamma_omega}
|
||||
\end{figure}%
|
||||
%
|
||||
\footnotetext{(3,6) regular \ac{LDPC} code with n = 204, k = 102
|
||||
\cite[\text{204.33.484}]{mackay_enc}; $SNR=\SI{4}{dB}, K=100, \eta=1.5$
|
||||
}%
|
||||
%
|
||||
|
||||
|
||||
To better understand how to determine the optimal value for the parameter $K$,
|
||||
the average error is inspected.
|
||||
|
||||
Reference in New Issue
Block a user