Nach einem Jahr der Entwicklung wurde ein neuer signifikanter Release der Open-Source-Plattform für digitale Signalverarbeitung, GNU Radio 3.10, veröffentlicht. Diese Plattform umfasst eine Sammlung von Programmen und Bibliotheken, die es ermöglichen, beliebige Funksysteme, Modulationsschemata und die Form empfangener und gesendeter Signale programmatisch zu erstellen, während einfache Hardwarekomponenten für die Signalaufnahme und -generierung verwendet werden. Das Projekt wird unter der GPLv3-Lizenz veröffentlicht. Der Großteil der GNU Radio-Komponenten ist in Python geschrieben, während leistungs- und verzögerungskritische Teile in C++ verfasst sind, was den Einsatz des Pakets für Echtzeitanwendungen ermöglicht.
In Kombination mit universellen, programmierbaren Transceivern, die nicht an Frequenzbänder oder Signalmodulationsarten gebunden sind, kann die Plattform zur Erstellung von Geräten wie Basisstationen für GSM-Netzwerke, RFID-Lesegeräten (elektronische Ausweise und Berechtigungen, Smart Cards), GPS-Empfängern, WiFi, FM-Radioempfängern und -sendern, TV-Decoder, passiven Radaren, spektralen Analysatoren u.v.m. verwendet werden. Neben USRP kann das Paket auch andere Hardwarekomponenten zur Ein- und Ausgabe von Signalen nutzen, zum Beispiel sind Treiber für Soundkarten, TV-Tuner, Geräte wie BladeRF, Myriad-RF, HackRF, UmTRX, Softrock, Comedi, Funcube, FMCOMMS, USRP und S-Mini verfügbar.
Das Paket umfasst zudem eine Sammlung von Filtern, Kanalcodierern, Synchronisationsmodulen, Demodulatoren, Equalizern, Sprachcodierern, Decodern und anderen Komponenten, die für die Erstellung von Radiosystemen erforderlich sind. Diese Komponenten können als Bausteine zur Zusammenstellung eines fertigen Systems verwendet werden, was in Kombination mit den Fähigkeiten zur Datenstromdefinition zwischen den Modulen die Projektierung von Radiosystemen auch ohne Programmierkenntnisse ermöglicht.
Wesentliche Änderungen:
- Ein neues Modul gr-pdu wurde hinzugefügt, das Werkzeuge zur Manipulation von Objekten des Typs PDU (Protocol Data Unit) enthält, die für den Datentransfer zwischen den Blöcken von GNU Radio verwendet werden. Alle PDU-Blöcke aus dem Modul gr-blocks wurden in die Module gr-network und gr-pdu übertragen, wobei zwischen gr-blocks eine Schicht zur Sicherstellung der Abwärtskompatibilität erhalten blieb. Vektorielle PDU-Typen sind jetzt im Namensraum gr::types verfügbar, während Funktionen zur Manipulation von PDU im Namensraum gr::pdu bereitgestellt werden.
- Ein neues Modul gr-iio wurde hinzugefügt, das ein Eingabe-/Ausgabegerüst für den Datenaustausch zwischen GNU Radio und industriellen Geräten auf Basis des IIO-Subsystems (Industrial I/O) bietet, wie PlutoSDR, AD-FMCOMMS2-EBZ, AD-FMCOMMS3-EBZ, AD-FMCOMMS4-EBZ, ARRADIO und AD-FMCOMMS5-EBZ.
- Experimentelle Unterstützung für die Klasse Custom Buffer wurde vorgeschlagen, um den Datenaustausch zwischen GNU Radio-Blöcken und hardwarebeschleunigten Geräten auf Basis von GPU, FPGA und DSP zu erleichtern. Die Verwendung von custom_buffer ermöglicht es, ohne spezielle Blöcke auszukommen, um die Beschleunigung auf der GPU-Seite zu nutzen, und erlaubt das direkte Verschieben von Daten aus dem Ringpuffer von GNU Radio in den GPU-Speicher, das Starten von CUDA-Kernen und das Zurückgeben der Ergebnisse in die Puffer von GNU Radio.
- Die Infrastruktur für das Logging wurde auf die Nutzung der Bibliothek spdlog umgestellt, was die Arbeit mit Logs erleichtert, den Zugriff auf iostream und cstdio überflüssig macht, die Unterstützung für libfmt-Ausdrücke zur Formatierung von Zeichenfolgen ermöglicht und die Programmierschnittstelle modernisiert. Die zuvor verwendete Log4CPP-Bibliothek wurde aus den Abhängigkeiten entfernt.
- Es wurde auf den Standard C++17 umgestellt. Die Bibliothek boost::filesystem wurde durch std::filesystem ersetzt.
- Die Anforderungen an Compiler (GCC 9.3, Clang 11, MSVC 1916) und Abhängigkeiten (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) wurden erhöht.
- Python-Bindings für RFNoC-Blöcke wurden hinzugefügt.
- In den Blöcken für die grafische Benutzeroberfläche gr-qtgui wurde die Unterstützung für Qt 6.2 hinzugefügt. Im grafischen Interface GRC (GNU Radio Companion) wurde die Option „—output“ für hierarchische Blöcke eingeführt.
Quelle: opennet.ru
