3.2.4.3.2. LDPC Decoder parameters

3.2.4.3.2.1. --dec-h-path Required

Type

file

Rights

read only

Examples

--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

Allowed values

BIT_FLIPPING BP_PEELING BP_FLOODING BP_HORIZONTAL_LAYERED BP_VERTICAL_LAYERED CHASE ML

Default

BP_FLOODING

Examples

--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 [Ldpc-Spi01].

BP_FLOODING

Select the BP-F algorithm from [Ldpc-MN95].

BP_HORIZONTAL_LAYERED

Select the BP-HL algorithm from [Ldpc-YPNA01].

BP_VERTICAL_LAYERED

Select the BP-VL algorithm from [Ldpc-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

Allowed values

STD GALA GALB GALE WBF MWBF PPBF SPA LSPA AMS MS NMS OMS

Default

SPA

Examples

--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 [Ldpc-RL09].

GALB

Select the GALB algorithm [Ldpc-DDB14] with majority vote.

GALE

Select the GALE algorithm [Ldpc-DDB14] with extended alphabet.

PPBF

Select the PPBF algorithm [Ldpc-LGK+19].

WBF

Select the WBF algorithm [Ldpc-WNY+10].

MWBF

Select the MWBF algorithm [Ldpc-WNY+10].

SPA

Select the SPA update rules [Ldpc-MN95].

LSPA

Select the LSPA update rules [Ldpc-MN95].

AMS

Select the AMS update rule.

MS

Select the MS update rule [Ldpc-FMI99].

NMS

Select the NMS update rule [Ldpc-CF02].

OMS

Select the OMS update rule [Ldpc-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

Allowed values

INTER, INTRA

Examples

--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

Allowed values

ASC DSC NONE

Default

NONE

Examples

--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

Default

10

Examples

--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

Allowed values

MIN MINL MINS

Default

MINL

Examples

--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

Default

1.0

Examples

--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

Default

0.0

Examples

--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

Default

0.0

Examples

--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

Default

1

Examples

--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

Examples

--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 [Ldpc-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

Ldpc-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.

Ldpc-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.

Ldpc-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.

Ldpc-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.

Ldpc-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.

Ldpc-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.

Ldpc-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.

Ldpc-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.

Ldpc-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.

Ldpc-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.