\section{Comparison}%
\label{sec:Comparison}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{Comparison of Simulation Results}%
\label{sub:Comparison of Simulation Results}

\begin{frame}[t]
    \frametitle{Decoding Performance}
   
    \vspace*{-5mm}

    \begin{figure}[H]
        \centering
    
        \begin{tikzpicture}
            \begin{axis}[
                grid=both,
                xlabel={$E_b / N_0 \left( \text{dB} \right) $}, ylabel={FER},
                ymode=log,
                ymax=1.5, ymin=5e-5,
                legend columns = 3,
                legend style={at={(0.5,-0.5)},anchor=south},
                width=0.45\textwidth,
                height=0.3375\textwidth,
            ]
        
                \addplot[RedOrange, line width=1pt, mark=*, solid]
                    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};
                \addlegendentry{Proximal decoding}
                \addplot[NavyBlue, line width=1pt, mark=triangle, densely dashed]
                    table [x=SNR, y=FER, col sep=comma,
                           discard if not={mu}{3.0},
                           discard if gt={SNR}{4.0}]
                        {res/admm/ber_2d_20433484.csv};
                \addlegendentry{ADMM}
                \addplot[PineGreen, line width=1pt, mark=triangle, solid]
                    table [col sep=comma, x=SNR, y=FER,
                           discard if gt={SNR}{3.0}]
                        {res/generic/fer_ml_20433484.csv};
                \addlegendentry{ML}
            \end{axis}
        \end{tikzpicture}

        \caption{Comparison of FER of proximal decoding and LP decoding using ADMM%
            \protect\footnotemark{}}
    \end{figure}%

    \footnotetext{Simulation performed with (3,6) regular LDPC code with $n=204, k=102$
        \cite[Code: 204.33.484]{mackay_enc}}
\end{frame}

\begin{frame}[t]
    \frametitle{Decoding Performance}
    
    \captionsetup[subfigure]{font=footnotesize}

    \hspace*{-0.4cm}
    \begin{minipage}[c]{0.9\textwidth}
        \centering
    
        \begin{figure}[H]
            \vspace*{-0.7cm}
            \centering
        
            \begin{subfigure}[t]{0.33\textwidth}
                \centering
            
                \begin{tikzpicture}[scale=0.8]
                    \begin{axis}[
                        grid=both,
                        xlabel={$E_b / N_0$ (dB)}, ylabel={FER},
                        ymode=log,
                        ymax=1.5, ymin=8e-5,
                        width=1.2\textwidth,
                        height=0.85\textwidth,
                    ]

                        \addplot[RedOrange, line width=1pt, 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[NavyBlue, line width=1pt, 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};
                                {res/admm/ber_2d_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}

                \vspace*{-1mm}
            
                \caption{$\left( 3, 6 \right)$-regular LDPC code with $n=96, k=48$
                    \cite[\text{96.3.965}]{mackay_enc}}
            \end{subfigure}%
            \begin{subfigure}[t]{0.33\textwidth}
                \centering
            
                \begin{tikzpicture}[scale=0.8]
                    \begin{axis}[
                        grid=both,
                        xlabel={$E_b / N_0$ (dB)}, ylabel={FER},
                        ymode=log,
                        ymax=1.5, ymin=8e-5,
                        width=1.2\textwidth,
                        height=0.85\textwidth,
                    ]
                
                        \addplot[RedOrange, line width=1pt, mark=*, solid]
                            table [x=SNR, y=FER, col sep=comma, discard if not={gamma}{0.05}]
                                {res/proximal/2d_ber_fer_dfr_bch_31_26.csv};
                        \addplot[NavyBlue, line width=1pt, mark=triangle, densely dashed]
                            table [x=SNR, y=FER, col sep=comma, discard if not={mu}{3.0}]
                                {res/admm/ber_2d_bch_31_26.csv};
    %                    \addplot[PineGreen, line width=1pt, mark=triangle*]
    %                        table [x=SNR, y=FER, col sep=comma,
    %                               discard if gt={SNR}{5.5},
    %                               discard if lt={SNR}{1},
    %                               ]
    %                            {res/generic/fer_ml_bch_31_26.csv};
                    \end{axis}
                \end{tikzpicture}
            
                \vspace*{-1mm}
            
                \caption{BCH code with $n=31, k=26$}
            \end{subfigure}%
            \begin{subfigure}[t]{0.33\textwidth}
                \centering
            
                \begin{tikzpicture}[scale=0.8]
                    \begin{axis}[
                        grid=both,
                        xlabel={$E_b / N_0$ (dB)}, ylabel={FER},
                        ymode=log,
                        ymax=1.5, ymin=8e-5,
                        width=1.2\textwidth,
                        height=0.85\textwidth,
                    ]
                
                        \addplot[RedOrange, line width=1pt, mark=*, solid]
                            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, line width=1pt, mark=triangle, densely dashed]
                            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, solid]
    %                        table [col sep=comma, x=SNR, y=FER,
    %                               discard if gt={SNR}{5.5}]
    %                            {res/generic/fer_ml_20433484.csv};
                    \end{axis}
                \end{tikzpicture}
            
                \vspace*{-1mm}
            
                \caption{$\left( 3, 6 \right)$-regular LDPC code with $n=204, k=102$
                    \cite[\text{204.33.484}]{mackay_enc}}
            \end{subfigure}%

            \begin{subfigure}[t]{0.33\textwidth}
                \centering
            
                \begin{tikzpicture}[scale=0.8]
                    \begin{axis}[
                        grid=both,
                        xlabel={$E_b / N_0$ (dB)}, ylabel={FER},
                        ymode=log,
                        ymax=1.5, ymin=8e-5,
                        width=1.2\textwidth,
                        height=0.85\textwidth,
                    ]
                
                        \addplot[RedOrange, line width=1pt, mark=*, solid]
                            table [x=SNR, y=FER, col sep=comma, discard if not={gamma}{0.05}]
                                {res/proximal/2d_ber_fer_dfr_20455187.csv};
                        \addplot[NavyBlue, line width=1pt, mark=triangle, densely dashed]
                            table [x=SNR, y=FER, col sep=comma, discard if not={mu}{3.0}]
                                {res/admm/ber_2d_20455187.csv};
                    \end{axis}
                \end{tikzpicture}
            
                \vspace*{-1mm}
            
                \caption{$\left( 5, 10 \right)$-regular LDPC code with $n=204, k=102$
                    \cite[\text{204.55.187}]{mackay_enc}}
            \end{subfigure}%
            \begin{subfigure}[t]{0.33\textwidth}
                \centering
            
                \begin{tikzpicture}[scale=0.8]
                    \begin{axis}[
                        grid=both,
                        xlabel={$E_b / N_0$ (dB)}, ylabel={FER},
                        ymode=log,
                        ymax=1.5, ymin=8e-5,
                        width=1.2\textwidth,
                        height=0.85\textwidth,
                    ]
                
                        \addplot[RedOrange, line width=1pt, mark=*, solid]
                            table [x=SNR, y=FER, col sep=comma, discard if not={gamma}{0.05}]
                                {res/proximal/2d_ber_fer_dfr_40833844.csv};
                        \addplot[NavyBlue, line width=1pt, mark=triangle, densely dashed]
                            table [x=SNR, y=FER, col sep=comma, discard if not={mu}{3.0}]
                                {res/admm/ber_2d_40833844.csv};
                    \end{axis}
                \end{tikzpicture}

                \vspace*{-1mm}
            
                \caption{$\left( 3, 6 \right)$-regular LDPC code with $n=204, k=102$
                    \cite[\text{204.33.484}]{mackay_enc}}
            \end{subfigure}%
            \begin{subfigure}[t]{0.33\textwidth}
                \centering
            
                \begin{tikzpicture}[scale=0.8]
                    \begin{axis}[
                        grid=both,
                        xlabel={$E_b / N_0$ (dB)}, ylabel={FER},
                        ymode=log,
                        ymax=1.5, ymin=8e-5,
                        width=1.2\textwidth,
                        height=0.85\textwidth,
                    ]
                
                        \addplot[RedOrange, line width=1pt, mark=*, solid]
                            table [x=SNR, y=FER, col sep=comma, discard if not={gamma}{0.05}]
                                {res/proximal/2d_ber_fer_dfr_pegreg252x504.csv};
                        \addplot[NavyBlue, line width=1pt, mark=triangle, densely dashed]
                            table [x=SNR, y=FER, col sep=comma, discard if not={mu}{3.0}]
                                {res/admm/ber_2d_pegreg252x504.csv};
                    \end{axis}
                \end{tikzpicture}
            
                \vspace*{-1mm}
                
                \caption{LDPC code (progressive edge growth construction) with $n=504, k=252$
                    \cite[\text{PEGReg252x504}]{mackay_enc}}
            \end{subfigure}%
        \end{figure}
    \end{minipage}%
    \begin{minipage}[c]{0.1\textwidth}
        \centering
    
        \begin{figure}
            \centering
            \vspace*{-1.2cm}
            \hspace*{2mm}
            \begin{tikzpicture}[scale=0.8]
                \begin{axis}[hide axis,
                             xmin=10, xmax=50,
                             ymin=0, ymax=0.4,
                             legend columns=1,
                             legend style={draw=white!15!black}]
                    \addlegendimage{RedOrange, line width=1pt, mark=*, solid}
                    \addlegendentry{Proximal}
                   
                    \addlegendimage{NavyBlue, line width=1pt, mark=triangle, densely dashed}
                    \addlegendentry{ADMM}
                    
%                    \addlegendimage{PineGreen, line width=1pt, mark=triangle*, solid}
%                    \addlegendentry{ML}
                \end{axis}
            \end{tikzpicture}
        \end{figure}
    \end{minipage}

\end{frame}

\begin{frame}[t]
    \frametitle{Time Complexity}
   
    \vspace*{-8mm}

    \begin{itemize}
        \item Both algorithms are $\mathcal{O}\left( n \right)$ on average
        \item LP decoding implementation significantly faster
    \end{itemize}

    \begin{figure}[h]
        \centering

        \begin{tikzpicture}
            \begin{axis}[grid=both,
                         xlabel={$n$}, ylabel={Time per frame (s)},
                         width=0.45\textwidth,
                         height=0.3375\textwidth,
                         legend style={at={(0.03,0.96)},anchor=north west},
                         %legend pos=outer north east,
                         legend cell align={left},]

                \addplot[RedOrange, only marks, mark=*]
                    table [col sep=comma, x=n, y=spf]
                        {res/proximal/fps_vs_n.csv};
                \addlegendentry{Proximal decoding}
                \addplot[RoyalPurple, only marks, mark=triangle*]
                    table [col sep=comma, x=n, y=spf]
                        {res/admm/fps_vs_n.csv};
                \addlegendentry{ADMM}
            \end{axis}
        \end{tikzpicture}
    
        \vspace*{-2mm}

        \caption{Timing requirements of the proximal decoding and LP decoding imlementations%
            \protect\footnotemark{}}
    \end{figure}%
    
    \footnotetext{The points shown were calculated by evaluating the metadata
                  of BER simulation results for the following codes:
                  BCH $\left( 31, 11 \right)$;
                  BCH $\left( 31, 26 \right)$;
                  \cite[\text{96.3.965; 204.33.484;
                        204.55.187; 408.33.844; PEGReg252x504}]{mackay_enc}
              }
\end{frame}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{Theoretical Comparison}%
\label{sub:Theoretical Comparison}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{frame}[t, fragile]
    \frametitle{Comparison of Proximal Decoding and\\LP Decoding using ADMM}

    \vspace*{-1cm}

    \begin{figure}[h]
    \centering
   
    \begin{subfigure}[b]{0.47\textwidth}
        \centering
   
        \begin{align*}
            \text{minimize}\hspace{2mm}   & \textcolor{KITblue}{\underbrace{L\left(
                    \boldsymbol{y} \mid \tilde{\boldsymbol{x}} \right)}_{\text{Likelihood}}}
                    + \textcolor{KITred}{\underbrace{\gamma h\left( \tilde{\boldsymbol{x}}
                        \right)} _{\text{Constraints}}} \\
            \text{subject to}\hspace{2mm} &\tilde{\boldsymbol{x}} \in \mathbb{R}^n
        \end{align*}
       
        \vspace*{-5mm}

        \begin{algorithm}[caption={}, label={},
            basicstyle=\fontsize{10}{18}\selectfont
            ]
Initialize $\boldsymbol{r}, \boldsymbol{s}, \omega, \gamma$
while stopping critierion unfulfilled do
    $\textcolor{KITblue}{\boldsymbol{r} \leftarrow \boldsymbol{r}
        + \omega \nabla L\left( \boldsymbol{y} \mid \boldsymbol{s} \right)} $
    $\textcolor{KITred}{\boldsymbol{s} \leftarrow
        \textbf{prox}_{\gamma h}\left( \boldsymbol{r} \right)} $|\Suppressnumber|
|\Reactivatenumber|
end while
return $\boldsymbol{s}$
        \end{algorithm}
    \end{subfigure}\hfill%
    \begin{subfigure}[b]{0.5\textwidth}
        \centering
        
        \begin{align*}
            \text{minimize}\hspace{5mm} &
                \textcolor{KITblue}{\underbrace{\boldsymbol{\gamma}^\text{T}
                    \tilde{\boldsymbol{c}}}_{\text{Likelihood}}}
                + \textcolor{KITred}{\underbrace{\sum\nolimits_{j\in\mathcal{J}}
                    g_j\left( \boldsymbol{T}_j\tilde{\boldsymbol{c}}
                    \right)}_{\text{Constraints}}} \\
            \text{subject to}\hspace{5mm} &
                \tilde{\boldsymbol{c}} \in \left[ 0, 1 \right]^n
        \end{align*}
        
        \vspace*{-5mm}
    
        \begin{algorithm}[caption={}, label={},
            basicstyle=\fontsize{10}{18}\selectfont
            ]
Initialize $\tilde{\boldsymbol{c}}, \boldsymbol{z}, \boldsymbol{u}, \boldsymbol{\gamma}, \rho$
while stopping criterion unfulfilled do
    $\textcolor{KITblue}{\tilde{\boldsymbol{c}} \leftarrow \argmin_{\tilde{\boldsymbol{c}}}
        \left( \boldsymbol{\gamma}^\text{T}\tilde{\boldsymbol{c}}
        + \frac{\rho}{2}\sum_{j\in\mathcal{J}} \left\Vert
            \boldsymbol{T}_j\tilde{\boldsymbol{c}} - \boldsymbol{z}_j
            + \boldsymbol{u}_j \right\Vert \right)}$
    $\textcolor{KITred}{\boldsymbol{z}_j \leftarrow \textbf{prox}_{g_j}
        \left( \boldsymbol{T}_j\tilde{\boldsymbol{c}}
        + \boldsymbol{u}_j \right), \hspace{5mm}\forall j\in\mathcal{J}}$
    $\boldsymbol{u}_j \leftarrow \boldsymbol{u}_j
        + \tilde{\boldsymbol{c}} - \boldsymbol{z}_j, \hspace{14.5mm}\forall j\in\mathcal{J}$
end while
return $\tilde{\boldsymbol{c}}$
        \end{algorithm}
    \end{subfigure}%
\end{figure}%

\end{frame}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{frame}[t, fragile]
    \frametitle{Comparison of Proximal Decoding and\\LP Decoding using ADMM}
   
    \vspace*{-1cm}

    \begin{figure}[h]
        \centering

        \begin{subfigure}{0.48\textwidth}
            \centering
            
            \begin{algorithm}[caption={}, label={},]
Initialize $\boldsymbol{r}, \boldsymbol{s}, \omega, \gamma$
while stopping critierion unfulfilled do
    for j in $\mathcal{J}$ do
        $p_j \leftarrow \prod_{i\in N_c\left( j \right) } r_i $
        $\textcolor{KITblue}{M_{j\to i} \leftarrow p_j^2 - p_j}$|\Suppressnumber|
|\vspace{0.7mm}\Reactivatenumber|
    end for
    for i in $\mathcal{I}$ do
        $s_i \leftarrow s_i + \gamma \left[ 4\left( s_i^2 - 1 \right)s_i
            \phantom{\frac{4}{s_i}}\right.$|\Suppressnumber|
                            |\Reactivatenumber|$\left.+ \frac{4}{s_i}\sum_{j\in N_v\left( i \right) }
                                M_{j\to i} \right] $
        $r_i \leftarrow r_i + \omega \left( s_i - y_i \right)$
    end for
end while
return $\boldsymbol{s}$
            \end{algorithm}
        \end{subfigure}%
        \hfill
        \begin{subfigure}{0.48\textwidth}
            \centering
            
            \begin{algorithm}[caption={}, label={},]
Initialize $\tilde{\boldsymbol{c}}, \boldsymbol{z}, \boldsymbol{u}, \boldsymbol{\gamma}, \rho$
while stopping criterion unfulfilled do
    for j in $\mathcal{J}$ do
        $\boldsymbol{z}_j \leftarrow \Pi_{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$
        $\textcolor{KITblue}{M_{j\to i} \leftarrow \left( z_j \right)_i - \left( u_j \right)_i,
            \hspace{3mm} \forall i \in N_c\left( j \right)}$
    end for
    for i in $\mathcal{I}$ do
        $\tilde{c}_i \leftarrow \frac{1}{d_i}
            \left(\sum_{j\in N_v\left( i \right) } M_{j\to i}
                - \frac{\gamma_i}{\mu} \right)$|\Suppressnumber|
|\vspace{7mm}\Reactivatenumber|
    end for
end while
return $\tilde{\boldsymbol{c}}$
            \end{algorithm}
        \end{subfigure}%
    \end{figure}%
\end{frame}

\begin{frame}[t]
    \frametitle{Conclusion}
   
    \begin{itemize}
        \item Analysis of the general behavior of the two decoding algorithms
            \begin{itemize}
                \item Parameter choice based on decoding performance and time complexity
                \item Verification of theoretical considerations with simulation results
            \end{itemize}
        \item Suggestion for improvement of proximal decoding
            \begin{itemize}
                \item Addition of "ML-in-the-List" step
                \item Up to $\sim \SI{1}{dB}$ gain under certain conditions
            \end{itemize}
        \item Comparison
            \begin{itemize}
                \item based on simulation results
                \item based on their theoretical structure
            \end{itemize}
    \end{itemize}
\end{frame}
