В процессе исследования чужих графов GnuRadio, увидел использование такого блока как «Patterned Interleaver». Что это? Как работает? Надо разобраться.
Если переводить на русский, то название блока звучит как «Чередователь по шаблону». Попробуем выяснить что за шаблоны, и как они работают.
Запускаем GnuRadio, и добавляем наш блок «Patterned Interleaver»
Как мы видим, у блока 3 входа и 1 выход. Поглядим, какие свойства мы можем поменять у этого блока.
Параметров не так много. Из значимых это понятный «IO Type», который определяет, с каким типом данных работает блок, и загадочное поле «Pattern». В нем мы видим цифры. 0, 1, и 2. Любопытно. У нашего блока тоже три входа под таким индексами. Попробуем дописать в полее «Pattern» тройку.
Да! Теперь можно догадаться, что числа обзначают индекс входного порта, а максимальное значение задает их число.
Но почему некоторые индексы повторяются? Вот нулевой два раза написан.
Думаю нам пора увидеть блок в работе.
Вернем количество входов к изначальному значению, и соберем следующий граф:
Зададим следующие параметры:
Vector source — зададим вектор из 2 чисел «0» и «1», и отключим повторение значения задав «Repeat: No»
Patterned Interleaver — зададим шаблон вида [0,1,2,0]
File Sink — укажем путь до файла который будет содержать результат работы блока «Patterned Interleaver», а так же отключим буферизацию при выводе, плюс укажем перезаписывать наш файл.
Обратите внимание, что все блоки в графе имеют порты ввода-вывода желтого цвета, это значит что они будут оперировать данными типа short длиной 2 байта.
Итак, что же мы собрали. У нас есть три источника данных. Vector Source выдающий 0 а затем 1, два блока Constant Source постоянно выдающих числа 3 и 4, загадочный Patterned Interleaver, и блок File Sink который выводит результат в файл.
Запускаем наш граф, ждем секунду, и останавливаем граф.
Теперь поглядим что записалось в файл.
$ od -tx2 outdat.bin
0000000 0000 0003 0004 0001
0000010
Первое значение 0x00, затем 0x03, 0x04, и 0x01. Это наши значения которые мы подавали на вход. Как теперь мы можем понять, блок «Patterned Interleaver» берет данные из входа, чей индекс первый в шаблоне, затем данные из входа чей индекс указан вторым, и т.д. Все оказалось просто!
Попробуем проверить нашу догадку.
Дополним Vector Source значениями 2 и 9, и зададим шаблон Patterned Interleaver как [2,0,1,0]. Если мы правильно понимаем алгоритм работы блока, мы должны получить следующую последовательность:
0004 0000 0003 0001 0004 0002 0003 0009
Запускаем граф. Проверяем.
$ od -tx2 outdat.bin
0000000 0004 0000 0003 0001 0004 0002 0003 0009
0000020
Безупречно! Теперь вы знакомы с принципом работы блока Patterned Interleave