Block interleaver: Difference between revisions

From GNU Radio
Jump to navigation Jump to search
(illustrative explanation)
 
(2 intermediate revisions by the same user not shown)
Line 1: Line 1:
Statement of purpose / function<br>
Fully parameterizable block interleaver.
 
This block accepts item multiples of size <code>interleaver_indices.size()</code> and interleaves or deinterleaves them on the output.
 
The idea is to define a static interleaving pattern, which is repeatedly applied to segments of the input stream. For example, if the interleaver indices are
 
<pre>
0, 2, 3, 1
</pre>
 
and our input is
 
<pre>
A, B, C, D, E, F, G, H, I, J, K, L, M
</pre>
 
then the input is considered in segments of the same length as the interleaver index vector:
 
<pre>
A, B, C, D, E, F, G, H, I, J, K, L, M, …
|––––––––––||––––––––––||––––––––––||––÷
0, 1, 2, 3  0, 1, 2, 3  0, 1, 2, 3  0, …
</pre>
 
which are then individually permuted according to the index vector
 
<pre>
0, 2, 3, 1  0, 2, 3, 1  0, 2, 3, 1  0, …
|––––––––––||––––––––––||––––––––––||––÷
A, C, D, B, E, G, H, F, I, K, L, J, M, …
</pre>


== Parameters ==
== Parameters ==
<b>(R):</b> <span class="plainlinks">[https://wiki.gnuradio.org/index.php/GNURadioCompanion#Variable_Controls <b>Run-time adjustable</b>]</span><br>
<b>(R):</b> <span class="plainlinks">[https://wiki.gnuradio.org/index.php/GNURadioCompanion#Variable_Controls <b>Run-time adjustable</b>]</span><br>
;IO Type
;IO Type
: type of the in- and output streams
:options: [byte, complex, float, int, short]
:options: [byte, complex, float, int, short]
;Interleaver indices
;Interleaver indices
: indices of items in output vector
:default: '[1, 2, 0]'
:default: '[1, 2, 0]'
;Mode
;Mode
: switch between interleaverand deinterleaver mode
:options: [interleave, deinterleave]
:options: [interleave, deinterleave]
;Packed bytes
;Packed bytes
: Assume packed bytes. For uint8_t I/O only.
:default: False
:default: False



Latest revision as of 10:58, 31 January 2024

Fully parameterizable block interleaver.

This block accepts item multiples of size interleaver_indices.size() and interleaves or deinterleaves them on the output.

The idea is to define a static interleaving pattern, which is repeatedly applied to segments of the input stream. For example, if the interleaver indices are

0, 2, 3, 1

and our input is

 A, B, C, D, E, F, G, H, I, J, K, L, M

then the input is considered in segments of the same length as the interleaver index vector:

 A, B, C, D, E, F, G, H, I, J, K, L, M, …
|––––––––––||––––––––––||––––––––––||––÷
 0, 1, 2, 3  0, 1, 2, 3  0, 1, 2, 3  0, …

which are then individually permuted according to the index vector

 0, 2, 3, 1  0, 2, 3, 1  0, 2, 3, 1  0, …
|––––––––––||––––––––––||––––––––––||––÷
 A, C, D, B, E, G, H, F, I, K, L, J, M, …

Parameters

(R): Run-time adjustable

IO Type
type of the in- and output streams
options: [byte, complex, float, int, short]
Interleaver indices
indices of items in output vector
default: '[1, 2, 0]'
Mode
switch between interleaverand deinterleaver mode
options: [interleave, deinterleave]
Packed bytes
Assume packed bytes. For uint8_t I/O only.
default: False

Example Flowgraph

Example Output

Source Files

C++ files
blockinterleaver_xx_impl.cc
Header files
blockinterleaver_xx_impl.h
Public header files
blockinterleaver_xx.h
Block definition
yaml file