Compare commits
10 Commits
5e735df104
...
feature/in
| Author | SHA1 | Date | |
|---|---|---|---|
| 81d8d5b36a | |||
| f408b139b7 | |||
| 28a914b127 | |||
| a1e051d980 | |||
| fdb62dae3e | |||
| bbe2ce0442 | |||
| 0366f7c2e3 | |||
| fa22effa0d | |||
| 7339b1d06f | |||
| 2e646cc2c9 |
2
Makefile
2
Makefile
@@ -6,6 +6,6 @@ build_folder:
|
||||
letter.pdf: letter.tex
|
||||
latexmk -pdf letter.tex
|
||||
|
||||
|
||||
clean:
|
||||
rm -rf build
|
||||
|
||||
|
||||
30
README.md
30
README.md
@@ -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
|
||||
```
|
||||
|
||||
|
||||
7
dockerfiles/Dockerfile.alpine
Normal file
7
dockerfiles/Dockerfile.alpine
Normal 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
|
||||
9
dockerfiles/Dockerfile.archlinux
Normal file
9
dockerfiles/Dockerfile.archlinux
Normal 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
|
||||
7
dockerfiles/Dockerfile.ubuntu
Normal file
7
dockerfiles/Dockerfile.ubuntu
Normal 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
|
||||
166
letter.tex
166
letter.tex
@@ -1,28 +1,19 @@
|
||||
\documentclass[journal]{IEEEtran}
|
||||
|
||||
|
||||
\usepackage{amsmath,amsfonts}
|
||||
\usepackage{float}
|
||||
\usepackage{algorithmic}
|
||||
\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{dsfont}
|
||||
|
||||
\usepackage{tikz}
|
||||
\usetikzlibrary{spy, arrows.meta,arrows}
|
||||
|
||||
\usepackage{pgfplots}
|
||||
\pgfplotsset{compat=newest}
|
||||
|
||||
|
||||
\hyphenation{op-tical net-works semi-conduc-tor IEEE-Xplore}
|
||||
|
||||
@@ -52,6 +43,9 @@
|
||||
% TODO
|
||||
\pgfplotsset{fancy marks/.style={}}
|
||||
|
||||
\newcommand{\figwidth}{\columnwidth}
|
||||
\newcommand{\figheight}{0.75\columnwidth}
|
||||
|
||||
|
||||
%
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
@@ -271,8 +265,8 @@ function \cite{proximal_paper}
|
||||
The objective function is minimized using the proximal gradient method, which
|
||||
amounts to iteratively performing two gradient-descent steps \cite{proximal_paper}
|
||||
with the given objective function and considering AWGN channels.
|
||||
To this end, two helper variables, $\boldsymbol{r}$ and $\boldsymbol{s}$, are introduced,
|
||||
describing the result of each of the two steps:
|
||||
To this end, two helper variables, $\boldsymbol{r}$ and $\boldsymbol{s}$, are
|
||||
introduced, describing the result of each of the two steps:
|
||||
%
|
||||
\begin{alignat}{3}
|
||||
\boldsymbol{r} &\leftarrow \boldsymbol{s}
|
||||
@@ -291,7 +285,8 @@ stages of the decoding process.
|
||||
|
||||
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:
|
||||
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$
|
||||
is a positive constant slightly larger than one, e.g., $\eta = 1.5$.
|
||||
The resulting decoding process as described in \cite{proximal_paper} is
|
||||
@@ -343,52 +338,54 @@ 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
|
||||
the right general direction.
|
||||
This would suggest that most frame errors occur due to only a few incorrectly
|
||||
decoded bits.
|
||||
|
||||
\pgfplotsset{
|
||||
FERPlot/.style={
|
||||
line width=1pt,
|
||||
densely dashed,
|
||||
mark=triangle,
|
||||
fancy marks
|
||||
},
|
||||
BERPlot/.style={
|
||||
line width=1pt,
|
||||
mark=*,
|
||||
fancy marks,
|
||||
},
|
||||
DFRPlot/.style={
|
||||
only marks,
|
||||
mark=square*,
|
||||
fancy marks,
|
||||
}}
|
||||
|
||||
\begin{figure}[h]
|
||||
decoded bits.%
|
||||
%
|
||||
\begin{figure}[ht]
|
||||
\centering
|
||||
|
||||
\pgfplotsset{
|
||||
FERPlot/.style={
|
||||
line width=1pt,
|
||||
densely dashed,
|
||||
mark=triangle,
|
||||
fancy marks
|
||||
},
|
||||
BERPlot/.style={
|
||||
line width=1pt,
|
||||
mark=*,
|
||||
fancy marks,
|
||||
},
|
||||
DFRPlot/.style={
|
||||
only marks,
|
||||
mark=square*,
|
||||
fancy marks,
|
||||
}}
|
||||
|
||||
\begin{tikzpicture}
|
||||
\begin{axis}[
|
||||
grid=both,
|
||||
xlabel={$E_\text{b} / N_0$ (dB)}, ylabel={},
|
||||
ymode=log,
|
||||
ymax=1.5, ymin=2e-7,
|
||||
width=0.45\textwidth,
|
||||
height=0.3375\textwidth,
|
||||
xmin=1, xmax=8,
|
||||
ymax=1, ymin=1e-6,
|
||||
% ytick={1e-0, 1e-2, 1e-4, 1e-6},
|
||||
width=\figwidth,
|
||||
height=\figheight,
|
||||
legend pos = south west,
|
||||
]
|
||||
\addplot+[FERPlot]
|
||||
\addplot+[FERPlot, scol0]
|
||||
table [x=SNR, y=FER, col sep=comma,
|
||||
discard if not={gamma}{0.05},
|
||||
discard if gt={SNR}{9}]
|
||||
{res/proximal_ber_fer_dfr_20433484.csv};
|
||||
\addlegendentry{FER}
|
||||
\addplot+[DFRPlot]
|
||||
\addplot+[DFRPlot, scol2]
|
||||
table [x=SNR, y=DFR, col sep=comma,
|
||||
discard if not={gamma}{0.05},
|
||||
discard if gt={SNR}{9}]
|
||||
{res/proximal_ber_fer_dfr_20433484.csv};
|
||||
\addlegendentry{DFR}
|
||||
\addplot+[BERPlot]
|
||||
\addplot+[BERPlot, scol1]
|
||||
table [x=SNR, y=BER, col sep=comma,
|
||||
discard if not={gamma}{0.05},
|
||||
discard if gt={SNR}{7.5}]
|
||||
@@ -434,8 +431,8 @@ optimization process.%
|
||||
xlabel={$\tilde{x}_1$},
|
||||
ylabel={$\tilde{x}_2$},
|
||||
y label style={at={(axis description cs:-0.06,0.5)},anchor=south},
|
||||
width=0.45\textwidth,
|
||||
height=0.3375\textwidth,
|
||||
width=\figwidth,
|
||||
height=\figheight,
|
||||
grid=major, grid style={dotted},
|
||||
view={0}{90}]
|
||||
\addplot3[point meta=\thisrow{grad_norm},
|
||||
@@ -456,8 +453,8 @@ optimization process.%
|
||||
table[col sep=comma] {res/2d_grad_L.csv};
|
||||
\end{axis}
|
||||
\begin{axis}[hide axis,
|
||||
width=0.45\textwidth,
|
||||
height=0.3375\textwidth,
|
||||
width=\figwidth,
|
||||
height=\figheight,
|
||||
xmin=10, xmax=50,
|
||||
ymin=0, ymax=0.4,
|
||||
legend style={draw=white!15!black,
|
||||
@@ -477,8 +474,8 @@ optimization process.%
|
||||
\begin{tikzpicture}
|
||||
\begin{axis}[xmin = -1.25, xmax=1.25,
|
||||
ymin = -1.25, ymax=1.25,
|
||||
width=0.45\textwidth,
|
||||
height=0.3375\textwidth,
|
||||
width=\figwidth,
|
||||
height=\figheight,
|
||||
xlabel={$\tilde{x}_1$},
|
||||
ylabel={$\tilde{x}_2$},
|
||||
y label style={at={(axis description cs:-0.06,0.5)},anchor=south},
|
||||
@@ -502,8 +499,8 @@ optimization process.%
|
||||
table[col sep=comma] {res/2d_grad_h.csv};
|
||||
\end{axis}
|
||||
\begin{axis}[hide axis,
|
||||
width=0.45\textwidth,
|
||||
height=0.3375\textwidth,
|
||||
width=\figwidth,
|
||||
height=\figheight,
|
||||
xmin=10, xmax=50,
|
||||
ymin=0, ymax=0.4,
|
||||
legend style={draw=white!15!black,
|
||||
@@ -531,8 +528,8 @@ Two qualities may be observed.
|
||||
First, the average values of the two gradients are equal, except for their sign,
|
||||
leading to the aforementioned oscillation.
|
||||
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]
|
||||
\centering
|
||||
|
||||
@@ -540,10 +537,13 @@ oscillate after a certain number of iterations.
|
||||
\begin{axis}[
|
||||
grid=both,
|
||||
xlabel={Iterations},
|
||||
width=0.45\textwidth,
|
||||
height=0.3375\textwidth,
|
||||
width=\figwidth,
|
||||
height=\figheight,
|
||||
xtick={0, 100, ..., 400},
|
||||
xticklabels={0, 50, ..., 200},
|
||||
xmin=0, xmax=300,
|
||||
ymin=-4, ymax=2,
|
||||
ytick={-4,-3,...,2},
|
||||
legend pos = south east,
|
||||
]
|
||||
\addplot+ [mark=none, line width=1]
|
||||
@@ -579,7 +579,8 @@ oscillate after a certain number of iterations.
|
||||
Considering the magnitude of oscillation of the gradient of the code constraint
|
||||
polynomial, some interesting behavior may be observed.
|
||||
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$.
|
||||
|
||||
The lower the magnitude of the oscillation, the higher the probability that the
|
||||
@@ -596,8 +597,10 @@ the probability that a given component was decoded incorrectly.%
|
||||
ylabel=$P(\hat{c}_{i'} \ne c_{i'})$,
|
||||
xlabel=$i'$,
|
||||
ymode=log,
|
||||
width=0.45\textwidth,
|
||||
height=0.3375\textwidth,
|
||||
ymin=1e-9,ymax=1e-5,
|
||||
xmin=0,xmax=200,
|
||||
width=\figwidth,
|
||||
height=\figheight,
|
||||
]
|
||||
\addplot+ [scol1, mark=none, line width=1]
|
||||
table [col sep=comma, y=p_error]{res/p_error.csv};
|
||||
@@ -665,15 +668,15 @@ generated and an ``ML-in-the-list'' step is performed.
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\section{Simulation Results \& Discussion}
|
||||
|
||||
Figure \ref{fig:results} shows the FER and BER resulting from applying proximal
|
||||
decoding as presented in \cite{proximal_paper} and the improved algorithm
|
||||
presented here when applied to a $\left( 3,6 \right)$-regular LDPC code with $n=204$ and
|
||||
$k=102$ \cite[204.33.484]{mackay}.
|
||||
Figure \ref{fig:results} shows the FER and BER resulting from applying
|
||||
proximal decoding as presented in \cite{proximal_paper} and the improved
|
||||
algorithm presented here when applied to a $\left( 3,6 \right)$-regular LDPC
|
||||
code with $n=204$ and $k=102$ \cite[204.33.484]{mackay}.
|
||||
The parameters chosen for the simulation are
|
||||
$\gamma = 0.05, \omega=0.05, \eta=1.5, K=200$.
|
||||
Again, these parameters were chosen,%
|
||||
%
|
||||
\begin{figure}[H]
|
||||
\begin{figure}[ht]
|
||||
\centering
|
||||
|
||||
\begin{tikzpicture}
|
||||
@@ -695,13 +698,14 @@ Again, these parameters were chosen,%
|
||||
grid=both,
|
||||
xlabel={$E_\text{b} / N_0$ (dB)},
|
||||
ymode=log,
|
||||
ymax=1.5, ymin=2e-7,
|
||||
width=0.45\textwidth,
|
||||
height=0.3375\textwidth,
|
||||
xmin=1, xmax=8,
|
||||
ymax=1, ymin=1e-6,
|
||||
width=\figwidth,
|
||||
height=\figheight,
|
||||
legend columns=2,
|
||||
legend style={draw=white!15!black,
|
||||
legend cell align=left,
|
||||
at={(0.5,-0.5)},anchor=south}
|
||||
at={(0.5,-0.44)},anchor=south}
|
||||
]
|
||||
|
||||
\addplot+[ProxPlot, scol1]
|
||||
@@ -770,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
|
||||
from only a few components of the estimate being wrong.
|
||||
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,
|
||||
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
|
||||
probably wrong components of the estimate is based mainly on empirical
|
||||
observation and a more mathematically rigorous foundation for determining these
|
||||
components could be beneficial.
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\section{Acknowledgements}
|
||||
|
||||
This work has received funding in part from the European Research Council
|
||||
(ERC) under the European Union’s 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).
|
||||
|
||||
|
||||
%
|
||||
|
||||
Submodule lib/latex-common updated: 177f481b7e...bded242752
29
localSettings.yaml
Normal file
29
localSettings.yaml
Normal 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]))'
|
||||
|
||||
Reference in New Issue
Block a user