# convintrlv

Permute symbols using shift registers

## Syntax

```intrlved = convintrlv(data,nrows,slope) [intrlved,state] = convintrlv(data,nrows,slope) [intrlved,state] = convintrlv(data,nrows,slope,init_state) ```

## Description

`intrlved = convintrlv(data,nrows,slope)` permutes the elements in `data` by using a set of `nrows` internal shift registers. Before the function begins to process data, it initializes all shift registers with zeros. If `data` is a matrix with multiple rows and columns, the function processes the columns independently. For information about delays, see Delays of Convolutional Interleaving and Deinterleaving.

`[intrlved,state] = convintrlv(data,nrows,slope)` returns a structure that holds the final state of the shift registers. `state.value` stores any unshifted symbols. `state.index` is the index of the next register to be shifted.

`[intrlved,state] = convintrlv(data,nrows,slope,init_state)` initializes the shift registers with the symbols contained in `init_state.value` and directs the first input symbol to the shift register referenced by `init_state.index`. The structure `init_state` is typically the `state` output from a previous call to this same function, and is unrelated to the corresponding deinterleaver.

## Examples

The example below shows that `convintrlv` is a special case of the more general function `muxintrlv`. Both functions yield the same numerical results.

```x = randi([0 1],100,1); % Original data nrows = 5; % Use 5 shift registers slope = 3; % Delays are 0, 3, 6, 9, and 12. y = convintrlv(x,nrows,slope); % Interleaving using convintrlv. delay = [0:3:12]; % Another way to express set of delays y1 = muxintrlv(x,delay); % Interleave using muxintrlv. isequal(y,y1)```

The output below shows that `y`, obtained using `convintrlv`, and `y1`, obtained using `muxintrlv`, are the same.

```ans = 1 ```

Another example using this function is in Effect of Delays on Recovery of Convolutionally Interleaved Data Using MATLAB.

The example on the `muxdeintrlv` reference page illustrates how to use the `state` output and `init_state` input with that function; the process is analogous for this function.

collapse all

### Delays of Convolutional Interleaving and Deinterleaving

The total delay due to a convolutional interleaver and deinterleaver pair is N × slope × (N – 1).

• N is the number of registers and equals the value of the `nrows` argument

• slope is the register length step and equals the value of the `slope` argument

This diagram shows the structure of a general convolutional interleaver comprised of a set of shift registers, each having a specified delay shown as D(1), D(2),..., D(N), and a commutator to switch input and output symbols through registers. The kth shift register holds D(k) symbols, where k = 1, 2, 3, … N. The kth shift register has a delay value of ((k–1) × slope). With each new input symbol, the commutator switches to a new register and shifts in the new symbol while shifting out the oldest symbol in that register. When the commutator reaches the Nth register, upon the next new input, the commutator returns to the first register. ## References

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

## Version History

Introduced before R2006a