diff --git a/latex/thesis/chapters/comparison.tex b/latex/thesis/chapters/comparison.tex index 171efe0..212b9b3 100644 --- a/latex/thesis/chapters/comparison.tex +++ b/latex/thesis/chapters/comparison.tex @@ -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} diff --git a/latex/thesis/chapters/lp_dec_using_admm.tex b/latex/thesis/chapters/lp_dec_using_admm.tex index 9547d6b..ecdb9ad 100644 --- a/latex/thesis/chapters/lp_dec_using_admm.tex +++ b/latex/thesis/chapters/lp_dec_using_admm.tex @@ -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}$ +}% +% diff --git a/latex/thesis/res/generic/fer_bp_mackay_margulis.csv b/latex/thesis/res/generic/fer_bp_mackay_margulis.csv new file mode 100644 index 0000000..2d15f99 --- /dev/null +++ b/latex/thesis/res/generic/fer_bp_mackay_margulis.csv @@ -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 diff --git a/latex/thesis/res/generic/fer_ml_20433484.csv b/latex/thesis/res/generic/fer_ml_20433484.csv new file mode 100644 index 0000000..e265e30 --- /dev/null +++ b/latex/thesis/res/generic/fer_ml_20433484.csv @@ -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 diff --git a/latex/thesis/res/generic/fer_ml_9633965.csv b/latex/thesis/res/generic/fer_ml_9633965.csv new file mode 100644 index 0000000..d083644 --- /dev/null +++ b/latex/thesis/res/generic/fer_ml_9633965.csv @@ -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