# 3.2.4.3.2. LDPC Decoder parameters¶

## 3.2.4.3.2.1. --dec-h-path¶

Type: file read only --dec-h-path conf/dec/LDPC/AR4JA_4096_8192.qc --dec-h-path conf/dec/LDPC/MACKAY_504_1008.alist

Give the path to the $$H$$ parity matrix. Support the AList and the QC formats.

This argument is not required if the encoder type --enc-type is LDPC_DVBS2.

For the AList format, an ASCII file composed by positive integers is expected:

# -- Part 1 --
# 'nVN' is the total number of variable nodes and 'nCN' is the total number of check nodes
nVN nCN
# 'dmax_VN' is the higher variable node degree and 'dmax_CN' is the higher check node degree
dmax_VN dmax_CN
# list of the degrees for each variable nodes
d_VN_{1} d_VN_{2} [...] d_VN_{nVN}
# list of the degrees for each check nodes
d_CN_{1} d_CN_{2} [...] d_CN_{nCN}
#
# -- Part 2 --
# each following line describes the check nodes connected to a variable node, the first
# check node index is '1' (and not '0')
# variable node '1'
VN_{1}_CN_{idx_1} [...] VN_{1}_CN_{idx_d_VN_{1}}
# variable node '2'
VN_{2}_CN_{idx_1} [...] VN_{2}_CN_{idx_d_VN_{2}}
[...]
# variable node 'nVN'
VN_{nVN}_CN_{idx_1} [...] VN_{nVN}_CN_{idx_d_VN_{nVN}}
#
# -- Part 3 --
# each following line describes the variables nodes connected to a check node, the first
# variable node index is '1' (and not '0')
# check node '1'
CN_{1}_VN_{idx_1} [...] CN_{1}_VN_{idx_d_CN_{1}}
# check node '2'
CN_{2}_VN_{idx_1} [...] CN_{2}_VN_{idx_d_CN_{2}}
[...]
# check node 'nCN'
CN_{nCN}_VN_{idx_1} [...] CN_{nCN}_VN_{idx_d_CN_{nCN}}


In the part 2 and 3, it is possible to pad, at the end of the indexes list, with zeros when the current node degree is smaller than the maximum node degree. AFF3CT will be able to read the file even if it is padded with zeros.

For the QC format, an ASCII file composed by integers is expected:

# 'C' is the number of columns (there is 'C * Z' variable nodes)
# 'R' is the number of rows (there is 'R * Z' check nodes)
# 'Z' is the expansion factor
C R Z

# each 'B_r_{y}_c_{x}' is a sub-matrix bloc of size 'Z * Z'
# 'B_r_{y}_c_{x} = -1' means a zero matrix
# 'B_r_{y}_c_{x} = 0' means an identity matrix
# 'B_r_{y}_c_{x} = s' with 's' between '1' and 'Z-1' means an identity matrix shifted 's' times
#                     to the right
B_r_{1}_c_{1} B_r_{1}_c_{2} [...] B_r_{1}_c_{C}
B_r_{2}_c_{1} B_r_{2}_c_{2} [...] B_r_{2}_c_{C}
[...]
B_r_{R}_c_{1} B_r_{R}_c_{2} [...] B_r_{R}_c_{C}

# puncturing pattern (optional)
# 'T_c_{x}' can be '0' or '1'
#  - if 'T_c_{x} = 0', does not transmit the 'Z' consecutive bits
#  - if 'T_c_{x} = 1', transmits the 'Z' consecutive bits
T_c_{1} T_c_{2} [...] T_c_{C}


## 3.2.4.3.2.2. --dec-type, -D¶

Type: text BIT_FLIPPING BP_PEELING BP_FLOODING BP_HORIZONTAL_LAYERED BP_VERTICAL_LAYERED CHASE ML BP_FLOODING --dec-type BP_HORIZONTAL_LAYERED

Select the decoder algorithm.

Description of the allowed values:

Value Description
BIT_FLIPPING Select the BF category of algorithms.
BP_PEELING Select the BP-P algorithm from [Spi01].
BP_FLOODING Select the BP-F algorithm from [MN95].
BP_HORIZONTAL_LAYERED Select the BP-HL algorithm from [YPNA01].
BP_VERTICAL_LAYERED Select the BP-VL algorithm from [ZF02].
CHASE See the common --dec-type, -D parameter.
ML See the common --dec-type, -D parameter.

## 3.2.4.3.2.3. --dec-implem¶

Type: text STD GALA GALB GALE WBF MWBF PPBF SPA LSPA AMS MS NMS OMS SPA --dec-implem AMS

Select the implementation of the decoder algorithm.

Description of the allowed values:

Value Description
STD Select the STD implementation.
GALA Select the GALA algorithm [RL09].
GALB Select the GALB algorithm [DDB14] with majority vote.
GALE Select the GALE algorithm [DDB14] with extended alphabet.
PPBF Select the PPBF algorithm [LGK+19].
WBF Select the WBF algorithm [WNY+10].
MWBF Select the MWBF algorithm [WNY+10].
SPA Select the SPA update rules [MN95].
LSPA Select the LSPA update rules [MN95].
AMS Select the AMS update rule.
MS Select the MS update rule [FMI99].
NMS Select the NMS update rule [CF02].
OMS Select the OMS update rule [CF02].

Table 3.2 shows the different decoder types and their corresponding available implementations.

Table 3.2 LDPC decoder types and available implementations.
Decoder STD GALA GALB GALE PPBF WBF MWBF SPA LSPA AMS MS NMS OMS
BF         $$\checkmark$$ $$\checkmark$$ $$\checkmark$$
BP-P $$\checkmark$$
BP-F   $$\checkmark$$ $$\checkmark$$ $$\checkmark$$       $$\checkmark^{**+}$$ $$\checkmark^{**}$$ $$\checkmark^{**}$$ $$\checkmark^{**}$$ $$\checkmark^{**}$$ $$\checkmark^{**}$$
BP-HL               $$\checkmark^{**}$$ $$\checkmark^{**}$$ $$\checkmark^{**}$$ $$\checkmark^{*}$$ $$\checkmark^{*}$$ $$\checkmark^{*}$$
BP-VL               $$\checkmark^{**}$$ $$\checkmark^{**}$$ $$\checkmark^{**}$$ $$\checkmark^{**}$$ $$\checkmark^{**}$$ $$\checkmark^{**}$$

$$^{*}/^{**}$$: compatible with the --dec-simd INTER parameter.

$$^{**}$$: require the C++ compiler to support the dynamic memory allocation for over-aligned data, see the P0035R4 paper. This feature is a part of the C++17 standard (working on the C++ GNU compiler version 8.1.0). When compiling with the GNU compiler in C++11 mode, the -faligned-new option enables specifically the required feature.

$$^{+}$$: compatible with the --dec-simd INTRA parameter.

## 3.2.4.3.2.4. --dec-simd¶

Type: text INTER, INTRA --dec-simd INTER

Select the SIMD strategy.

Table 3.2 shows the decoders and implementations that support SIMD.

Description of the allowed values:

Value Description
INTRA Select the intra-frame strategy.
INTER Select the inter-frame strategy.

Note

In the intra-frame strategy, SIMD units process several LLRs in parallel within a single frame decoding. In the inter-frame strategy, SIMD units decodes several independent frames in parallel in order to saturate the SIMD unit. This approach improves the throughput of the decoder but requires to load several frames before starting to decode, increasing both the decoding latency and the decoder memory footprint.

Note

When the inter-frame SIMD strategy is set, the simulator will run with the right number of frames depending on the SIMD length. This number of frames can be manually set with the --sim-inter-fra, -F parameter. Be aware that running the simulator with the --sim-inter-fra, -F parameter set to 1 and the --dec-simd parameter set to INTER will completely be counterproductive and will lead to no throughput improvements.

## 3.2.4.3.2.5. --dec-h-reorder¶

Type: text ASC DSC NONE NONE --dec-h-reorder ASC

Specify the order of execution of the CNs in the decoding process depending on their degree.

The degree of a CN is the number of VNs that are connected to it.

Description of the allowed values:

Value Description
ASC Reorder from the smallest CNs degree to the biggest CNs degree.
DSC Reorder from the biggest CNs degree to the smallest CNs degree.
NONE Do not change the order.

## 3.2.4.3.2.6. --dec-ite, -i¶

Type: integer 10 --dec-ite 30

Set the maximal number of iterations in the LDPC decoder.

Note

By default, in order to speedup the decoding time, the decoder can stop the decoding process if all the parity check equations are verified (also called the syndrome detection). In that case the decoder can perform less decoding iterations than the given number. To force the decoder to make all the iterations, use the --dec-no-synd parameter.

## 3.2.4.3.2.7. --dec-min¶

Type: text MIN MINL MINS MINL --dec-min MIN

Define the $$\min^*$$ operator approximation used in the AMS update rule.

Description of the allowed values:

Value Description
MINS $$\min^*(a,b) = \min(a,b) + \log(1 + \exp(-(a + b))) - \log(1 + \exp(-|a - b|))$$.
MINL $$\min^*(a,b) \approx \min(a,b) + corr(a + b) - corr(|a + b|)$$ with $$corr(x) = \begin{cases} 0 & \text{if } x >= 2.625\\ -0.375 x + 0.6825 & \text{if } x < 1.0 \\ -0.1875 x + 0.5 & \text{else} \end{cases}$$.
MIN $$\min^*(a,b) \approx \min(a,b)$$.

MINS for Min Star is the exact $$\min^*$$ operator. MINL for Min Linear is a linear approximation of the $$\min^*$$ function. MIN for Min is the simplest approximation with only a $$\min$$ function.

## 3.2.4.3.2.8. --dec-norm¶

Type: real number 1.0 --dec-norm 0.75

Set the normalization factor used in the NMS update rule.

## 3.2.4.3.2.9. --dec-off¶

Type: real number 0.0 --dec-off 0.25

Set the offset used in the OMS update rule.

## 3.2.4.3.2.10. --dec-mwbf-factor¶

Type: real number 0.0 --dec-mwbf-factor 1.0

Give the weighting factor used in the MWBF algorithm.

## 3.2.4.3.2.11. --dec-synd-depth¶

Type: integer 1 --dec-synd-depth 2

Set the number of iterations to process before enabling the syndrome detection. In some cases, it can help to avoid false positive detections.

## 3.2.4.3.2.12. --dec-ppbf-proba¶

Type: list of real numbers --dec-ppbf-proba "0,0.001,0.1,0.3,1,1,1"

Give the probabilities of the Bernouilli distribution of the PPBF. The number of given values must be equal to the biggest variable node degree plus two.

Thus, with a parity matrix that has its largest variable node at 5, you must give 7 values. Each value corresponds to an energy level as described in [LGK+19].

## 3.2.4.3.2.13. --dec-no-synd¶

Disable the syndrome detection, all the LDPC decoding iterations will be performed.

## 3.2.4.3.2.14. References¶

 [CF02] (1, 2) J. Chen and M. P. C. Fossorier. Density evolution for two improved bp-based decoding algorithms of ldpc codes. IEEE Communications Letters (COMML), 6(5):208–210, May 2002. doi:10.1109/4234.1001666.
 [DDB14] (1, 2) M. Fossorier D. Declerq and E. Biglieri. Channel Coding: Theory, Algorithms, and Applications. Academic Press, 2014. ISBN 978-0-12-396499-1. doi:10.1016/C2011-0-07211-3.
 [FMI99] M. P. C. Fossorier, M. Mihaljevic, and H. Imai. Reduced complexity iterative decoding of low-density parity check codes based on belief propagation. IEEE Transactions on Communications (TCOM), 47(5):673–680, May 1999. doi:10.1109/26.768759.
 [LGK+19] (1, 2) K. Le, F. Ghaffari, L. Kessal, D. Declercq, E. Boutillon, C. Winstead, and B. Vasić. A probabilistic parallel bit-flipping decoder for low-density parity-check codes. IEEE Transactions on Circuits and Systems I: Regular Papers, 66(1):403–416, Jan 2019. doi:10.1109/TCSI.2018.2849679.
 [MN95] (1, 2, 3) D. J. C. MacKay and R. M. Neal. Good codes based on very sparse matrices. In IMA International Conference on Cryptography and Coding (IMA-CCC), 100–111. UK, December 1995. Springer. doi:10.1007/3-540-60693-9_13.
 [RL09] W. Ryan and S. Lin. Channel codes: classical and modern. Cambridge University Press, September 2009. ISBN 978-0-511-64182-4. URL: http://www.cambridge.org/9780521848688.
 [Spi01] M.G. Luby ; M. Mitzenmacher ; M.A. Shokrollahi ; D.A. Spielman. Efficient erasure correcting codes. IEEE Transactions on Information Theory (TIT), 47(2):569 – 584, February 2001. doi:10.1109/18.910575.
 [WNY+10] (1, 2) T. Wadayama, K. Nakamura, M. Yagita, Y. Funahashi, S. Usami, and I. Takumi. Gradient descent bit flipping algorithms for decoding ldpc codes. IEEE Transactions on Communications (TCOM), 58(6):1610–1614, June 2010. doi:10.1109/TCOMM.2010.06.090046.
 [YPNA01] E. Yeo, P. Pakzad, B. Nikolic, and V. Anantharam. High throughput low-density parity-check decoder architectures. In Global Communications Conference (GLOBECOM), volume 5, 3019–3024 vol.5. IEEE, 2001. doi:10.1109/GLOCOM.2001.965981.
 [ZF02] J. Zhang and M. Fossorier. Shuffled belief propagation decoding. In Asilomar Conference on Signals, Systems, and Computers (ACSSC), volume 1, 8–15 vol.1. IEEE, November 2002. doi:10.1109/ACSSC.2002.1197141.