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, ...
interleaver_indexes = interleaver_indexes +1;
full_rate_indexes = transpose( [1: (3*segment_size) + 12 ]);
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
Marco