839 lines
27 KiB
TeX
839 lines
27 KiB
TeX
\section{LP Decoding using ADMM}%
|
||
\label{sec:LP Decoding using ADMM}
|
||
|
||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||
\subsection{LP Decoding}%
|
||
\label{sub:LP Decoding}
|
||
|
||
\begin{frame}[t]
|
||
\frametitle{LP Decoding \citereference{FWK05}}
|
||
|
||
\vspace*{-3mm}
|
||
|
||
\begin{itemize}
|
||
\item General reformulation of ML decoding as a linear program (LP)
|
||
% \item Codeword polytope:
|
||
% \begin{align*}
|
||
% \text{poly}\left( \mathcal{C} \right) =
|
||
% \left\{
|
||
% \sum_{\boldsymbol{c}\in\mathcal{C}}\alpha_{\boldsymbol{c}}
|
||
% \boldsymbol{c} : \alpha_{\boldsymbol{c}} \ge 0,
|
||
% \sum_{\boldsymbol{c}\in\mathcal{C}}\alpha_{\boldsymbol{c}} = 1
|
||
% \right\},
|
||
% \hspace{5mm} \alpha_{\boldsymbol{c}} \in \mathbb{R}_{\ge 0}
|
||
% \end{align*}
|
||
\item Cost function:
|
||
\begin{align*}
|
||
\boldsymbol{\gamma}^{T} \boldsymbol{c} = \sum_{i=1}^{n}
|
||
\gamma_i c_i,
|
||
\hspace{5mm}\gamma_i = \ln\left(
|
||
\frac{f_{Y_i \mid C_i}\left( y_i | c_i = 0 \right) }
|
||
{f_{Y_i \mid C_i}\left(y_i | c_i=1 \right) } \right)
|
||
\end{align*}
|
||
\item Exact \textit{integer linear programming} (ILP) formulation of ML decoding:
|
||
\begin{align*}
|
||
& \text{minimize } \boldsymbol{\gamma}^\text{T} \boldsymbol{c} \\
|
||
& \text{subject to } \boldsymbol{c}\in \mathcal{C}
|
||
\end{align*}
|
||
\item Goal: Relaxation of constraints to make a practical solution to the problem feasible
|
||
\end{itemize}
|
||
|
||
\bigskip
|
||
\bigskip
|
||
|
||
\addreference{FWK05}{J. Feldman; M.J. Wainwright; D.R. Karger: \emph{Using linear programming
|
||
to Decode Binary linear codes}.
|
||
IEEE Transactions on Information Theory 51.3 (2005), pp. 954–972.}
|
||
\end{frame}
|
||
|
||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||
\begin{frame}[t]
|
||
\frametitle{LP Decoding: Relaxation}
|
||
|
||
\vspace*{-1cm}
|
||
|
||
\begin{gather*}
|
||
% \boldsymbol{G} =
|
||
% \begin{bmatrix}
|
||
% 0 & 1 & 1
|
||
% \end{bmatrix} \hspace{1cm}
|
||
\boldsymbol{H} =
|
||
\begin{bmatrix}
|
||
1 & 1 & 1 \\
|
||
0 & 1 & 1
|
||
\end{bmatrix} \hspace{1cm}
|
||
% \\[1em]
|
||
\mathcal{C} = \left\{ \begin{bmatrix} 0 \\ 0 \\ 0 \end{bmatrix},
|
||
\begin{bmatrix} 0 \\ 1 \\ 1 \end{bmatrix} \right\}
|
||
\end{gather*}%
|
||
|
||
\vspace*{-5mm}
|
||
|
||
\begin{figure}[H]
|
||
\centering
|
||
|
||
\begin{subfigure}[c]{0.4\textwidth}
|
||
\centering
|
||
|
||
\tikzstyle{codeword} = [color=KITblue, fill=KITblue,
|
||
draw, circle, inner sep=0pt, minimum size=4pt]
|
||
|
||
\tdplotsetmaincoords{60}{25}
|
||
\begin{tikzpicture}[scale=0.9, tdplot_main_coords]
|
||
\tikzstyle{every node}=[font=\normalsize]
|
||
|
||
% Cube
|
||
|
||
\coordinate (p000) at (0, 0, 0);
|
||
\coordinate (p001) at (0, 0, 2);
|
||
\coordinate (p010) at (0, 2, 0);
|
||
\coordinate (p011) at (0, 2, 2);
|
||
\coordinate (p100) at (2, 0, 0);
|
||
\coordinate (p101) at (2, 0, 2);
|
||
\coordinate (p110) at (2, 2, 0);
|
||
\coordinate (p111) at (2, 2, 2);
|
||
|
||
\draw[] (p000) -- (p100);
|
||
\draw[] (p100) -- (p101);
|
||
\draw[] (p101) -- (p001);
|
||
\draw[] (p001) -- (p000);
|
||
|
||
\draw[dashed] (p010) -- (p110);
|
||
\draw[] (p110) -- (p111);
|
||
\draw[] (p111) -- (p011);
|
||
\draw[dashed] (p011) -- (p010);
|
||
|
||
\draw[dashed] (p000) -- (p010);
|
||
\draw[] (p100) -- (p110);
|
||
\draw[] (p101) -- (p111);
|
||
\draw[] (p001) -- (p011);
|
||
|
||
% Polytope Vertices
|
||
|
||
\node[codeword] (c000) at (p000) {};
|
||
\node[codeword] (c011) at (p011) {};
|
||
|
||
% Polytope Annotations
|
||
|
||
\node[color=KITblue, below=0cm of c000] {$\left( 0, 0, 0 \right) $};
|
||
\node[color=KITblue, above=0cm of c011] {$\left( 0, 1, 1 \right) $};
|
||
\end{tikzpicture}
|
||
|
||
\caption{Set of all codewords $\mathcal{C}$}
|
||
\label{fig:lp:poly:exact_ilp}
|
||
\end{subfigure}%
|
||
\begin{subfigure}[c]{0.16\textwidth}
|
||
\centering
|
||
\begin{tikzpicture}
|
||
\node (relaxation) at (0, 0) {Relaxation};
|
||
|
||
\draw (-1.5, 0) -- (relaxation);
|
||
\draw[->] (relaxation) -- (1.5, 0);
|
||
\end{tikzpicture}
|
||
\end{subfigure}%
|
||
\begin{subfigure}[c]{0.4\textwidth}
|
||
\centering
|
||
|
||
\tikzstyle{codeword} = [color=KITblue, fill=KITblue,
|
||
draw, circle, inner sep=0pt, minimum size=4pt]
|
||
|
||
\tdplotsetmaincoords{60}{25}
|
||
\begin{tikzpicture}[scale=0.9, tdplot_main_coords]
|
||
\tikzstyle{every node}=[font=\normalsize]
|
||
|
||
% Cube
|
||
|
||
\coordinate (p000) at (0, 0, 0);
|
||
\coordinate (p001) at (0, 0, 2);
|
||
\coordinate (p010) at (0, 2, 0);
|
||
\coordinate (p011) at (0, 2, 2);
|
||
\coordinate (p100) at (2, 0, 0);
|
||
\coordinate (p101) at (2, 0, 2);
|
||
\coordinate (p110) at (2, 2, 0);
|
||
\coordinate (p111) at (2, 2, 2);
|
||
|
||
\draw[] (p000) -- (p100);
|
||
\draw[] (p100) -- (p101);
|
||
\draw[] (p101) -- (p001);
|
||
\draw[] (p001) -- (p000);
|
||
|
||
\draw[dashed] (p010) -- (p110);
|
||
\draw[] (p110) -- (p111);
|
||
\draw[] (p111) -- (p011);
|
||
\draw[dashed] (p011) -- (p010);
|
||
|
||
\draw[dashed] (p000) -- (p010);
|
||
\draw[] (p100) -- (p110);
|
||
\draw[] (p101) -- (p111);
|
||
\draw[] (p001) -- (p011);
|
||
|
||
% Polytope Vertices
|
||
|
||
\node[codeword] (c000) at (p000) {};
|
||
\node[codeword] (c011) at (p011) {};
|
||
|
||
% Polytope Edges
|
||
|
||
\draw[line width=1pt, color=KITblue] (c000) -- (c011);
|
||
|
||
% Polytope Annotations
|
||
|
||
\node[color=KITblue, below=0cm of c000] {$\left( 0, 0, 0 \right) $};
|
||
\node[color=KITblue, above=0cm of c011] {$\left( 0, 1, 1 \right) $};
|
||
\end{tikzpicture}
|
||
|
||
\caption{Codeword polytope $\text{poly}\left( \mathcal{C} \right) $}
|
||
\label{fig:lp:poly:exact}
|
||
\end{subfigure}
|
||
\end{figure}
|
||
|
||
% \vspace*{-5mm}
|
||
|
||
\begin{align*}
|
||
\text{poly}\left( \mathcal{C} \right) =
|
||
\left\{
|
||
\sum_{\boldsymbol{c}\in\mathcal{C}}\alpha_{\boldsymbol{c}}
|
||
\boldsymbol{c} : \alpha_{\boldsymbol{c}} \ge 0,
|
||
\sum_{\boldsymbol{c}\in\mathcal{C}}\alpha_{\boldsymbol{c}} = 1
|
||
\right\},
|
||
\hspace{5mm} \alpha_{\boldsymbol{c}} \in \mathbb{R}_{\ge 0}
|
||
\end{align*}
|
||
\end{frame}
|
||
|
||
\begin{frame}[t]
|
||
\frametitle{LP Decoding: Relaxation}
|
||
|
||
\vspace*{-1cm}
|
||
|
||
\begin{figure}[H]
|
||
\centering
|
||
|
||
\begin{subfigure}[c]{0.48\textwidth}
|
||
\centering
|
||
|
||
\begin{minipage}{\textwidth}
|
||
\centering
|
||
|
||
\tikzstyle{codeword} = [color=KITblue, fill=KITblue,
|
||
draw, circle, inner sep=0pt, minimum size=4pt]
|
||
|
||
\tdplotsetmaincoords{60}{25}
|
||
\begin{tikzpicture}[scale=0.7, tdplot_main_coords]
|
||
\tikzstyle{every node}=[font=\normalsize]
|
||
|
||
% Cube
|
||
|
||
\coordinate (p000) at (0, 0, 0);
|
||
\coordinate (p001) at (0, 0, 2);
|
||
\coordinate (p010) at (0, 2, 0);
|
||
\coordinate (p011) at (0, 2, 2);
|
||
\coordinate (p100) at (2, 0, 0);
|
||
\coordinate (p101) at (2, 0, 2);
|
||
\coordinate (p110) at (2, 2, 0);
|
||
\coordinate (p111) at (2, 2, 2);
|
||
|
||
\draw[] (p000) -- (p100);
|
||
\draw[] (p100) -- (p101);
|
||
\draw[] (p101) -- (p001);
|
||
\draw[] (p001) -- (p000);
|
||
|
||
\draw[dashed] (p010) -- (p110);
|
||
\draw[] (p110) -- (p111);
|
||
\draw[] (p111) -- (p011);
|
||
\draw[dashed] (p011) -- (p010);
|
||
|
||
\draw[dashed] (p000) -- (p010);
|
||
\draw[] (p100) -- (p110);
|
||
\draw[] (p101) -- (p111);
|
||
\draw[] (p001) -- (p011);
|
||
|
||
% Polytope Vertices
|
||
|
||
\node[codeword] (c000) at (p000) {};
|
||
\node[codeword] (c101) at (p101) {};
|
||
\node[codeword] (c110) at (p110) {};
|
||
\node[codeword] (c011) at (p011) {};
|
||
|
||
% Polytope Edges & Faces
|
||
|
||
\draw[line width=1pt, color=KITblue] (c000) -- (c101);
|
||
\draw[line width=1pt, color=KITblue] (c000) -- (c110);
|
||
\draw[line width=1pt, color=KITblue] (c000) -- (c011);
|
||
|
||
\draw[line width=1pt, color=KITblue] (c101) -- (c110);
|
||
\draw[line width=1pt, color=KITblue] (c101) -- (c011);
|
||
|
||
\draw[line width=1pt, color=KITblue] (c011) -- (c110);
|
||
|
||
\fill[KITblue, opacity=0.15] (p000) -- (p101) -- (p011) -- cycle;
|
||
\fill[KITblue, opacity=0.15] (p000) -- (p110) -- (p101) -- cycle;
|
||
\fill[KITblue, opacity=0.15] (p110) -- (p011) -- (p101) -- cycle;
|
||
|
||
% Polytope Annotations
|
||
|
||
\node[color=KITblue, below=0cm of c000] {$\left( 0, 0, 0 \right) $};
|
||
\node[color=KITblue, right=0.07cm of c101] {$\left( 1, 0, 1 \right) $};
|
||
\node[color=KITblue, right=0cm of c110] {$\left( 1, 1, 0 \right) $};
|
||
\node[color=KITblue, above=0cm of c011] {$\left( 0, 1, 1 \right) $};
|
||
|
||
\node[color=KITblue, align=center] at (-4,1)
|
||
{$j=1$\\ $\left( c_1 + c_2+ c_3 = 0 \right) $};
|
||
\end{tikzpicture}
|
||
\end{minipage}
|
||
|
||
\vspace{5mm}
|
||
|
||
\begin{minipage}{\textwidth}
|
||
\centering
|
||
|
||
\tikzstyle{codeword} = [color=KITblue, fill=KITblue,
|
||
draw, circle, inner sep=0pt, minimum size=4pt]
|
||
|
||
\tdplotsetmaincoords{60}{25}
|
||
\begin{tikzpicture}[scale=0.7, tdplot_main_coords]
|
||
\tikzstyle{every node}=[font=\normalsize]
|
||
|
||
% Cube
|
||
|
||
\coordinate (p000) at (0, 0, 0);
|
||
\coordinate (p001) at (0, 0, 2);
|
||
\coordinate (p010) at (0, 2, 0);
|
||
\coordinate (p011) at (0, 2, 2);
|
||
\coordinate (p100) at (2, 0, 0);
|
||
\coordinate (p101) at (2, 0, 2);
|
||
\coordinate (p110) at (2, 2, 0);
|
||
\coordinate (p111) at (2, 2, 2);
|
||
|
||
\draw[] (p000) -- (p100);
|
||
\draw[] (p100) -- (p101);
|
||
\draw[] (p101) -- (p001);
|
||
\draw[] (p001) -- (p000);
|
||
|
||
\draw[dashed] (p010) -- (p110);
|
||
\draw[] (p110) -- (p111);
|
||
\draw[] (p111) -- (p011);
|
||
\draw[dashed] (p011) -- (p010);
|
||
|
||
\draw[dashed] (p000) -- (p010);
|
||
\draw[] (p100) -- (p110);
|
||
\draw[] (p101) -- (p111);
|
||
\draw[] (p001) -- (p011);
|
||
|
||
% Polytope Vertices
|
||
|
||
\node[codeword] (c000) at (p000) {};
|
||
\node[codeword] (c011) at (p011) {};
|
||
\node[codeword] (c100) at (p100) {};
|
||
\node[codeword] (c111) at (p111) {};
|
||
|
||
% Polytope Edges & Faces
|
||
|
||
\draw[line width=1pt, color=KITblue] (c000) -- (c011);
|
||
\draw[line width=1pt, color=KITblue] (c000) -- (c100);
|
||
\draw[line width=1pt, color=KITblue] (c100) -- (c111);
|
||
\draw[line width=1pt, color=KITblue] (c111) -- (c011);
|
||
|
||
\fill[KITblue, opacity=0.2] (p000) -- (p100) -- (p111) -- (p011) -- cycle;
|
||
|
||
% Polytope Annotations
|
||
|
||
\node[color=KITblue, below=0cm of c000] {$\left( 0, 0, 0 \right) $};
|
||
\node[color=KITblue, above=0cm of c011] {$\left( 0, 1, 1 \right) $};
|
||
\node[color=KITblue, below=0cm of c100] {$\left( 1, 0, 0 \right) $};
|
||
\node[color=KITblue, above=0cm of c111] {$\left( 1, 1, 1 \right) $};
|
||
|
||
\node[color=KITblue, align=center] at (-4,1)
|
||
{$j=2$\\ $\left(c_2 + c_3 = 0\right)$};
|
||
\end{tikzpicture}
|
||
\end{minipage}
|
||
|
||
\caption{Local codeword polytopes $\mathcal{P}_{d_j}$ of the check nodes}
|
||
\label{fig:lp:poly:local}
|
||
\end{subfigure}%
|
||
\begin{subfigure}[c]{0.18\textwidth}
|
||
\centering
|
||
\begin{tikzpicture}
|
||
\draw[densely dashed] (0, -2) -- (0, 2);
|
||
\draw[densely dashed] (-0.5, -2) -- (0, -2);
|
||
\draw[densely dashed] (-0.5, 2) -- (0, 2);
|
||
|
||
\node (intersection) at (1.5, 0) {Intersection};
|
||
|
||
\draw[densely dashed] (0, 0) -- (intersection);
|
||
\draw[densely dashed, ->] (intersection) -- (3,0);
|
||
\end{tikzpicture}
|
||
\end{subfigure}%
|
||
\begin{subfigure}[c]{0.32\textwidth}
|
||
\centering
|
||
|
||
\vspace*{1.5cm}
|
||
\tikzstyle{codeword} = [color=KITblue, fill=KITblue,
|
||
draw, circle, inner sep=0pt, minimum size=4pt]
|
||
\tikzstyle{pseudocodeword} = [color=KITred, fill=KITred,
|
||
draw, circle, inner sep=0pt, minimum size=4pt]
|
||
|
||
\tdplotsetmaincoords{60}{25}
|
||
\begin{tikzpicture}[scale=0.9, tdplot_main_coords]
|
||
\tikzstyle{every node}=[font=\normalsize]
|
||
|
||
% Cube
|
||
|
||
\coordinate (p000) at (0, 0, 0);
|
||
\coordinate (p001) at (0, 0, 2);
|
||
\coordinate (p010) at (0, 2, 0);
|
||
\coordinate (p011) at (0, 2, 2);
|
||
\coordinate (p100) at (2, 0, 0);
|
||
\coordinate (p101) at (2, 0, 2);
|
||
\coordinate (p110) at (2, 2, 0);
|
||
\coordinate (p111) at (2, 2, 2);
|
||
|
||
\draw[] (p000) -- (p100);
|
||
\draw[] (p100) -- (p101);
|
||
\draw[] (p101) -- (p001);
|
||
\draw[] (p001) -- (p000);
|
||
|
||
\draw[dashed] (p010) -- (p110);
|
||
\draw[] (p110) -- (p111);
|
||
\draw[] (p111) -- (p011);
|
||
\draw[dashed] (p011) -- (p010);
|
||
|
||
\draw[dashed] (p000) -- (p010);
|
||
\draw[] (p100) -- (p110);
|
||
\draw[] (p101) -- (p111);
|
||
\draw[] (p001) -- (p011);
|
||
|
||
% Polytope Vertices
|
||
|
||
\node[codeword] (c000) at (p000) {};
|
||
\node[codeword] (c011) at (p011) {};
|
||
\node[pseudocodeword] (cpseudo) at (2, 1, 1) {};
|
||
|
||
% Polytope Edges & Faces
|
||
|
||
\draw[line width=1pt, color=KITblue] (c000) -- (c011);
|
||
\draw[line width=1pt, color=KITred] (cpseudo) -- (c000);
|
||
\draw[line width=1pt, color=KITred] (cpseudo) -- (c011);
|
||
|
||
\fill[KITred, opacity=0.2] (p000) -- (p011) -- (2,1,1) -- cycle;
|
||
|
||
% Polytope Annotations
|
||
|
||
\node[color=KITblue, below=0cm of c000] {$\left( 0, 0, 0 \right) $};
|
||
\node[color=KITblue, above=0cm of c011] {$\left( 0, 1, 1 \right) $};
|
||
\node[color=KITred, right=0cm of cpseudo]
|
||
{$\left( 1, \frac{1}{2}, \frac{1}{2} \right) $};
|
||
\end{tikzpicture}
|
||
|
||
\vspace*{-5mm}
|
||
|
||
\begin{gather*}
|
||
\boldsymbol{T}_j\tilde{\boldsymbol{c}} \in \mathcal{P}_{d_j}, \hspace{2mm}
|
||
\forall j\in \mathcal{J} \\[0.5em]
|
||
\boldsymbol{T}_j \in \mathbb{F}_2^{d_j \times n}
|
||
\end{gather*}
|
||
|
||
\vspace*{-2mm}
|
||
|
||
\caption{Relaxed codeword polytope $\overline{Q}$}
|
||
\label{fig:lp:poly:relaxed}
|
||
\end{subfigure}
|
||
\end{figure}
|
||
\end{frame}
|
||
|
||
\begin{frame}[t]
|
||
\frametitle{LP Decoding: Relaxation}
|
||
|
||
\vspace{-5mm}
|
||
|
||
\begin{figure}[H]
|
||
\centering
|
||
|
||
\begin{subfigure}[t]{0.3\textwidth}
|
||
\centering
|
||
\tikzstyle{codeword} = [color=KITblue, fill=KITblue,
|
||
draw, circle, inner sep=0pt, minimum size=4pt]
|
||
\tdplotsetmaincoords{60}{25}
|
||
\begin{tikzpicture}[scale=0.8, tdplot_main_coords]
|
||
\tikzstyle{every node}=[font=\normalsize]
|
||
|
||
% Cube
|
||
|
||
\coordinate (p000) at (0, 0, 0);
|
||
\coordinate (p001) at (0, 0, 2);
|
||
\coordinate (p010) at (0, 2, 0);
|
||
\coordinate (p011) at (0, 2, 2);
|
||
\coordinate (p100) at (2, 0, 0);
|
||
\coordinate (p101) at (2, 0, 2);
|
||
\coordinate (p110) at (2, 2, 0);
|
||
\coordinate (p111) at (2, 2, 2);
|
||
|
||
\draw[] (p000) -- (p100);
|
||
\draw[] (p100) -- (p101);
|
||
\draw[] (p101) -- (p001);
|
||
\draw[] (p001) -- (p000);
|
||
|
||
\draw[dashed] (p010) -- (p110);
|
||
\draw[] (p110) -- (p111);
|
||
\draw[] (p111) -- (p011);
|
||
\draw[dashed] (p011) -- (p010);
|
||
|
||
\draw[dashed] (p000) -- (p010);
|
||
\draw[] (p100) -- (p110);
|
||
\draw[] (p101) -- (p111);
|
||
\draw[] (p001) -- (p011);
|
||
|
||
% Polytope Vertices
|
||
|
||
\node[codeword] (c000) at (p000) {};
|
||
\node[codeword] (c011) at (p011) {};
|
||
|
||
% Polytope Annotations
|
||
|
||
\node[color=KITblue, below=0cm of c000] {$\left( 0, 0, 0 \right) $};
|
||
\node[color=KITblue, above=0cm of c011] {$\left( 0, 1, 1 \right) $};
|
||
\end{tikzpicture}
|
||
|
||
\begin{align*}
|
||
\text{minimize}\hspace{2mm} & \boldsymbol{\gamma}^\text{T} \boldsymbol{c} \\
|
||
\text{subject to}\hspace{2mm} & \boldsymbol{c} \in \mathcal{C}
|
||
\end{align*}
|
||
|
||
\caption{\textit{Integer linear program} (ILP)}
|
||
\end{subfigure}%
|
||
\hfill%
|
||
\begin{subfigure}[t]{0.3\textwidth}
|
||
\centering
|
||
\tikzstyle{codeword} = [color=KITblue, fill=KITblue,
|
||
draw, circle, inner sep=0pt, minimum size=4pt]
|
||
\tdplotsetmaincoords{60}{25}
|
||
\begin{tikzpicture}[scale=0.8, tdplot_main_coords]
|
||
\tikzstyle{every node}=[font=\normalsize]
|
||
|
||
% Cube
|
||
|
||
\coordinate (p000) at (0, 0, 0);
|
||
\coordinate (p001) at (0, 0, 2);
|
||
\coordinate (p010) at (0, 2, 0);
|
||
\coordinate (p011) at (0, 2, 2);
|
||
\coordinate (p100) at (2, 0, 0);
|
||
\coordinate (p101) at (2, 0, 2);
|
||
\coordinate (p110) at (2, 2, 0);
|
||
\coordinate (p111) at (2, 2, 2);
|
||
|
||
\draw[] (p000) -- (p100);
|
||
\draw[] (p100) -- (p101);
|
||
\draw[] (p101) -- (p001);
|
||
\draw[] (p001) -- (p000);
|
||
|
||
\draw[dashed] (p010) -- (p110);
|
||
\draw[] (p110) -- (p111);
|
||
\draw[] (p111) -- (p011);
|
||
\draw[dashed] (p011) -- (p010);
|
||
|
||
\draw[dashed] (p000) -- (p010);
|
||
\draw[] (p100) -- (p110);
|
||
\draw[] (p101) -- (p111);
|
||
\draw[] (p001) -- (p011);
|
||
|
||
% Polytope Vertices
|
||
|
||
\node[codeword] (c000) at (p000) {};
|
||
\node[codeword] (c011) at (p011) {};
|
||
|
||
% Polytope Edges
|
||
|
||
\draw[line width=1pt, color=KITblue] (c000) -- (c011);
|
||
|
||
% Polytope Annotations
|
||
|
||
\node[color=KITblue, below=0cm of c000] {$\left( 0, 0, 0 \right) $};
|
||
\node[color=KITblue, above=0cm of c011] {$\left( 0, 1, 1 \right) $};
|
||
\end{tikzpicture}
|
||
|
||
\begin{align*}
|
||
\text{minimize}\hspace{2mm} & \boldsymbol{\gamma}^\text{T} \tilde{\boldsymbol{c}} \\
|
||
\text{subject to}\hspace{2mm} & \tilde{\boldsymbol{c}} \in
|
||
\text{poly}\left( \mathcal{C} \right) & \
|
||
\end{align*}
|
||
|
||
\caption{Lifted integer constraint}
|
||
\end{subfigure}%
|
||
\hfill%
|
||
\begin{subfigure}[t]{0.3\textwidth}
|
||
\centering
|
||
\tikzstyle{codeword} = [color=KITblue, fill=KITblue,
|
||
draw, circle, inner sep=0pt, minimum size=4pt]
|
||
\tikzstyle{pseudocodeword} = [color=KITred, fill=KITred,
|
||
draw, circle, inner sep=0pt, minimum size=4pt]
|
||
\tdplotsetmaincoords{60}{25}
|
||
\begin{tikzpicture}[scale=0.8, tdplot_main_coords]
|
||
\tikzstyle{every node}=[font=\normalsize]
|
||
|
||
% Cube
|
||
|
||
\coordinate (p000) at (0, 0, 0);
|
||
\coordinate (p001) at (0, 0, 2);
|
||
\coordinate (p010) at (0, 2, 0);
|
||
\coordinate (p011) at (0, 2, 2);
|
||
\coordinate (p100) at (2, 0, 0);
|
||
\coordinate (p101) at (2, 0, 2);
|
||
\coordinate (p110) at (2, 2, 0);
|
||
\coordinate (p111) at (2, 2, 2);
|
||
|
||
\draw[] (p000) -- (p100);
|
||
\draw[] (p100) -- (p101);
|
||
\draw[] (p101) -- (p001);
|
||
\draw[] (p001) -- (p000);
|
||
|
||
\draw[dashed] (p010) -- (p110);
|
||
\draw[] (p110) -- (p111);
|
||
\draw[] (p111) -- (p011);
|
||
\draw[dashed] (p011) -- (p010);
|
||
|
||
\draw[dashed] (p000) -- (p010);
|
||
\draw[] (p100) -- (p110);
|
||
\draw[] (p101) -- (p111);
|
||
\draw[] (p001) -- (p011);
|
||
|
||
% Polytope Vertices
|
||
|
||
\node[codeword] (c000) at (p000) {};
|
||
\node[codeword] (c011) at (p011) {};
|
||
\node[pseudocodeword] (cpseudo) at (2, 1, 1) {};
|
||
|
||
% Polytope Edges & Faces
|
||
|
||
\draw[line width=1pt, color=KITblue] (c000) -- (c011);
|
||
\draw[line width=1pt, color=KITred] (cpseudo) -- (c000);
|
||
\draw[line width=1pt, color=KITred] (cpseudo) -- (c011);
|
||
|
||
\fill[KITred, opacity=0.2] (p000) -- (p011) -- (2,1,1) -- cycle;
|
||
|
||
% Polytope Annotations
|
||
|
||
\node[color=KITblue, below=0cm of c000] {$\left( 0, 0, 0 \right) $};
|
||
\node[color=KITblue, above=0cm of c011] {$\left( 0, 1, 1 \right) $};
|
||
\node[color=KITred, right=0cm of cpseudo]
|
||
{$\left( 1, \frac{1}{2}, \frac{1}{2} \right) $};
|
||
\end{tikzpicture}
|
||
|
||
\begin{align*}
|
||
\text{minimize}\hspace{2mm} & \boldsymbol{\gamma}^\text{T} \tilde{\boldsymbol{c}} \\
|
||
\text{subject to}\hspace{2mm} &
|
||
\boldsymbol{T}_j\tilde{\boldsymbol{c}} \in \mathcal{P}_{d_j}, \hspace{2mm}
|
||
\forall j\in \mathcal{J}
|
||
\end{align*}
|
||
|
||
\caption{\textit{Linear code linear program} (LCLP)}
|
||
\end{subfigure}%
|
||
\end{figure}
|
||
|
||
\vspace*{-5.75cm}
|
||
\begin{figure}[H]
|
||
\centering
|
||
|
||
\begin{subfigure}[t]{0.36\textwidth}
|
||
\centering
|
||
|
||
\begin{tikzpicture}
|
||
\node (relaxation) at (0, 0) {Relaxation};
|
||
|
||
\draw[->] (-1, -0.25) -- (1, -0.25);
|
||
% \draw (-1.5, 0) -- (relaxation);
|
||
% \draw[->] (relaxation) -- (1.5, 0);
|
||
\end{tikzpicture}
|
||
\end{subfigure}%
|
||
\begin{subfigure}[t]{0.31\textwidth}
|
||
\centering
|
||
\begin{tikzpicture}
|
||
\node (relaxation) at (0, 0) {Relaxation};
|
||
|
||
\draw[->] (-1, -0.25) -- (1, -0.25);
|
||
% \draw (-1.5, 0) -- (relaxation);
|
||
% \draw[->] (relaxation) -- (1.5, 0);
|
||
\end{tikzpicture}
|
||
\end{subfigure}%
|
||
\end{figure}
|
||
|
||
\end{frame}
|
||
|
||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||
\begin{frame}[t]
|
||
\frametitle{LP Decoding using ADMM}
|
||
|
||
\vspace*{-4mm}
|
||
|
||
\begin{itemize}
|
||
\item Solution using the \textit{alternating direction method of multipliers} (ADMM)
|
||
\citereference{$\text{Bar}^+\text{13}$}
|
||
\item Slight reformulation of the LCLP:
|
||
\begin{align*}
|
||
\begin{aligned}
|
||
\text{minimize}\hspace{2mm} & \boldsymbol{\gamma}^\text{T}
|
||
\tilde{\boldsymbol{c}}
|
||
+ \sum_{j\in\mathcal{J}} g_j\left( \boldsymbol{z}_j \right) \\
|
||
\text{subject to}\hspace{2mm} &
|
||
\boldsymbol{T}_j\tilde{\boldsymbol{c}} = \boldsymbol{z}_j, \hspace{2mm}
|
||
\forall j\in \mathcal{J}
|
||
\end{aligned}\hspace{2mm},\hspace{1cm}
|
||
g_j\left( \boldsymbol{t} \right) := \begin{cases}
|
||
0, & \boldsymbol{t} \in \mathcal{P}_{d_j} \\
|
||
+\infty, & \boldsymbol{t} \not\in \mathcal{P}_{d_j}
|
||
\end{cases}
|
||
\end{align*}
|
||
\item Iterative algorithm:
|
||
\begin{alignat*}{3}
|
||
\tilde{\boldsymbol{c}} & \leftarrow \argmin_{\tilde{\boldsymbol{c}}}
|
||
\boldsymbol{\gamma}^\text{T}\tilde{\boldsymbol{c}}
|
||
+ \frac{\mu}{2}\sum_{j\in\mathcal{J}} \left\Vert
|
||
\boldsymbol{T}_j\tilde{\boldsymbol{c}} - \boldsymbol{z}_j
|
||
+ \boldsymbol{u}_j \right\Vert \\
|
||
\boldsymbol{z}_j & \leftarrow \argmin_{\boldsymbol{z}_j}
|
||
g\left( \boldsymbol{z}_j \right)
|
||
+ \frac{\mu}{2} \left\Vert \boldsymbol{T}_j \tilde{\boldsymbol{c}}
|
||
- \boldsymbol{z}_j + \boldsymbol{u}_j \right\Vert,
|
||
\hspace{5mm} & & \forall j\in\mathcal{J} \\
|
||
\boldsymbol{u}_j & \leftarrow \boldsymbol{u}_j
|
||
+ \boldsymbol{T}_j\tilde{\boldsymbol{c}} - \boldsymbol{z}_j,
|
||
\hspace{5mm} & & \forall j\in\mathcal{J}
|
||
% \left( g\left( \boldsymbol{\boldsymbol{z}_j} \right)
|
||
% + \frac{\mu}{2} \left\Vert \boldsymbol{T}_j\tilde{\boldsymbol{c}}
|
||
% - \boldsymbol{z}_j + \boldsymbol{u}_j\right\Vert \right)
|
||
\end{alignat*}
|
||
\end{itemize}
|
||
|
||
\bigskip
|
||
|
||
\addreference{$\text{Bar}^+\text{13}$}{Siddharth Barman et al.:
|
||
\emph{Decomposition Methods for Large Scale LP Decoding}.
|
||
IEEE Transactions on Information Theory 59.12 (2013), pp. 7870–7886.}
|
||
\end{frame}
|
||
|
||
%%%%%%%%%%%%%%%%
|
||
\subsection{Application of ADMM}
|
||
\label{subsec:Application of ADMM}
|
||
|
||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||
\begin{frame}[t]
|
||
\frametitle{LP Decoding using ADMM}
|
||
|
||
\vspace*{-7mm}
|
||
|
||
\begin{itemize}
|
||
\item Convergence properties enhanced by over-relaxation with parameter $\rho$
|
||
\item Simplified rules:
|
||
% \footnote{$\left( \boldsymbol{z}_j \right)_i $ is a slight abuse of notation.
|
||
% What is actually meant is the component of $\boldsymbol{z}_j$ that is associated
|
||
% with the VN $i$, i.e., $\left( \boldsymbol{T}_j^\text{T}
|
||
% \boldsymbol{z}_j \right)_i$.\\
|
||
% The same is true for $\left( \boldsymbol{u}_j \right)_i$}:
|
||
|
||
\vspace*{-4mm}
|
||
|
||
\begin{alignat*}{3}
|
||
\tilde{c}_i & \leftarrow \frac{1}{\left| N_v\left( i \right) \right|} \left(
|
||
\sum_{j\in N_v\left( i \right) } \Big( \left( \boldsymbol{z}_j \right)_i
|
||
- \left( \boldsymbol{u}_j \right)_i \Big)
|
||
- \frac{\gamma_i}{\mu} \right)
|
||
\hspace{5mm} & & \forall i\in\mathcal{I} \\
|
||
\boldsymbol{z}_j & \leftarrow \Pi_{\mathcal{P}_{d_j}}\left(
|
||
\rho \boldsymbol{T}_j\tilde{\boldsymbol{c}} - \boldsymbol{z}_j
|
||
\left( 1-\rho \right) + \boldsymbol{u}_j \right)
|
||
\hspace{5mm} & & \forall j\in\mathcal{J} \\
|
||
\boldsymbol{u}_j & \leftarrow \boldsymbol{u}_j
|
||
+ \rho \boldsymbol{T}_j\tilde{\boldsymbol{c}}
|
||
- \left( 1-\rho \right) \boldsymbol{z}_j
|
||
- \boldsymbol{z}_j
|
||
\hspace{5mm} & & \forall j\in\mathcal{J}
|
||
\end{alignat*}
|
||
|
||
\vspace*{2mm}
|
||
|
||
\item The projections $\Pi_{\mathcal{P}_{d_j}}, \hspace{1mm} j\in\mathcal{J}$
|
||
are the main computational effort
|
||
\item Many approaches exist \citereference{$\text{Bar}^+\text{13}$},
|
||
\citereference{ZS13}, \citereference{$\text{Gen}^+\text{20}$}
|
||
\item The approach chosen here is the one described in
|
||
\citereference{$\text{Bar}^+\text{13}$}
|
||
\end{itemize}
|
||
|
||
\bigskip
|
||
\bigskip
|
||
|
||
\addreferences
|
||
{$\text{Bar}^+\text{13}$}{Siddharth Barman et al.:
|
||
\emph{Decomposition Methods for Large Scale LP Decoding}.
|
||
IEEE Transactions on Information Theory 59.12 (2013), pp. 7870–7886.}
|
||
{ZS13}{Xiaojie Zhang; Paul H. Siegel: \emph{Efficient iterative LP decoding
|
||
of LDPC codes with alternating direction method of multipliers}.
|
||
2013 IEEE International Symposium on Information Theory. 2013, pp. 1501–1505.}
|
||
{$\text{Gen}^+\text{20}$}{Florian Gensheimer et al.:
|
||
\emph{A Reduced-Complexity Projection Algorithm for ADMM-Based LP Decoding}.
|
||
IEEE Transactions on Information Theory 66.8 (2020), pp. 4819–4833.}
|
||
\stopreferences
|
||
\end{frame}
|
||
|
||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||
\subsection{Simulation Results}%
|
||
\label{sub:Simulation Results}
|
||
|
||
\begin{frame}[t]
|
||
\frametitle{LP Decoding using ADMM: Frame Error Rate}
|
||
|
||
\vspace*{-6mm}
|
||
|
||
\begin{itemize}
|
||
\item (3,6) regular LDPC code with $n=204, k=102$ \citereference{Mac24, 204.33.484}
|
||
\end{itemize}
|
||
|
||
\bigskip
|
||
|
||
\begin{figure}[H]
|
||
\centering
|
||
|
||
\begin{tikzpicture}
|
||
\begin{axis}[
|
||
grid=both,
|
||
xlabel={$E_b / N_0 \left( \text{dB} \right) $}, ylabel={FER},
|
||
ymode=log,
|
||
width=0.45\textwidth,
|
||
height=0.325\textwidth,
|
||
%legend style={at={(0.03,0.04)},anchor=south west},
|
||
legend pos=outer north east,
|
||
legend cell align={left},
|
||
]
|
||
|
||
\addplot[scol1, line width=1pt]
|
||
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};
|
||
\addlegendentry{ADMM}
|
||
\addplot [KITorange, line width=1pt]
|
||
table [x=SNR, y=FER, col sep=comma,
|
||
discard if gt={SNR}{5.5}]
|
||
{res/generic/bp_20433484.csv};
|
||
|
||
\addlegendentry{BP}
|
||
\addplot[black, line width=1pt]
|
||
table [col sep=comma, x=SNR, y=FER,
|
||
discard if gt={SNR}{5.5}]
|
||
{res/generic/fer_ml_20433484.csv};
|
||
\addlegendentry{ML \citereference{HEL+19}}
|
||
\end{axis}
|
||
\end{tikzpicture}
|
||
\end{figure}%
|
||
|
||
\bigskip
|
||
\bigskip
|
||
|
||
\addreferences
|
||
{Mac24}{David J.C. MacKay: \emph{Encyclopedia of Sparse Graph Codes}.
|
||
June 2024. URL: \url{http://www.inference.org.uk/mackay/codes/data.html}.}
|
||
{Hel+19}{Michael Helmling, Stefan Scholl, Florian Gensheimer, Tobias Dietz, Kira Kraft,
|
||
Stefan Ruzika, and Norbert Wehn. \emph{Database of Channel Codes and
|
||
ML Simulation Results}. June 2024. URL: \url{www.rptu.de/channel-codes}}
|
||
\stopreferences
|
||
\end{frame}
|
||
|