Reorder input symbols using algebraically derived permutation table

Block sublibrary of Interleaving

The Algebraic Interleaver block rearranges the elements of its input
vector using a permutation that is algebraically derived. The
**Number of elements** parameter,
*N*, indicates how many numbers are in the
input vector. This block accepts a column vector input signal.

The block accepts the following data types: `int8`

,
`uint8`

, `int16`

,
`uint16`

, `int32`

,
`uint32`

, `boolean`

,
`single`

, `double`

, and
fixed-point. The output signal inherits its data type from the input
signal.

The **Type** parameter indicates the algebraic method
that the block uses to generate the appropriate permutation table.
Choices are `Takeshita-Costello`

and
`Welch-Costas`

. Each of these
methods has parameters and restrictions that are specific to
it:

If you set

**Type**to`Welch-Costas`

, then*N*+ 1 must be prime. The**Primitive element**parameter is an integer,*A*, between 1 and*N*that represents a primitive element of the finite field GF(*N*+ 1). This means that every nonzero element of GF(*N*+ 1) can be expressed as*A*raised to some integer power.In a Welch-Costas interleaver, the permutation maps the integer

*k*to mod(*A*,^{k}*N*+ 1) - 1.If you set

**Type**to`Takeshita-Costello`

, then*N*must be 2^{m}for some integer*m*. The**Multiplicative factor**parameter,*k*, must be an odd integer less than*N*. The**Cyclic shift**parameter,*h*, must be a nonnegative integer less than*N*.A Takeshita-Costello interleaver uses a length-

*N**cycle vector*whose*n*th element is$$c(n)=\mathrm{mod}\left(k\cdot \frac{n\cdot (n-1)}{2},N\right)+1,\text{\hspace{0.17em}}n$$

for integers n between 1 and N. The intermediate permutation function is obtained by using the following relationship:

$$\Pi \left(c\left(n\right)\right)=c\left(n+1\right)$$

where

$$n=1:N$$

The interleaver's actual permutation vector is the result of cyclically shifting the elements of the permutation vector, π, by the

**Cyclic shift**parameter,*h*.

**Type**The type of permutation table that the block uses for interleaving.

**Number of elements**The number of elements,

*N*, in the input vector.**Multiplicative factor**The factor used to compute the interleaver's cycle vector. This field appears only if

**Type**is set to`Takeshita-Costello`

.**Cyclic shift**The amount by which the block shifts indices when creating the permutation table. This field appears only if

**Type**is set to`Takeshita-Costello`

.**Primitive element**An element of order

*N*in the finite field GF(N+1). This field appears only if**Type**is set to`Welch-Costas`

.

[1] Heegard, Chris and Stephen B. Wicker.
*Turbo Coding*. Boston:
Kluwer Academic Publishers, 1999.

[2] Takeshita, O. Y. and D. J. Costello,
Jr. "New Classes Of Algebraic Interleavers for Turbo-Codes."
*Proc. 1998 IEEE International Symposium
on Information Theory*, Boston, Aug.
16-21, 1998. 419.