После полутора лет разработки сформирован новый значительный релиз свободной платформы цифровой обработки сигналов GNU Radio 3.9. Платформа включает набор программ и библиотек, позволяющих создавать произвольные радиосистемы, схемы модуляции и форма принимаемых и отправляемых сигналов в которых задаются программно, а для захвата и генерации сигналов применяются простейшие аппаратные устройства. Проект распространяется под лицензией GPLv3. Код большей части компонентов GNU Radio написан на языке Python, части, критичные к производительности и времени задержки, написаны на языке С++, что позволяет использовать пакет при решении задач в режиме реального времени.
В комбинации с универсальными программируемыми приёмопередатчиками, не привязанными к полосе частот и типу модуляции сигнала, платформа может быть использована для создания таких устройств, как базовые станции для сетей GSM, устройства для дистанционного чтения RFID-меток (электронные удостоверения и пропуски, смарт-карты), GPS-ресиверы, WiFi, приемники и передатчики FM-радио, TV-декодеры, пассивные радары, спектральные анализаторы и т.п. Кроме USRP, пакет может использовать и другие аппаратные компоненты для ввода и вывода сигналов, например, доступны драйверы для звуковых карт, TV-тюнеров, устройств BladeRF, Myriad-RF, HackRF, UmTRX, Softrock, Comedi, Funcube, FMCOMMS, USRP и S-Mini.
В состав также входит коллекция фильтров, канальных кодеков, модулей синхронизации, демодуляторов, эквалайзеров, голосовых кодеков, декодеров и других элементов, необходимых для создания радиосистем. Указанные элементы могут быть использованы как кирпичики для компоновки готовой системы, что в сочетании с возможностями по определению потоков данных между блоками позволяет проектировать радиосистемы даже без навыков программирования.
Основные изменения:
- Внесены изменения в организацию разработки. Для участия в разработке больше не требуется подписание CLA-соглашения, вместо которого разработчику необходимо лишь подтвердить, что он имеет право на передачу кода и не пытается присвоить себе чужой код. Для оформления передачи кода применяется документ Developer Certificate of Origin (DCO), который с 2004 года используется при передаче изменений в состав ядра Linux. Для отслеживания автора к каждому изменению прикрепляется строка “Signed-off-by: имя и email разработчика” (git commit -s). Прикрепляя данную подпись к патчу, разработчик подтверждает своё авторство над передаваемым кодом и соглашается с его распространением в составе проекта или как части кода под свободной лицензией.
- Разрешено использование конструкций из стандарта C++14, но в коде, где продолжает использоваться Boost, продолжают применяться конструкции C++11. Кроме того, в код добавлены заголовки с информацией о лицензии в формате SPDX. Сборочные сценарии адаптированы для создания повторяемых сборок.
- Прекращено применение генератора программных интерфейсов SWIG. Для связывания кода на С/C++ и Python теперь применяется PyBind11, который требует написания дополнительного кода, но обеспечивает более предсказуемый и стабильный результат. Вместе с переходом на PyBind проведена большая работа по модернизации кода графического интерфейса GRC (GNU Radio Companion).
- Добавлен новый модуль gr-network для создания сетевых блоков,
поддерживающий TCP и UDP. - В графический интерфейс gr-qtgui добавлены графики для азимута, расстояния и автокорреляции, обеспечена визуализация компаса, добавлена вертикальная панель.
- Добавлена поддержка UHD 4.0 (USRP hardware driver) и предложен новый API для создания фильтров.
- Прекращена поддержка Python 2, для работы теперь требуется как минимум Python 3.6.5. Обновлены зависимости: numpy 1.13.3, VOLK 2.4.1, CMake 3.10.2, Boost 1.65, Mako 1.0.7, PyBind11 2.4.3. Из компиляторов поддерживаются GCC 8.3.0, Clang 11.0.0 и MSVC 1910 (Microsoft VS 2017 15.0). В число зависимостей включена библиотека libsndfile. Из субмодулей в отдельную зависимость перенесён VOLK (Vector Optimized Library of Kernels).