How is specifically the output of Turbo Encoder (comm.TurboEncoder) including Tail bits?

8 views (last 30 days)
I am implemeting a communication system with Turbo Codes. I'd like to know how it is the specific output array from the Turbo Encoder.
[No puncturing]
Taking this page (Turbo Encoder documentation) as a reference for the use of Turbo Encoder, I can only find the following sentence as explanation:
For an input message with 64 bits, the codeword output from the encoder is 204 bits. The first 192 bits output correspond to the three 64 bit streams, interlaced as Xk, Zk, and Z′k. The systematic bit stream, Xk, and parity bit stream, Zk, are from the first encoder and the parity bit stream, Z′k, is from the second encoder. When the switches are in the lower position, signals follow the dashed lines and the last 12 bits correspond to the tail bits from the two encoders. The first group of six bits (three systematic bits and three parity bits) are the output tail bits from the first constituent encoder. The second group of six bits (three systematic bits and three parity bits) are the output tail bits from the second constituent encoder.
In my case, I have the following setup:
interleaver_indexes = TURBO.set_interleaver( segment_size, ...
turbo.interleaver_Ks, ...
turbo.interleaver_f1s, ...
turbo.interleaver_f2s );
interleaver_indexes = interleaver_indexes +1;
full_rate_indexes = transpose( [1: (3*segment_size) + 12 ]);
% default PCCC 1/3 rate 8-state architecture
turbo.m_encoder = comm.TurboEncoder( ...
"TrellisStructure", turbo.trellis, ...
"InterleaverIndicesSource", "Property", ...
"InterleaverIndices", interleaver_indexes , ...
"OutputIndicesSource", "Property", ...
"OutputIndices", full_rate_indexes );
So In particular I impose the full rate encoding, passing the following as "OutputIndices" equal to:
full_rate_indexes = transpose( [1: (3*segment_size) + 12 ]);
Given an input segment with 64 bits to the Encoder, the parameter "OutputIndices" is in fact equal to: [1:1: 204]. Considering the default turbo encoder, I suppose it is giving me at the output: 64 + 64 + 64 ( 3 output streams) + 12 of tail bits.
Now the question is about the order of the encoded message at the output, I can expect:
it is array sequentially filled with the "x" output 64 bits, the "z" output 64 bits and the "zp" output 64 bits; then, all of the previous followed by "x_tail" 3 bits, "z_tail" 3 bits, "zp_tail" 3 bits and "xp_tail" 3 bits. Again in total 204.
Is this correct?
Is exactly what the Turbo Decoder is expecting in input?
Thank you

Answers (1)

Abhimenyu on 20 Oct 2023
Hi Marco,
I understand that you are trying to understand the format of the output array from the ‘comm.TurboEncoder’ object of the MATALB communication toolbox.
Your understanding of the output array from the turbo encoder is correct. This is how the array is formed:
  1. The first 64 bits are the systematic bits (x).
  2. The next 64 bits are the parity bits from the first encoder (z).
  3. The following 64 bits are the parity bits from the second encoder (zp).
  4. Finally, the last 12 bits are the tail bits: 3 bits from the first encoder's systematic bits (x_tail), 3 bits from the first encoder's parity bits (z_tail), 3 bits from the second encoder's parity bits (zp_tail), and 3 bits from the second encoder's systematic bits (xp_tail).
The turbo decoder expects the input codeword to have the same format as the output of the corresponding encoder. Therefore, you do not need to rearrange or puncture the output array from the encoder before passing it to the decoder. However, please make sure that the decoder has the same parameters as the encoder, such as trellis structure, interleaver indices, and output indices.
Please refer to the MATLAB documentation links below on ‘comm.TurboEncoder’ and ‘comm.TurboDecoder’ objects respectively, for more understanding:
I hope this helps!
Thank you,


Find more on LTE Toolbox in Help Center and File Exchange




Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!