 con- straints; thus each of M rows of matrix H is represented by one CND. Each VND Vi is connected to a CND Cj, if hij = 1. For the following example PC matrix, the Tanner graph is as shown in Fig. 4.49. Check nodes Variable nodes Figure 4.49 Example Tanner graph [38]. 530 Chapter 4 0101100 1110010 0000001 1011010 Quasi-cyclic (QC) LDPC codes belong to the class of structured codes that are relatively eas- ier to implement without significantly compromising the performance of the code. The QC- LDPC codes can be implemented using simple shift registers with linear complexity based on their generator matrices. Well-designed QC-LDPC codes have been shown to outperform computer-generated random LDPC codes, in terms of bit-error rate and block-error rate performance and the error floor. These codes also have advantages in decoder hardware implementation due to their cyclic symmetry, which results in simple regular interconnec- tion and modular structure. In most of the wireless communication standards including 3GPP NR, a base graph u is used to define the LDPC code. However, u needs to be trans- formed into a PC matrix H using a lifting factor Z. Lifting means that each (integer) entry of base graph u is replaced by a permuted ZXZ identity matrix. We start with an identity matrix I and circularly shift the entries of this matrix according to the base graph entry Uij to obtain the desired matrix H. As an example, suppose a 2 X 2 base graph matrix u and lifting factor Z = 3 are given. The transformation from u to H can be performed as follows: 001100 100010 u= 2 3 23 , I= 010001 100010 010001 001100 The LDPC codes are universally specified by their PC matrices. The PC matrix of a QC-LDPC code is given as an array of sparse circulant matrices of the same size. A circulant matrix is a square matrix in which each row is the cyclic shift of the row above it, and the first row is the cyclic shift of the last row. For a circulant matrix, each column is the downward cyclic shift of the column on its left, and the first colum