Main Content

Turbo Decoder

Decode input signal using parallel concatenated decoding scheme

  • Library:
  • Communications Toolbox / Error Detection and Correction / Convolutional

  • Turbo Decoder block

Description

The Turbo Decoder block decodes the input signal using a parallel concatenated decoding scheme. The iterative decoding scheme uses the a posteriori probability (APP) decoder as the constituent decoder, an interleaver, and a deinterleaver. The two constituent decoders use the same trellis structure and decoding algorithm. For more information, see Parallel Concatenated Convolutional Decoding Scheme and APP Decoder.

This icon shows the block with all ports enabled.

Turbo Decoder block with optional ports (IntrInd and InInd) enabled

Ports

Input

expand all

Parallel concatenated codeword, specified as a column vector of length M, where M is the length of the parallel concatenated codeword.

Data Types: double | single

Interleaver indices, specified as a column vector of integers. The vector must be of length L. Each element of the vector must be an integer in the range [1, L] and must be unique. L is the length of the decoded binary output message, Out. The interleaver indices define the mapping used to permute the input bits at the decoder.

Dependencies

To enable this port, set the Source of interleaver indices parameter to Input port.

Data Types: double

Input indices for the bit ordering and puncturing used on the fully encoded data, specified as a column vector of integers. The length of the InInd vector must equal the length of the input data vector In. Element values in the vector must be relative to the fully encoded data for the coding scheme, including the tail bits for all streams.

Dependencies

To enable this port, set the Source of input indices parameter to Input port.

Data Types: double

Output

expand all

Decoded message, returned as a binary column vector of length L, where L is the length of the decoded binary output message. This output inherits its data type from the In input.

Parameters

expand all

Specify the trellis as a MATLAB® structure that contains the trellis description for a rate KN constituent convolutional code. K is the number of input bit streams, and N is the number of output bit streams.

Note

K must be 1 for the turbo coder. For more information, see Coding Rate.

You can either use the poly2trellis function to create the trellis structure or create it manually. For more about this structure, see Trellis Description of a Convolutional Code and the istrellis function.

The trellis structure contains these fields.

Number of symbols input to the encoder, specified as an integer equal to 2K, where K is the number of input bit streams.

Data Types: double

Number of symbols output from the encoder, specified as an integer equal to 2N, where N is the number of output bit streams.

Data Types: double

Number of states in the encoder, specified as a power of 2.

Data Types: double

Next states for all combinations of current states and current inputs, specified as a matrix of integers. The matrix size must be numStates-by-2K.

Data Types: double

Outputs for all combinations of current states and current inputs, specified as a matrix of octal numbers. The matrix size must be numStates-by-2K.

Data Types: double

Specify the source of the interleaver indices as Property or Input port.

  • When you set this parameter to Property, the block uses the Interleaver indices parameter to specify the interleaver indices.

  • When you set this parameter to Input port, the block uses the IntrInd input port to specify the interleaver indices.

Specify the interleaver indices that define the mapping used to permute codeword bits input to the decoder as a column vector of integers. The vector must be of length L. Each element of the vector must be an integer in the range [1, L] and must be unique. L is the length of the decoded binary output message.

Dependencies

To enable this parameter, set the Source of interleaver indices parameter to Property.

Specify the source of the input indices as Auto, Property, or Input port.

  • When you set this parameter to Auto, the block computes input indices that assume the second systematic stream is punctured and all tail bits are included in the input.

  • When you set this parameter to Property, the block uses the input indices that you specify for the Input indices parameter.

  • When you set this parameter to Input port, the block uses the InInd input port to specify the input indices. The vector length and values for the input indices and coded input signal can change with each execution of the block.

Specify the input indices for the bit ordering and puncturing used on the fully encoded data as a column vector of integers. The vector length of this parameter must equal the length of the input data vector In.

Dependencies

To enable this parameter, set the Source of input indices parameter to Property.

Specify the decoding algorithm that the constituent APP decoders use to decode the input signal as True APP, Max*, Max. When you set this parameter to True APP the block implements true a posteriori probability decoding. When you set this parameter to Max* or Max the block uses approximations to increase the speed of the computations. For more information, see APP Decoder.

Specify the number of bits which the constituent APP decoders must use to scale the input data to avoid losing precision during computations as an integer in the range [0, 8]. The constituent decoders multiply the input by 2k and divide the pre-output by the same factor. k is the value of the Number of scaling bits parameter. For more information, see APP Decoder.

Dependencies

This enable this parameter, set the Decoding algorithm parameter to Max*.

Specify the number of decoding iterations the block uses as a positive integer. The block iterates and provides updates to the log-likelihood ratios (LLR) of the uncoded output bits. The output of the block is the hard-decision output of the final LLR update.

Type of simulation to run, specified as Interpreted execution or Code generation.

  • Interpreted execution –– Simulate the model by using the MATLAB interpreter. This option requires less startup time than the Code generation method, but the speed of subsequent simulations is slower. In this mode, you can debug the source code of the block.

  • Code generation –– Simulate the model by using generated C code. The first time you run a simulation, Simulink® generates C code for the block. The C code is reused for subsequent simulations unless the model changes. This option requires additional startup time, but the speed of the subsequent simulations is faster than Interpreted execution.

Block Characteristics

Data Types

double | single

Multidimensional Signals

no

Variable-Size Signals

yes

More About

expand all

References

[1] 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." Jet Propulsion Lab TDA Progress Report, 42–127, (November 1996).

[2] Viterbi, A.J. “An Intuitive Justification and a Simplified Implementation of the MAP Decoder for Convolutional Codes.” IEEE Journal on Selected Areas in Communications 16, no. 2 (February 1998): 260–64. https://doi.org/10.1109/49.661114.

[3] Berrou, C., A. Glavieux, and P. Thitimajshima. “Near Shannon Limit Error-Correcting Coding and Decoding: Turbo-Codes.” Proceedings of ICC 93 - IEEE International Conference on Communications, Geneva, Switzerland, May 1993, 1064–70. https://doi.org/10.1109/icc.1993.397441.

[4] Schlegel, Christian, and Lance Perez. Trellis and Turbo Coding. IEEE Press Series on Digital & Mobile Communication. Piscataway, NJ ; Hoboken, NJ: IEEE Press ; Wiley-Interscience, 2004.

[5] 3GPP TS 36.212. "Multiplexing and channel coding." 3rd Generation Partnership Project; Technical Specification Group Radio Access Network; Evolved Universal Terrestrial Radio Access (E-UTRA). https://www.3gpp.org.

Extended Capabilities

C/C++ Code Generation
Generate C and C++ code using Simulink® Coder™.

Introduced in R2011b