Main Content

helintrlv

Permute symbols using helical array

Syntax

intrlved = helintrlv(data,col,ngrp,stp)
[intrlved,state] = helintrlv(data,col,ngrp,stp)
[intrlved,state] = helintrlv(data,col,ngrp,stp,init_state)

Description

intrlved = helintrlv(data,col,ngrp,stp) permutes the symbols in data by placing them in an unlimited-row array in helical fashion and then placing rows of the array in the output, intrlved. data must have col*ngrp elements. If data is a matrix with multiple rows and columns, it must have col*ngrp rows, and the function processes the columns independently.

The function uses the array internally for its computations. The array has unlimited rows indexed by 1, 2, 3,..., and col columns. The function partitions col*ngrp symbols from the input into consecutive groups of ngrp symbols. The function places the kth group in the array along column k, starting from row 1+(k-1)*stp. Positions in the array that do not contain input symbols have default values of 0. The function places col*ngrp symbols from the array in the output, intrlved, by reading the first ngrp rows sequentially. Some output symbols are default values of 0 rather than input symbols; similarly, some input symbols are left in the array and do not appear in the output.

[intrlved,state] = helintrlv(data,col,ngrp,stp) returns a structure that holds the final state of the array. state.value stores input symbols that remain in the col columns of the array and do not appear in the output.

[intrlved,state] = helintrlv(data,col,ngrp,stp,init_state) initializes the array with the symbols contained in init_state.value. The structure init_state is typically the state output from a previous call to this same function, and is unrelated to the corresponding deinterleaver. In this syntax, some output symbols are default values of 0, some are input symbols from data, and some are initialization values from init_state.value.

Examples

The example below rearranges the integers from 1 to 24.

% Interleave some symbols. Record final state of array.
[i1,state] = helintrlv([1:12]',3,4,1);
% Interleave more symbols, remembering the symbols that
% were left in the array from the earlier command.
i2 = helintrlv([13:24]',3,4,1,state);

disp('Interleaved data:')
disp([i1,i2]')
disp('Values left in array after first interleaving operation:')
state.value{:}

During the successive calls to helintrlv, it internally creates the three-column arrays

[1  0  0;
 2  5  0;
 3  6  9;
 4  7 10;
 0  8 11;
 0  0 12]

and

[13  8 11;
 14 17 12;
 15 18 21;
 16 19 22;
  0 20 23;
  0  0 24]

In the second array shown above, the 8, 11, and 12 are values left in the array from the previous call to the function. Specifying the init_state input in the second call to the function causes it to use those values rather than the default values of 0.

The output from this example is below. (The matrix has been transposed for display purposes.) The interleaved data comes from the top four rows of the three-column arrays shown above. Notice that some of the symbols in the first half of the interleaved data are default values of 0, some of the symbols in the second half of the interleaved data were left in the array from the first call to helintrlv, and some of the input symbols (20, 23, and 24) do not appear in the interleaved data at all.

Interleaved data:
  Columns 1 through 10 

     1     0     0     2     5     0     3     6     9     4
    13     8    11    14    17    12    15    18    21    16

  Columns 11 through 12 

     7    10
    19    22

Values left in array after first interleaving operation:

ans =

     []


ans =

     8


ans =

    11    12

The example on the reference page for heldeintrlv also uses this function.

Version History

Introduced before R2006a