My aim is to try out the 5G LDPC codes by using the aff3ct library. This library needs the parity check matrix loaded from a .alist or a .gc file to create the LDPC encoder. I've been looking how to generate a parity check matrix that is compliant with the 5G specs, can someone orientate me on this topic?

Thanks a lot

  • $\begingroup$ many 5G codes are actually delivered with aff3ct, did you check its website? Other than that, the Kaiserslautern LDPC codes listing has a-list files, pretty-good-codes.org (which sadly is currently down) has alists, so do a lot of other websites. You really don't have to write down the alist file from the standards specifications yourself. Other people have done that for you. $\endgroup$ May 12, 2023 at 15:48
  • $\begingroup$ also, quick google: (26112,17664) 5G NR alist (no warranties) $\endgroup$ May 12, 2023 at 15:53
  • $\begingroup$ (other than that, IIRC those are quasicyclic (QC) LDPC codes, so reading up on how these are represented in a base matrix probably makes a lot of things clearer. ETSI TS 138 212 specifies the base matrices for these QC codes. The thing is, if you have a QC LDPC matrix, you usually don't want to use a naive representation of the code (i.e., you don't want to use an alist) to feed your decoder, as that would lead to very inefficient decoder structure. I don't know whether aff3ct has support for QC. $\endgroup$ May 12, 2023 at 15:59
  • $\begingroup$ ah, I looked that up. It does. $\endgroup$ May 12, 2023 at 16:02

1 Answer 1


Aff3ct directly supports quasicyclic matrix definitions, so you don't need to expand the base matrix and generate an alist to parameterize your encoder.

See the documentation of the --dec-h-path parameter, and the --enc-type (esp. LDPC_QC) parameter.

You can thus directly use tables 5.3.2-2 and 5.3.2-3 from ETSI TS 138 212 in a .qc file as explained in the --dec-h-path documentation.

So, no need for an alist. If you, for some other purpose, need an alist, you'll have to implement the quasi-cyclic expansion. That's pretty straightforward, and even ETS TS 138 212 describes the process in 5.3.2 step 3):

The elements in $\mathbf H_{BG}$ with row and column indices given in Table 5.3.2-2 (for LDPC base graph 1) and Table 5.3.2-3 (for LDPC base graph 2) are of value 1, and all other elements in $\mathbf H_{BG}$ are of value 0.

The matrix $\mathbf H$ is obtained by replacing each element of $\mathbf H_{BG}$ with a $Z_c\times Z_c$ matrix, according to the following:

  • Each element of value 0 in $\mathbf H_{BG}$ is replaced by an all zero matrix 0 of size $Z_c \times Z_c$;
  • Each element of value 1 in $\mathbf H_{BG}$ is replaced by a circular permutation matrix $\mathbf I(P_{i , j})$ of size $Z_c\times Z_c$, where $i$ and $j$ are the row and column indices of the element, and $\mathbf I(P_{i , j})$ is obtained by circularly shifting the identity matrix $\mathbf I$ of size … to the right $P_{i , j}$ times. > The value of $P_{i , j}$ is given by $P_{i , j} =V_{i , j} \mod Z_c $ . The value of $V_{i , j}$ is given by Tables 5.3.2-2 and 5.3.2-3 according to the set index $i_{LS}$ and LDPC base graph.
  • $\begingroup$ Thanks! I thought I had to expand the matrix from the BG myself. So where can I find the .qc file of BG1 and BG2 of the standard? I don't know how to construct the .bg from the Tables you listed. $\endgroup$
    – JonPC
    May 15, 2023 at 6:50
  • $\begingroup$ The documentation of aff3ct I referred to describes the QC format. You literally just have to put the content of these tables into that. $\endgroup$ May 15, 2023 at 6:53
  • $\begingroup$ Oh I get it thanks! But this are very large matrices, are these base matrices available somewhere already in this format? $\endgroup$
    – JonPC
    May 15, 2023 at 7:04
  • $\begingroup$ I managed to construct the matrices and parse them to the QC format. So if I want to try to encode and decode using QC_LDPC, should I give that same H matrix to both the encoder and decoder? $\endgroup$
    – JonPC
    May 15, 2023 at 9:27

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.