# Iterative Decoding of LDPC-Based Product Codes and FPGA-Based Performance Evaluation
## 3 Proposed Low-Complexity Iterative Decoding for LDPC-Based Product Codes
### Iterative Decoding of Product Codes  
The product code using high rate block code and LDPC code designed in [23] achieves superior error correction performance in the high SNR region aiming at eliminating the error floors. Although most outer codewords with error bits can be corrected, it can be seen from Figure 4 that there may still be a large number of residual error bits in some outer codewords. For these codewords, the outer codes may fail to correct the residual error bits, thus affecting the overall BER performance of product codes. In this paper, a low complexity iterative decoding scheme is designed for this type of product codes. The overall flow diagram of the iterative decoding scheme is shown in Figure 5 and the detailed steps are presented by Algorithm 1. The scheme introduces iterations between the LDPC decoding and the outer decoding via exchanging hard-decision results. The outer code can use very simple decoding algorithms based on hard-decision results, for example, error-trapping decoding. Error-trapping decoding is a classical decoding method used to decode cyclic codes and this decoding scheme only needs cyclic shift operation. Therefore, its hardware implementation is simple, thus having low complexity [25]. The hard-decision output results from the outer decoder are fed back to the LDPC decoder which retries decoding on the failed codewords in the earlier rounds. The iterations of decoding for the inner and outer codes continue in this fashion until either the LDPC decoder generates valid codewords or the number of iterations reaches the preset number. The scheme can reduce the number of residual error bits after LDPC decoding, thereby reducing the number of erroneous outer codewords due to limited error correction capability of outer codes. The increased computation complexity of the proposed decoding algorithms is quite small. The increased complexity can be decomposed into two parts. One is brought by the outer decoding algorithms. In this paper, we use the error-trapping decoding for Hamming codes and the complexity is small. It will be further verified in Section 4 using hardware resources. Actually, the trapping  
Figure 4: The probability distribution of the number of erroneous information bits. decoding algorithms have the similar complexity as the encoder for Hamming codes. The other is brought by the increased additional LDPC decoding rounds. Fortunately, only very rare failed LDPC codewords need to execute the additional Belief-Propagation (BP) iterative decoding. The proportion of failed LDPC codewords in previous iteration is directly related to the codeword error rate, which is quite low for our several design examples. In the discussion of the rest of the paper, we use the following notations and define the variables in our scheme:  
* \(lqc\_flag\) of length \(n_{1}\) denotes the decoding status of LDPC codewords. * \(outer\_flag\) of length \(k_{2}\) denotes the decoding status of outer codewords. * \(correct\_flag\) whose dimension is \(n_{1}\times k_{2}\) denotes the correcting status of the bits. * \(Iter\) is the iteration number. * \(Iter_{max}\) is the maximum number of iterations. * \(y_{ldpc}\) is the prior probability information of LDPC codewords. * \(\hat{y}_{ldpc}\) is the posterior probability information of LDPC codewords. * \(c_{i}\) is the check result of LDPC codewords using the parity-check matrix. * \(s_{j}\) is the check result of outer codewords using the syndrome. * \(y_{outer}\) is the decoding result of outer codewords. Figure 5: The overall flow diagram of the iterative decoding process of the product code. **Step1: Parameter initialization. **  
1.1. Initialize three flag bits to false and the iteration number \(Iter\). \[\left\{ \begin{array}{ll}Iter=1,\\ ldpc\_flag(i)=0,&i=1,2,\cdots,n_{1}\\ outer\_flag(j)=0,&j=1,2,\cdots,k_{2}\\ correct\_flag(i,j)=0,&\end{array} \right.\]  
**Step2: Inner LDPC decoding. **  
2.1. Before decoding, compute the prior probability information of LDPC codewords \(y_{ldpc}\). 2.2.