GNU Radio Companion |
Добавил(а) microsin |
GNU Radio Companion (далее для сокращения GRC) это графический инструмент для создания отображений сигналов и генерации исходного кода из графической схемы (flow graph) GRC-проекта (перевод [1]). Непонятные термины и сокращения см. в разделе "Словарик" статьи [11]. Новые функции, появившиеся начиная со стабильной версии GRC 0.70: • Единая сборка - GRC теперь объединен с исходным кодом gnuradio. Если удовлетворены все зависимости, grc будут установлен вместе с gnuradio (см. разделы "Установка" и "Выполнение"). [Системные требования] GRC. Большинство (если не все) из этих требований можно найти в менеджере пакетов Вашего дистрибутива Linux. • Python 2.5 (или более свежей версии). GNU Radio. GRC объединен с текущим транком пакета gnuradio, и включен в релиз 3.2. Рекомендуется конфигурировать инсталляцию GNU Radio с поддержкой wx-python, usrp и audio. Однако будет работать любая конфигурация (см. примечание ниже). Инструкцию по сборке см. в [2]. Примечание: GRC позволит Вам сгенерировать flow graph с компонентами, которые не включены в Вашу локальную инсталляцию. Например, Вы можете генерировать сигнала из источника USRP, однако код при выполнении выдаст ошибку, если GNU Radio не сконфигурировано с поддержкой USRP. [Установка] Приложение GRC объединено с пакетом gnuradio, так что если следовать указаниям по его установке, то для установки GRC этого должно быть достаточно. Однако GRC не установится, если не был установлен один из требуемых компонентов. Установите любые недостающие компоненты и заново запустите процесс configure/install: cmake .. make sudo make install GRC должен появиться в списке сконфигурированных компонентов; если это не так, то читайте подробный вывод configure для выявления причины ошибок. Установка документации. Чтобы можно было просматривать документацию по блокам в редакторе GRC, установите doxygen и сконфигурируйте configure gnuradio с поддержкой doxygen. Установка иконок, типа Mime и элементов меню. Если Ваша операционная система поддерживает стандарты freedesktop.org (Gnome, KDE, XFCE), то Вы можете установить иконки (icons), тип mime (mime type) и элементы меню (menu items), встроенные в GRC. После установки GRC запустите следующую команду: cd /libexec/gnuradio/ sudo ./grc_setup_freedesktop install В самом начале статьи [3] есть ссылка на двоичные инсталляторы для 64-битных Windows 7/8/10. Они включают все нужные для Windows зависимости, настроенный дистрибутив Python, самые часто используемые драйверы приемников SDR и несколько блоков OOT. Есть и другая сборка, которая включает GnuRadio, Pothos, CubicSDK и другие инструменты. [Выполнение] Для своего запуска GRC устанавливает несколько исполняемых файлов python в системные пути поиска (в Windows это переменная окружения %PATH%). Редактор проекта (Flow Graph Editor) запускается командой: gnuradio-companion Советы по использованию: • Добавление блока выполняется двойным кликом на блоке, выбранном в иерархии встраиваемых блоков (находится в правой области редактора GRC), или его перетаскиванием в область блоков проекта. [Переменные] Переменные (Variable) связывают символические имена со значениями. В GRC переменная может определить глобальную константу, или переменная может использоваться совместно с GUI для управления работающим flow graph. Variable Block. Блок переменной - базовый способ использовать переменную в GRC. Параметр ID у блока переменной определяет символическое имя переменной (symbolic name). Символическое имя должно состоять из алфавитных символов (цифры и подчеркивания в составе имени допускаются), и обязательно должно начинаться с буквы (не цифры). Для использования переменной просто введите символическое имя в поле параметра другого блока. Variable Controls. Некоторые блоки снабжены callback-методами, позволяющими менять их параметры при выполнении flow graph. Variable controls в GRC используют переменные в комбинации с callback-методами для изменения этих параметров. Если у параметра есть callback-метод, то этот параметр будет подчеркнут в диалоге редактирования свойств блока. В блоках variable slider, variable text box и variable chooser предоставлены графические виджеты в качестве элементов управления интерфейса GUI - слайдеры/регуляторы, поля ввода текста, радиокнопки, выпадающие списки. Дополнительно блок variable sink принимает выборки из потока gnuradio, и записывает выборки в переменную. String Evaluation. Строковые параметры проходят через две фазы обработки. Сначала GRC берет параметр "как есть". Если параметр не вычисляется как строковый тип данных, или вычисление терпит неудачу, то подразумевается, что у параметра должны быть неявные кавычки. В этом случае GRC вычислит параметр снова, но уже с кавычками; это возвратит строку с точной последовательностью кода, которая была введена в поле ввода параметра. Для использования переменной внутри строки просто введите имя переменной в параметр: my_var. Если переменная не строка, то можно выполнить преобразование (cast) языка Python с помощью функции str: str(my_var). При этом работает стандартный строковый функционал Python: "My Var = " + str(my_var). Примечание: параметры строкового типа также включают типы открытия и сохранения файла (file open и file save). [Разработка фильтра] В gnuradio многие блоки в качестве параметра принимают массив complex или real выборок сигнала. GNU Radio предоставляет пакет для генерации всех видов фильтров и их оконных функций. См. описание пакета firdes [4] из документации gnuradio. Генераторы фильтров (Firdes Taps Generators): • ФНЧ: low_pass(gain, samp_rate, cutoff_freq, width, [window], [beta]) Типы окна фильтра (Firdes Window Types): • Хемминга: WIN_HAMMING Для полосовых функций фильтра по умолчанию используется окно Хемминга. Параметр beta по умолчанию 6.76, и применяется только к окну Кайзера. Создайте новый блок "import", и введите следующие параметры импорта: from gnuradio.filter import firdes Примечание: большинство блоков с параметром taps автоматически импортируют модуль firdes. Вам только нужно использовать блок import, когда не будет вычисляться firdes. В параметр taps блока фильтров введите следующее: firdes.low_pass(1.0, samp_rate, 1000, 100, firdes.WIN_HAMMING) Коэффициенты из файла. Предположим, что у Вас есть массив коэффициентов фильтра (filter taps), сохраненный в файл. Тогда Вы можете использовать его в GRC следующим образом. Создайте новый блок "import" и введите следующий параметр import: import numpy Введите следующее в параметр taps блока фильтра: numpy.fromfile('taps file path', numpy.complex64).tolist() Это приведет к чтению всего двоичного файла и обработки в нем каждой порции из 64 байт как комплектного числа. Используйте numpy.float32 для taps в формате real. См. подсказку numpy.fromfile для более продвинутого использования: Help по встроенной функции fromfile в numpy: numpy.fromfile = fromfile(...) fromfile(file=, dtype=float, count=-1, sep=_) -> массив. Требуемые аргументы: file -- объект открываемого файла или строка, содержащая имя файла. Аргументы ключевого слова: dtype -- тип и порядок возвращенного массива (по умолчанию float) count -- количество элементов для ввода (по умолчанию все) sep -- разделитель между элементами в файле, если он текстовый (по умолчанию "") Возвратит массив данных определенного типа из текстового или двоичного файла. Аргумент file может быть открытым файлом, или строкой с именем файла, откуда должны быть прочитаны данные. Если count == -1, то будет прочитан весь файл целиком, иначе будет прочитано count элементов определенного типа. Если параметр sep указан как "", то это значит, что читаются двоичные данные из файла с использованием указанного типа dtype, иначе sep определяет разделитель между отдельными элементами в текстовом файле. Значение dtype также используется для определения размера и порядка элементов в двоичных файлах. [Позиционирование элементов GUI по координатной сетке] GRC предоставляет несколько графических элементов отображения данных (Scope Sink, FFT Sink, Waterfall Sink, Constellation Sink, ...) и графические органы управления для создания диаграмм схемы проекта (flow graph) wx-gui (Slider, Chooser, ...). Каждый из этих графических элементов имеет свой параметр Grid Position, предназначенный для точного позиционирования на форме работающего приложения GRC. Параметр Grid Position это список из 4 целых чисел в форме row, column, row span, column span (строка, столбец, протяженность по строкам, протяженность по столбцам). Числа row и column задают позицию верхнего левого окна графического элемента. Самая малая позиция 0, 0 задает верхний левый угол координатной решетки (соответствует верхнему левому углу формы программы). Если параметр решетки Grid Position оставить пустым, то графический элемент будет автоматически вставлен в позицию области последовательного вертикального размещения (vertical sizer). Область vertical sizer находится непосредственно над областью решетки (grid sizer). Если Вы не хотите добавлять какие-либо элементы в область vertical sizer, оставьте пустым параметр решетки (Grid Position). 3 и 4 параметры Grid Position (row span и column span), если они указаны, задают протяженность отображения графического элемента в решетке, или количество строк и столбцов, которое может занимать графический элемент по вертикали (по строкам решетки) и горизонтали (по столбцам решетки). Значение row span (третье число) задает количество строк вниз от позиции row, и значение column span (4 число) задает количество столбцов от позиции column. Таким образом, интервал (span) должен быть как минимум 1, 1, чтобы элемент GUI мог занять только одну ячейку координатной сетки формы. Пример. Пользователь хочет разместить на форме Slider (движок регулятора), центрированный сразу над графикой Sink. Slider будет позиционироваться на 2 столбце верхней строки, и распространяться на 2 ячейки сетки. Sink будет позиционироваться на 2-й строке, и занимать горизонтальное пространство 3 ячейки от столбца 2. Получится следующее назначение параметров и результирующая координатная сетка. Элементы GUI: Slider Control: (0, 1, 1, 2) Полученная форма GUI (позиции координатной сетки формы): 0,0 0,1 0,2 0,3 [Иерархические блоки] GRC может создавать иерархические блоки из готовых, встроенных функциональных блоков. Иерархические блоки могут быть инстанцированы в другие flow graph. Код Python, сгенерированный из иерархического блока, сам по себе может использоваться для не-GRC схем flow graph. В создании иерархического блока используется 4 важных блока: блок options, блоки parameter, коннектор источника (pad source) и коннектор получателя (pad sink) данных. Блок Options. Чтобы создать иерархический блок, должны быть правильно установлены параметры блока options. Параметр ID блока options устанавливает генерируемое имя модуля Python для иерархического блока, и он должен быть уникальным среди всей библиотеки блоков (как встроенных, так и созданных пользователем). Параметр Title устанавливает отображаемое имя блока. Параметр Generate Options должен быть установлен в Hier Block. Параметр Category устанавливает категорию нового блока. Эта категория может быть существующей категорией в окне выбора блоков (список категорий блоков и их имен в виде дерева, находящийся в правой части окна редактора GRC), либо быть новой категорией. Категории могут быть вложенными друг в друга путем указания последовательности имен, разделенных слешем, например Custom/Filters. Для того, чтобы поместить блоки в корень категорий (root category), укажите одиночный слеш "/" (пустой параметр Category скроет Ваш блок). Блоки Parameter. Блоки параметров указывают переменные в Вашем иерархическом блоке, которые должны конфигурироваться на верхнем уровне блока. Блоки параметра работают наподобие блоков переменной (встроенный блок Variable) с несколькими исключениями: блоки параметров не могут зависеть от других блоков параметров. Блоки параметров имеют параметр метки Label, используемый с целью отображения какой-либо информации. Блоки параметра занимают место блока переменной, не пытайтесь создать блок переменной с таким же ID, как и у блока параметра. Блоки Pad Source и Pad Sink. Это коннекторы для создания входов и выходов иерархического блока. У блоков pad конфигурируется тип данных, длина вектора и количество портов. Блок flow graph может иметь чаще всего один коннектор источника (pad source, выход) и один коннектор получателя (pad sink, вход). Иерархический блок может иметь один pad sink и не иметь при этом pad source, или может иметь один pad source и не иметь pad sink, однако должен быть хотя бы один блок pad. Создание и инстанцирование: • Начните создание блока с нуля путем создания нового (пустого) flow graph. Замечания: • Поле изменений, сделанных в иерархическом блоке, необходимо его сгенерировать заново. После этого надо закрыть и повторно открыть GRC перед тем, как использовать измененный иерархический блок. [Добавления пользовательских блоков] Каждый блок в GRC соответствует XML-файлу, который описывает параметры блока, его входы, выходы и другие атрибуты. Добавление пользовательского блока (custom block) это просто вопрос создания одного из XML-файлов определения блока. Есть несколько важных моментов: • Блок должен быть доступен из путей поиска python. Это означает, что к блоку можно обратиться через оператор import. Создание XML-определения блока. Самый лучший способ научиться создавать xml-файл - разобрать его рабочий пример. Для этого просмотрите определения блоков (source:grc/blocks), поставляемые вместе с GRC, и откройте содержимое нескольких файлов. В сущности все определения блока структурируются следующим образом (в этом примере создается блок с 2 параметрами, одним входом и двумя выходами): My Block Name my_package_my_block_ff Filters from gnuradio import my_package my_package.my_block_ff($param1, $param2) set_param1($param1) Parameter 1 param1 real Parameter 2 param2 1 int in float part out float out float Важные замечания: • Важен порядок следования тегов, если теги не организованы правильно, то блок не пройдет проверку (подробнее см. block.dtd [5]). Примеры определения блока: • Простой пример, "Complex to Real" [7]. Установка XML-определения блока. Есть несколько методов, чтобы указать GRC на Ваш новый XML-файл. Метод 1: расположение в иерархии по умолчанию. Создайте файл _.xml_ внутри /.grc_gnuradio/* Вашей домашней директории. Если эта директория не существует, то создайте её (командой mkdir ~/.grc_gnuradio/). Метод 2: файл конфигурации. Создайте или отредактируйте ~/.gnuradio/config.conf, и добавьте в него следующие строки: [grc] В local_blocks_path может быть несколько путей, отделенных друг от друга двоеточиями: local_blocks_path=/path/to/blocks1:/path/to/blocks2 Метод 3: переменная окружения. Установите переменную окружения GRC_BLOCKS_PATH на путь, в котором содержится Ваша обертка пользовательского блока. GRC_BLOCKS_PATH может содержать несколько путей, отделенных друг от друга двоеточиями: GRC_BLOCKS_PATH=/path/to/blocks1:/path/to/blocks2 [Ссылки] 1. GNU Radio Companion site:wiki.gnuradio.org. |