Restore ordering of symbols using specified shift registers

`deintrlved = muxdeintrlv(data,delay)`

[deintrlved,state] = muxdeintrlv(data,delay)

[deintrlved,state] = muxdeintrlv(data,delay,init_state)

`deintrlved = muxdeintrlv(data,delay)`

restores
the ordering of elements in `data`

by using a set
of internal shift registers, each with its own delay value. `delay`

is
a vector whose entries indicate how many symbols each shift register
can hold. The length of `delay`

is the number of
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.

`[deintrlved,state] = muxdeintrlv(data,delay)`

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.

`[deintrlved,state] = muxdeintrlv(data,delay,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 interleaver.

To use this function as an inverse of the `muxintrlv`

function,
use the same `delay`

input in both functions. In
that case, the two functions are inverses in the sense that applying `muxintrlv`

followed
by `muxdeintrlv`

leaves data unchanged, after you
take their combined delay of `length(delay)*max(delay)`

into
account. To learn more about delays of convolutional interleavers,
see Delays of Convolutional Interleavers.

The example below illustrates how to use the state input and
output when invoking `muxdeintrlv`

repeatedly.
Notice that `[deintrlved1; deintrlved2]`

is the same
as `deintrlved`

.

delay = [0 4 8 12]; % Delays in shift registers symbols = 100; % Number of symbols to process % Interleave random data. intrlved = muxintrlv(randi([0 1],symbols,1),delay); % Deinterleave some of the data, recording state for later use. [deintrlved1,state] = muxdeintrlv(intrlved(1:symbols/2),delay); % Deinterleave the rest of the data, using state as an input argument. deintrlved2 = muxdeintrlv(intrlved(symbols/2+1:symbols),delay,state); % Deinterleave all data in one step. deintrlved = muxdeintrlv(intrlved,delay); isequal(deintrlved,[deintrlved1; deintrlved2])

The output is below.

ans = 1

Another example using this function is in Convolutional Interleaving and Deinterleaving Using a Sequence of Consecutive Integers in MATLAB.

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

Was this topic helpful?