1 Introduction

A low-density parity-check (LDPC) code is a class of linear block codes which can be categorized as a random or structured LDPC code, based on the construction method of a parity-check matrix, H. Practically, LDPC codes were first proposed in 1962 [1], since then it was ignored for almost three decades because of computation complexity at that time. Then, Tanner [2] investigated a bipartite graph, which can ease the encoding and decoding of LDPC codes. Later on in the late 1990s, many researchers focused on rediscovery of LDPC codes [35] and found that a carefully designed LDPC code can give an error performance close to the Shannon’s limit over an additive white Gaussian noise (AWGN) channel. Currently, LDPC codes are considered as the most eligible channel codes for various practical applications in the field of wireless communications.

Although LDPC codes with large block-length usually provide a good performance but at the cost of huge memory requirement and computation complexity of the H matrix construction. To overcome this problem, Quasi-cyclic LDPC (QC-LDPC) codes were proposed by Fossorier [6], which is based on algebraic and geometric theories and combinatorial designs. However, the flexibility of code rate and code length is restricted by the matrix construction theories [610]. Nevertheless, good QC-LDPC codes are well suited for certain practical applications such as data storage systems, DVB-T2/S2, IEEE 802.16e, IEEE 802.11n, and 10 Gb Ethernet, because they can be easily encoded using shift-registers, thus requiring less memory and less computational complexity [7]. These features motivate us to take an intensive interest in the construction of large block-length QC-LDPC codes with high girth for future applications in data storage and communication systems. Note that the term “girth” implies the shortest cycle in a Tanner graph or in the H matrix.

In addition, remarkable efforts have been carried out to find various QC-LDPC constructions with explicit algebraic and combinatorial designs. For example, Fan [11] introduced an array code with no 4-cycle length that can be viewed as one of the properties of QC-LDPC codes. Another approaches to design large girth structured QC-LDPC codes based on CPM by deleting certain block-rows and block-columns of the H matrix were proposed in [1216]. Recently, QC-LDPC codes up to the girth 8 were proposed by Sudarsan et al. [17], which based on complete protograph. Moreover, Eleftheriou et al. [13] presented a modified array code (MAC) by applying a cyclic shift to a Fan’s array code so as to reduce the number of 1′s in a lower triangular H matrix, and its performance is superior to the Fan’s array code. Additionally, Shu Lin et al. [9] had significant contribution for algebraic QC-LDPC codes, which have shown good performance with low error-floor and reduced-complexity.

A Chinese remainder theorem (CRT) based combining method was first introduced in [18]. It gives a unique reconstruction of a large positive integer K from its remainder modulo positive integers \(\{ L_{1} ,L_{2} , \ldots ,L_{s} \}\), where \(K <\) \({\text{lcm}}\left( {L_{1} ,L_{2} , \ldots ,L_{s} } \right)\) and lcm(x) stands for the least common multiplier of a vector x. In addition, CRT provides a simple reconstruction formula for an integer K, if all moduli are co-prime to one another. In a class of structured LDPC codes, a method based on CRT to extend the code length of the base matrix of QC-LDPC codes was proposed in [19], which offer significant less time consumption to construct the H matrix with high girth together with flexible code length and code rate.

Generally, a researcher’s most challenging problem is to find out optimized memory requirement for hardware deployment of QC-LDPC codes and to select meaningful lower bound on the circulant permutation matrices (CPMs). Recently, the necessary conditions for QC-LDPC codes to have girth up to 12 was proposed in [20, 21]. In this paper, we optimize the lower bound for our proposed QC-LDPC codes for various girths, which are necessary conditions to obtain the desired girth of proposed QC-LDPC codes. The lower bound obtained using a greedy computer based search algorithm for a given girth is more realistic than that obtained from the recent work in [10]. Furthermore, our results can be applied to any general class of regular QC-LDPC codes.

For large block-length codes, LDPC codes require a large computation time for encoding the H matrix. For instance, the most popular LDPC code constructed from a progressive-edge growth (PEG) algorithm normally has the computational complexity scaled as \(O(mn)\) [22], where n is the number of symbol/variable nodes and m is the number of check nodes. Recently, in [23], proposed QC-LDPC codes based on constraint selection of shifting matrix, with reduced encoding complexity mainly an area reduction of 40–55 % is stated.

This paper aims to reduce the complexity of encoding for regular QC-LDPC codes with large block-length. To do so, we propose a novel algorithm to construct the H matrix with a large girth and then apply the CRT algorithm to expand the component QC-LDPC code without reducing its local girth. To illustrate the contribution of this paper, we compare the bit-error rate (BER) performance with the PEG based QC-LDPC codes and the other array codes with CRT. We found that the proposed method outperforms the others in terms of BER performance and computation complexity of the H matrix.

The rest of the paper is organized as follows. Section 2 summarizes the preliminaries of QC-LDPC codes and CRT. Section 3 explains a method to generate the H matrix based on our proposed algorithm to construct the component QC-LDPC codes combined with CRT. Section 4 presents simulation details and results with an example. Some important properties of the proposed method are discussed in Sect. 5 followed by conclusion in Sect. 6.

2 Preliminaries

2.1 Quasi-Cyclic LDPC Codes

The H matrix of a \((j,k)\) QC-LDPC code with column weight \(j\) and row weight \(k\), is called regular if the H matrix has uniform column weight and row weight [6]. It is based on \(L \times L\) CPMs, defined as a mother matrix, \({\mathbf{M(H)}}\), of size \(mL \times nL\), which can be uniquely constructed by shifting the order of an identity matrix, I, based on its corresponding CPM, as given by

$${\mathbf{M(H)}} = \left[ {\begin{array}{*{20}c} {{\mathbf{I}}_{{a_{11} }} } & {{\mathbf{I}}_{{a_{12} }} } & \cdots & {{\mathbf{I}}_{{a_{1n} }} } \\ {{\mathbf{I}}_{{a_{21} }} } & {{\mathbf{I}}_{{a_{22} }} } & \cdots & {{\mathbf{I}}_{{a_{2n} }} } \\ \vdots & \vdots & \ddots & {} \\ {{\mathbf{I}}_{{a_{m1} }} } & {{\mathbf{I}}_{{a_{m2} }} } & \cdots & {{\mathbf{I}}_{{a_{mn} }} } \\ \end{array} } \right] ,$$
(1)

where \(a_{ij} \in \left\{ {0,1 \ldots ,L - 1,\infty } \right\}\) and \({\mathbf{I}}_{{a_{ij} }}\) is defined as the I matrix of size \(L \times L\) for \(1 \le i \le m\) and \(1 \le j \le n\), which is obtained by cyclically right shifting the rows of the I matrix by \(a_{ij}\) times. The zero matrix of size \(L \times L\) is represented when \(a_{ij} = \infty\). The H matrix consists of m block-rows indexed from \(0\) to \(m - 1\), and n block-columns indexed from \(0\) to \(n - 1\). It is noted in ([6], Theorem 2.5) that the girth of an ultra-sparse QC-LDPC code, where \(j \ge 3\) cannot be greater than 12.

In addition, the matrix \({\mathbf{E(H)}}\) is called the exponent or shifting matrix and it can be obtained by replacing each element \({\mathbf{I}}_{{a_{ij} }}\) in \({\mathbf{M(H)}}\) by \(a_{ij}\) as follows:

$${\mathbf{E(H)}} = \left[ {\begin{array}{*{20}c} {a_{11} } & {a_{12} } & \cdots & {a_{1n} } \\ {a_{21} } & {a_{22} } & \cdots & {a_{2n} } \\ \vdots & \vdots & \ddots & \vdots \\ {a_{m1} } & {a_{m2} } & \cdots & {a_{mn} } \\ \end{array} } \right] .$$
(2)

By combining the exponent matrix \({\mathbf{E(H)}}\) and the CPM \({\mathbf{I}}_{{a_{ij} }}\), it will give the H matrix. For example, the \({\mathbf{M(H)}}\) matrix in (1) can be constructed using an exponent coupling procedure according to

$${\mathbf{M(H)}} = {\mathbf{E(H)}} \cdot {\mathbf{I}}_{{a_{ij} }} ,$$
(3)

where \(\circ\) is a coupling operator.

A cycle of length \(2l\) in the Tanner graph of \({\mathbf{M(H)}}\) is called a \(2l\)-block cycle, which can be represented by an exponent chain in the \({\mathbf{M(H)}}\) matrix according to

$$({\mathbf{I}}_{{a_{{i_{1} j_{1} }} }} \to {\mathbf{I}}_{{a_{{i_{1} j_{2} }} }} \to {\mathbf{I}}_{{a_{{i_{2} j_{2} }} }} , \ldots ,{\mathbf{I}}_{{a_{{i_{l} j_{l} }} }} \to {\mathbf{I}}_{{a_{{i_{l} j_{1} }} }} \to {\mathbf{I}}_{{a_{{i_{1} j_{1} }} }} )$$
(4)

or in the \({\mathbf{E(H)}}\) matrix according to

$$(a_{{i_{1} j_{1} }} \to a_{{i_{1} j_{2} }} \to a_{{i_{2} j_{2} }} , \ldots , \to a_{{i_{l} j_{l} }} \to a_{{i_{l} j_{1} }} \to a_{{i_{1} j_{1} }} ) .$$
(5)

Due to the presence of short length cycle in the H matrix, the performance of LDPC codes will degrade. It is very important to understand the structure of the H matrix. The theorem mentioned below was first proposed by Fossorier in [6], which stated that in QC-LDPC codes, the necessary and sufficient condition for the existence of length \(2l\)-block cycle is given by

$$\sum\limits_{k = 1}^{2l} {(a_{{m_{k} ,n_{k} }} } - a_{{m_{k + 1} ,n_{k} }} ) \equiv 0\bmod L ,$$
(6)

where \(i_{k} \ne i_{k + 1,} \, j_{k} \ne j_{k + 1}\), and \(i_{l + 1 = } i_{l}\).

2.2 Chinese Remainder Theorem

Let I be a positive integer, \(L_{1} ,L_{2} , \ldots ,L_{s}\) be s moduli, and \(r_{1} ,r_{2} , \ldots ,r_{s}\) be \(s\) remainders of I, i.e.,

$$r_{b} \equiv I\left| {L_{b} } \right| ,$$
(7)

where \(0 \le r_{b} \le L_{b}\) for \(1 \le b \le s\). If all the moduli \(L_{b}\)’s are co-prime and \(0 \le I < \prod\nolimits_{b = 1}^{s} {L_{b} }\), then I can be uniquely reconstructed from its s remainders via a simple CRT theorem according to [19], i.e.,

$$I = \sum\limits_{b = 1}^{s} {r_{b} A_{b} \overline{{L_{b} }} } \left| L \right| ,$$
(8)

where \(L = \prod\nolimits_{b = 1}^{s} {L_{b} }\), \(\overline{{L_{b} }} = L/L_{b}\), and \(A_{b} \overline{{L_{b} }} \equiv 1\left| {L_{b} } \right|\).

2.3 Generalized Combination of QC-LDPC Codes via CRT

Let \(C_{b}\) be a QC-LDPC codeword, where \(b = 1,2, \ldots ,s\), whose \({\mathbf{H}}_{b}\) is an \(m \times n\) array of \(L_{b} \times L_{b}\) CPMs and/or zero matrices. Let \({\mathbf{E(H}}_{b} {\mathbf{)}} = (a_{ij}^{(b)} )\) be the exponent matrix and \(L = \prod\limits_{b = 1}^{s} {L_{b} }\). A QC-LDPC code \(C\) with the H matrix of size \(mL \times nL\) can be constructed by using the generalized combining method, which gives us the exponent matrix \({\mathbf{E(H)}} = (a_{ij} )\) according to (2). In the case, where \(a_{ij}^{(b)} \ne \infty\) in \({\mathbf{E(H)}}\) for all \(b = 1,2, \ldots ,s\), we can obtain \(a_{ij}\) according to

$$a_{ij} = \sum\limits_{b = 1}^{s} {a_{ij}^{b} } A_{b} \overline{{L_{b} }} \left| L \right| .$$
(9)

Proposition 1 [24]. For \(b = 1,2, \ldots ,s\), let \(g_{b}\) denote the girth of \(C_{b}\) and \(g\) denote the girth of \(C\) then

$$g \ge \hbox{max} \{ g_{1} ,g_{2} , \ldots ,g_{s} \} .$$
(10)

In the next section, we propose a novel method to obtain a large block-length H matrix, that has the properties, such as high girth and less complex encoding, by constructing the component QC-LDPC codes. Thereafter, these component codes will be combined with CRT without reducing their local girth.

3 Proposed Method

This section introduces a novel method for constructing the H matrix that is suitable for medium to large block-length, and has high girth and less complex in terms of computation.

Assume that \(L_{1}\) and \(L_{2}\) are the prime numbers, which indicate the CPM size of the two component matrices, \({\bar{\mathbf{H}}}_{1}\) and \({\bar{\mathbf{H}}}_{2}\) having girth \(g_{1}\) and \(g_{2}\), respectively. The procedure explained here is for constructing the proposed H matrix of size \(jL \times kL\) such that \(L = L_{1} \times L_{2}\) by using CRT as in (9) without losing its local girth. Later in this work, it can be extended to combine the \({\bar{\mathbf{H}}}_{1},{\bar{\mathbf{H}}}_{2},...,{\bar{\mathbf{H}}}_{s}\) component matrices having the CPM size of \(L_{1} ,L_{2} , \ldots ,L_{s}\), respectively, to obtain the H matrix such that \(L = L_{1} \times L_{2} \times \cdots \times L_{s}\). Below are the steps of the proposed method.

  • Step 1 To construct a component \({\bar{\mathbf{H}}}_{1} \left( {j,k} \right)\) matrix, where j and k are the number of block-rows and block-columns, respectively. The method for constructing this \({\bar{\mathbf{H}}}_{1} \left( {j,k} \right)\) matrix is given in Table 1, where the indexed number 0 represents the I matrix of size \(L_{1} \times L_{1}\), and 1 denotes cyclically one right shifted order of the I matrix, and so on. The indexed number Z is the designed cyclically right shifted order of the \(L_{1} \times L_{1}\) CPM. It should be noted that the size of \({\bar{\mathbf{H}}}_{1}\) matrix is \(jL_{1} \times kL_{1}\).

    Table 1 A proposed generalized component matrix
  • Step 2 For each column-block (starting from the leftmost column to the right), replace each Z from the 2nd to jth row using a number between \(0\) to \(L_{1} - 1\). To do so, we find all possible data patterns of each column-block. The maximum number of data patterns is denoted as \(P_{fc}\). For instance, if \(L_{1} = 3\), we will take the 2nd and the 3rd block-row from Table 1. In this case, there will be 9 different data patterns available for the 1st column. In general, the maximum number of possible data patterns in \(P_{fc}\) can be calculated according to

    $$P_{fc} = \left( {\begin{array}{*{20}c} p \\ 1 \\ \end{array} } \right)^{j - 1} ,$$
    (11)

    where p is the size of the chosen CPM’s. We replace the remaining block-rows indexed by Z as shown in Table 1 with the data pattern, through column by column succession order and computing its local girth g by considering up to the correspondent column.

    To find a local girth for each data pattern, we will assume that all sub-matrices other than the existed numbered data patterns labeled as Z are zero matrices of size \(L_{1} \times L_{1}\). If we cannot find the local girth (i.e., no cycle), we will assume that the girth is infinite.

  • Step 3 The data pattern that yields the largest local girth with minimum indexed value in all possible data patterns will be selected for the 1st column. Then, we proceed the same procedure as explained in Step 2 in a column by column manner until all block-columns are filled with the chosen number of data patterns. Table 2 shows an example of the component matrix \({\bar{\mathbf{H}}}_{1}\) after obtaining all Z’s for \(L_{1} = 29\) and \(g_{1} = 8.\) This process ensures the minimum size of CPM’s in the QC-LDPC codes, which will be useful for constructing a good H matrix with high girth and low memory requirement for hardware implementation. Table 3 illustrates the minimum lower bound of the CPM size for various block lengths of the component matrix based on extensive simulation search for regular (3, k) LDPC codes. The obtained CPM size will be the optimized lower bound for constructing the QC-LDPC parity-check matrix with high girth and variable code rates.

    Table 2 A designed \({\bar{\mathbf{H}}}_{1}\) index matrix
    Table 3 Estimation of minimum CPM size L with corresponding girth
  • Step 4 The other component matrix \({\bar{\mathbf{H}}}_{2}\) can be obtained by choosing a suitable size of a prime number \(L_{2}\) based on Table 4, such that it maintains the optimum lower bound for the desired girth \(g_{2}\). For instance, we choose a lower bound of the CPM size from Table 3, i.e., \(L_{2} \ge 7\) for \(g = 6\). The construction procedure for \({\bar{\mathbf{H}}}_{2}\) is similar to that for \({\bar{\mathbf{H}}}_{1}\). Table 4 shows an example of the component matrix \({\bar{\mathbf{H}}}_{2}\) after obtaining all Z’s for \(L_{2} = 7\) and \(g_{2} = 6\).

    Table 4 A designed \({\bar{\mathbf{H}}}_{2}\) index matrix
  • Step 5 Finally, we construct the exponent matrix \({\mathbf{E(H)}}\) by combining all the component matrices via CRT and replacing each entry \(a_{ij}\) of \({\mathbf{E(H)}}\) with \({\mathbf{I}}_{{a_{ij} }}\) so as to obtain the H matrix of size \(mL \times nL\) with girth g, which still satisfies the condition in (10), i.e., \(g \ge \hbox{max} \{ g_{1} ,g_{2} \}\) as shown in Table 5.

    Table 5 A combined exponent matrix, \({\mathbf{E(H)}}\) via CRT

It should be pointed out that with carefully selecting the CPM size and block length, we can construct any large block-length H matrix up to the girth of 12 for QC-LDPC codes.

4 Simulation and Results

To compare the BER performance of the proposed method with some existing methods, we consider the H matrix of size \(M \times N\), where M is the number of parity bits, N is the code length with code rate R, and R is equal to \(1 - M/N\). To evaluate its performance, we simulate the system based on an additive white Gaussian noise (AWGN) channel, where a binary input sequence \(a_{k} \in \left\{ {0,1} \right\}\) of length \(N - M\) bits is encoded by an LDPC encoder and is mapped to an N-bit coded sequence \(b_{k} \in \left\{ { \pm 1} \right\}\). Hence, the received sequence is given by \(y_{k} = b_{k} + n_{k}\), where \(n_{k}\) is AWGN with zero mean and variance \(\sigma^{2}\). At the receiver, the received sequence \(y_{k}\) is decoded by LDPC decoder based on a message passing algorithm [1] with 10 iterations. The signal-to-noise ratio (SNR) is defined as \({\text{SNR}} = 10\log_{10} \left( {1/2R\sigma^{2} } \right)\) in decibel (dB). Each BER point is computed based on a minimum number of 10,000 data packets.

Example 1

In this example, we study the proposed method based on the component matrices combined with CRT to construct a large block-length H matrix. The obtained matrix has a uniform degree of 3 for each symbol node. By using our proposed algorithm, we construct a code \(C_{1}\) for girth \(g_{1} = 8\), whose exponent matrix \({\bar{\mathbf{H}}}_{1}\) is of size \(3 \times 7\) as shown in Table 2. To expand \({\bar{\mathbf{H}}}_{1}\), we first select \(s = 2\). For \(g_{1} = 8\) and assume that \(g_{2} = 6\), Table 3 gives \(L_{1} \ge 29\) and \(L_{2} \ge 7\), respectively. Then, we choose \(L_{1} = 29\) and \(L_{2} = 7\) so as to maintain the lower bound on CPMs. After combining, the CPM size of \({\mathbf{E(H)}}\) matrix will be \(L = L_{1} \times L_{2} = 203\). Similarly, we construct the \(3 \times 7\) exponent matrix, \({\bar{\mathbf{H}}}_{2}\), using our proposed algorithm for \(g_{1} = 6\) as shown in Table 4. Then, we obtain \({\mathbf{E(H)}}\) by combining \({\bar{\mathbf{H}}}_{1}\) and \({\bar{\mathbf{H}}}_{2}\) via CRT as given in Table 5. Finally, we replace each entities \(a_{ij}\) of \({\mathbf{E(H)}}\) with \({\mathbf{I}}_{{a_{ij} }}\). The obtained H matrix will provide the QC-LDPC code with girth \(g_{1} = 8\).

Figure 1 illustrates the BER performance of the proposed (609, 1421) QC-LDPC code, which is compared with some well-known existing LDPC codes, where FAN-CRT is the code from the shortened array code based on CRT [17], IMAC QC-LDPC is the code from Singhaudom et al. [14], and QC-LDPC-PEG is the PEG based QC-LDPC code as described in [7]. Clearly, the proposed algorithm performs better than other algorithms, especially when the SNR is high.

Fig. 1
figure 1

Performance comparison of various QC-LDPC codes

We also compare the BER performance of different schemes as a function of the number of iterations at SNR = 4 dB in Fig. 2. It is apparent that the proposed algorithm converges faster than other algorithms. Furthermore, we also investigate the local girth of each algorithm as given in Fig. 3. Clearly, the proposed algorithm offers the girth of 8 similar to other algorithms except IMAC QC-LDPC. Note that the proposed CRT-based H matrix can have a higher girth by carefully choosing the value of CPMs and block-length size as depicted in Table 3.

Fig. 2
figure 2

BER performance as a function of the number of iterations for different H matrices at SNR = 4 dB

Fig. 3
figure 3

Girth comparison of proposed-CRT codes

5 Properties of the Proposed Codes

The component QC-LDPC codes, which are constructed by using the proposed method when combined with CRT to construct a large block-length H matrix, have good attributes, such as large girth, less complexity, good storage, flexible code rates, and flexible code lengths. Details of some properties are discussed below. Furthermore, our proposed QC-LDPC code has lower computational complexity and is much more practical as compared to that obtained from the PEG algorithm.

5.1 Girth

It is one of the well-known parameters to determine the performance of decoding. In iterative belief propagation decoding, the algorithm converges to the most optimal solution, if the H matrix is free of short-cycle length. Cycle lengths of 4 and 6 lead to undesirable decoded data. When short-cycle lengths exist in the H matrix, the algorithm breaks down very soon. Therefore, the H matrix with large girth should always be taken into account. Our algorithm still satisfies (10), i.e., the girth \(g \ge \hbox{max} \{ g_{1} ,g_{2} \}\) as shown in Fig. 3.

5.2 Complexity

Let us analyze the computational complexity and the storage usage of the proposed algorithm.

5.2.1 Computational Complexity

Computational complexity of the proposed algorithm primarily depends on the algorithm’s exploration time to obtain the exponent matrix indices. Exploration time depends on a row weight and a column weight of the desired exponent matrix. In the H matrix, the row and column weights are small numbers irrespective of code length. So we can divide computational complexity into two categories, the one for calculating the exponent matrix and the other for applying the CRT algorithm for large size block-length LDPC codes. However, both categories depend on codeword length, but the combining algorithm does not grow with the size of H matrix. From CRT formulas in Sect. 2.2, we can see that, each CRT computation needs only \((s - 1)\) additions, \(2(s - 1)\) multiplications, and 1 modulo operation. Some of the values like \(L, \, \overline{{L_{b} }}\), and \(A_{b}\) can be computed prior to initialize our CRT based combining method, and \(L_{1} ,L_{2} , \ldots ,L_{s}\) should be selected optimally. Hence, the complexity of each CRT computation is negligible, if compared to the complexity of the design of parity-check component codes.

5.2.2 Storage Usage

In the H matrix, the row and column indices of ‘1’ entries will be pre-defined and stored in the shift registers for practical applications. Therefore, our proposed method has a significant advantage of storing smaller index values, as shown in \({\bar{\mathbf{H}}}_{1}\) and \({\bar{\mathbf{H}}}_{2}\) in our example, discussed in Sect. 3, which has a minimum number of CPM size with large girth. This may reduce the storage requirement of a decoder of the proposed code. Furthermore, the scope of this method can be expanded in hardware implementation as well [25].

6 Conclusion

In this paper, we propose a new method for constructing the H matrix of QC-LDPC codes that aims for selecting the indices of the exponent matrix with a maximized local girth for column weight 3, by sequentially assigning proper sub-matrix for each column of \({\mathbf{E(H)}}\) matrix. A class of structured regular QC-LDPC codes has been constructed by using a CRT algorithm. This method can also be generalized to any number of column weights. As shown in simulation results, the proposed code outperforms the well-known algorithms in certain cases. Any general case of large block-length LDPC codes with good performance can be constructed using our proposed method. It fulfills almost all the parameters required for good LDPC codes and suitable for practical applications in terms of cost efficiency. Nevertheless, we found that the proposed algorithm might require higher computational search than some existing algorithms. Consequently, one should trade-off between performance and complexity when designing the QC-LDPC codes.