Minor changes to text. Moved codes into captions for ADMM
This commit is contained in:
parent
7fa0ee80d3
commit
3ba87d5558
@ -690,7 +690,6 @@ This can also be understood by interpreting the decoding process as a message-pa
|
|||||||
algorithm \cite[Sec. III. D.]{original_admm}, \cite[Sec. II. B.]{efficient_lp_dec_admm},
|
algorithm \cite[Sec. III. D.]{original_admm}, \cite[Sec. II. B.]{efficient_lp_dec_admm},
|
||||||
depicted in algorithm \ref{alg:admm}.
|
depicted in algorithm \ref{alg:admm}.
|
||||||
\todo{How are the variables being initialized?}
|
\todo{How are the variables being initialized?}
|
||||||
\todo{Overrelaxation}
|
|
||||||
|
|
||||||
\begin{genericAlgorithm}[caption={\ac{LP} decoding using \ac{ADMM} interpreted
|
\begin{genericAlgorithm}[caption={\ac{LP} decoding using \ac{ADMM} interpreted
|
||||||
as a message passing algorithm\protect\footnotemark{}}, label={alg:admm},
|
as a message passing algorithm\protect\footnotemark{}}, label={alg:admm},
|
||||||
@ -727,6 +726,15 @@ a check-node update step (lines $3$-$6$) and the $\tilde{c}_i$-updates can be un
|
|||||||
a variable-node update step (lines $7$-$9$ in figure \ref{alg:admm}).
|
a variable-node update step (lines $7$-$9$ in figure \ref{alg:admm}).
|
||||||
The updates for each variable- and check-node can be perfomed in parallel.
|
The updates for each variable- and check-node can be perfomed in parallel.
|
||||||
|
|
||||||
|
A technique called \textit{over-relaxation} can be employed to further improve
|
||||||
|
convergence, introducing the over-relaxation parameter $\rho$.
|
||||||
|
This consists of computing the term
|
||||||
|
$\rho \boldsymbol{T}_j \tilde{\boldsymbol{c}} - \left( 1 - \rho \right)\boldsymbol{z}_j$
|
||||||
|
before the $\boldsymbol{z}_j$ and $\boldsymbol{u}_j$ update steps (lines 4 and
|
||||||
|
5 of algorithm \ref{alg:admm}) and
|
||||||
|
subsequently replacing $\boldsymbol{T}_j \tilde{\boldsymbol{c}}$ with the
|
||||||
|
computed value in the two updates \cite[Sec. 3.4.3]{distr_opt_book}.
|
||||||
|
|
||||||
The main computational effort in solving the linear program then amounts to
|
The main computational effort in solving the linear program then amounts to
|
||||||
computing the projection operation $\Pi_{\mathcal{P}_{d_j}} \left( \cdot \right) $
|
computing the projection operation $\Pi_{\mathcal{P}_{d_j}} \left( \cdot \right) $
|
||||||
onto each check polytope. Various different methods to perform this projection
|
onto each check polytope. Various different methods to perform this projection
|
||||||
@ -850,14 +858,18 @@ complexity of the algorithm are studied.
|
|||||||
\subsection{Choice of Parameters}
|
\subsection{Choice of Parameters}
|
||||||
|
|
||||||
The first two parameters to be investigated are the penalty parameter $\mu$
|
The first two parameters to be investigated are the penalty parameter $\mu$
|
||||||
and the over-relaxation parameter $\rho$. \todo{Are these their actual names?}
|
and the over-relaxation parameter $\rho$.
|
||||||
A first approach to get some indication of the values that might be chosen
|
A first approach to get some indication of the values that might be chosen
|
||||||
for these parameters is to look at how the decoding performance depends
|
for these parameters is to look at how the decoding performance depends
|
||||||
on them.
|
on them.
|
||||||
The \ac{FER} is plotted as a function of $\mu$ and $\rho$ in figure
|
The \ac{FER} is plotted as a function of $\mu$ and $\rho$ in figure
|
||||||
\ref{fig:admm:mu_rho}, for three different \acp{SNR}.
|
\ref{fig:admm:mu_rho}, for three different \acp{SNR}.
|
||||||
When varying $\mu$, $\rho$ is set to a constant value of 1 and when varying
|
The code chosen for this examination is a (3,6) regular \ac{LDPC} code with
|
||||||
|
$n=204$ and $k=102$ \cite[\text{204.33.484}]{mackay_enc}.
|
||||||
|
When varying $\mu$, $\rho$ is set to 1 and when varying
|
||||||
$\rho$, $\mu$ is set to 5.
|
$\rho$, $\mu$ is set to 5.
|
||||||
|
$K$ is set to 200 and $\epsilon_\text{dual}$ and $\epsilon_\text{pri}$ to
|
||||||
|
$10^{-5}$.
|
||||||
The behavior that can be observed is very similar to that of the
|
The behavior that can be observed is very similar to that of the
|
||||||
parameter $\gamma$ in proximal decoding, analyzed in section
|
parameter $\gamma$ in proximal decoding, analyzed in section
|
||||||
\ref{sec:prox:Analysis and Simulation Results}.
|
\ref{sec:prox:Analysis and Simulation Results}.
|
||||||
@ -942,7 +954,8 @@ approximately equally good.
|
|||||||
\end{tikzpicture}
|
\end{tikzpicture}
|
||||||
\end{subfigure}
|
\end{subfigure}
|
||||||
|
|
||||||
\caption{Dependence of the decoding performance on the parameters $\mu$ and $\rho$.}
|
\caption{Dependence of the decoding performance on the parameters $\mu$ and $\rho$.
|
||||||
|
(3,6) regular \ac{LDPC} code with $n=204, k=102$ \cite[\text{204.33.484}]{mackay_enc}}
|
||||||
\label{fig:admm:mu_rho}
|
\label{fig:admm:mu_rho}
|
||||||
\end{figure}%
|
\end{figure}%
|
||||||
|
|
||||||
@ -954,10 +967,11 @@ Figure \ref{fig:admm:mu_rho_iterations} shows the average number of iterations
|
|||||||
over $\SI{1000}{}$ decodings, as a function of $\rho$.
|
over $\SI{1000}{}$ decodings, as a function of $\rho$.
|
||||||
This time the \ac{SNR} is kept constant at $\SI{4}{dB}$ and the parameter
|
This time the \ac{SNR} is kept constant at $\SI{4}{dB}$ and the parameter
|
||||||
$\mu$ is varied.
|
$\mu$ is varied.
|
||||||
|
The values chosen for the rest of the parameters are the same as before.
|
||||||
It is visible that choosing a large value for $\rho$ as well as a small value
|
It is visible that choosing a large value for $\rho$ as well as a small value
|
||||||
for $\mu$ minimizes the average number of iterations and thus the average
|
for $\mu$ minimizes the average number of iterations and thus the average
|
||||||
runtime of the decoding process.
|
run time of the decoding process.
|
||||||
|
%
|
||||||
\begin{figure}[h]
|
\begin{figure}[h]
|
||||||
\centering
|
\centering
|
||||||
|
|
||||||
@ -988,336 +1002,14 @@ runtime of the decoding process.
|
|||||||
\end{tikzpicture}
|
\end{tikzpicture}
|
||||||
|
|
||||||
\caption{Dependence of the average number of iterations required on $\mu$ and $\rho$
|
\caption{Dependence of the average number of iterations required on $\mu$ and $\rho$
|
||||||
for $E_b / N_0 = \SI{4}{dB}$.}
|
for $E_b / N_0 = \SI{4}{dB}$. (3,6) regular \ac{LDPC} code with $n=204, k=102$
|
||||||
|
\cite[\text{204.33.484}]{mackay_enc}}
|
||||||
\label{fig:admm:mu_rho_iterations}
|
\label{fig:admm:mu_rho_iterations}
|
||||||
\end{figure}%
|
\end{figure}%
|
||||||
|
|
||||||
To get an estimate for the parameter $K$, the average error during decoding
|
|
||||||
can be used.
|
|
||||||
This is shown in figure \ref{fig:admm:avg_error} as an average of
|
|
||||||
$\SI{100000}{}$ decodings.
|
|
||||||
Similarly to the results in section
|
|
||||||
\ref{sec:prox:Analysis and Simulation Results}, a dip is visible around the
|
|
||||||
$20$ iteration mark.
|
|
||||||
This is due to the fact that as the number of iterations increases
|
|
||||||
more and more decodings converge, leaving only the mistaken ones to be
|
|
||||||
averaged.
|
|
||||||
The point at which the wrong decodings start to become dominant and the
|
|
||||||
decoding performance does not increase any longer is largely independent of
|
|
||||||
the \ac{SNR}, allowing the value of $K$ to be chosen without considering the
|
|
||||||
\ac{SNR}.
|
|
||||||
|
|
||||||
\begin{figure}[h]
|
|
||||||
\centering
|
|
||||||
|
|
||||||
\begin{tikzpicture}
|
|
||||||
\begin{axis}[
|
|
||||||
grid=both,
|
|
||||||
width=0.6\textwidth,
|
|
||||||
height=0.45\textwidth,
|
|
||||||
xlabel={Iteration}, ylabel={Average $\left\Vert \hat{\boldsymbol{c}}
|
|
||||||
- \boldsymbol{c} \right\Vert$}
|
|
||||||
]
|
|
||||||
\addplot[ForestGreen, line width=1pt]
|
|
||||||
table [col sep=comma, x=k, y=err,
|
|
||||||
discard if not={SNR}{1.0},
|
|
||||||
discard if gt={k}{100}]
|
|
||||||
{res/admm/avg_error_20433484.csv};
|
|
||||||
\addlegendentry{$E_b / N_0 = \SI{1}{dB}$}
|
|
||||||
|
|
||||||
\addplot[RedOrange, line width=1pt]
|
|
||||||
table [col sep=comma, x=k, y=err,
|
|
||||||
discard if not={SNR}{2.0},
|
|
||||||
discard if gt={k}{100}]
|
|
||||||
{res/admm/avg_error_20433484.csv};
|
|
||||||
\addlegendentry{$E_b / N_0 = \SI{2}{dB}$}
|
|
||||||
|
|
||||||
\addplot[NavyBlue, line width=1pt]
|
|
||||||
table [col sep=comma, x=k, y=err,
|
|
||||||
discard if not={SNR}{3.0},
|
|
||||||
discard if gt={k}{100}]
|
|
||||||
{res/admm/avg_error_20433484.csv};
|
|
||||||
\addlegendentry{$E_b / N_0 = \SI{3}{dB}$}
|
|
||||||
|
|
||||||
\addplot[RoyalPurple, line width=1pt]
|
|
||||||
table [col sep=comma, x=k, y=err,
|
|
||||||
discard if not={SNR}{4.0},
|
|
||||||
discard if gt={k}{100}]
|
|
||||||
{res/admm/avg_error_20433484.csv};
|
|
||||||
\addlegendentry{$E_b / N_0 = \SI{4}{dB}$}
|
|
||||||
\end{axis}
|
|
||||||
\end{tikzpicture}
|
|
||||||
|
|
||||||
\caption{Average error for $\SI{100000}{}$ decodings\protect\footnotemark{}}
|
|
||||||
\label{fig:admm:avg_error}
|
|
||||||
\end{figure}%
|
|
||||||
%
|
%
|
||||||
\footnotetext{(3,6) regular \ac{LDPC} code with $n = 204$, $k = 102$
|
The same behavior can be observed when looking at a number of different codes,
|
||||||
\cite[\text{204.33.484}]{mackay_enc}; $K=200, \rho=1, \epsilon_\text{pri} = 10^{-5},
|
as shown in figure \ref{fig:admm:mu_rho_multiple}.
|
||||||
\epsilon_\text{dual} = 10^{-5}$
|
|
||||||
}%
|
|
||||||
%
|
%
|
||||||
|
|
||||||
The last two parameters remaining to be examined are the tolerances for the
|
|
||||||
stopping criterion of the algorithm, $\epsilon_\text{pri}$ and
|
|
||||||
$\epsilon_\text{dual}$.
|
|
||||||
These are considered as having the same value.
|
|
||||||
The effect of their value on the decoding performance is visualized in figure
|
|
||||||
\ref{fig:admm:epsilon} for a (3,6) regular \ac{LDPC} code with $n=204, k=102$
|
|
||||||
\cite[\text{204.33.484}]{mackay_enc}.
|
|
||||||
All parameters except $\epsilon_\text{pri}$ and $\epsilon_\text{dual}$ are
|
|
||||||
kept constant, with $K=200$, $\mu=5$, $\rho=1$ and $E_b / N_0 = \SI{4}{dB}$.
|
|
||||||
A lower value for the tolerance initially leads to a dramatic decrease in the
|
|
||||||
\ac{FER}, this effect fading as the tolerance becomes increasingly lower.
|
|
||||||
|
|
||||||
\begin{figure}[h]
|
|
||||||
\centering
|
|
||||||
|
|
||||||
\begin{tikzpicture}
|
|
||||||
\begin{axis}[
|
|
||||||
grid=both,
|
|
||||||
xlabel={$\epsilon$}, ylabel={\acs{FER}},
|
|
||||||
ymode=log,
|
|
||||||
xmode=log,
|
|
||||||
x dir=reverse,
|
|
||||||
width=0.6\textwidth,
|
|
||||||
height=0.45\textwidth,
|
|
||||||
]
|
|
||||||
\addplot[NavyBlue, line width=1pt, densely dashed, mark=*]
|
|
||||||
table [col sep=comma, x=epsilon, y=FER,
|
|
||||||
discard if not={SNR}{3.0},]
|
|
||||||
{res/admm/fer_epsilon_20433484.csv};
|
|
||||||
\end{axis}
|
|
||||||
\end{tikzpicture}
|
|
||||||
|
|
||||||
\caption{Effect of the value of the parameters $\epsilon_\text{pri}$ and
|
|
||||||
$\epsilon_\text{dual}$ on the \acs{FER}}
|
|
||||||
\label{fig:admm:epsilon}
|
|
||||||
\end{figure}%
|
|
||||||
|
|
||||||
|
|
||||||
In conclusion, the parameters $\mu$ and $\rho$ should be chosen comparatively
|
|
||||||
small and large, respectively, to reduce the average runtime of the decoding
|
|
||||||
process, while keeping them within a certain range as to not compromise the
|
|
||||||
decoding performance.
|
|
||||||
The maximum number of iterations $K$ performed can be chosen independantly
|
|
||||||
of the \ac{SNR}.
|
|
||||||
Finally, relatively small values should be given to the parameters
|
|
||||||
$\epsilon_{\text{pri}}$ and $\epsilon_{\text{dual}}$ to achieve the lowest
|
|
||||||
possible error rate.
|
|
||||||
|
|
||||||
\subsection{Decoding Performance}
|
|
||||||
|
|
||||||
In figure \ref{fig:admm:results}, the simulation results for the ``Margulis''
|
|
||||||
\ac{LDPC} code ($n=2640$, $k=1320$) presented by Barman et al. in
|
|
||||||
\cite{original_admm} are compared to the results from the simulations
|
|
||||||
conducted in the context of this thesis.
|
|
||||||
The parameters chosen were $\mu=3.3$, $\rho=1.9$, $K=1000$,
|
|
||||||
$\epsilon_\text{pri}=10^{-5}$ and $\epsilon_\text{dual}=10^{-5}$,
|
|
||||||
the same as in \cite{original_admm};
|
|
||||||
the two \ac{FER} curves are practically identical.
|
|
||||||
Also shown is the curve resulting from \ac{BP} decoding, performing
|
|
||||||
1000 iterations.
|
|
||||||
The two algorithms perform relatively similarly, coming within $\SI{0.5}{dB}$
|
|
||||||
of one another.
|
|
||||||
|
|
||||||
\begin{figure}[h]
|
|
||||||
\centering
|
|
||||||
|
|
||||||
\begin{tikzpicture}
|
|
||||||
\begin{axis}[
|
|
||||||
grid=both,
|
|
||||||
xlabel={$E_b / N_0 \left( \text{dB} \right) $}, ylabel={\acs{FER}},
|
|
||||||
ymode=log,
|
|
||||||
width=0.6\textwidth,
|
|
||||||
height=0.45\textwidth,
|
|
||||||
legend style={at={(0.5,-0.57)},anchor=south},
|
|
||||||
legend cell align={left},
|
|
||||||
]
|
|
||||||
\addplot[Turquoise, line width=1pt, mark=*]
|
|
||||||
table [col sep=comma, x=SNR, y=FER,
|
|
||||||
discard if gt={SNR}{2.2},
|
|
||||||
]
|
|
||||||
{res/admm/fer_paper_margulis.csv};
|
|
||||||
\addlegendentry{\acs{ADMM} (Barman et al.)}
|
|
||||||
\addplot[NavyBlue, densely dashed, line width=1pt, mark=triangle]
|
|
||||||
table [col sep=comma, x=SNR, y=FER,]
|
|
||||||
{res/admm/ber_margulis264013203.csv};
|
|
||||||
\addlegendentry{\acs{ADMM} (Own results)}
|
|
||||||
\addplot[RoyalPurple, line width=1pt, mark=*]
|
|
||||||
table [col sep=comma, x=SNR, y=FER, discard if gt={SNR}{2.2},]
|
|
||||||
{res/generic/fer_bp_mackay_margulis.csv};
|
|
||||||
\addlegendentry{\acs{BP} (Barman et al.)}
|
|
||||||
\end{axis}
|
|
||||||
\end{tikzpicture}
|
|
||||||
|
|
||||||
\caption{Comparison of datapoints from Barman et al. with own simulation results.
|
|
||||||
``Margulis'' \ac{LDPC} code with $n = 2640$, $k = 1320$
|
|
||||||
\cite[\text{Margulis2640.1320.3}]{mackay_enc}\protect\footnotemark{}}
|
|
||||||
\label{fig:admm:results}
|
|
||||||
\end{figure}%
|
|
||||||
%
|
|
||||||
|
|
||||||
\footnotetext{; $K=200, \mu = 3.3, \rho=1.9,
|
|
||||||
\epsilon_{\text{pri}} = 10^{-5}, \epsilon_{\text{dual}} = 10^{-5}$
|
|
||||||
}%
|
|
||||||
%
|
|
||||||
In figure \ref{fig:admm:ber_fer}, the \ac{BER} and \ac{FER} for \ac{LP} decoding
|
|
||||||
using\ac{ADMM} and \ac{BP} are shown for a (3, 6) regular \ac{LDPC} code with
|
|
||||||
$n=204$.
|
|
||||||
To ensure comparability, in both cases the number of iterations was set to
|
|
||||||
$K=200$.
|
|
||||||
The values of the other parameters were chosen as $\mu = 5$, $\rho = 1$,
|
|
||||||
$\epsilon = 10^{-5}$ and $\epsilon=10^{-5}$.
|
|
||||||
Comparing figures \ref{fig:admm:results} and \ref{fig:admm:ber_fer} it is
|
|
||||||
apparent that the difference in decoding performance depends on the code being
|
|
||||||
considered.
|
|
||||||
More simulation results are presented in figure \ref{fig:comp:prox_admm_dec}
|
|
||||||
in section \ref{sec:comp:res}.
|
|
||||||
|
|
||||||
|
|
||||||
\begin{figure}[h]
|
|
||||||
\centering
|
|
||||||
|
|
||||||
\begin{subfigure}[c]{0.48\textwidth}
|
|
||||||
\centering
|
|
||||||
|
|
||||||
\begin{tikzpicture}
|
|
||||||
\begin{axis}[
|
|
||||||
grid=both,
|
|
||||||
xlabel={$\mu$}, ylabel={\acs{BER}},
|
|
||||||
ymode=log,
|
|
||||||
width=\textwidth,
|
|
||||||
height=0.75\textwidth,
|
|
||||||
ymax=1.5, ymin=3e-7,
|
|
||||||
]
|
|
||||||
\addplot[Turquoise, line width=1pt, mark=*]
|
|
||||||
table [col sep=comma, x=SNR, y=BER,
|
|
||||||
discard if not={mu}{5.0},
|
|
||||||
discard if gt={SNR}{4.5}]
|
|
||||||
{res/admm/ber_2d_20433484.csv};
|
|
||||||
\addplot[RoyalPurple, line width=1pt, mark=*]
|
|
||||||
table [col sep=comma, x=SNR, y=BER,
|
|
||||||
discard if gt={SNR}{4.5}]
|
|
||||||
{/home/andreas/bp_20433484.csv};
|
|
||||||
\end{axis}
|
|
||||||
\end{tikzpicture}
|
|
||||||
\end{subfigure}%
|
|
||||||
\hfill%
|
|
||||||
\begin{subfigure}[c]{0.48\textwidth}
|
|
||||||
\centering
|
|
||||||
|
|
||||||
\begin{tikzpicture}
|
|
||||||
\begin{axis}[
|
|
||||||
grid=both,
|
|
||||||
xlabel={$\rho$}, ylabel={\acs{FER}},
|
|
||||||
ymode=log,
|
|
||||||
width=\textwidth,
|
|
||||||
height=0.75\textwidth,
|
|
||||||
ymax=1.5, ymin=3e-7,
|
|
||||||
]
|
|
||||||
\addplot[Turquoise, line width=1pt, mark=*]
|
|
||||||
table [col sep=comma, x=SNR, y=FER,
|
|
||||||
discard if not={mu}{5.0},
|
|
||||||
discard if gt={SNR}{4.5}]
|
|
||||||
{res/admm/ber_2d_20433484.csv};
|
|
||||||
\addplot[RoyalPurple, line width=1pt, mark=*]
|
|
||||||
table [col sep=comma, x=SNR, y=FER,
|
|
||||||
discard if gt={SNR}{4.5}]
|
|
||||||
{/home/andreas/bp_20433484.csv};
|
|
||||||
\end{axis}
|
|
||||||
\end{tikzpicture}
|
|
||||||
\end{subfigure}%
|
|
||||||
|
|
||||||
\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{Turquoise, line width=1pt, mark=*}
|
|
||||||
\addlegendentry{\acs{LP} decoding using \acs{ADMM}}
|
|
||||||
\addlegendimage{RoyalPurple, line width=1pt, mark=*}
|
|
||||||
\addlegendentry{BP (20 iterations)}
|
|
||||||
\end{axis}
|
|
||||||
\end{tikzpicture}
|
|
||||||
\end{subfigure}
|
|
||||||
|
|
||||||
\caption{Comparison of the decoding performance of \acs{LP} decoding using
|
|
||||||
\acs{ADMM} and \acs{BP}. (3,6) regular \ac{LDPC} code with $n = 204$, $k = 102$
|
|
||||||
\cite[\text{204.33.484}]{mackay_enc}}
|
|
||||||
\label{fig:admm:ber_fer}
|
|
||||||
\end{figure}%
|
|
||||||
|
|
||||||
In summary, the decoding performance of \ac{LP} decoding using \ac{ADMM} comes
|
|
||||||
close to that of \ac{BP}, their difference staying in the range of
|
|
||||||
approximately $\SI{0.5}{dB}$, depending on the code in question.
|
|
||||||
|
|
||||||
\subsection{Computational Performance}
|
|
||||||
\label{subsec:admm:comp_perf}
|
|
||||||
|
|
||||||
In terms of time complexity, the three steps of the decoding algorithm
|
|
||||||
in equations (\ref{eq:admm:c_update}) - (\ref{eq:admm:u_update}) have to be
|
|
||||||
considered.
|
|
||||||
The $\tilde{\boldsymbol{c}}$- and $\boldsymbol{u}_j$-update steps are
|
|
||||||
$\mathcal{O}\left( n \right)$ \cite[Sec. III. C.]{original_admm}.
|
|
||||||
The complexity of the $\boldsymbol{z}_j$-update step depends on the projection
|
|
||||||
algorithm employed.
|
|
||||||
Since for the implementation completed for this work the projection algorithm
|
|
||||||
presented in \cite{original_admm} is used, the $\boldsymbol{z}_j$-update step
|
|
||||||
also has linear time complexity.
|
|
||||||
|
|
||||||
\begin{figure}[h]
|
|
||||||
\centering
|
|
||||||
|
|
||||||
\begin{tikzpicture}
|
|
||||||
\begin{axis}[grid=both,
|
|
||||||
xlabel={$n$}, ylabel={Time per frame (s)},
|
|
||||||
width=0.6\textwidth,
|
|
||||||
height=0.45\textwidth,
|
|
||||||
legend style={at={(0.5,-0.42)},anchor=south},
|
|
||||||
legend cell align={left},]
|
|
||||||
|
|
||||||
\addplot[NavyBlue, only marks, mark=triangle*]
|
|
||||||
table [col sep=comma, x=n, y=spf]
|
|
||||||
{res/admm/fps_vs_n.csv};
|
|
||||||
\end{axis}
|
|
||||||
\end{tikzpicture}
|
|
||||||
|
|
||||||
\caption{Timing requirements of the \ac{LP} decoding using \ac{ADMM} implementation}
|
|
||||||
\label{fig:admm:time}
|
|
||||||
\end{figure}%
|
|
||||||
|
|
||||||
Simulation results from a range of different codes can be used to verify this
|
|
||||||
analysis.
|
|
||||||
Figure \ref{fig:admm:time} shows the average time needed to decode one
|
|
||||||
frame as a function of its length.
|
|
||||||
\todo{List codes used}
|
|
||||||
The results are necessarily skewed because the codes considered vary not only
|
|
||||||
in their length, but also in their construction scheme and rate.
|
|
||||||
Additionally, different optimization opportunities arise depending on the
|
|
||||||
length of a code, since for smaller codes dynamic memory allocation can be
|
|
||||||
completely omitted.
|
|
||||||
This may explain why the datapoint at $n=504$ is higher then would be expected
|
|
||||||
with linear behavior.
|
|
||||||
Nonetheless, the simulation results roughly match the expected behavior
|
|
||||||
following from the theoretical considerations.
|
|
||||||
|
|
||||||
|
|
||||||
\textbf{Game Plan}
|
|
||||||
|
|
||||||
\begin{itemize}
|
|
||||||
\item Choice of Parameters (Take decomposition paper as guide)
|
|
||||||
\begin{itemize}
|
|
||||||
\item epsilon pri / epslion dual
|
|
||||||
\end{itemize}
|
|
||||||
\end{itemize}
|
|
||||||
|
|
||||||
|
|
||||||
\begin{figure}[h]
|
\begin{figure}[h]
|
||||||
\centering
|
\centering
|
||||||
|
|
||||||
@ -1513,5 +1205,318 @@ following from the theoretical considerations.
|
|||||||
\end{subfigure}
|
\end{subfigure}
|
||||||
|
|
||||||
\caption{Dependence of the \ac{BER} on the value of the parameter $\gamma$ for various codes}
|
\caption{Dependence of the \ac{BER} on the value of the parameter $\gamma$ for various codes}
|
||||||
\label{fig:prox:results_3d_multiple}
|
\label{fig:admm:mu_rho_multiple}
|
||||||
\end{figure}
|
\end{figure}
|
||||||
|
|
||||||
|
To get an estimate for the parameter $K$, the average error during decoding
|
||||||
|
can be used.
|
||||||
|
This is shown in figure \ref{fig:admm:avg_error} as an average of
|
||||||
|
$\SI{100000}{}$ decodings.
|
||||||
|
$\mu$ is set to 5 and $\rho$ is set to $1$ and the rest of the parameters are
|
||||||
|
again chosen as $K=200, \epsilon_\text{pri}=10^{-5}$ and $ \epsilon_\text{dual}=10^{-5}$.
|
||||||
|
Similarly to the results in section
|
||||||
|
\ref{sec:prox:Analysis and Simulation Results}, a dip is visible around the
|
||||||
|
$20$ iteration mark.
|
||||||
|
This is due to the fact that as the number of iterations increases
|
||||||
|
more and more decodings converge, leaving only the mistaken ones to be
|
||||||
|
averaged.
|
||||||
|
The point at which the wrong decodings start to become dominant and the
|
||||||
|
decoding performance does not increase any longer is largely independent of
|
||||||
|
the \ac{SNR}, allowing the value of $K$ to be chosen without considering the
|
||||||
|
\ac{SNR}.
|
||||||
|
|
||||||
|
\begin{figure}[h]
|
||||||
|
\centering
|
||||||
|
|
||||||
|
\begin{tikzpicture}
|
||||||
|
\begin{axis}[
|
||||||
|
grid=both,
|
||||||
|
width=0.6\textwidth,
|
||||||
|
height=0.45\textwidth,
|
||||||
|
xlabel={Iteration}, ylabel={Average $\left\Vert \hat{\boldsymbol{c}}
|
||||||
|
- \boldsymbol{c} \right\Vert$}
|
||||||
|
]
|
||||||
|
\addplot[ForestGreen, line width=1pt]
|
||||||
|
table [col sep=comma, x=k, y=err,
|
||||||
|
discard if not={SNR}{1.0},
|
||||||
|
discard if gt={k}{100}]
|
||||||
|
{res/admm/avg_error_20433484.csv};
|
||||||
|
\addlegendentry{$E_b / N_0 = \SI{1}{dB}$}
|
||||||
|
|
||||||
|
\addplot[RedOrange, line width=1pt]
|
||||||
|
table [col sep=comma, x=k, y=err,
|
||||||
|
discard if not={SNR}{2.0},
|
||||||
|
discard if gt={k}{100}]
|
||||||
|
{res/admm/avg_error_20433484.csv};
|
||||||
|
\addlegendentry{$E_b / N_0 = \SI{2}{dB}$}
|
||||||
|
|
||||||
|
\addplot[NavyBlue, line width=1pt]
|
||||||
|
table [col sep=comma, x=k, y=err,
|
||||||
|
discard if not={SNR}{3.0},
|
||||||
|
discard if gt={k}{100}]
|
||||||
|
{res/admm/avg_error_20433484.csv};
|
||||||
|
\addlegendentry{$E_b / N_0 = \SI{3}{dB}$}
|
||||||
|
|
||||||
|
\addplot[RoyalPurple, line width=1pt]
|
||||||
|
table [col sep=comma, x=k, y=err,
|
||||||
|
discard if not={SNR}{4.0},
|
||||||
|
discard if gt={k}{100}]
|
||||||
|
{res/admm/avg_error_20433484.csv};
|
||||||
|
\addlegendentry{$E_b / N_0 = \SI{4}{dB}$}
|
||||||
|
\end{axis}
|
||||||
|
\end{tikzpicture}
|
||||||
|
|
||||||
|
\caption{Average error for $\SI{100000}{}$ decodings. (3,6)
|
||||||
|
regular \ac{LDPC} code with $n=204, k=102$ \cite[\text{204.33.484}]{mackay_enc}}
|
||||||
|
\label{fig:admm:avg_error}
|
||||||
|
\end{figure}%
|
||||||
|
|
||||||
|
The last two parameters remaining to be examined are the tolerances for the
|
||||||
|
stopping criterion of the algorithm, $\epsilon_\text{pri}$ and
|
||||||
|
$\epsilon_\text{dual}$.
|
||||||
|
These are both set to the same value $\epsilon$.
|
||||||
|
The effect of their value on the decoding performance is visualized in figure
|
||||||
|
\ref{fig:admm:epsilon}.
|
||||||
|
All parameters except $\epsilon_\text{pri}$ and $\epsilon_\text{dual}$ are
|
||||||
|
kept constant, with $K=200$, $\mu=5$, $\rho=1$ and $E_b / N_0 = \SI{4}{dB}$.
|
||||||
|
A lower value for the tolerance initially leads to a dramatic decrease in the
|
||||||
|
\ac{FER}, this effect fading as the tolerance becomes increasingly lower.
|
||||||
|
|
||||||
|
\begin{figure}[h]
|
||||||
|
\centering
|
||||||
|
|
||||||
|
\begin{tikzpicture}
|
||||||
|
\begin{axis}[
|
||||||
|
grid=both,
|
||||||
|
xlabel={$\epsilon$}, ylabel={\acs{FER}},
|
||||||
|
ymode=log,
|
||||||
|
xmode=log,
|
||||||
|
x dir=reverse,
|
||||||
|
width=0.6\textwidth,
|
||||||
|
height=0.45\textwidth,
|
||||||
|
]
|
||||||
|
\addplot[NavyBlue, line width=1pt, densely dashed, mark=*]
|
||||||
|
table [col sep=comma, x=epsilon, y=FER,
|
||||||
|
discard if not={SNR}{3.0},]
|
||||||
|
{res/admm/fer_epsilon_20433484.csv};
|
||||||
|
\end{axis}
|
||||||
|
\end{tikzpicture}
|
||||||
|
|
||||||
|
\caption{Effect of the value of the parameters $\epsilon_\text{pri}$ and
|
||||||
|
$\epsilon_\text{dual}$ on the \acs{FER}. (3,6) regular \ac{LDPC} code with
|
||||||
|
$n=204, k=102$ \cite[\text{204.33.484}]{mackay_enc}}
|
||||||
|
\label{fig:admm:epsilon}
|
||||||
|
\end{figure}%
|
||||||
|
|
||||||
|
In conclusion, the parameters $\mu$ and $\rho$ should be chosen comparatively
|
||||||
|
small and large, respectively, to reduce the average runtime of the decoding
|
||||||
|
process, while keeping them within a certain range as to not compromise the
|
||||||
|
decoding performance.
|
||||||
|
The maximum number of iterations $K$ performed can be chosen independantly
|
||||||
|
of the \ac{SNR}.
|
||||||
|
Finally, relatively small values should be given to the parameters
|
||||||
|
$\epsilon_{\text{pri}}$ and $\epsilon_{\text{dual}}$ to achieve the lowest
|
||||||
|
possible error rate.
|
||||||
|
|
||||||
|
|
||||||
|
\subsection{Decoding Performance}
|
||||||
|
|
||||||
|
In figure \ref{fig:admm:results}, the simulation results for the ``Margulis''
|
||||||
|
\ac{LDPC} code ($n=2640$, $k=1320$) presented by Barman et al. in
|
||||||
|
\cite{original_admm} are compared to the results from the simulations
|
||||||
|
conducted in the context of this thesis.
|
||||||
|
The parameters chosen were $\mu=3.3$, $\rho=1.9$, $K=1000$,
|
||||||
|
$\epsilon_\text{pri}=10^{-5}$ and $\epsilon_\text{dual}=10^{-5}$,
|
||||||
|
the same as in \cite{original_admm};
|
||||||
|
the two \ac{FER} curves are practically identical.
|
||||||
|
Also shown is the curve resulting from \ac{BP} decoding, performing
|
||||||
|
1000 iterations.
|
||||||
|
The two algorithms perform relatively similarly, coming within $\SI{0.5}{dB}$
|
||||||
|
of one another.
|
||||||
|
|
||||||
|
\begin{figure}[h]
|
||||||
|
\centering
|
||||||
|
|
||||||
|
\begin{tikzpicture}
|
||||||
|
\begin{axis}[
|
||||||
|
grid=both,
|
||||||
|
xlabel={$E_b / N_0 \left( \text{dB} \right) $}, ylabel={\acs{FER}},
|
||||||
|
ymode=log,
|
||||||
|
width=0.6\textwidth,
|
||||||
|
height=0.45\textwidth,
|
||||||
|
legend style={at={(0.5,-0.57)},anchor=south},
|
||||||
|
legend cell align={left},
|
||||||
|
]
|
||||||
|
\addplot[Turquoise, line width=1pt, mark=*]
|
||||||
|
table [col sep=comma, x=SNR, y=FER,
|
||||||
|
discard if gt={SNR}{2.2},
|
||||||
|
]
|
||||||
|
{res/admm/fer_paper_margulis.csv};
|
||||||
|
\addlegendentry{\acs{ADMM} (Barman et al.)}
|
||||||
|
\addplot[NavyBlue, densely dashed, line width=1pt, mark=triangle]
|
||||||
|
table [col sep=comma, x=SNR, y=FER,]
|
||||||
|
{res/admm/ber_margulis264013203.csv};
|
||||||
|
\addlegendentry{\acs{ADMM} (Own results)}
|
||||||
|
\addplot[RoyalPurple, line width=1pt, mark=*]
|
||||||
|
table [col sep=comma, x=SNR, y=FER, discard if gt={SNR}{2.2},]
|
||||||
|
{res/generic/fer_bp_mackay_margulis.csv};
|
||||||
|
\addlegendentry{\acs{BP} (Barman et al.)}
|
||||||
|
\end{axis}
|
||||||
|
\end{tikzpicture}
|
||||||
|
|
||||||
|
\caption{Comparison of datapoints from Barman et al. with own simulation results.
|
||||||
|
``Margulis'' \ac{LDPC} code with $n = 2640$, $k = 1320$
|
||||||
|
\cite[\text{Margulis2640.1320.3}]{mackay_enc}\protect\footnotemark{}}
|
||||||
|
\label{fig:admm:results}
|
||||||
|
\end{figure}%
|
||||||
|
%
|
||||||
|
|
||||||
|
\footnotetext{; $K=200, \mu = 3.3, \rho=1.9,
|
||||||
|
\epsilon_{\text{pri}} = 10^{-5}, \epsilon_{\text{dual}} = 10^{-5}$
|
||||||
|
}%
|
||||||
|
%
|
||||||
|
In figure \ref{fig:admm:ber_fer}, the \ac{BER} and \ac{FER} for \ac{LP} decoding
|
||||||
|
using\ac{ADMM} and \ac{BP} are shown for a (3, 6) regular \ac{LDPC} code with
|
||||||
|
$n=204$.
|
||||||
|
To ensure comparability, in both cases the number of iterations was set to
|
||||||
|
$K=200$.
|
||||||
|
The values of the other parameters were chosen as $\mu = 5$, $\rho = 1$,
|
||||||
|
$\epsilon = 10^{-5}$ and $\epsilon=10^{-5}$.
|
||||||
|
Comparing figures \ref{fig:admm:results} and \ref{fig:admm:ber_fer} it is
|
||||||
|
apparent that the difference in decoding performance depends on the code being
|
||||||
|
considered.
|
||||||
|
More simulation results are presented in figure \ref{fig:comp:prox_admm_dec}
|
||||||
|
in section \ref{sec:comp:res}.
|
||||||
|
|
||||||
|
|
||||||
|
\begin{figure}[h]
|
||||||
|
\centering
|
||||||
|
|
||||||
|
\begin{subfigure}[c]{0.48\textwidth}
|
||||||
|
\centering
|
||||||
|
|
||||||
|
\begin{tikzpicture}
|
||||||
|
\begin{axis}[
|
||||||
|
grid=both,
|
||||||
|
xlabel={$\mu$}, ylabel={\acs{BER}},
|
||||||
|
ymode=log,
|
||||||
|
width=\textwidth,
|
||||||
|
height=0.75\textwidth,
|
||||||
|
ymax=1.5, ymin=3e-7,
|
||||||
|
]
|
||||||
|
\addplot[Turquoise, line width=1pt, mark=*]
|
||||||
|
table [col sep=comma, x=SNR, y=BER,
|
||||||
|
discard if not={mu}{5.0},
|
||||||
|
discard if gt={SNR}{4.5}]
|
||||||
|
{res/admm/ber_2d_20433484.csv};
|
||||||
|
\addplot[RoyalPurple, line width=1pt, mark=*]
|
||||||
|
table [col sep=comma, x=SNR, y=BER,
|
||||||
|
discard if gt={SNR}{4.5}]
|
||||||
|
{/home/andreas/bp_20433484.csv};
|
||||||
|
\end{axis}
|
||||||
|
\end{tikzpicture}
|
||||||
|
\end{subfigure}%
|
||||||
|
\hfill%
|
||||||
|
\begin{subfigure}[c]{0.48\textwidth}
|
||||||
|
\centering
|
||||||
|
|
||||||
|
\begin{tikzpicture}
|
||||||
|
\begin{axis}[
|
||||||
|
grid=both,
|
||||||
|
xlabel={$\rho$}, ylabel={\acs{FER}},
|
||||||
|
ymode=log,
|
||||||
|
width=\textwidth,
|
||||||
|
height=0.75\textwidth,
|
||||||
|
ymax=1.5, ymin=3e-7,
|
||||||
|
]
|
||||||
|
\addplot[Turquoise, line width=1pt, mark=*]
|
||||||
|
table [col sep=comma, x=SNR, y=FER,
|
||||||
|
discard if not={mu}{5.0},
|
||||||
|
discard if gt={SNR}{4.5}]
|
||||||
|
{res/admm/ber_2d_20433484.csv};
|
||||||
|
\addplot[RoyalPurple, line width=1pt, mark=*]
|
||||||
|
table [col sep=comma, x=SNR, y=FER,
|
||||||
|
discard if gt={SNR}{4.5}]
|
||||||
|
{/home/andreas/bp_20433484.csv};
|
||||||
|
\end{axis}
|
||||||
|
\end{tikzpicture}
|
||||||
|
\end{subfigure}%
|
||||||
|
|
||||||
|
\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{Turquoise, line width=1pt, mark=*}
|
||||||
|
\addlegendentry{\acs{LP} decoding using \acs{ADMM}}
|
||||||
|
\addlegendimage{RoyalPurple, line width=1pt, mark=*}
|
||||||
|
\addlegendentry{BP (200 iterations)}
|
||||||
|
\end{axis}
|
||||||
|
\end{tikzpicture}
|
||||||
|
\end{subfigure}
|
||||||
|
|
||||||
|
\caption{Comparison of the decoding performance of \acs{LP} decoding using
|
||||||
|
\acs{ADMM} and \acs{BP}. (3,6) regular \ac{LDPC} code with $n = 204$, $k = 102$
|
||||||
|
\cite[\text{204.33.484}]{mackay_enc}}
|
||||||
|
\label{fig:admm:ber_fer}
|
||||||
|
\end{figure}%
|
||||||
|
|
||||||
|
In summary, the decoding performance of \ac{LP} decoding using \ac{ADMM} comes
|
||||||
|
close to that of \ac{BP}, their difference staying in the range of
|
||||||
|
approximately $\SI{0.5}{dB}$, depending on the code in question.
|
||||||
|
|
||||||
|
\subsection{Computational Performance}
|
||||||
|
\label{subsec:admm:comp_perf}
|
||||||
|
|
||||||
|
In terms of time complexity, the three steps of the decoding algorithm
|
||||||
|
in equations (\ref{eq:admm:c_update}) - (\ref{eq:admm:u_update}) have to be
|
||||||
|
considered.
|
||||||
|
The $\tilde{\boldsymbol{c}}$- and $\boldsymbol{u}_j$-update steps are
|
||||||
|
$\mathcal{O}\left( n \right)$ \cite[Sec. III. C.]{original_admm}.
|
||||||
|
The complexity of the $\boldsymbol{z}_j$-update step depends on the projection
|
||||||
|
algorithm employed.
|
||||||
|
Since for the implementation completed for this work the projection algorithm
|
||||||
|
presented in \cite{original_admm} is used, the $\boldsymbol{z}_j$-update step
|
||||||
|
also has linear time complexity.
|
||||||
|
|
||||||
|
\begin{figure}[h]
|
||||||
|
\centering
|
||||||
|
|
||||||
|
\begin{tikzpicture}
|
||||||
|
\begin{axis}[grid=both,
|
||||||
|
xlabel={$n$}, ylabel={Time per frame (s)},
|
||||||
|
width=0.6\textwidth,
|
||||||
|
height=0.45\textwidth,
|
||||||
|
legend style={at={(0.5,-0.42)},anchor=south},
|
||||||
|
legend cell align={left},]
|
||||||
|
|
||||||
|
\addplot[NavyBlue, only marks, mark=triangle*]
|
||||||
|
table [col sep=comma, x=n, y=spf]
|
||||||
|
{res/admm/fps_vs_n.csv};
|
||||||
|
\end{axis}
|
||||||
|
\end{tikzpicture}
|
||||||
|
|
||||||
|
\caption{Timing requirements of the \ac{LP} decoding using \ac{ADMM} implementation}
|
||||||
|
\label{fig:admm:time}
|
||||||
|
\end{figure}%
|
||||||
|
|
||||||
|
Simulation results from a range of different codes can be used to verify this
|
||||||
|
analysis.
|
||||||
|
Figure \ref{fig:admm:time} shows the average time needed to decode one
|
||||||
|
frame as a function of its length.
|
||||||
|
\todo{List codes used}
|
||||||
|
The results are necessarily skewed because the codes considered vary not only
|
||||||
|
in their length, but also in their construction scheme and rate.
|
||||||
|
Additionally, different optimization opportunities arise depending on the
|
||||||
|
length of a code, since for smaller codes dynamic memory allocation can be
|
||||||
|
completely omitted.
|
||||||
|
This may explain why the datapoint at $n=504$ is higher then would be expected
|
||||||
|
with linear behavior.
|
||||||
|
Nonetheless, the simulation results roughly match the expected behavior
|
||||||
|
following from the theoretical considerations.
|
||||||
|
|
||||||
|
|||||||
@ -401,7 +401,7 @@ while the newly generated ones are shown with dashed lines.
|
|||||||
table [x=SNR, y=BER, col sep=comma,
|
table [x=SNR, y=BER, col sep=comma,
|
||||||
discard if gt={SNR}{3.5}]
|
discard if gt={SNR}{3.5}]
|
||||||
{res/generic/bp_20433484.csv};
|
{res/generic/bp_20433484.csv};
|
||||||
\addlegendentry{BP (20 iterations)}
|
\addlegendentry{BP (200 iterations)}
|
||||||
\end{axis}
|
\end{axis}
|
||||||
\end{tikzpicture}
|
\end{tikzpicture}
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user