Last Modified: January 9, 2017

Performs LDPC decoding based on the LDPC serial decoding schedule. The LDPC serial decoding schedule is based on a serial update of symbol nodes messages. This update can be considered as shuffling of the flooding schedule. Instead of sending all messages from symbol nodes to check nodes and then all messages from check nodes to symbol nodes, as done in the flooding schedule, the serial schedule goes over the check nodes in some order and, for each node, sends all messages into the node and then all messages out from the node.

The message that is sent from message node (*v*) to the check node (*c*) must not take into account the message sent in the previous iteration from *c* to *v*. The same is true for messages passed from check nodes to message nodes.

The sparse parity check matrix generated by MT LDPC Generate Regular Parity Check Matrix or MT LDPC Generate Irregular Parity Check Matrix. You can also set a parity check matrix that is not rank deficient in this parameter.

The likelihoods of the received symbols.

The maximum number of iterations for the iterative decoding process. The decoder stops iterating after the number of iterations exceeds the value of the **maximum number of iterations** or if the decoder satisfies other conditions.

**Default: **100

Error conditions that occur before this node runs. The node responds to this input according to standard error behavior.

**Default: **no error

A Boolean that determines whether the internal state of the decoder is cleared.

**Default: **TRUE

Bit sequence decoded by this node.

Low-density parity check (LDPC) is a linear error-correcting coding scheme that uses a parity check matrix that provides only a few ones with respect to a much larger number of zeros.

The main advantage of the parity check matrix is that it provides a performance that is almost equal to the capacity of many different channels and linear time complex algorithms for decoding. Furthermore, parity check matrices are suited for implementations that make heavy use of parallelism.

An LDPC code is a block code that has a parity check matrix *H*, every row and column of which is sparse. A Regular Gallager Code is an LDPC code in which every column of *H* has a weight, *j*, and every row has a weight, *k*. Regular Gallager codes are constructed at random, subject to these constraints.

Then

$H=\left(\begin{array}{cccccccccccc}1& 1& 1& 0& 0& 1& 1& 0& 0& 0& 1& 0\\ 1& 1& 1& 1& 1& 0& 0& 0& 0& 0& 0& 1\\ 0& 0& 0& 0& 0& 1& 1& 1& 0& 1& 1& 1\\ 1& 0& 0& 1& 0& 0& 0& 1& 1& 1& 0& 1\\ 0& 1& 0& 1& 1& 0& 1& 1& 1& 0& 0& 0\\ 0& 0& 1& 0& 1& 1& 0& 0& 1& 1& 1& 0\end{array}\right)$

If the number of ones per column or row is not constant, the code is an irregular LDPC code. Usually, irregular LDPC codes outperform regular LDPC codes.

The decoder assumes that the parity bits are placed at the end of the code word. Hence, it returns the first part of the code word, which are the message bits.

Belief Propagation algorithm is a sub-class of message-passing algorithms. The messages passed along the edges in this algorithm are probabilities, or beliefs. It is advantageous to work with likelihoods, or log-likelihoods instead of probabilities. For a binary random variable *x*, let
$L\left(x\right)=\mathrm{Pr}[x=0]\xf7\mathrm{Pr}[x=1]$ be the likelihood of *x*, where Pr denotes probability.

Given another random variable *y*, the conditional likelihood of *x* denoted L(x/y) is defined as
$\mathrm{Pr}[x=1|y]\xf7\mathrm{Pr}[x=0|y]$.

The likelihood ratio is defined as $L=\mathrm{Pr}[x=1|y]\xf7\mathrm{Pr}[x=0|y]$.

For example, for a BSC channel, if the probability of error = *p* and the probability of no error =
$1-p$, then the likelihood ratio =
$(1-p)\xf7p$.

The likelihood calculation depends upon the specific choice of the symbol map used in the modulation scheme. An example of likelihood calculation for a BPSK additive white Gaussian noise (AWGN) channel, if bit 0 is mapped to symbol point 1 and bit 1 is mapped to symbol point -1, is

$P(x=0)={P}_{y}(x=0|y)=\frac{1}{1+{e}^{\frac{2y}{{\sigma}^{2}}}}P(x=0)={P}_{y}(x=0|y)=\frac{1}{1+{e}^{\frac{-2y}{{\sigma}^{2}}}}L={e}^{\frac{2y}{{\sigma}^{2}}}$

where *x* and *y* are binary random variables.

**Where This Node Can Run: **

Desktop OS: Windows

FPGA: Not supported