My target is to maintain ConvTurboDecoder(). They want to implement an adaptive decoder.
The function is invoked by RX, and by main().
They measure two things:
- BER
- BLER: block error rate (block is a frame?)
- HARQ: hybrid Automatic Repeat REquest
Convolution code is 1/2 rate. Convolution Turbo Code (CTC) is 1/3 rate.
The interleaver adds new priori to the estimator.
When there are two evidence, without further information, they are equally likely.
The extrnsic information is the difference of the prior.
Data block size 54, rate = 3/4. The encoded block size is 54 *4/3 = 72. The bit count is 54 * 8 = 432. N = 432/2 = 216.
We do subblock interleaving after CTC encoding. Another interleaving is inside Turbo code.
Subblock interleaver: Remap the address (of a block)by 2 segments.
- Block size = 216, N = 108.
Turbo Code uses a different prior called extrinsic information to feed into MAP.
Example: 64-QAM, data block size = 60 bytes/block.
45 blocks Before CTC: 21600 in = 45 (block) * 60 bytes/block * 8
45 blocks After CTC: 25920 = 45 * Ncpbs = 45 * 576
The code rate is 5/6 = 480/576.
Each subblock has size 240. That is encoded into (m, j) = (7, 2). The maximum index is 2^7 * 2 - 1= 255. The index over 240 will be discarded. In the interacitve process, the original index may go over 240 until all destination index are filled.
Only a fractional of parity bits are selected to transmit. Those parity bits are permuted by (m, j) and reselected.
+ Wimax CTC uses a single convolutional encoder. It is switched over to calculate (Y1, W1) and (Y2, W2).
+ Circulation state: There is a reinitialization of CTC. The final state is taken as the initial state.
+ SPID is the subpacket ID. It is used for incremental redundancy (in CTC) HARQ. This value will shift the packet index.