Wikipedia on "Convolutional code"
Wikipedia on DVB-T
The encoder uses the code polynomials G0 = 1 + x^1 + x^2 + x^3 + x^6 and G1 = 1 + x^0 + x^2 + x^3 + x^5 + x^6. These are the polynomials defined for the DVB-T mother code, as in ETSI Standard: EN 300 744 V1.5.1.
We then right shift the assembled vectors (by 1,2,3,5 and 6 bits) and xor them. Since there is no 128bit right shift instruction, we are to do a trick: use the 64bit SIMD right shift (right shifting 2 64bit operands in one 128bit vector), the SIMD left shift and again palignr. With palignr, we swap the two 64bit operands. Then a right shift of 1 bit looks like this: a1 = (a >> 1) | (swap64(a) << 63).
Finally after XOR'ing, undo the partial overlapping using palignr.
The encoder processes blocks of 1920 bit, producing 2x1920 code bit. It requires the last 16 byte of the previous block (=0 for the first block), thus the input is an array of 256 byte. The output is stored in two 240 byte arrays.
|Inlined:||~408 cycles / 1920 bit||i.e. ~12.5 Gbit/s|
|Not inlined:||~1144 cycles / 1920 bit||i.e. ~4.4 Gbit/s|
|Convolutional Encoder 0.1||TAR-Archive 2009-12-12 8.5kb|