Администрирование Разное GNU Radio, краткий справочник Tue, March 19 2024  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.

GNU Radio, краткий справочник Печать
Добавил(а) microsin   

Сборник информации из разных источников (см. "Ссылки"), помогающий ориентироваться в системе GNU Radio Companion (GRC). Непонятные термины и сокращения см. в разделе "Словарик", в конце статьи.

[Функциональные блоки GRC]

Блоки, из которых строится проект, делятся на следующие основные категории:

Source. Источник сигнала, служит поставщиком цифровых данных представляющих сигнал. Например, это блоки osmocom Source, RTL-SDR Source (SDR-радиоприемники), Signal Source (синтез периодического сигнала), Wav File Source (данные из стандартного WAV-файла [5]), File Source (потоковые данные из файла), и т. д. Источник сигнала имеет только выходной коннектор (out), расположенный в диаграмме справа от блока.

GNUradio RTL SDR Source GNUradio Signal Source GNUradio File Source

Sink. Получатель сигнала, служит для конечной обработки приходящих данных - например для визуализации или вывода в виде звука на audio-карту PC. Примерами могут служить WX GUI Waterfall Sink (отображение спектра во времени в виде водопада), Scope Sink (осциллограмма), и т. п. Получатель сигнала имеет только входной коннектор (in), расположенный в диаграмме справа от блока.

GNUradio Audio Sink GNUradio WX GUI Scope Sink GNUradio WX GUI FFT Sink

Промежуточные блоки. Это фильтры, умножители, интерполяторы, дециматры и т. д. Служат для пробразования сигналов, и имеют как входные коннекторы (in), так и выходные (out).

GNUradio Low Pass Filter GNUradio Rational Resampler GNUradio WBFM Receive

Блоки Source и Sink могут быть в одном из 2 состояний: Enabled (блок активен), Disabled (блок отключен, он не используется в проекте). Промежуточные блоки (через который проходит сигнал) также могут быть в состоянии Bypass, когда этот блок ведет себя просто как линия соединения входа с выходом, т. е. обработка сигнала в блоке отключена.

Визуальные управляющие блоки. Это движки (слайдеры), которые служат для плавного регулирования какой-либо величины (например изменения частоты настройки или уровня сигнала), радиокнопки, галочки и т. п. (часто их называют элементы GUI, или блоки GUI). Визуальные управляющие блоки не имеют коннекторов, они просто создают значение переменной для проекта GNU Radio.

GNUradio QT GUI Range GNUradio QT GUI Chooser

К визуальным блокам также можно отнести средства отображения спектра (FFT Sink, Frequency Sink) и формы сигнала (Scope Sink).

Пример, как выглядят визуальные блоки управления:

GNUradio GUI controls example

Примечание: многие визуальные блоки бывают двух видов: QT и WX. Это префиксы, отражающие способ создания блока, причем блоки QT и WX часто несовместимы друг с другом. В настоящее время больше всего функциональных блоков WX, однако в будущем разработчики GNUradio планируют полностью перейти на блоки QT.

Невизуальные блоки. Создают глобальные переменные, константы, опции. Служат для удобства управления проектом GNU Radio, чтобы какую-либо величину можно было задавать только в одном месте. Самый хороший пример - переменная samp_rate (блок Variable), которая автоматически создается вместе с новым проектом (samp_rate определяет частоту дискретизации по умолчанию для различных блоков цифровой обработки). Также к невизуальным блокам можно отнести блок Options, в котором определяются опции проекта (размер окна, заголовок, описание и т. д.).

GNUradio Options Variable

[Управление размещением визуальных блоков]

У всех блоков GUI есть свойство Grid Position, позволяющее управлять размещением элементов управления на форме запущенного проекта. Для каждого параметра Grid Position можно использовать 2 или 4 числа. Первые 2 числа указывают номер строки (row) и столбца (column) на отображаемой форме (оба номера отсчитываются относительно 0). Это можно представить как сетку, в которой столько строк и столбцов, сколько Вам нужно.

Если в параметре Grid Position используются 4 числа, то значение первых двух остается таким же (номер столбца и строки). Однако оставшиеся 2 числа задают, на сколько столбцов и строк продолжается блок GUI. Например, если на верхней строке формы есть 3 элемента управления - блока GUI (у которых параметры Grid Position [0,0], [0,1] и [0,2]), то можно управлять размерами блоков GUI в первом ряду, указывая Grid Position как [1,0,1,3] (здесь квадратные скобки указаны просто для удобочитаемости, на самом деле в параметре Grid Position их вставлять не надо). На картинке ниже показана в качестве примера окно запущенного GRC-проекта, где верхние пять строк графика FFT занимает 5 строк и 4 столбца. Важно помнить, что нумерация строк и столбцов начинается от нуля, так что следующая пустая строка после графика FFT будет 5, где размещено два GUI-блока, показывающие частоту (в столбцах 1 и 3).

GNUradio use GUI hint

[Частота оцифровки сигнала]

Самый важный параметр системы SDR - та частота, с которой оцифровываются входные данные (радисигнал). Это частота оцифровки, или частота выборок АЦП, английский термин Sample Rate (в проекте GRC задается значением переменной samp_rate). Чем выше эта частота, чем может быть шире обзор спектра SDR-радиприемника. Например, если Вы хотите принимать сигнал в полосе частот 1 МГц, то необходимо, чтобы частота выборок была не меньше 2 МГц. Однако если Вы хотите выполнить сложные преобразования сигнала, или хотите перейти к обработке звуковых частот, то следует сузить диапазон частот и уменьшить частоту выборок.

Блоки GRC используют две функции для управления текущей частотой выборок - децимация и интерполяция. Децимация делит частоту выборки на целое число, а интерполяция умножает. Например, когда вы делаете децимацию сигнала на 4, то в сущности делите sample rate на 4. Интерполяция на 3 утраивает sample rate. Часто децимация и интерполяция используется для получения дробных значений коэффициента деления частоты выборок. Например, чтобы подогнать sample rate 1000 кГц к стандартной частоте выборок звуковой карты 44.1 кГц, Вы могли бы сначала выполнить интерполяцию сигнала на 441, после чего децимацию на 1000.

[Коннекторы и типы данных]

Коннекторы блоков имеют цвет, который показывает тип данных этого коннектора. Синий для комплексных данных (Complex), оранжевый для данных с плавающей запятой (Float), темно-зеленый для 32-битных целых со знаком (Int), желтый для 16-битных целых со знаком (Short), фиолетовый для 8-битных со знаком (Char).

GNUradio main types

Есть и другие типы данных, встречающиеся не так часто, они также обозначаются разными цветами. Ниже в таблице показана легенда цветов типов данных, которая доступна вызовом меню Help -> Types (обратите внимание, что комплексные данные занимают в 2 раза больше места в памяти, чем обычные):

Тип и цвет Байт Описание
Complex Float 64 16 Комплексные данные (вещественная I составляющая 64 бита и мнимая Q составляющая 64 бита).
Complex Float 32 8 Комплексные данные (вещественная I составляющая 32 бита и мнимая Q составляющая 32 бита).
Complex Integer 64 16 Комплексные данные (вещественная I составляющая 64 бита и мнимая Q составляющая 64 бита).
Complex Integer 32 8 Комплексные данные (вещественная I составляющая 32 бита и мнимая Q составляющая 32 бита).
Complex Integer 16 4 Комплексные данные (вещественная I составляющая 16 бит и мнимая Q составляющая 16 бит).
Complex Integer 8 2 Комплексные данные (вещественная I составляющая 8 бит и мнимая Q составляющая 8 бит).
Float 64 8 Числа с плавающей запятой двойной точности (аналог long double).
Float 32 4 Числа с плавающей запятой обычной точности.
Integer 64 8 Целые числа со знаком, 64 бита.
Integer 32 4 Целые числа со знаком, 32 бита (int).
Integer 16 2 Целые числа со знаком (short).
Integer 8 1 Целые числа со знаком (char).
Bits 1 Биты (отдельные биты байта).
Message Queue   Очередь сообщений.
Async Message   Асинхронное сообщение.
Bus Connection Wildcard   Подключение к шине.

Входы и выходы блоков (их соответствующие коннекторы) можно соединять друг с другом связями. Для этого сначала делается клик мышью на одном коннекторе, затем еще один клик на другом коннекторе. Получается линия связи со стрелочкой, показывающе направление данных. При создании соединений существуют простые правила. Во-первых, нельзя соединять друг с другом выходы. Во-вторых, должны совпадать типы данных на концах линии связи.

GNUradio connections

Ошибки в проекте (неправильные связи, ошибочно настроенные или не соединенные блоки) среда разработки GNU Radio Companion показывает красным цветом.

[Часто используемые блоки]

Ниже в таблицах представлены основные блоки, которые используются чаще всего, с их кратким описанием.

Где находится Блок Функция
Невизуальные блоки
Core -> Channelizers Frequency Xlating FIR Filter Выполняет преобразование спектра частот сигнала, с возможностью децимациив FIR-фильтре. Может использоваться как канализатор - для выделения узкой полосы частот из широкополосного сигнала приемника.
Core -> File Operators File Source Сигнал, записанный в файл.
Core -> Filters Hilbert Преобразование Гильберта.
Low Pass Filter Фильтр низких частот.
Core -> Level Controllers ACG, AGC2, ACG3 Блок АРУ. Параметр Reference задает значение, к которому нужно подстраивать сигнал. Параметры Attack Rate и Decay Rate задают скорость нарастания и скорость спада усиления.
Core -> Math Operators Add Суммирует (линейно микширует) несколько сигналов (по умолчанию два сигнала).
Multiply Умножение сигналов. Нелинейная операция, соответствующая работе смесителя радиоприемника. Если умножить одну частоту на другую, то на выходе получится сумма и разность частот.
Multiply Const Умножение на константу. Константой может быть переменная, задаваемая графическим элементом управления, например WX GUI Slider.
Core -> Misc Throttle Регулирует поток выборок сигнала так, чтобы средняя частота выборок не превышала samp_rate. Этот блок уменьшает нагрузку на процессор и предотвращает зависание выполняемого проекта, однако ухудшает работу проекта в реальном времени (в частности, звук Audio Sink становится прерывистым). Например, у меня без блока Throttle исполняемый файл проекта python.exe создавал нагрузку на процессор 22%, а с блоком Throttle 0.1%. Блок следует использовать только в приложениях GUI, где нет никакого другого блока, ограничивающего скорость поступления выборок. Частота выборок должна контролироваться источником (Source) или получателем (Sink) сигнала, например USRP или звуковая карта.
Core -> Resamplers Rational Resampler Блок передискретизации сигнала (децимация и интерполяция).
Core -> Type Converters Complex To Float Преобразование потока комплексных выборок сигнала (IQ) в два потока сигнала - данные реальной составляющей (re) и мнимой (im).
Complex To Mag Преобразование сигнала из комплексного в вещественный формат. Может использоваться для получения огибающией, или вычисления модуля из высокочастотного радиосигнала (демодуляция AM).
Float To Complex Преобразование двух потоков данных (re и im) в комплексный сигнал (IQ).
Core -> Variables Variable Переменная.
Waveform Generators Signal Source Синтез периодического сигнала Constant (постоянный ток, DC), Cosine и Sine (синусоидальный сигнал, Cosine и Sine отличаются друг от друга по фазе на 90°), Square (прямоугольный сигнал), Triangle (треугольник), Saw Tooth (пила).
Визуальные блоки
Core -> Deprecated Selector Переключатель путей распространения сигнала (аналог мультиплексора).
Core -> GUI Widgets -> QT (или WX) Chooser Вставляет в форму орган управления, дает возможность выбрать одну из величин списка. Список задается в формате [Значение1, Значение2, ..., ЗначениеN]. Позволяет управлять выбором опций блоков. Например, менять форму сигнала (Sine, Square).
Range Движковый регулятор (слайдер), позволяет изменять или редактировать величину (переменную).
Slider
Text Добавляет на форму выполняемого проекта текстовое поле ввода, позволяющее менять значение переменной.
Core -> Instrumentation -> QT (или WX) FFT Sink График спектра сигнала. Установите параметр Average Alpha в 0 для автоматической установки. Оставьте параметр Window Size незаполненным для создания окна с размером по умолчанию, или введите (ширина, высота) в точках. Используйте параметр настройки сетки Grid Position (строка, столбец, интервал строки, интервал столбца) для настройки расположения графического элемента в окне. Используйте Notebook Param (notebook-id, page-index) для позиционирования графического элемента на нужной странице.
Histo Sink Гистограмма выборок сигнала.
Number Sink Полоса, показывающая уровень сигнала.
Frequency Sink Отображение частоты.
Scope Sink Отображение формы сигнала во временной области (осциллограф).
Waterfall Sink Отображение изменения спектра во времени в виде водопада.

[Filter Design Tool]

В GRC есть инструмент Tools -> Filter Design Tool, упрощающий разработку фильтров.

[FAQ]

2048000

Предельные значения samp_rate для других SDR-приемников (в мегасемплах в секунду):

Устройство MIN MAX
RTL-SDR (RTL2832U)   2.048M
HackRF One 8M 20M
Airspy 2M 8M
SDRplay   2.048M
USRP-2974   200M

www.rtl-sdr.com/about-rtl-sdr/

Свойства RTL-SDR Source (или osmocom Source) -> Device Arguments -> driver=rtlsdr,rtl=1

Возможно частота дискретизации звуковой карты не совпадает точно с частотой выборок входных данных блока Audio Sink. Согласовать частоты выборок можно с помощью блока Rational Resampler, его надо поставить на входе блока Audio Sink. После этого надо подобрать коффициенты Interpolation (умножение) и Decimation (деление) так, чтобы частота на выходе Rational Resampler точно совпадала с Sample Rate блока Audio Sink. Коэффициенты Interpolation и Decimation блока Rational Resampler проще всего подбирать с помощью таблиц Microsoft Excel.

В строке инициализации компонента RTL-SDR Source (или osmocom Source) подстройте параметр N:

driver=rtlsdr,rtl=N

Обычно подходит 0 или 1.

GNUradio RTL SDR Source Device Arguments

Такие искажения может вносить блок Throttle.

Потому что неправильно настроены (или не настроены) переменные окружения, необходимые для работы подсистемы Python. В среде операционной системы Windows редактор GRC в процессе своего старта настраивает следующие переменные окружения:

GRC_BLOCKS_PATH=C:\GNURadio-3.7\bin\..\share\gnuradio\grc\blocks
 
PYTHONHOME=C:\GNURadio-3.7\bin\..\gr-python27
PYTHONPATH=C:\GNURadio-3.7\bin\..\gr-python27\Lib\site-packages;C:\GNURadio-3.7\
bin\..\gr-python27\dlls;C:\GNURadio-3.7\bin\..\gr-python27\libs;C:\GNURadio-3.7\
bin\..\gr-python27\lib;C:\GNURadio-3.7\bin\..\lib\site-packages;C:\GNURadio-3.7\
bin\..\gr-python27\Lib\site-packages\pkgconfig;C:\GNURadio-3.7\bin\..\gr-python27\
Lib\site-packages\gtk-2.0\glib;C:\GNURadio-3.7\bin\..\gr-python27\Lib\site-packages\
gtk-2.0;C:\GNURadio-3.7\bin\..\gr-python27\Lib\site-packages\wx-3.0-msw;C:\
GNURadio-3.7\bin\..\gr-python27\Lib\site-packages\sphinx;C:\GNURadio-3.7\bin\..\
gr-python27\Lib\site-packages\lxml-3.4.4-py2.7-win.amd64.egg;C:\GNURadio-3.7\bin\
..\lib\site-packages\gnuradio\zeromq
 
UHD_IMAGES_DIR=C:\GNURadio-3.7\bin\..\share\uhd\images
UHD_PKG_DATA_PATH=C:\GNURadio-3.7\bin\..\share\uhd;C:\GNURadio-3.7\bin\..\share\uhd\images
UHD_RFNOC_DIR=C:\GNURadio-3.7\bin\..\share\uhd\rfnoc\

Здесь C:\GNURadio-3.7 это папка, в которую установлена система GNU Radio (у Вас это может быть другой каталог, например расположенный в папке C:\Program Files). Кроме того, в переменную окружения %Path% добавляются пути поиска исполняемых файлов Python:

Path=C:\GNURadio-3.7\bin\;C:\GNURadio-3.7\bin\..\gr-python27\dlls;C:\GNURadio-3.7\
bin\..\gr-python27;C:\Python27;... (далее идут другие пути поиска) ...

Примечание: все необходимые настройки переменных окружения выполняет командный файл run_gr.bat, который находится в папке bin каталога установки GNU Radio.

Проблема решается просто:

1. Запустите командную строку GNURadio Companion Prompt (соответствующий ярлычок появляется в меню Пуск после установки GNU Radio).

GRC Command Prompt shortcut

Примечание: ярлычок GNURadio Companion Prompt запускает командный файл run_gr.bat, находящийся в папке bin каталога установки GNU Radio. Этот командный файл делает все необходимые настройки переменных окружения.

2. В появившейся командной строке будут настроены все необходимые переменные окружения GRC. Теперь для запуска проекта проекта GRC достаточно выполнить команду:

python.exe top_block.py

[Словарик]

ADS-B Automatic Dependent Surveillance-Broadcast, специальная технология определение позиции самолета, альтернатива радарным системам (подробнее см. Википедию).

AM Amplitude Modulation, амплитудная модуляция.

ATC Air Traffic Control, радиосигналы управления авиационным сообщением.

Bias T устройство для подачи в антенный кабель питания внешнего усилителя. "T" в названии отражает ветвление постоянной и переменной составляющей на антенном разъеме, в который подается питание для антенного усилителя.

BPF Band Pass Filter, полосовой фильтр.

DAB Digital Audio Broadcast, цифровое радиовещание.

FFT Fast Fourier Transform, быстрое преобразование Фурье (БПФ). Преобразование данных выборок сигнала из временной области в частотную, используется для получения спектра сигнала.

FIR Finite Impulse Response, фильтр с конечной импульсной характеристикой (КИХ-фильтр). Это цифровой фильтр без обратных связей с выхода на вход. FIR-фильтр блее стабилен, чем IIR-фильтр.

FM Frequecy Modulation, частотная модуляция. Обычно имеется в виду радиовещание в диапазоне 88 - 108 МГц.

GRC GNU Radio Companion, GUI-среда разработки проектов GNUradio.

HF High Frequincy, высокая частота. Обычно имеются в виду частоты КВ-диапазона и выше (начиная с 10 МГц).

Hi-Z высокое сопротивление.

HPF High-Pass Filter, фильтр высоких частот (ФВЧ).

IF Intermediate Frequency, промежуточная частота.

I/Q реальная (I) и мнимая (Q) составляющие комплексного сигнала, обработка которого используется в SDR-приемниках [5].

IIR Infiite Impulse Response, фильтр с бесконечной импульсной характеристикой (БИХ-фильтр). Это цифровой фильтр с обратными связями с выхода на вход. IIR-фильтр при одинаковом количестве каскадов фильтра (порядка фильтра) позволяет получать более крутую АЧХ, чем FIR-фильтр.

LF Low Frequency, диапазон длинных волн (ДВ).

LNA Low-Noise Amplifier, малошумящий усилитель.

Low IFLIF режим низкой промежуточной частоты SDR-приемника.

LPF Low-Pass Filter, фильтр низкой частоты (ФНЧ). В радиотехнике это не обязательно должны быть звуковые частоты, имеются в виду, что фильтр пропускает частоты ниже заданной частоты фильтра.

MW Middle Wave, средние волны (СВ).

QTWX префиксы названий визуальных блоков, обозначающий способ из создания. Блоки могут быть написаны либо на C++ с помощью кроссплатформенной системы программирования Qt (тогда в начале названия блока будет QT), либо на основе кроссплатформенной библиотеки "виджетов" wxWidgets (тогда название блока получит префикс WX). В Интернете проскакивала информация, что разработчики намерены полностью перейти на Qt и отказаться от использования блоков WX.

RF Radio Frequency, радиочастота.

SSB однополосная амплитудная модуляция.

tapsfilter taps коэффициенты, используемые в цифровом фильтре.

TCXO температурно-компенсированный кварцевый генератор.

UHF Ultra High Frequincy, очень-очень высокая частота, соответствует диапазону радиочастот свыше 120 МГц.

USRP Universal Software Radio Peripheral, семейство SDR-радиоустройств, разработанных и продаваемых Ettus Research и их дочерней компанией National Instruments (NI).

VHF Very High Frequincy, очень высокая частота, соответствует диапазону радиочастот 50 - 110 МГц.

Zero IFZIF режим нулевой промежуточной частоты SDR-приемника.

анти-алиасинг в контексте радиоприема означает подавления помех от наложения спектров сигнала.

[Ссылки]

1. Блог GNUradio site:my-gnuradio.org.
2. SDR radio blog site:blog.sdr.hu.
3. GNUradio site:csun.edu.
4GRC, быстрый старт.
5. Wave File Format - формат звукового файла WAV.
6. GNU Radio Companion.

 

Добавить комментарий


Защитный код
Обновить

Top of Page