Modified and moved around figures

This commit is contained in:
Andreas Tsouchlos 2023-04-17 15:19:38 +02:00
parent 611836430a
commit fdf112c6d9
5 changed files with 269 additions and 60 deletions

View File

@ -280,42 +280,6 @@ more arithmetic operations are necessary in each iteration.
\end{itemize}
\begin{figure}[H]
\centering
\begin{tikzpicture}
\begin{axis}[
grid=both,
xlabel={$E_b / N_0$}, ylabel={\acs{FER}},
ymode=log,
width=0.6\textwidth,
height=0.45\textwidth,
legend style={at={(0.5,-0.7)},anchor=south},
]
\addplot[RedOrange, 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{Barman et al.}
\addplot[NavyBlue, densely dashed, line width=1pt, mark=triangle]
table [col sep=comma, x=SNR, y=FER,]
{/home/andreas/git/ba_sw/scripts/admm/sim_results/ber_margulis264013203.csv};
\addlegendentry{Own results}
\end{axis}
\end{tikzpicture}
\caption{Comparison of datapoints from Barman et al. with own simulation results%
\protect\footnotemark{}}
\label{fig:admm:results}
\end{figure}%
%
\footnotetext{``Margulis'' \ac{LDPC} code with $n = 2640$, $k = 1320$
\cite[\text{Margulis2640.1320.3}]{mackay_enc}; $K=200, \mu = 3.3, \rho=1.9,
\epsilon_{\text{pri}} = 10^{-5}, \epsilon_{\text{dual}} = 10^{-5}$
}%
%
\begin{figure}[H]
\centering
@ -339,22 +303,9 @@ more arithmetic operations are necessary in each iteration.
table [x=SNR, y=FER, col sep=comma, discard if not={mu}{3.0}]
%{res/hybrid/2d_ber_fer_dfr_963965.csv};
{res/admm/ber_2d_963965.csv};
% \addplot[NavyBlue, mark=*, solid]
% table [x=SNR, y=FER, col sep=comma, discard if not={gamma}{0.01}]
% {res/proximal/2d_ber_fer_dfr_963965.csv};
% \addplot[RoyalPurple, mark=triangle, densely dashed]
% table [x=SNR, y=FER, col sep=comma, discard if not={gamma}{0.01}]
% %{res/hybrid/2d_ber_fer_dfr_963965.csv};
% {res/hybrid/2d_ber_fer_dfr_963965.csv};
%
% \addplot[RedOrange, mark=*, solid]
% table [x=SNR, y=FER, col sep=comma, discard if not={gamma}{0.05}]
% {res/proximal/2d_ber_fer_dfr_963965.csv};
% \addplot[red, mark=triangle, densely dashed]
% table [x=SNR, y=FER, col sep=comma, discard if not={gamma}{0.05}]
% %{res/hybrid/2d_ber_fer_dfr_963965.csv};
% {res/hybrid/2d_ber_fer_dfr_963965.csv};
\addplot[PineGreen, line width=1pt, mark=triangle]
table [col sep=comma, x=SNR, y=FER,]
{res/generic/fer_ml_9633965.csv};
\end{axis}
\end{tikzpicture}
@ -404,12 +355,19 @@ more arithmetic operations are necessary in each iteration.
]
\addplot[RedOrange, mark=*, solid]
table [x=SNR, y=FER, col sep=comma, discard if not={gamma}{0.05}]
table [x=SNR, y=FER, col sep=comma,
discard if not={gamma}{0.05},
discard if gt={SNR}{5.5}]
{res/proximal/2d_ber_fer_dfr_20433484.csv};
\addplot[NavyBlue, mark=triangle, densely dashed]
table [x=SNR, y=FER, col sep=comma, discard if not={mu}{3.0}]
%{res/hybrid/2d_ber_fer_dfr_963965.csv};
table [x=SNR, y=FER, col sep=comma,
discard if not={mu}{3.0},
discard if gt={SNR}{5.5}]
{res/admm/ber_2d_20433484.csv};
\addplot[PineGreen, line width=1pt, mark=triangle]
table [col sep=comma, x=SNR, y=FER,
discard if gt={SNR}{5.5}]
{res/generic/fer_ml_20433484.csv};
\end{axis}
\end{tikzpicture}
@ -514,8 +472,11 @@ more arithmetic operations are necessary in each iteration.
\addlegendimage{RedOrange, mark=*, solid}
\addlegendentry{Proximal decoding}
\addlegendimage{NavyBlue, mark=triange, densely dashed}
\addlegendimage{NavyBlue, mark=triangle, densely dashed}
\addlegendentry{\acs{LP} decoding using \acs{ADMM}}
\addlegendimage{PineGreen, mark=triangle*, solid}
\addlegendentry{\acs{ML} decoding}
\end{axis}
\end{tikzpicture}
\end{subfigure}
@ -533,16 +494,17 @@ more arithmetic operations are necessary in each iteration.
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[RedOrange, only marks, mark=*]
table [col sep=comma, x=n, y=spf]
% \addlegendentry{Proximal decoding}
{res/proximal/fps_vs_n.csv};
\addplot[NavyBlue, only marks, mark=triangle*]
\addlegendentry{Proximal decoding}
\addplot[PineGreen, only marks, mark=triangle*]
table [col sep=comma, x=n, y=spf]
{res/admm/fps_vs_n.csv};
% \addlegendentry{\acs{LP} decoding using \acs{ADMM}}
\addlegendentry{\acs{LP} decoding using \acs{ADMM}}
\end{axis}
\end{tikzpicture}

View File

@ -1,7 +1,16 @@
\chapter{\acs{LP} Decoding using \acs{ADMM}}%
\label{chapter:lp_dec_using_admm}
TODO
This chapter is concerned with \ac{LP} decoding - the reformulation of the
decoding problem as a linear program.
More specifically, the \ac{LP} decoding problem is solved using \ac{ADMM}.
First, the general field of \ac{LP} decoding is introduced.
The application of \ac{ADMM} to the decoding problem is explained.
Some notable implementation details are mentioned.
Finally, the behavior of the algorithm is examined based on simulation
results.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@ -677,6 +686,8 @@ handled at the same time.
This can also be understood by interpreting the decoding process as a message-passing
algorithm \cite[Sec. III. D.]{original_admm}, \cite[Sec. II. B.]{efficient_lp_dec_admm},
depicted in algorithm \ref{alg:admm}.
\todo{How are the variables being initialized?}
\todo{Overrelaxation}
\begin{genericAlgorithm}[caption={\ac{LP} decoding using \ac{ADMM} interpreted
as a message passing algorithm\protect\footnotemark{}}, label={alg:admm},
@ -699,6 +710,7 @@ while $\sum_{j\in\mathcal{J}} \lVert \boldsymbol{T}_j\tilde{\boldsymbol{c}} - \b
\Big) - \frac{\gamma_i}{\mu} \right)$
end for
end while
return $\tilde{\boldsymbol{c}}$
\end{genericAlgorithm}
%
\footnotetext{$\epsilon_{\text{pri}} > 0$ and $\epsilon_{\text{dual}} > 0$
@ -787,8 +799,212 @@ the $\tilde{\boldsymbol{c}}$ update can then be rewritten as%
.\end{align*}
%
This modified version of the decoding process is depicted in algorithm \ref{alg:admm:mod}.
\begin{genericAlgorithm}[caption={\ac{LP} decoding using \ac{ADMM} algorithm with rewritten
update steps}, label={alg:admm:mod},
basicstyle=\fontsize{11}{16}\selectfont
]
Initialize $\tilde{\boldsymbol{c}}, \boldsymbol{z}_{[1:m]}$ and $\boldsymbol{u}_{[1:m]}$
while $\sum_{j\in\mathcal{J}} \lVert \boldsymbol{T}_j\tilde{\boldsymbol{c}}
- \boldsymbol{z}_j \rVert_2 \ge \epsilon_{\text{pri}}$ or $\sum_{j\in\mathcal{J}}
\lVert \boldsymbol{z}^\prime_j - \boldsymbol{z}_j \rVert_2 \ge \epsilon_{\text{dual}}$ do
$\boldsymbol{s} \leftarrow \boldsymbol{0}$
for $j$ in $\mathcal{J}$ do
$\boldsymbol{z}_j \leftarrow \Pi_{\mathcal{P}_{d_j}}\left(
\boldsymbol{T}_j\tilde{\boldsymbol{c}} + \boldsymbol{u}_j \right)$
$\boldsymbol{u}_j \leftarrow \boldsymbol{u}_j
+ \boldsymbol{T}_j\tilde{\boldsymbol{c}}
- \boldsymbol{z}_j$
$\boldsymbol{s} \leftarrow \boldsymbol{s} + \boldsymbol{T}_j
\left( \boldsymbol{z}_j - \boldsymbol{u}_j \right) $
end for
for $i$ in $\mathcal{I}$ do
$\tilde{\boldsymbol{c}} \leftarrow \boldsymbol{D}^{\circ -1} \circ
\left( \boldsymbol{s} - \frac{1}{\mu}\boldsymbol{\gamma} \right) $
end for
end while
return $\tilde{\boldsymbol{c}}$
\end{genericAlgorithm}
\todo{Projection onto $[0, 1]^n$?}
\todo{Variable initialization}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Results}%
\label{sec:lp:Results}
%\begin{figure}[H]
% \centering
%
% \begin{tikzpicture}
% \begin{axis}[
% colormap/viridis,
% xlabel={$E_b / N_0$}, ylabel={$\mu$}, zlabel={\acs{BER}},
% view={75}{30},
% zmode=log,
% ]
% \addplot3[
% surf,
% mesh/rows=14, mesh/cols=18
% ]
% table [col sep=comma, x=SNR, y=mu, z=BER]
% {res/admm/ber_2d_20433484.csv};
% \end{axis}
% \end{tikzpicture}
%\end{figure}
%
%\begin{figure}[H]
% \centering
%
% \begin{tikzpicture}
% \begin{axis}[
% colormap/viridis,
% xlabel={$E_b / N_0 2$}, ylabel={$\mu$}, zlabel={\acs{BER}},
% view={75}{30},
% zmode=log,
% ]
% \addplot3[
% surf,
% mesh/rows=14, mesh/cols=18
% ]
% table [col sep=comma, x=SNR, y=mu, z=BER]
% {/home/andreas/git/ba_sw/scripts/admm/sim_results/ber_2d_20433484.csv};
% \end{axis}
% \end{tikzpicture}
%\end{figure}
\textbf{Game Plan}
\begin{enumerate}
\item Determine parameters
\item Make non-regular admm implementation use indexing instead of matrix vector
multiplication and simulate the pegreg, bch and 204.55.187 codes (parameter choice)
\item Computational performance
\item Comparison of proximal and admm (decoding performance and computational performance)
\item Find different codewords
\item Examine weird behavior when c is allowed to be negative
\item BP as comparison
\item Combination of proximal and BP
\end{enumerate}
\begin{itemize}
\item Choice of Parameters (Take decomposition paper as guide)
\begin{itemize}
\item mu
\item K
\item rho
\item epsilon pri / epslion dual
\end{itemize}
\item Weird behavior when allowing c to take on negative values
\begin{itemize}
\item Double check the behavior is directly linked to allowing negative values
\item Maybe something to do with pseudocodewords when not rounding?
\item Not sure if behavior appears due to all zeros assumption not being satisfied
\end{itemize}
\item Decoding Performance
\begin{itemize}
\item FER and BER similar
\item DFR and FER pratically identical -> FER may be due to DFR
\item Compare to BP
\end{itemize}
\item Convergence Behavior
\begin{itemize}
\item Plot average error
\item Find out if converging to pseudocodeword or not converging.
How does pseudocodeword and not pseudocodeword relate to rounding and clipping?
\end{itemize}
\item Computational Performance
\begin{itemize}
\item Linear? Difficult to verify due to difference in adjustments
in the implementation for different codes
\end{itemize}
\end{itemize}
\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},
]
\addplot[RedOrange, 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=triangle]
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%
\protect\footnotemark{}}
\label{fig:admm:results}
\end{figure}%
%
\footnotetext{``Margulis'' \ac{LDPC} code with $n = 2640$, $k = 1320$
\cite[\text{Margulis2640.1320.3}]{mackay_enc}; $K=200, \mu = 3.3, \rho=1.9,
\epsilon_{\text{pri}} = 10^{-5}, \epsilon_{\text{dual}} = 10^{-5}$
}%
%
\begin{figure}[H]
\centering
\begin{tikzpicture}
\begin{axis}[
grid=both,
xlabel={$\mu$}, ylabel={\acs{FER}},
ymode=log,
width=0.6\textwidth,
height=0.45\textwidth,
legend style={at={(0.5,-0.55)},anchor=south},
]
\addplot[ForestGreen, densely dashed, mark=*]
table [col sep=comma, x=mu, y=FER,
discard if not={SNR}{2.0},]
{res/admm/ber_2d_20433484.csv};
\addlegendentry{$E_b / N_0 = \SI{2}{dB}$}
\addplot[RedOrange, densely dashed, mark=*]
table [col sep=comma, x=mu, y=FER,
discard if not={SNR}{3.0},]
{res/admm/ber_2d_20433484.csv};
\addlegendentry{$E_b / N_0 = \SI{3}{dB}$}
\addplot[NavyBlue, densely dashed, mark=*]
table [col sep=comma, x=mu, y=FER,
discard if not={SNR}{4.0},]
{res/admm/ber_2d_20433484.csv};
\addlegendentry{$E_b / N_0 = \SI{4}{dB}$}
\end{axis}
\end{tikzpicture}
\caption{Visualization of the relationship between the decoding performance%
\protect\footnotemark{}and the parameter $\mu$}
\label{fig:admm:results}
\end{figure}%
%
\footnotetext{(3,6) regular \ac{LDPC} code with $n = 204$, $k = 102$
\cite[\text{204.33.484}]{mackay_enc}; $K=200, \rho=1, \epsilon_\text{pri} = 10^{-5},
\epsilon_\text{dual} = 10^{-5}$
}%
%

View File

@ -0,0 +1,9 @@
,SNR,FER
0,0.9868766404199476,0.7914135529980044
1,1.288713910761155,0.2149640062907639
2,1.435695538057743,0.1346395694171198
3,1.5826771653543306,0.0261816550874433
4,1.8687664041994752,0.0010584575370171914
5,2.144356955380577,1.2426236719115031e-05
6,2.280839895013123,1.618074630152863e-06
7,2.406824146981627,7.255504808245653e-07
1 SNR FER
2 0 0.9868766404199476 0.7914135529980044
3 1 1.288713910761155 0.2149640062907639
4 2 1.435695538057743 0.1346395694171198
5 3 1.5826771653543306 0.0261816550874433
6 4 1.8687664041994752 0.0010584575370171914
7 5 2.144356955380577 1.2426236719115031e-05
8 6 2.280839895013123 1.618074630152863e-06
9 7 2.406824146981627 7.255504808245653e-07

View File

@ -0,0 +1,10 @@
SNR,FER,num_errors,num_iterations
1.00,1.193e-01,100,838
1.50,4.002e-02,100,2499
2.00,6.572e-03,100,15216
2.50,6.019e-04,100,166127
3.00,7.677e-05,100,1302564
3.50,1.562e-05,100,6401819
4.00,4.406e-06,100,22694922
4.50,1.103e-06,100,90621994
5.00,2.800e-07,28,100000000
1 SNR FER num_errors num_iterations
2 1.00 1.193e-01 100 838
3 1.50 4.002e-02 100 2499
4 2.00 6.572e-03 100 15216
5 2.50 6.019e-04 100 166127
6 3.00 7.677e-05 100 1302564
7 3.50 1.562e-05 100 6401819
8 4.00 4.406e-06 100 22694922
9 4.50 1.103e-06 100 90621994
10 5.00 2.800e-07 28 100000000

View File

@ -0,0 +1,12 @@
SNR,FER,num_errors,num_iterations
1.00,1.724e-01,100,580
1.50,6.752e-02,100,1481
2.00,2.565e-02,100,3898
2.50,9.100e-03,100,10989
3.00,2.386e-03,100,41914
3.50,6.214e-04,100,160939
4.00,1.797e-04,100,556583
4.50,4.750e-05,100,2105114
5.00,1.802e-05,100,5549579
5.50,4.103e-06,100,24374790
6.00,9.400e-07,94,100000000
1 SNR FER num_errors num_iterations
2 1.00 1.724e-01 100 580
3 1.50 6.752e-02 100 1481
4 2.00 2.565e-02 100 3898
5 2.50 9.100e-03 100 10989
6 3.00 2.386e-03 100 41914
7 3.50 6.214e-04 100 160939
8 4.00 1.797e-04 100 556583
9 4.50 4.750e-05 100 2105114
10 5.00 1.802e-05 100 5549579
11 5.50 4.103e-06 100 24374790
12 6.00 9.400e-07 94 100000000