Communications Blockset | ![]() ![]() |
Decode a convolutional code using the a posteriori probability (APP) method
Library
Convolutional sublibrary of Channel Coding
Description
The APP Decoder block performs a posteriori probability (APP) decoding of a convolutional code. You can use this block to build a turbo decoder.
Inputs and Outputs
The input L(u) represents the sequence of log-likelihoods of encoder input bits, while the input L(c) represents the sequence of log-likelihoods of code bits. The outputs L(u) and L(c) are updated versions of these sequences, based on information about the encoder.
If the convolutional code uses an alphabet of 2n possible symbols, then this block's L(c) vectors have length Q*n for some positive integer Q. Similarly, if the decoded data uses an alphabet of 2k possible output symbols, then this block's L(u) vectors have length Q*k. The integer Q is the number of frames that the block processes in each step.
If you only need the input L(c) and output L(u), then you can attach a Simulink Ground block to the input L(u) and a Simulink Terminator block to the output L(c).
Specifying the Encoder
To define the convolutional encoder that produced the coded input, use the Trellis structure parameter. This parameter is a MATLAB structure whose format is described in the section, Trellis Description of a Convolutional Encoder," in the Communications Toolbox User's Guide. You can use this parameter field in two ways:
poly2trellis
command within the Trellis structure field. For example, to use an encoder with a constraint length of 7, code generator polynomials of 171 and 133 (in octal numbers), and a feedback connection of 171 (in octal), set the Trellis structure parameter to
To indicate how the encoder treats the trellis at the beginning and end of each frame, set the Termination method parameter to either Truncated or Terminated. The Truncated option indicates that the encoder resets to the all-zeros state at the beginning of each frame, while the Terminated option indicates that the encoder forces the trellis to end each frame in the all-zeros state. If you use the Convolutional Encoder block with the Reset parameter set to On each frame, then use the Truncated option in this block.
Specifying Details of the Algorithm
You can control part of the decoding algorithm using the Algorithm parameter. The True APP option implements a posteriori probability. To gain speed, both the Max* and Max options approximate expressions like
by other quantities. The Max option uses max{ai} as the approximation, while the Max* option uses max{ai} plus a correction term.
The Max* option enables the Scaling bits parameter in the mask. This parameter is the number of bits by which the block scales the data it processes internally. You can use this parameter to avoid losing precision during the computations. It is especially appropriate if your implementation uses fixed-point components. For more information about the Max* option, see the article by Viterbi in the References section below.
Dialog Box
See Also
Viterbi Decoder, Convolutional Encoder; poly2trellis
(Communications Toolbox)
References
[1] Benedetto, Sergio and Guido Montorsi. "Performance of Continuous and Blockwise Decoded Turbo Codes." IEEE Communications Letters, vol. 1, May 1997. 77-79.
[2] Benedetto, S., G. Montorsi, D. Divsalar, and F. Pollara. "A Soft-Input Soft-Output Maximum A Posterior (MAP) Module to Decode Parallel and Serial Concatenated Codes." JPL TMO Progress Report, vol. 42-127, November 1996. [This electronic journal is available at http://tmo.jpl.nasa.gov/tmo/progress_report/index.html.]
[3] Viterbi, Andrew J. "An Intuitive Justification and a Simplified Implementation of the MAP Decoder for Convolutional Codes." IEEE Journal on Selected Areas in Communications, vol. 16, February 1998. 260-264.
![]() | Algebraic Interleaver | AWGN Channel | ![]() |