Compare commits

14 Commits

11 changed files with 198 additions and 342 deletions

3
.gitmodules vendored Normal file
View File

@@ -0,0 +1,3 @@
[submodule "lib/latex-common"]
path = lib/latex-common
url = ssh://git@git.mercurial-manifold.eu:2224/an.tsouchlos/latex-common.git

View File

@@ -1,2 +1,3 @@
$pdflatex="pdflatex -shell-escape -interaction=nonstopmode -synctex=1 %O %S"; $pdflatex="pdflatex -shell-escape -interaction=nonstopmode -synctex=1 %O %S";
$out_dir = 'build'; $out_dir = 'build';
$pdf_mode = 1;

11
Makefile Normal file
View File

@@ -0,0 +1,11 @@
all: build_folder letter.pdf
build_folder:
mkdir -p build/build
letter.pdf: letter.tex
latexmk -pdf letter.tex
clean:
rm -rf build

View File

@@ -1,2 +1,28 @@
# ba-letter # ba-letter
Repository containing latex source for the Bachelor's Thesis paper.
After cloning, make sure to initialize the submodules containing the dependencies:
```bash
$ git submodule update --init
```
## Build
### Build on host
```bash
$ make
```
### Build using docker
1. Build docker image
```bash
$ docker build -f dockerfiles/Dockerfile.alpine . -t ba-letter
```
2. Build examples
```bash
$ docker run --rm -v $PWD:$PWD -w $PWD -u `id -u`:`id -g` ba-letter make
```

View File

@@ -1,260 +0,0 @@
% Author: Andreas Tsouchlos
%
% Collection of useful commands and definitions
%
% ||====================================================================||
% || WARNING ||
% ||====================================================================||
% || ||
% || The following packages have to be included before using this file: ||
% || amsmath ||
% || pgfplots ||
% || caption ||
% || listings ||
% ||====================================================================||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Math Symbols %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\DeclareMathOperator*{\argmin}{\arg\!\min}
\DeclareMathOperator*{\argmax}{\arg\!\max}
\DeclareMathOperator\sign{sign}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Graphics & Plotting %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Filters for Pgfplots
% Source: https://tex.stackexchange.com/a/58563 (modified)
%
\pgfplotsset{
discard if/.style 2 args={
x filter/.append code={
\edef\tempa{\thisrow{#1}}
\edef\tempb{#2}
\ifx\tempa\tempb
\def\pgfmathresult{inf}
\fi
}
},
discard if not/.style 2 args={
x filter/.append code={
\edef\tempa{\thisrow{#1}}
\edef\tempb{#2}
\ifx\tempa\tempb
\else
\def\pgfmathresult{inf}
\fi
}
},
discard if gt/.style 2 args={
x filter/.append code={
\edef\tempa{\thisrow{#1}}
\edef\tempb{#2}
\ifdim\tempa pt > \tempb pt
\def\pgfmathresult{inf}
\fi
}
},
discard if lt/.style 2 args={
x filter/.append code={
\edef\tempa{\thisrow{#1}}
\edef\tempb{#2}
\ifdim\tempa pt < \tempb pt
\def\pgfmathresult{inf}
\fi
}
}
}
%
% Styles
%
\pgfplotsset{
fancy marks/.style={
% TODO
}
}
%
% Colors
%
\definecolor{kit-green100}{rgb}{0,.59,.51}
\definecolor{kit-green70}{rgb}{.3,.71,.65}
\definecolor{kit-green50}{rgb}{.50,.79,.75}
\definecolor{kit-green30}{rgb}{.69,.87,.85}
\definecolor{kit-green15}{rgb}{.85,.93,.93}
\definecolor{KITgreen}{rgb}{0,.59,.51}
\definecolor{KITpalegreen}{RGB}{130,190,60}
\colorlet{kit-maigreen100}{KITpalegreen}
\colorlet{kit-maigreen70}{KITpalegreen!70}
\colorlet{kit-maigreen50}{KITpalegreen!50}
\colorlet{kit-maigreen30}{KITpalegreen!30}
\colorlet{kit-maigreen15}{KITpalegreen!15}
\definecolor{KITblue}{rgb}{.27,.39,.66}
\definecolor{kit-blue100}{rgb}{.27,.39,.67}
\definecolor{kit-blue70}{rgb}{.49,.57,.76}
\definecolor{kit-blue50}{rgb}{.64,.69,.83}
\definecolor{kit-blue30}{rgb}{.78,.82,.9}
\definecolor{kit-blue15}{rgb}{.89,.91,.95}
\definecolor{KITyellow}{rgb}{.98,.89,0}
\definecolor{kit-yellow100}{cmyk}{0,.05,1,0}
\definecolor{kit-yellow70}{cmyk}{0,.035,.7,0}
\definecolor{kit-yellow50}{cmyk}{0,.025,.5,0}
\definecolor{kit-yellow30}{cmyk}{0,.015,.3,0}
\definecolor{kit-yellow15}{cmyk}{0,.0075,.15,0}
\definecolor{KITorange}{rgb}{.87,.60,.10}
\definecolor{kit-orange100}{cmyk}{0,.45,1,0}
\definecolor{kit-orange70}{cmyk}{0,.315,.7,0}
\definecolor{kit-orange50}{cmyk}{0,.225,.5,0}
\definecolor{kit-orange30}{cmyk}{0,.135,.3,0}
\definecolor{kit-orange15}{cmyk}{0,.0675,.15,0}
\definecolor{KITred}{rgb}{.63,.13,.13}
\definecolor{kit-red100}{cmyk}{.25,1,1,0}
\definecolor{kit-red70}{cmyk}{.175,.7,.7,0}
\definecolor{kit-red50}{cmyk}{.125,.5,.5,0}
\definecolor{kit-red30}{cmyk}{.075,.3,.3,0}
\definecolor{kit-red15}{cmyk}{.0375,.15,.15,0}
\definecolor{KITpurple}{RGB}{160,0,120}
\colorlet{kit-purple100}{KITpurple}
\colorlet{kit-purple70}{KITpurple!70}
\colorlet{kit-purple50}{KITpurple!50}
\colorlet{kit-purple30}{KITpurple!30}
\colorlet{kit-purple15}{KITpurple!15}
\definecolor{KITcyanblue}{RGB}{80,170,230}
\colorlet{kit-cyanblue100}{KITcyanblue}
\colorlet{kit-cyanblue70}{KITcyanblue!70}
\colorlet{kit-cyanblue50}{KITcyanblue!50}
\colorlet{kit-cyanblue30}{KITcyanblue!30}
\colorlet{kit-cyanblue15}{KITcyanblue!15}
%
% Color Schemes
%
% Define colormaps
\pgfplotsset{
colormap={mako}{
rgb=(0.18195582, 0.11955283, 0.23136943)
rgb=(0.25307401, 0.23772973, 0.48316271)
rgb=(0.21607792, 0.39736958, 0.61948028)
rgb=(0.20344718, 0.56074869, 0.65649508)
rgb=(0.25187832, 0.71827158, 0.67872193)
rgb=(0.54578602, 0.8544913, 0.69848331)
},
colormap={rocket}{
rgb=(0.20973515, 0.09747934, 0.24238489)
rgb=(0.43860848, 0.12177004, 0.34119475)
rgb=(0.67824099, 0.09192342, 0.3504148)
rgb=(0.8833417, 0.19830556, 0.26014181)
rgb=(0.95381595, 0.46373781, 0.31769923)
rgb=(0.96516917, 0.70776351, 0.5606593)
},
colormap={cividis}{
rgb=(0.130669, 0.231458, 0.43284)
rgb=(0.298421, 0.332247, 0.423973)
rgb=(0.42512, 0.431334, 0.447692)
rgb=(0.555393, 0.537807, 0.471147)
rgb=(0.695985, 0.648334, 0.440072)
rgb=(0.849223, 0.771947, 0.359729)
},
colormap={cel}{
color=(KITred!90!black);
color=(kit-blue100);
color=(kit-green70);
color=(kit-yellow70!80!kit-orange70);
},
}
% Define cycle lists
\pgfplotscreateplotcyclelist{mako}{%
[samples of colormap={4} of mako]%
}
\pgfplotscreateplotcyclelist{rocket}{%
[samples of colormap={4} of rocket]%
}
\pgfplotscreateplotcyclelist{cividis}{%
[samples of colormap={4} of cividis]%
}
\pgfplotscreateplotcyclelist{viridis}{%
[samples of colormap={4} of viridis]%
}
\pgfplotscreateplotcyclelist{cel}{%
[samples of colormap={4} of cel]%
}
% Define individual colors
\makeatletter
\def\extractcolormapcolor#1#2{%
\expandafter\pgfplotscolormapaccess\expandafter[\pgfplotspointmetatransformedrange]%
[1.0]%
{#2}%
{\pgfkeysvalueof{/pgfplots/colormap name}}%
\def\pgfplots@loc@TMPb{\pgfutil@definecolor{#1}{\csname pgfpl@cm@\pgfkeysvalueof{/pgfplots/colormap name}@colspace\endcsname}}%
\expandafter\pgfplots@loc@TMPb\expandafter{\pgfmathresult}%
}%
\def\getcolorbyvalue#1{
\csname pgfpl@cm@\pgfkeysvalueof{/pgfplots/colormap name}@colspace\endcsname
}
\makeatother
\def\setschemecolors{
\extractcolormapcolor{scol0}{0}
\extractcolormapcolor{scol1}{333}
\extractcolormapcolor{scol2}{666}
\extractcolormapcolor{scol3}{1000}
}
% Define color schemes
\pgfplotsset{
/pgfplots/colorscheme/mako/.style={
colormap name={mako},
cycle list name={mako},
/utils/exec={\setschemecolors},
},
/pgfplots/colorscheme/rocket/.style={
colormap name={rocket},
cycle list name={rocket},
/utils/exec={\setschemecolors},
},
/pgfplots/colorscheme/cividis/.style={
colormap name={cividis},
cycle list name={cividis},
/utils/exec={\setschemecolors},
},
/pgfplots/colorscheme/viridis/.style={
colormap name={viridis},
cycle list name={viridis},
/utils/exec={\setschemecolors},
},
/pgfplots/colorscheme/cel/.style={
colormap name={cel},
cycle list name={cel},
/utils/exec={\setschemecolors},
},
}

View File

@@ -0,0 +1,7 @@
FROM alpine:3.19
RUN apk update && apk upgrade
RUN apk add make texlive texmf-dist-pictures
RUN apk add texmf-dist-publishers
RUN apk add texmf-dist-science
RUN apk add texmf-dist-fontsextra

View File

@@ -0,0 +1,9 @@
FROM archlinux:latest
RUN pacman-key --init
RUN pacman-key --populate archlinux
RUN pacman -Sy archlinux-keyring --noconfirm && pacman -Su --noconfirm
RUN pacman -Syu --noconfirm
RUN pacman -S make perl texlive texlive-binextra texlive-pictures --noconfirm
RUN pacman -S texlive-publishers texlive-mathscience texlive-fontsextra --noconfirm

View File

@@ -0,0 +1,7 @@
FROM ubuntu:22.04
ARG DEBIAN_FRONTEND=noninteractive
RUN apt update -y && apt upgrade -y
RUN apt install make texlive latexmk texlive-pictures -y
RUN apt install make texlive-publishers texlive-science texlive-fonts-extra -y

View File

@@ -1,32 +1,27 @@
\documentclass[journal]{IEEEtran} \documentclass[journal]{IEEEtran}
\usepackage{amsmath,amsfonts} \usepackage{amsmath,amsfonts}
\usepackage{float}
\usepackage{algorithmic} \usepackage{algorithmic}
\usepackage{algorithm} \usepackage{algorithm}
\usepackage{array}
\usepackage[caption=false,font=normalsize,labelfont=sf,textfont=sf]{subfig}
\usepackage{textcomp}
\usepackage{stfloats}
\usepackage{url}
\usepackage{verbatim}
\usepackage{graphicx}
\usepackage{cite}
\usepackage[dvipsnames]{xcolor}
\usepackage{float}
\usepackage{tikz}
\usepackage{pgfplots}
\usetikzlibrary{spy, arrows.meta,arrows}
\pgfplotsset{compat=newest}
\usepgfplotslibrary{colormaps}
\usepackage{listings}
\usepackage{lipsum}
\usepackage{dsfont}
\usepackage{ulem}
\usepackage{siunitx} \usepackage{siunitx}
\usepackage{dsfont}
\usepackage{tikz}
\usetikzlibrary{spy, arrows.meta,arrows}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\hyphenation{op-tical net-works semi-conduc-tor IEEE-Xplore} \hyphenation{op-tical net-works semi-conduc-tor IEEE-Xplore}
\newif\ifoverleaf
%\overleaftrue
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Inputs & Global Options % Inputs & Global Options
@@ -34,10 +29,23 @@
% %
\ifoverleaf
\input{common.tex} \input{common.tex}
\else
\usetikzlibrary{external}
\tikzexternalize[prefix=build/]
\input{lib/latex-common/common.tex}
\fi
\pgfplotsset{colorscheme/cel} \pgfplotsset{colorscheme/cel}
% TODO
\pgfplotsset{fancy marks/.style={}}
\newcommand{\figwidth}{\columnwidth}
\newcommand{\figheight}{0.75\columnwidth}
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -257,8 +265,8 @@ function \cite{proximal_paper}
The objective function is minimized using the proximal gradient method, which The objective function is minimized using the proximal gradient method, which
amounts to iteratively performing two gradient-descent steps \cite{proximal_paper} amounts to iteratively performing two gradient-descent steps \cite{proximal_paper}
with the given objective function and considering AWGN channels. with the given objective function and considering AWGN channels.
To this end, two helper variables, $\boldsymbol{r}$ and $\boldsymbol{s}$, are introduced, To this end, two helper variables, $\boldsymbol{r}$ and $\boldsymbol{s}$, are
describing the result of each of the two steps: introduced, describing the result of each of the two steps:
% %
\begin{alignat}{3} \begin{alignat}{3}
\boldsymbol{r} &\leftarrow \boldsymbol{s} \boldsymbol{r} &\leftarrow \boldsymbol{s}
@@ -277,7 +285,8 @@ stages of the decoding process.
As the gradient of the code-constraint polynomial can attain very large values As the gradient of the code-constraint polynomial can attain very large values
in some cases, an additional step is introduced to ensure numerical stability: in some cases, an additional step is introduced to ensure numerical stability:
every current estimate $\boldsymbol{s}$ is projected onto $\left[-\eta, \eta\right]^n$ by a projection every current estimate $\boldsymbol{s}$ is projected onto
$\left[-\eta, \eta\right]^n$ by a projection
$\Pi_\eta : \mathbb{R}^n \rightarrow \left[-\eta, \eta\right]^n$, where $\eta$ $\Pi_\eta : \mathbb{R}^n \rightarrow \left[-\eta, \eta\right]^n$, where $\eta$
is a positive constant slightly larger than one, e.g., $\eta = 1.5$. is a positive constant slightly larger than one, e.g., $\eta = 1.5$.
The resulting decoding process as described in \cite{proximal_paper} is The resulting decoding process as described in \cite{proximal_paper} is
@@ -329,7 +338,10 @@ explanation for this effect might be that during the decoding process convergenc
on the final codeword is often not achieved, although the estimate is moving in on the final codeword is often not achieved, although the estimate is moving in
the right general direction. the right general direction.
This would suggest that most frame errors occur due to only a few incorrectly This would suggest that most frame errors occur due to only a few incorrectly
decoded bits. decoded bits.%
%
\begin{figure}[ht]
\centering
\pgfplotsset{ \pgfplotsset{
FERPlot/.style={ FERPlot/.style={
@@ -349,32 +361,31 @@ DFRPlot/.style={
fancy marks, fancy marks,
}} }}
\begin{figure}[h]
\centering
\begin{tikzpicture} \begin{tikzpicture}
\begin{axis}[ \begin{axis}[
grid=both, grid=both,
xlabel={$E_\text{b} / N_0$ (dB)}, ylabel={}, xlabel={$E_\text{b} / N_0$ (dB)}, ylabel={},
ymode=log, ymode=log,
ymax=1.5, ymin=2e-7, xmin=1, xmax=8,
width=0.45\textwidth, ymax=1, ymin=1e-6,
height=0.3375\textwidth, % ytick={1e-0, 1e-2, 1e-4, 1e-6},
width=\figwidth,
height=\figheight,
legend pos = south west, legend pos = south west,
] ]
\addplot+[FERPlot] \addplot+[FERPlot, scol0]
table [x=SNR, y=FER, col sep=comma, table [x=SNR, y=FER, col sep=comma,
discard if not={gamma}{0.05}, discard if not={gamma}{0.05},
discard if gt={SNR}{9}] discard if gt={SNR}{9}]
{res/proximal_ber_fer_dfr_20433484.csv}; {res/proximal_ber_fer_dfr_20433484.csv};
\addlegendentry{FER} \addlegendentry{FER}
\addplot+[DFRPlot] \addplot+[DFRPlot, scol2]
table [x=SNR, y=DFR, col sep=comma, table [x=SNR, y=DFR, col sep=comma,
discard if not={gamma}{0.05}, discard if not={gamma}{0.05},
discard if gt={SNR}{9}] discard if gt={SNR}{9}]
{res/proximal_ber_fer_dfr_20433484.csv}; {res/proximal_ber_fer_dfr_20433484.csv};
\addlegendentry{DFR} \addlegendentry{DFR}
\addplot+[BERPlot] \addplot+[BERPlot, scol1]
table [x=SNR, y=BER, col sep=comma, table [x=SNR, y=BER, col sep=comma,
discard if not={gamma}{0.05}, discard if not={gamma}{0.05},
discard if gt={SNR}{7.5}] discard if gt={SNR}{7.5}]
@@ -420,8 +431,8 @@ optimization process.%
xlabel={$\tilde{x}_1$}, xlabel={$\tilde{x}_1$},
ylabel={$\tilde{x}_2$}, ylabel={$\tilde{x}_2$},
y label style={at={(axis description cs:-0.06,0.5)},anchor=south}, y label style={at={(axis description cs:-0.06,0.5)},anchor=south},
width=0.45\textwidth, width=\figwidth,
height=0.3375\textwidth, height=\figheight,
grid=major, grid style={dotted}, grid=major, grid style={dotted},
view={0}{90}] view={0}{90}]
\addplot3[point meta=\thisrow{grad_norm}, \addplot3[point meta=\thisrow{grad_norm},
@@ -442,8 +453,8 @@ optimization process.%
table[col sep=comma] {res/2d_grad_L.csv}; table[col sep=comma] {res/2d_grad_L.csv};
\end{axis} \end{axis}
\begin{axis}[hide axis, \begin{axis}[hide axis,
width=0.45\textwidth, width=\figwidth,
height=0.3375\textwidth, height=\figheight,
xmin=10, xmax=50, xmin=10, xmax=50,
ymin=0, ymax=0.4, ymin=0, ymax=0.4,
legend style={draw=white!15!black, legend style={draw=white!15!black,
@@ -463,8 +474,8 @@ optimization process.%
\begin{tikzpicture} \begin{tikzpicture}
\begin{axis}[xmin = -1.25, xmax=1.25, \begin{axis}[xmin = -1.25, xmax=1.25,
ymin = -1.25, ymax=1.25, ymin = -1.25, ymax=1.25,
width=0.45\textwidth, width=\figwidth,
height=0.3375\textwidth, height=\figheight,
xlabel={$\tilde{x}_1$}, xlabel={$\tilde{x}_1$},
ylabel={$\tilde{x}_2$}, ylabel={$\tilde{x}_2$},
y label style={at={(axis description cs:-0.06,0.5)},anchor=south}, y label style={at={(axis description cs:-0.06,0.5)},anchor=south},
@@ -488,8 +499,8 @@ optimization process.%
table[col sep=comma] {res/2d_grad_h.csv}; table[col sep=comma] {res/2d_grad_h.csv};
\end{axis} \end{axis}
\begin{axis}[hide axis, \begin{axis}[hide axis,
width=0.45\textwidth, width=\figwidth,
height=0.3375\textwidth, height=\figheight,
xmin=10, xmax=50, xmin=10, xmax=50,
ymin=0, ymax=0.4, ymin=0, ymax=0.4,
legend style={draw=white!15!black, legend style={draw=white!15!black,
@@ -517,8 +528,8 @@ Two qualities may be observed.
First, the average values of the two gradients are equal, except for their sign, First, the average values of the two gradients are equal, except for their sign,
leading to the aforementioned oscillation. leading to the aforementioned oscillation.
Second, the gradient of the code constraint polynomial itself starts to Second, the gradient of the code constraint polynomial itself starts to
oscillate after a certain number of iterations. oscillate after a certain number of iterations.%
%
\begin{figure}[ht] \begin{figure}[ht]
\centering \centering
@@ -526,10 +537,13 @@ oscillate after a certain number of iterations.
\begin{axis}[ \begin{axis}[
grid=both, grid=both,
xlabel={Iterations}, xlabel={Iterations},
width=0.45\textwidth, width=\figwidth,
height=0.3375\textwidth, height=\figheight,
xtick={0, 100, ..., 400}, xtick={0, 100, ..., 400},
xticklabels={0, 50, ..., 200}, xticklabels={0, 50, ..., 200},
xmin=0, xmax=300,
ymin=-4, ymax=2,
ytick={-4,-3,...,2},
legend pos = south east, legend pos = south east,
] ]
\addplot+ [mark=none, line width=1] \addplot+ [mark=none, line width=1]
@@ -565,7 +579,8 @@ oscillate after a certain number of iterations.
Considering the magnitude of oscillation of the gradient of the code constraint Considering the magnitude of oscillation of the gradient of the code constraint
polynomial, some interesting behavior may be observed. polynomial, some interesting behavior may be observed.
Figure \ref{fig:p_error} shows the probability that a component of the estimate Figure \ref{fig:p_error} shows the probability that a component of the estimate
is wrong, determined through a Monte Carlo simulation, when the components of $\boldsymbol{c}$ are ordered from smallest to largest oscillation of is wrong, determined through a Monte Carlo simulation, when the components of
$\boldsymbol{c}$ are ordered from smallest to largest oscillation of
$\left(\nabla h\right)_i$. $\left(\nabla h\right)_i$.
The lower the magnitude of the oscillation, the higher the probability that the The lower the magnitude of the oscillation, the higher the probability that the
@@ -582,8 +597,10 @@ the probability that a given component was decoded incorrectly.%
ylabel=$P(\hat{c}_{i'} \ne c_{i'})$, ylabel=$P(\hat{c}_{i'} \ne c_{i'})$,
xlabel=$i'$, xlabel=$i'$,
ymode=log, ymode=log,
width=0.45\textwidth, ymin=1e-9,ymax=1e-5,
height=0.3375\textwidth, xmin=0,xmax=200,
width=\figwidth,
height=\figheight,
] ]
\addplot+ [scol1, mark=none, line width=1] \addplot+ [scol1, mark=none, line width=1]
table [col sep=comma, y=p_error]{res/p_error.csv}; table [col sep=comma, y=p_error]{res/p_error.csv};
@@ -651,15 +668,15 @@ generated and an ``ML-in-the-list'' step is performed.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Simulation Results \& Discussion} \section{Simulation Results \& Discussion}
Figure \ref{fig:results} shows the FER and BER resulting from applying proximal Figure \ref{fig:results} shows the FER and BER resulting from applying
decoding as presented in \cite{proximal_paper} and the improved algorithm proximal decoding as presented in \cite{proximal_paper} and the improved
presented here when applied to a $\left( 3,6 \right)$-regular LDPC code with $n=204$ and algorithm presented here when applied to a $\left( 3,6 \right)$-regular LDPC
$k=102$ \cite[204.33.484]{mackay}. code with $n=204$ and $k=102$ \cite[204.33.484]{mackay}.
The parameters chosen for the simulation are The parameters chosen for the simulation are
$\gamma = 0.05, \omega=0.05, \eta=1.5, K=200$. $\gamma = 0.05, \omega=0.05, \eta=1.5, K=200$.
Again, these parameters were chosen,% Again, these parameters were chosen,%
% %
\begin{figure}[H] \begin{figure}[ht]
\centering \centering
\begin{tikzpicture} \begin{tikzpicture}
@@ -681,13 +698,14 @@ Again, these parameters were chosen,%
grid=both, grid=both,
xlabel={$E_\text{b} / N_0$ (dB)}, xlabel={$E_\text{b} / N_0$ (dB)},
ymode=log, ymode=log,
ymax=1.5, ymin=2e-7, xmin=1, xmax=8,
width=0.45\textwidth, ymax=1, ymin=1e-6,
height=0.3375\textwidth, width=\figwidth,
height=\figheight,
legend columns=2, legend columns=2,
legend style={draw=white!15!black, legend style={draw=white!15!black,
legend cell align=left, legend cell align=left,
at={(0.5,-0.5)},anchor=south} at={(0.5,-0.44)},anchor=south}
] ]
\addplot+[ProxPlot, scol1] \addplot+[ProxPlot, scol1]
@@ -756,15 +774,19 @@ Wadayama et al. \cite{proximal_paper} is introduced for AWGN channels.
It relies on the fact that most errors observed in proximal decoding stem It relies on the fact that most errors observed in proximal decoding stem
from only a few components of the estimate being wrong. from only a few components of the estimate being wrong.
These few erroneous components can mostly be corrected by appending an These few erroneous components can mostly be corrected by appending an
additional step to the original algorithm that is only executed if the algorithm has not converged. additional step to the original algorithm that is only executed if the
algorithm has not converged.
A gain of up to $\sim\SI{1}{dB}$ can be observed, depending on the code, A gain of up to $\sim\SI{1}{dB}$ can be observed, depending on the code,
the parameters considered, and the SNR. the parameters considered, and the SNR.
While this work serves to introduce an approach to improve proximal decoding %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
by appending an ``ML-in-the-list'' step, the method used to detect the most \section{Acknowledgements}
probably wrong components of the estimate is based mainly on empirical
observation and a more mathematically rigorous foundation for determining these This work has received funding in part from the European Research Council
components could be beneficial. (ERC) under the European Unions Horizon 2020 research and innovation
programme (grant agreement No. 101001899) and in part from the German Federal
Ministry of Education and Research (BMBF) within the project Open6GHub
(grant agreement 16KISK010).
% %

1
lib/latex-common Submodule

Submodule lib/latex-common added at bded242752

29
localSettings.yaml Normal file
View File

@@ -0,0 +1,29 @@
indentPreamble: 1
defaultIndent: ' '
maxNumberOfBackUps: 9
modifyLineBreaks:
preserveBlankLines: 1
condenseMultipleBlankLinesInto: 0
oneSentencePerLine:
manipulateSentences: 1
removeSentenceLineBreaks: 0
sentencesFollow:
par: 1
blankLine: 1
fullStop: 1
exclamationMark: 1
questionMark: 1
rightBrace: 1
commentOnPreviousLine: 1
other: 0
sentencesBeginWith:
A-Z: 1
a-z: 0
other: 0
sentencesEndWith:
basicFullStop: 0
betterFullStop: 1
exclamationMark: 1
questionMark: 1
other: '(?:\.\)(?!\h*[a-z]))|(?:(?<!(?:(?:e\.g)|(?:i\.e)|(?:etc))))\.(?!(?:[a-z]|[A-Z]|\-|\,|\.|[0-9]))'