После года разработки сформирован новый значительный релиз свободной платформы цифровой обработки сигналов GNU Radio 3.10. Платформа включает набор программ и библиотек, позволяющих создавать произвольные радиосистемы, схемы модуляции и форма принимаемых и отправляемых сигналов в которых задаются программно, а для захвата и генерации сигналов применяются простейшие аппаратные устройства. Проект распространяется под лицензией GPLv3. Код большей части компонентов GNU Radio написан на языке Python, части, критичные к производительности и времени задержки, написаны на языке С++, что позволяет использовать пакет при решении задач в режиме реального времени.
В комбинации с универсальными программируемыми приёмопередатчиками, не привязанными к полосе частот и типу модуляции сигнала, платформа может быть использована для создания таких устройств, как базовые станции для сетей GSM, устройства для дистанционного чтения RFID-меток (электронные удостоверения и пропуски, смарт-карты), GPS-ресиверы, WiFi, приемники и передатчики FM-радио, TV-декодеры, пассивные радары, спектральные анализаторы и т.п. Кроме USRP, пакет может использовать и другие аппаратные компоненты для ввода и вывода сигналов, например, доступны драйверы для звуковых карт, TV-тюнеров, устройств BladeRF, Myriad-RF, HackRF, UmTRX, Softrock, Comedi, Funcube, FMCOMMS, USRP и S-Mini.
В состав также входит коллекция фильтров, канальных кодеков, модулей синхронизации, демодуляторов, эквалайзеров, голосовых кодеков, декодеров и других элементов, необходимых для создания радиосистем. Указанные элементы могут быть использованы как кирпичики для компоновки готовой системы, что в сочетании с возможностями по определению потоков данных между блоками позволяет проектировать радиосистемы даже без навыков программирования.
Основные изменения:
- Добавлен новый модуль gr-pdu, в который перенесены инструменты для манипуляции объектами с типом PDU (Protocol Data Unit), применяемым для данных, переносимых между блоками GNU Radio. Из модуля gr-blocks все блоки PDU перенесены в модули gr-network и gr-pdu, а вместо gr-blocks оставлена прослойка для обеспечения обратной совместимости. Векторные типы PDU теперь доступны в пространстве имён gr::types, а функции для манипуляции PDU – в пространстве имён gr::pdu.
- Добавлен новый модуль gr-iio, предоставляющий фреймворк ввода/вывода для организации обмена данными между GNU Radio и промышленными устройствами на базе подсистемы IIO (Industrial I/O), такими как PlutoSDR, AD-FMCOMMS2-EBZ, AD-FMCOMMS3-EBZ, AD-FMCOMMS4-EBZ, ARRADIO и AD-FMCOMMS5-EBZ.
- Предложена экспериментальная поддержка класса Custom Buffer, упрощающего передачу данных между блоками GNU Radio и аппаратными ускорителями на базе GPU, FPGA и DSP. Применение custom_buffer позволяет обойтись без написания специальных блоков для задействования ускорения на стороне GPU и даёт возможность напрямую перемещать данные из кольцевого буфера GNU Radio в память GPU, запускать ядра CUDA и возвращать данные c результатом в буферы GNU Radio.
- Инфраструктура для ведения лога переведена на использование библиотеки spdlog, что позволило повысить удобство работы с логами, избавиться от обращения к iostream и cstdio, обеспечить поддержку выражений libfmt для форматирования строк и модернизировать программный интерфейс. Ранее применяемая библиотека Log4CPP удалена из зависимостей.
- Осуществлён переход на использование при разработке стандарта C++17. Библиотека boost::filesystem заменена на std::filesystem.
- Повышены требования к компиляторам (GCC 9.3, Clang 11, MSVC 1916) и зависимостям (Python 3.6.5, numpy 1.17.4, VOLK 2.4.1, CMake 3.16.3, Boost 1.69, Mako 1.1.0, PyBind11 2.4.3, pygccxml 2.0.0).
- Добавлены Python-биндинги для блоков RFNoC.
- В блоках для построения графического интерфейса gr-qtgui добавлена поддержка Qt 6.2. В графический интерфейс GRC (GNU Radio Companion) добавлена опция “–output” для иерархических блоков.