След година разработка е създадена нова значима версия на свободната платформа за цифрова обработка на сигнали GNU Radio 3.10. Платформата включва набор от програми и библиотеки, които позволяват създаването на произволни радиосистеми, схеми за модулация и форми на получавани и изпращани сигнали, които се задават програмно, а за захващане и генериране на сигнали се използват простички хардуерни устройства. Проектът се разпространява под лиценз GPLv3. Кодът на по-голямата част от компонентите на GNU Radio е написан на Python, а частите, критични за производителността и времето за реакция, са написани на C++, което позволява използването на пакета при решаване на задачи в реално време.
В комбинация с универсални програмируеми предаватели и приемници, независими от честотната лента и типа на модулация на сигнала, платформата може да се използва за създаване на устройства като базови станции за 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 ядра и да се върнете данни с резултат към буферите на 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“ за йерархични блокове.
Източник: opennet.ru
