Turbo product code (TPC) decoder
Communications Toolbox / Error Detection and Correction / Block
The TPC Decoder block performs 2D turbo product code (TPC) decoding of the soft input LLRs corresponding to the product code iteratively, using ChasePyndiah algorithm. The product code is a 2D concatenation of linear block codes. The linear block code can be a parity check code, a Hamming code, or a BCH code capable of correcting two errors. Extended and shortened codes can be applied independently on each dimension. For a description of 2D TPC decoding, see Algorithms.
For information about valid code pairs and the errorcorrecting capability for each valid code pair, see Component Code Pairs.
Data Types 

Multidimensional Signals 

VariableSize Signals 

Turbo product codes (TPC) are a form of concatenated codes used as forward error correcting (FEC) codes. Two or more component block codes, such as systematic linear block codes, are used to construct TPCs. The TPC decoder achieves nearoptimum decoding of product codes using Chase decoding and the Pyndiah algorithm to perform iterative soft input, soft output decoding. For a detailed description, see [1] and [2]. This decoder implements an iterative soft input, soft output 2D product code decoding, as described in [2], using two Linear Block Codes. The decoder expects the soft bit log likelihood ratios (LLRs) obtained from digital demodulation as the input signal.
TPC Decoding FullLength Messages
TPC encoded fulllength input messages are decoded using specified 2D TPC code pairs. Rowwise decoding uses the (N_{C},K_{C}) code pair and columnwise decoding uses the (N_{R},K_{R}) code pair. The input vector length must be N_{R} × N_{C}. To perform the 2D TPC decoding, the column vector of the input LLRs, composed of the message and parity bits, is arranged into an N_{R}byN_{C} matrix.
The TPC decoder achieves nearoptimum decoding of product codes using Chase decoding and the Pyndiah algorithm to perform iterative soft input, soft output decoding. Chase decoding forms a set of possible codewords for each row or column. The Pyndiah algorithm calculates soft information required for the next decoding step.
Iterative Soft Input, Soft Output Decoder
The iterative soft input, soft output decoding, as shown in the block diagram, carries out two decoding steps for each iteration.
The soft inputs for decoding are R(m) = R + α(m)W(m).
Iteration loop counter i increments from i = 1 to the specified number of iterations.
m = 2
i – 1
is the decoding step index.
R is the received LLR matrix.
R(m) is the soft input for the mth decoding step.
W(m) is the input extrinsic information for the mth decoding step.
α(m) = [0,0.2,0.3,0.5,0.7,0.9,1,1, ...], where α is a weighting factor applied based on the decoding step index. For higher decoding steps, α = 1.
β(m) = [0.2,0.4,0.6,0.8,1,1, ...], where β is a reliability factor applied based on the decoding step index. For higher decoding steps, β = 1.
D contains the decoded message bits. The output message bits are formed from D by mapping –1 to 0 and +1 to 1, then reshaping the message block into a column vector.
The output message bits are formed after iterating through the specified number of iterations, or, if early termination is enabled, after code convergence.
Early Termination of TPC Decoding
If early termination is enabled, a code convergence check is performed on the hard decision of the soft input in each rowwise and columnwise decoding step. Early termination can be triggered after either the rowwise decoding or columnwise decoding converges.
The code is converged if, for all rows or all columns,
The syndrome evaluates to zero in the codes (Hamming codes, Extended Hamming codes, BCH codes, or Extended BCH codes).
The parity check is evaluated to zero in parity check codes.
The reported number of iterations evaluates to the iteration value that is currently in progress. For example, if the code convergence check is satisfied after rowwise decoding in the third iteration (after 2.5 decoding steps), then the number of iteration returned is 3.
TPC Decoding Shortened Messages
TPC encoded shortened input messages are decoded using specified 2D TPC code pairs. Rowwise decoding uses the (N_{C} – K_{C} + S_{C}, S_{C}) code pair and columnwise decoding uses the (N_{R} – K_{R} + S_{R}, S_{R}) code pair. The input vector length must be (N_{R} – K_{R} + S_{R}) × (N_{C}– K_{C} + S_{C}). To perform the 2D TPC decoding of shortened messages, the column vector of the input LLRs, composed of the shortened message and parity bits, is arranged into an (N_{R} – K_{R} + S_{R})by(N_{C} – K_{C} + S_{C}) matrix.
The TPC decoder processes the received shortened message LLRs similar to full length codes, with these exceptions:
The shortened bit positions in the received codeword are set to –1.
The Chase algorithm does not consider the shortened bit positions while choosing the least reliable bits.
[1] Chase, D. "Class of Algorithms for Decoding Block Codes with Channel Measurement Information." IEEE Transactions on Information Theory, Volume 18, Number 1, January 1972, pp. 170–182.
[2] Pyndiah, R. M. "NearOptimum Decoding of Product Codes: Block Turbo Codes." IEEE Transactions on Communications. Vol. 46, Number 8, August 1998, pp. 1003–1010.