| Author | Dominik Auras |
| Type | C Code |
| State | Done |
| License | GPL |
| Features |
|
|
Useful links: 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 |