Block interleaver: Difference between revisions
Jump to navigation
Jump to search
(illustrative explanation) |
|||
(2 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
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