Main Content


Deinterleave symbols using helical array


The comm.HelicalDeinterleaver System object™ permutes the symbols in the input signal by placing them in a row-by-row array and then selecting groups helically to send to the output port. This System object restores the original ordering of a sequence that was interleaved using the comm.HelicalInterleaver System object. For more information, see Algorithms.

To deinterleave symbols using helical array:

  1. Create the comm.HelicalDeinterleaver object and set its properties.

  2. Call the object with arguments, as if it were a function.

To learn more about how System objects work, see What Are System Objects?




deintrlvr = comm.HelicalDeinterleaver creates a default helical deinterleaver System object.

deintrlvr = comm.HelicalDeinterleaver(Name=Value) sets properties using one or more name-value arguments. For example, NumColumns=6 sets the number of columns in the helical array to 6.


expand all

Unless otherwise indicated, properties are nontunable, which means you cannot change their values after calling the object. Objects lock when you call them, and the release function unlocks them.

If a property is tunable, you can change its value at any time.

For more information on changing property values, see System Design in MATLAB Using System Objects.

Number of columns in the helical array, specified as a positive integer.

Size of each group of input symbols, specified as a positive integer.

Helical array step size, specified as a positive integer. Step size indicates the number of rows of separation between consecutive input groups in their respective columns of the helical array.

Initial conditions of the helical array, specified as a numeric scalar value. This is the initial value stored in the helical array.



deintrlvseq = deintrlvr(intrlvseq) deinterleaves the input sequence of symbols using the helical array. The object outputs the deinterleaved sequence of symbols.

Input Arguments

expand all

Interleaved sequence of symbols, specified as a column vector. Input sequence is of size NumColumns × GroupSize. This sequence must be one that was interleaved using the comm.HelicalInterleaver System object.

Data Types: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32 | logical | fi

Output Arguments

expand all

Deinterleaved sequence of symbols, returned as a column vector of the same data type and size as the intrlvseq argument.

Data Types: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32 | logical | fi

Object Functions

To use an object function, specify the System object as the first input argument. For example, to release system resources of a System object named obj, use this syntax:


expand all

stepRun System object algorithm
releaseRelease resources and allow changes to System object property values and input characteristics
resetReset internal states of System object


collapse all

Create helical interleaver and deinterleaver System™ objects.

intrlver = comm.HelicalInterleaver(GroupSize=2,NumColumns=3, ...
deintrlvr = comm.HelicalDeinterleaver(GroupSize=2,NumColumns=3, ...

Generate random data. Interleave and then deinterleave the data.

[dataIn,dataOut] = deal([]);
for k = 1:10
    data = randi(7,6,1);
    intData = intrlver(data);
    deIntData = deintrlvr(intData);
    dataIn = cat(1,dataIn,data);
    dataOut = cat(1,dataOut,deIntData);

Determine the delay through the interleaver and deinterleaver pair.

intlvDelay = finddelay(dataIn,dataOut)
intlvDelay = 6

After taking the interleaving delay into account, confirm that the original and deinterleaved data are identical.

ans = logical


expand all


[1] Berlekamp, E. R. and P. Tong. "Improved Interleavers for Algebraic Block Codes." US Patent 4559625, Dec. 17, 1985.

Extended Capabilities

Version History

Introduced in R2012a