In this section, we proceed with the procedure of the construction of the high-rate regular (QC-LDPC) codes through the following three steps: (1) Construct an *n*×*n* EG code and transform it into a proper form. (2) Utilize the transformed EG code matrix to construct an auxiliary matrix for identifying 6-cycles of it. (3) Eliminate the 6-cycles.

### Decomposition of EG code matrix

Following [9], we can construct a *n*×*n* Euclidean geometry code **W** over the field EG(*m*=2,2^{s}), where *n*=2^{ms}−1. The constructed matrix **W** which is cyclic can be expressed by its first row **w**=(*ω*_{0},*ω*_{1},…,*ω*_{n−1}) as:

$$\begin{array}{@{}rcl@{}} \mathbf{W} &=& \left[ \begin{array}{cccc} \omega_{0} & \omega_{1} & \cdots & \omega_{n-1}\\ \omega_{n-1} & \omega_{0} & \cdots & \omega_{n-2}\\ \vdots & \vdots & \ddots & \vdots\\ \omega_{1} & \omega_{2} & \cdots & \omega_{0}\\ \end{array} \right]_{n\times n}\,. \end{array} $$

(4)

For simplicity, we define an operation Ψ to represent:

$$\begin{array}{@{}rcl@{}} \mathbf{W} = \mathrm{\Psi}(\mathbf{w}), \end{array} $$

(5)

which implies that each row of the cyclic matrix **W** has the identical weight.

We assume that the positive integer *n* can be factored as *n*=*c*×*b* where *b*≠1 and *c*≠1 are positive integers with *b* being odd throughout the rest of this paper. Define the subset:

$$\begin{array}{@{}rcl@{}} \pi^{(0)} &=& \{0\,,c\,,2c\,,\ldots,(b-1)c\}\,. \end{array} $$

(6)

Thus, the set \(\mathcal {L}=\{0\,,1\,,2\,,\ldots \,,c \cdot b-1 \}\) can be partitioned into:

$$\begin{array}{@{}rcl@{}} \left\{\pi^{(0)}\,,\pi^{(0)}+1\,,\ldots\,,\pi^{(0)}+c-1\right\}, \end{array} $$

(7)

where we define *π*^{(0)}+*i*={*i*,*c*+*i*,2*c*+*i*,…,(*b*−1)*c*+*i*} for *i*=0,1,…,*c*−1. We use *π* to denote the partition of the indices in \(\mathcal {L}\) defined in (7) for the rest of this paper. Using this partitioning, we obtain a *b*×*n* quasi-cyclic matrix **H**_{qc} as:

$$\begin{array}{@{}rcl@{}} \mathbf{H}_{\text{qc}}\triangleq[\mathrm{\Psi}(\mathbf{w}_{0})\,,\mathrm{\Psi}(\mathbf{w}_{1})\,,\ldots\,,\mathrm{\Psi}(\mathbf{w}_{c-1})]_{b \times n}\,. \end{array} $$

(8)

Let *r*_{i} represent the row weight of Ψ(**w**_{i}) for *i*=0,1,2,…,*c*−1 respectively. Choosing a positive integer 1≤*λ*< max*i*=0,1,…,*c*−1{*r*_{i}}, we eliminate all the Ψ(**w**_{k}) (0≤*k*≤*c*−1) whose row weights are less than *λ* from the set:

$$\begin{array}{@{}rcl@{}} \{\mathrm{\Psi}(\mathbf{w}_{0}), \mathrm{\Psi}(\mathbf{w}_{1}), \ldots, \mathrm{\Psi}(\mathbf{w}_{c-1})\}\,. \end{array} $$

(9)

The resulting subset comprised of Ψ(**w**_{i})’s in (9) whose row weights are greater than or equal to *λ* is therefore represented as:

$$\begin{array}{@{}rcl@{}} \left\{\mathrm{\Psi}(\mathbf{w}_{i_{0}}),\mathrm{\Psi}(\mathbf{w}_{i_{1}}),\ldots,\mathrm{\Psi}\left(\mathbf{w}_{i_{k_{1}-1}}\right)\right\}\,. \end{array} $$

(10)

It follows \(r_{i_{k}} \geq \lambda \) for 0≤*k*≤*k*_{1}−1. Since the row weight of **H**_{qc} defined in (8) is 2^{s}, we choose the parameter *λ* satisfying *c*<2^{s}/*λ* that ensures the subset (10) is not a null set.

We define a *b*×*b**k*_{1} matrix **H**qc′ as:

$$\begin{array}{@{}rcl@{}} \mathbf{H}_{\text{qc}}'&=&[\mathrm{\Psi}(\mathbf{w}_{i_{0}}), \mathrm{\Psi}(\mathbf{w}_{i_{1}}), \ldots, \mathrm{\Psi}(\mathbf{w}_{i_{k_{1}-1}})]\,. \end{array} $$

(11)

### Identifying the 6-cycles

In this section, we develop a procedure to eliminate 6-cycles in (11). For this purpose, without loss generality, we assume that we are given:

$$ \mathbf{H}_{\text{qc}}' = [\mathrm{\Psi}(\mathbf{v}_{0}), \mathrm{\Psi}(\mathbf{v}_{1}), \ldots, \mathrm{\Psi}(\mathbf{v}_{k-1})], $$

(12)

where the row weight *r*_{i} of Ψ(**v**_{i}) for each *i* satisfying 0≤*i*≤*k*−1 is at least *λ* which is described in the previous section. The vector **v**_{i} with 0≤*i*≤*k*−1 is:

$$ \mathbf{v}_{i} = \left(\nu_{0}^{i}, \nu_{1}^{i}, \ldots, \nu_{b-1}^{i}\right)\,. $$

(13)

The first row of (12) is therefore equal to:

$$ \mathbf{h} = [\mathbf{v}_{0}, \mathbf{v}_{1}, \ldots, \mathbf{v}_{k-1}] \,. $$

(14)

In order to eliminate 6-cycles, we transform matrix (12) into a new matrix of form (17). This leads us to introduce the operation *φ* which is defined as:

$$ \varphi(\mathbf{v}_{i})= \left(\nu_{\frac{b-1}{2}+1}^{i}\,,\ldots, \nu_{b-1}^{i}, \nu_{0}^{i}, \nu_{1}^{i}, \ldots, \nu_{\frac{b-1}{2}}^{i}\right)\,. $$

(15)

Therefore, we transform (14) into:

$$ \hat{\mathbf{h}} = [\varphi(\mathbf{v}_{0})\,,\varphi(\mathbf{v}_{1})\,,\ldots\,,\varphi(\mathbf{v}_{k-1})]\,. $$

(16)

The transformation \(\mathcal {T}\) maps \(\hat {\mathbf {h}}\) in (16) to a *b*×(*k**b*+*b*−1) matrix is defined as:

$$ \begin{array}{ll} &\mathcal{T}(\hat{\mathbf{h}}) = \left[ \begin{array}{cccccc} \varphi(\mathbf{v}_{0}) & \varphi(\mathbf{v}_{1}) & \cdots & \varphi(\mathbf{v}_{k-1}) & 0 & \mathbf{0}_{1 \times (b-2)}\\ 0 & \varphi(\mathbf{v}_{0}) & \varphi(\mathbf{v}_{1}) & \cdots & \varphi(\mathbf{v}_{k-1}) & \mathbf{0}_{1 \times (b-2)}\\ \vdots & \vdots & \vdots & \vdots & \vdots & \vdots\\ 0 & \mathbf{0}_{1 \times (b-2)} & \varphi(\mathbf{v}_{0}) & \varphi(\mathbf{v}_{1}) & \cdots & \varphi(\mathbf{v}_{k-1}) \\ \end{array} \right]_{b \times kb}\\ &= \left[ \begin{array}{cccccccccccccc} \nu_{\frac{b-1}{2}+1}^{0} & \cdots & \nu_{0}^{0} & \cdots & \nu_{\frac{b-1}{2}}^{0} & \nu_{\frac{b-1}{2}+1}^{1} & \cdots & \nu_{\frac{b-1}{2}}^{1} & \cdots & \nu_{\frac{b-1}{2}}^{k-1} & 0 & 0 & \cdots & 0 \\ 0 & \nu_{\frac{b-1}{2}+1}^{0} & \cdots & \nu_{0}^{0} & \cdots & \nu_{\frac{b-1}{2}}^{0} & \nu_{\frac{b-1}{2}+1}^{1} & \cdots & \nu_{\frac{b-1}{2}}^{1} & \cdots & \nu_{\frac{b-1}{2}}^{k-1} & 0 &\cdots & 0 \\ \vdots & \vdots & \vdots & \vdots & \vdots & \vdots &\vdots & \vdots & \vdots & \vdots & \vdots & \vdots & \vdots & \vdots\\ 0 & 0 & \cdots & 0 &\nu_{\frac{b-1}{2}+1}^{0} & \cdots & \nu_{0}^{0} & \cdots & \nu_{\frac{b-1}{2}}^{0} & \nu_{\frac{b-1}{2}+1}^{1} & \cdots & \nu_{\frac{b-1}{2}}^{1} & \cdots & \nu_{\frac{b-1}{2}}^{k-1}\\ \end{array} \right] \end{array} $$

(17)

Examing (17), we see that the first row of \(\mathcal {T}(\hat {\mathbf {h}})\) is obtained through adding *b*−1 zeros to the end of the vector \(\hat {\mathbf {h}}\). Each of the rest rows of \(\mathcal {T}(\hat {\mathbf {h}})\) is the circular shift of the row above it.

The set \(L(\hat {\mathbf {h}})\) comprised of the indices corresponding to the nonzero entries of \(\hat {\mathbf {h}}\) in (16) is defined as:

$$ L(\hat{\mathbf{h}}) = \{p_{0}, p_{1}, \ldots, p_{\rho-1}\}, $$

(18)

where we have \(\rho = \sum \limits _{i=0}^{k-1}r_{i}\) with *r*_{i} representing the row weight of Ψ(**v**_{i}). We define an oblique line segment \(l_{p_{i}}\) which starts from *p*_{i} and forms a descending diagonal from left to right in \(\mathcal {T}(\hat {\mathbf {h}})\),i.e., \(l_{p_{i}}\) constituting of the set of the entries of \(\mathcal {T}(\hat {\mathbf {h}})\) as follows:

$$ l_{p_{i}} = \left\{\mathcal{T}(\hat{\mathbf{h}})_{1,p_{i}}, \mathcal{T}(\hat{\mathbf{h}})_{2,p_{i}+1}, \ldots, \mathcal{T}(\hat{\mathbf{h}})_{b,p_{i}+b-1}\right\}\,. $$

(19)

Clearly, from the definition, the total number of the oblique line segments of the form (19) is *ρ*. Thus, the set of all the oblique line segments is:

$$ \left\{l_{p_{0}}\,,l_{p_{1}}\,,\ldots\,,l_{p_{\rho-1}}\right\}\,. $$

(20)

We define the distance between two oblique lines as:

$$ |l_{p_{i_{0}}}-l_{p_{i_{1}}}| = |p_{i_{0}}-p_{i_{1}}|\,. $$

(21)

From [15], it follows that the possible of 6-cycles appeared in a parity-check matrix is one of the following forms shown in Fig. 1.

**Case 1**: Assume that 6-cycle is comprised of three oblique line segments from (20). Therefore, from (20), the total number of subsets comprised of three oblique line segments is \(\dbinom {\rho }{3}\). For each subset comprised of three oblique line segments \(\left \{l_{p_{i_{0}}}, l_{p_{i_{1}}}, l_{p_{i_{2}}}\right \}\) from (20), we employ (21) to compute:

$$\begin{array}{@{}rcl@{}} \left\{ \begin{aligned} d_{0} &=|p_{i_{1}}-p_{i_{0}}| \\ d_{1} &=|p_{i_{2}}-p_{i_{1}}| \,.\\ \end{aligned} \right. \end{array} $$

(22)

If \({d_{0}\over {d_{1}}}\) is not equal to either \(1\over {2}\) or 2, then we delete such a subset comprised of these three oblique line segments. The remaining subsets constitute Ω_{3} which can be represented as:

$$ \mathrm{\Omega}_{3} = \left\{ \left\{l_{p_{i_{0}}}, l_{p_{i_{1}}}, l_{p_{i_{2}}}\right\}, \left\{l_{p_{i_{3}}}, l_{p_{i_{4}}}, l_{p_{i_{5}}}\right\}, \ldots\right\}\,. $$

(23)

Clearly, each subset of three oblique line segments \(\{l_{p_{i_{j}}}, l_{p_{i_{j+1}}}, l_{p_{i_{j+2}}}\}\) in Ω_{3} satisfies:

$$ {|l_{p_{i_{j+1}}}-l_{p_{i_{j}}}|\over{|l_{p_{i_{j+2}}}-l_{p_{i_{j+1}}}}|}={|p_{i_{j+1}}-p_{i_{j}}|\over{|p_{i_{j+2}}-p_{i_{j+1}}|}}={1\over{2}}\,\,\,\,\rm{or}\,\,\,2\,. $$

(24)

Figure 2 shows that 6-cycles are constituted by three oblique lines.

**Case 2**: Assume that 6-cycle is comprised of four oblique line segments from (20). Therefore, from (20), the total number of subsets comprised of four oblique line segments is \(\dbinom {\rho }{4}\). For each subset comprised of four oblique line segments \(\{l_{p_{i_{0}}}, l_{p_{i_{1}}}, l_{p_{i_{2}}}, l_{p_{i_{3}}}\}\) from (20), we employ (21) to compute:

$$\begin{array}{@{}rcl@{}} \left\{ \begin{aligned} d_{0} &=|p_{i_{1}}-p_{i_{0}}| \\ d_{1} &=|p_{i_{2}}-p_{i_{1}}| \\ d_{2} &=|p_{i_{3}}-p_{i_{2}}| \,.\\ \end{aligned} \right. \end{array} $$

(25)

If the computed distance *d*_{0},*d*_{1}, and *d*_{2} are not satisfied to any of these equations listed in the following set:

$$\begin{array}{@{}rcl@{}} \begin{array}{cc} &\left\{ \begin{array}{lll} d_{0} = d_{1}+d_{2}, & d_{1} = d_{0}+d_{2}, & d_{2} = d_{0}+d_{1}, \\ d_{0} = 2d_{2}, & d_{2} = 2d_{0}, & d_{0} = d_{1}+2d_{2}, \\ d_{2} = 2d_{0}+d_{1}\,,& d_{0} = d_{1}, & d_{1} = d_{2} \\ \end{array} \right\}, \end{array} \end{array} $$

(26)

then we delete such a subset comprised of these four oblique line segments. The remaining subsets constitute Ω_{4} which can be represented as:

$$ \mathrm{\Omega}_{4} = \left\{ \left\{l_{p_{i_{0}}}, l_{p_{i_{1}}}, l_{p_{i_{2}}}, l_{p_{i_{3}}}\right\}, \left\{l_{p_{i_{4}}}, l_{p_{i_{5}}}, l_{p_{i_{6}}}, l_{p_{i_{7}}}\right\}, \ldots\right\}\,. $$

(27)

Figure 3 shows that 6-cycles are constituted by four oblique line segments.

**Case 3**: Assume that 6-cycle is comprised of five oblique line segments from (20). Therefore, from (20), the total number of subsets comprised of five oblique line segments is \(\dbinom {\rho }{5}\). For each subset comprised of five oblique line segments \(\{l_{p_{i_{0}}}, l_{p_{i_{1}}}, l_{p_{i_{2}}}, l_{p_{i_{3}}}, l_{p_{i_{4}}}\}\) from (20), we employ (21) to compute:

$$\begin{array}{@{}rcl@{}} \left\{ \begin{aligned} d_{0} &=|p_{i_{1}}-p_{i_{0}}| \\ d_{1} &=|p_{i_{2}}-p_{i_{1}}| \\ d_{2} &=|p_{i_{3}}-p_{i_{2}}| \\ d_{3} &=|p_{i_{4}}-p_{i_{3}}|\,. \\ \end{aligned} \right. \end{array} $$

(28)

If the computed distance *d*_{0},*d*_{1},*d*_{2}, and *d*_{3} are not satisfied to any of these equations listed in the following set:

$$\begin{array}{*{20}l} \begin{array}{cc} &\left\{ \begin{array}{lll} d_{0} = d_{1}+d_{3}, & d_{3} = d_{0}+d_{1}, & d_{0} = 2d_{2}+d_{3}, \\ d_{1} = d_{0}+d_{3}, & d_{0} = d_{2}+d_{3}, & d_{0} = d_{2}+2d_{3}, \\ d_{2} = d_{0}+d_{3}, & d_{0} = d_{1}+2d_{2}+d_{3}, & d_{3} = 2d_{0}+d_{1}, \\ d_{3} = d_{0}+d_{2}, & d_{3} = d_{0}+2d_{1}+d_{2}, & d_{3} = d_{0}+2d_{1} \\ \end{array} \right\}, \end{array} \end{array} $$

(29)

then we delete such a subset of these five oblique line segments. The remaining subsets constitute Ω_{5} which can be represented as:

$$ \mathrm{\Omega}_{5} \,=\, \left\{ \left\{l_{p_{i_{0}}}, l_{p_{i_{1}}}, l_{p_{i_{2}}}, l_{p_{i_{3}}}, l_{p_{i_{4}}}\!\right\},\! \left\{l_{p_{i_{5}}}, l_{p_{i_{6}}}, l_{p_{i_{7}}}, l_{p_{i_{8}}}, l_{p_{i_{9}}}\!\right\}, \ldots\right\}\!. $$

(30)

Figure 4 shows that 6-cycles are constituted by five oblique line segments.

### Eliminating 6-cycles

In the following, we proceed with the procedure to eliminate 6-cycles.

Step 1: Construct Γ which is defined as:

$$ \mathrm{\Gamma} = \mathrm{\Omega}_{3} \cup \mathrm{\Omega}_{4} \cup \mathrm{\Omega}_{5}, $$

(31)

where Ω_{3}, Ω_{4}, and Ω_{5} are defined by (23), (27), and (30), respectively.

Step 2: Find the oblique line segment \(l_{p_{i_{0}}}\) that appears in the maximal number subsets of Γ. Delete all the subsets of Γ containing this oblique line segment \(l_{p_{i_{0}}}\) and collect all the remaining subsets of Γ to form an new subset Γ_{1}. Repeat this process on the subset Γ_{1} to obtain \(l_{p_{i_{1}}}\) and Γ_{2}. We continue this process till Γ_{k} for *k* being some positive integer becomes a null set. In this process, we also obtain an ordered set of oblique line segments which is:

$$ \mathrm{\Omega}_{\text{order}} = \left\{l_{p_{i_{0}}}, l_{p_{i_{1}}}, l_{p_{i_{2}}}\, \ldots\, l_{p_{i_{k-1}}}\right\}\,. $$

(32)

Step 3: In view of (12), we construct *k* subsets *Q*_{0},*Q*_{1},…,*Q*_{k−1} with *Q*_{j} for 0≤*j*≤*k*−1 being comprised of the oblique line segments \(l_{p_{i_{j}}}\) in Ω_{order} satisfying:

$$ \lfloor p_{i_{j}}/b\rfloor =j, $$

(33)

where ⌊·⌋ denotes the rounding down operation. Recall that *r*_{j} for 0≤*j*≤*k*−1 is the row weight of Ψ(**v**_{j}) in (12) and *λ* is the pre-chosen positive integer introduced above Eq. (9). If there are more than (*r*_{j}−*λ*) oblique line segments of Ω_{order} satisfy (33), then only the first (*r*_{j}−*λ*) oblique line segments appeared in the ordered set Ω_{order} are chosen to form *Q*_{j}. If there are less than (*r*_{j}−*λ*) oblique line segments of Ω_{order} satisfy (33), we arbitrarily choose oblique line segments satisfying (33) from (20) that do not belong to Ω_{order}.

Thus, *Q*_{j} for 0≤*j*≤*k*−1 has the size of (*r*_{j}−*λ*). We define 1×*b* vector **s**_{j}:

$$\begin{array}{@{}rcl@{}} \mathbf{s}_{j}&=&[s_{j,0}\,,\,\ldots, s_{j,b-1}]\,\, \text{with}\,\, s_{j,i}= \left\{ \begin{aligned} &1\,\,\,\text{if}\ \, l_{(i+jb)} \in Q_{j}\,\,\\ &0\,\,\,\text{otherwise}\, \end{aligned}\right.\,. \end{array} $$

(34)

For each **s**_{j}, we utilize the inverse of the map *φ* defined in (15) to yield a *b*×*b* matrix *S*_{j} as follows:

$$ S_{j} = \mathrm{\Psi}\left(\varphi^{-1}(\mathbf{s}_{j})\right), $$

(35)

where the operation Ψ is defined in (5). Thus, the quasi-cyclic matrix **S**

$$ \mathbf{S} = [S_{0}, S_{1}, \ldots, S_{k-1}]\,. $$

(36)

In view of **H**qc′ and **S** defined in (12) and (36), respectively, the quasi-cyclic encoding parity-check matrix \(\mathbf {H}_{\text {qc}}^{(1)}\) is therefore equal to:

$$\begin{array}{@{}rcl@{}} \mathbf{H}_{\text{qc}}^{(1)} = \mathbf{H}_{\text{qc}}' \oplus \mathbf{S}\,. \end{array} $$

(37)

The operator ⊕ in (37) is defined as the entry-wise XOR operations of matrices **H**qc′ and **S**. From the construction procedure from (12) to (37), it follows that matrix \(\mathbf {H}_{\text {qc}}^{(1)}\) is regular and quasi-cyclic with its column and row weight being *λ* and *k**λ*, respectively.

### Another regular quasi-cyclic parity-check matrix

Substituting \(\mathbf {H}_{\text {qc}}^{(1)}\) for **H**qc′ and proceeding the procedure from (12) to (36) with *λ*=0, we can get a new **S**^{(1)} from (36). Then, we can construct another regular quasi-cyclic parity-check matrix \(\mathbf {H}_{\text {qc}}^{(2)}\) as follows:

$$ \mathbf{H}_{\text{qc}}^{(2)}=\left[ \begin{array}{cc} \mathbf{H}_{\text{qc}}^{(1)} \oplus \mathbf{S}^{(1)} & \mathbf{S}^{(1)}\\ \mathbf{S}^{(1)} &{H}_{\text{qc}}^{(1)} \oplus \mathbf{S}^{(1)}\\ \end{array} \right]\,. $$

(38)

\(\mathbf {H}_{\text {qc}}^{(2)}\) and \(\mathbf {H}_{\text {qc}}^{(1)}\) have the same row and column weight.