muxdeintrlv
Restore ordering of symbols using specified shift registers
Syntax
deintrlved = muxdeintrlv(data,delay)
[deintrlved,state] = muxdeintrlv(data,delay)
[deintrlved,state] = muxdeintrlv(data,delay,init_state)
Description
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.
Using an Interleaver-Deinterleaver Pair
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.
Examples
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.
References
[1] Heegard, Chris, and Stephen B. Wicker, Turbo Coding, Boston, Kluwer Academic Publishers, 1999.
Version History
Introduced before R2006a