## 3 Methodology
### GNN-Based LDPC Decoding  
The LDPC-GNN model proposed in this paper utilizes message passing for node classification, with each iteration utilizing a graph convolutional layer, outlined in [16]. \((N,K)\) LDPC codes can be viewed as a bipartite graph, with the variable nodes \(V=\{v_{1},v_{2},...,v_{i}:i=N\}\) representing \(N\) coded bits, and factor nodes \(F=\{f_{1},f_{2},...,f_{j}:j=K\}\) representing \(K\). As shown in Figure 3, the variable nodes are utilized as inputs, feeding six graph convolutional layers that output the decoded factor nodes. The adjacency matrix \(A\in\mathbb{R}^{K\times N}\) defines directional messages between \(V\) and \(F\).  
For each convolutional layer, Equation (2) summarizes each layer update, as outlined in [16], where \(\widetilde{A}=A+I_{K}\), with \(I_{K}\) being the identity matrix \(I_{K}\in\mathbb{R}^{K\times K}\), the count of input nodes to a specific variable node being represented by \(\widetilde{D}_{ii}=\sum_{j}A\), and where \(W^{l}\) is the matrix of weights of layer \(l\), \(H^{l}\) is the input array into the \(l\)th layer, and \(H^{0}\) is the input array \(V\), shown in Figure 3. Since we require the last layer to update the factor nodes of the LDPC code, the output will always be a single channel of length \(N\).  
\[H^{(l+1)}=\widetilde{D}^{-\frac{1}{2}}\widetilde{A}\widetilde{D}^{-\frac{1}{2 }}H^{l}W^{l} \tag{2}\]  
For updating the factor nodes from the output of the graph convolutional layer, the adjacency matrix \(A\) is utilized to ensure that only variable nodes that correspond to the updates of a factor node are considered. The inverse is true for updating the variable nodes, as shown in Equation (3), with the mean value taken for each node. Given that \(\widetilde{D}_{ii}=\sum_{j}A\), we define \(\widetilde{D}_{i}=\{D_{11},D_{22},...,D_{ii}:i=N\}\), producing a vector containing the number of input factor nodes to each variable node \(v_{i}\). We define the inverse for factor nodes as well, with \(\widetilde{D}_{j}=\{D_{11},D_{22},...,D_{jj}:j=K\}\).  
\[F=\frac{VA}{\widetilde{D}_{j}},\;\;V=\frac{FA}{\widetilde{D}_{i}} \tag{3}\]  
\begin{table}
\begin{tabular}{c c c c c} \hline \hline \multirow{2}{*}{**Model**} & **Conv.** & \multirow{2}{*}{**Dilations**} & \multirow{2}{*}{**Channels**} & \multirow{2}{*}{**Parameters**} \\  & **Blocks** & & & \\ \hline Large & 5 & (2, 3) (3, 6) & 64, 128, 256, 128, 64 & 1.2 M \\ \hline Medium & 3 & (2, 3) (3, 6) & 64, 256, 64 & 800 k \\ \hline Small & 3 & (2, 3) (3, 6) & 64, 128, 64 & 270 k \\ \hline \hline \end{tabular}
\end{table}
Table 2: Tested CNN architectures.  
Hyper-Parameter Tuning  
For the purpose of this paper, we utilize the proposed (1998, 1512) QC-LDPC code, outlined in [17] and utilized in [11]. This code was chosen due to its high coding rate and Quasi-Cyclic nature. The tested models can also be seen in Table 3.  
Since the models tested for this application began converging before the search space maxima, two separate GNNs were evaluated for this paper, consisting of the smallest and largest converging models that we tested. The first model is comprised of six convolutional layers and 20 k parameters, with the set of channels for each layer being [32; 64; 128; 64; 32; 1]. The second model utilizes 80 k parameters, with the set of channels for each layer being [32; 64; 128; 256; 128; 64; 32; 1]. The impact of the number of iterations for message passing was evaluated for 3, 5, and 7 iterations, with 7 producing the best result. The same number of 500,000 frames was generated for training, with a train, test, and validation split of 40%, 10%, and 50%, respectively.