Link Search Menu Expand Document

Protograph code construction

Table of Contents

Background

This library includes different constructions for the creation of Protograph-based LDPC Codes. Protograph codes are created through the expansion of a base protograph. The resulting LDPC code matrix is a combination of “submatrices”, each submatrix constructed according to the corresponding degree specified in the protograph. Given an expansion factor N, these submatrices are strictly N by N dimensions.

We start with a protograph whose matrix representation has width n_p, height m_p an expansion factor N and is populated with non-negative integers. This can be represented as a graph with n_p variable nodes, m_p check nodes, and the number of connections between a given variable and check node defined by the corresponding entry in the matrix. The resulting LDPC code would be representable by a m x n matrix, where m = m_p x N and n = n_p x N. Suppose the (i,j)th entry in the protograph has value (weight) of w, then the submatrix (i x N: (i+1) x N, j x N: (j+1) x N) in the expanded matrix has exactly w 1s in each row and in each column. Note that 0 <= w <= N. As an example, when w = 0 the submatrix is the all-zeros matrix and when w = 1 the submatrix can be any permutation matrix.

Note that the construction algorithm does not take puncturing into account. Puncturing is considered after the parity check matrix construction to determine which of the bits in the expanded matrix should be transmitted. This is determined by the transmitted bits in the protograph itself - all the corresponding bits in the expanded matrix are also transmitted.

We show below an small example obtained from Butler and Siegel (2013) that should help illustrate this better. The example has parameters m_p = 2, n_p = 3 and N = 3.

Simple protograph G and corresponding protomatrix A

Protograph G replicated N = 3 times

Derived graph obtained by edge set permutations that preserve degree and interconnectivity among node types.

Corresponding expanded parity check matrix

Construction methods

As discussed in the background section, the protograph code construction boils down to construction of the submatrices with the following properties:

  • dimension N x N (where N is the expansion factor)
  • each row and column containing w 1s (where w is the value in the protograph matrix satisfying 0 <= w <= N)

The different construction methods below only differ in the submatrix generation algorithms and hence we focus on that aspect in what follows. When w = 0, the submatrix is the all-zeros matrix for all the construction methods.

peg

This is the default construction method and generates a submatrix equivalent to a regular code built according to parameters n = N, m = N, c = w (column weight) with the peg construction described here. The construction method was chosen over other regular construction methods as it is the current state-of-the-art for regular code construction. When w = 1, we found that the peg algorithm always generated the identity matrix which led to issues due to insufficient randomness. Thus we replaced peg with a permutation matrix when w = 1. The peg construction might be unsuitably slow for extremely large expansion factors (above ~50,000), and other constructions might be better in this case.

sum-permutations

This construction generates a submatrix the result of a summation of w random non-overlapping permutation matrices of size N. The resulting matrix is strictly regular in the weights of its rows and columns since each permutation matrix adds a single 1 to each row and to each column of the submatrix.

This library provides a class for the handling of the special case of Tanner graphs for permutation matrices. This construction utilizes this API to generate the respective submatrices.

quasi-cyclic

This construction generates a circulant submatrix according to the following algorithm:

The first row is populated randomly with w 1s. Each of the following N-1 rows is the circular right shifts of the preceding row. The resulting matrix has exactly w 1s in each row and in each column. As discussed in Future work, quasi-cyclic matrices have certain nice properties enabling efficient encoding and are used as part of several standards. However, additional construction optimizations are needed to get the best performance from such matrices.

A sample submatrix obtained from this construction is shown below (with N = 6, w = 2).

0 1 0 0 0 1
1 0 1 0 0 0
0 1 0 1 0 0
0 0 1 0 1 0
0 0 0 1 0 1

permuted-quasi-cyclic

This construction generates a submatrix by first generating a submatrix with the quasi-cylic construction above and then permuting the rows and the columns of the submatrix. This leads to more randomness in the construction and hence generally better results than the quasi-cylic construction (see Simulations). This method was inspired by the MATLAB forum answer here. We show below a sample submatrix generated by permuting the rows and columns of the quasi-cylic example above.

0 1 0 1 0 0
0 0 1 0 1 0
1 0 0 1 0 0
0 0 0 0 1 1
1 1 0 0 0 0
0 0 1 0 0 1