Después de un año de desarrollo, se ha formado un nuevo lanzamiento significativo de la plataforma de procesamiento de señales digitales de código abierto GNU Radio 3.10. La plataforma incluye un conjunto de programas y bibliotecas que permiten crear sistemas de radio personalizados, esquemas de modulación y las formas de las señales enviadas y recibidas definidas por software, utilizando dispositivos de hardware simples para la captura y generación de señales. El proyecto se distribuye bajo la licencia GPLv3. La mayor parte del código de los componentes de GNU Radio está escrito en Python, mientras que las partes críticas para el rendimiento y la latencia están escritas en C++, lo que permite utilizar el paquete para resolver tareas en tiempo real.
En combinación con transceptores programables universales, no vinculados a bandas de frecuencia y tipos de modulación de señales, la plataforma puede ser utilizada para crear dispositivos como estaciones base para redes GSM, dispositivos para la lectura remota de etiquetas RFID (identificaciones electrónicas y pases, tarjetas inteligentes), receptores GPS, WiFi, receptores y transmisores de radio FM, decodificadores de TV, radares pasivos, analizadores espectrales, etc. Además del USRP, el paquete puede utilizar otros componentes de hardware para la entrada y salida de señales, por ejemplo, hay controladores disponibles para tarjetas de sonido, sintonizadores de TV, dispositivos BladeRF, Myriad-RF, HackRF, UmTRX, Softrock, Comedi, Funcube, FMCOMMS, USRP y S-Mini.
También incluye una colección de filtros, códecs de canal, módulos de sincronización, demoduladores, ecualizadores, códecs de voz, decodificadores y otros elementos necesarios para crear sistemas de radio. Los elementos mencionados pueden ser utilizados como bloques para ensamblar un sistema completo, lo que junto con las capacidades para definir flujos de datos entre los bloques permite diseñar sistemas de radio incluso sin habilidades de programación.
Principales cambios:
- Se añadió un nuevo módulo gr-pdu, en el que se trasladaron herramientas para manipular objetos del tipo PDU (Unidad de Datos de Protocolo), utilizado para los datos que se trasladan entre bloques de GNU Radio. Desde el módulo gr-blocks, todos los bloques PDU se trasladaron a los módulos gr-network y gr-pdu, dejando una capa de gr-blocks para garantizar la compatibilidad hacia atrás. Los tipos vectoriales PDU ahora están disponibles en el espacio de nombres gr::types, y las funciones para manipular PDU están en el espacio de nombres gr::pdu.
- Se ha añadido un nuevo módulo gr-iio, que proporciona un marco de entrada/salida para organizar el intercambio de datos entre GNU Radio y dispositivos industriales basados en la subsistema IIO (Industrial I/O), como PlutoSDR, AD-FMCOMMS2-EBZ, AD-FMCOMMS3-EBZ, AD-FMCOMMS4-EBZ, ARRADIO y AD-FMCOMMS5-EBZ.
- Se ha propuesto soporte experimental para la clase Custom Buffer, que simplifica la transferencia de datos entre bloques de GNU Radio y aceleradores de hardware basados en GPU, FPGA y DSP. El uso de custom_buffer permite evitar la escritura de bloques especiales para aprovechar la aceleración en el lado de la GPU y permite trasladar datos directamente del búfer circular de GNU Radio a la memoria de la GPU, ejecutar núcleos CUDA y devolver datos con resultados a los búferes de GNU Radio.
- La infraestructura de registro ha sido trasladada al uso de la biblioteca spdlog, lo que ha mejorado la conveniencia de trabajar con registros, ha eliminado la necesidad de acceder a iostream y cstdio, ha asegurado soporte para expresiones libfmt para el formateo de cadenas y ha modernizado la interfaz de programación. La biblioteca Log4CPP previamente utilizada ha sido eliminada de las dependencias.
- Se ha realizado la transición al uso del estándar C++17 durante el desarrollo. La biblioteca boost::filesystem ha sido reemplazada por std::filesystem.
- Se han elevado los requisitos para los compiladores (GCC 9.3, Clang 11, MSVC 1916) y las dependencias (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).
- Se han añadido enlaces de Python para bloques RFNoC.
- En los bloques para la construcción de interfaces gráficas gr-qtgui se ha añadido soporte para Qt 6.2. En la interfaz gráfica de GRC (GNU Radio Companion) se ha añadido la opción «--output» para bloques jerárquicos.
Fuente: opennet.ru
