
Внешний (OOT) модуль GNU Radio для блоков QRadioLink.
ВАЖНОЕ УВЕДОМЛЕНИЕ: Этот код создан искусственным интеллектом.
Данный код не был проверен профессиональными программистами; это большая задача. В кодовой базе есть тесты, пожалуйста, ознакомьтесь с ними и их кодом.
Модуль GNU Radio вне дерева (OOT) для блоков QRadioLink.
Ветка main: GNU Radio 3.10 OOT (CMake find_package(gnuradio)). Экспериментальный порт
GNU Radio 4 находится в ветке gnuradio4 (README_gr4.md в этой ветке).
Навигация по коду: docs/CODE_MAP.md (файлы, функции, указатель блоков). Маршрутизация режимов gr-ident ZMQ: docs/GRIDENT_ZMQ.md (преамбула gr-ident на порту :5560).
Эталонный IQ для блоков модуляторов был проверен с помощью radio-modulation-validator (31.05.2026). Итог: МЯГКИЙ СБОЙ — 6/19 блоков пройдено, 13 мягких сбоев, 0 жёстких сбоев, 3 пропущено.
Все проверенные режимы были идентифицированы в правильном семействе модуляций (FSK, PSK, AM, FM). Мягкие сбои на уровне порядка (например, FSK предсказан как CPFSK вместо 4FSK или GMSK) отражают ограничения классификатора порядка валидатора, а не свидетельствуют о том, что эти модуляторы генерируют неправильное семейство сигналов.
В сканировании используется встроенный эталонный IQ (не построенные OOT-блоки); результаты применимы к режимам, перечисленным в этом
README в ветке main, и дублируются в ветке gnuradio4.
Полные результаты по каждому блоку: VALIDATION_REPORT.md
Данный проект описан в следующем препринте:
Cryptographically Keyed Gaussian-Distributed Spread-Spectrum for Enhanced Covert Communications: Design, Implementation, and Simulated Performance in ITU Channel Models
IACR Cryptology ePrint Archive, Paper 2025/108456
https://eprint.iacr.org/2025/108456
Временная метка записи в архиве: 21 марта 2026 г.
Этот модуль предоставляет блоки GNU Radio для различных схем цифровой и аналоговой модуляции, специализированных для любительской радиосвязи и цифровой голосовой связи.
Этот модуль был преобразован из приложения QRadioLink, которое является многорежимным SDR-трансивером для GNU Radio, ADALM-Pluto, LimeSDR, USRP и другого SDR-оборудования. Исходный код находится по адресу https://codeberg.org/qradiolink/qradiolink.
Валидация: Преобразованные блоки, имеющие аналоги в QRadioLink, были проверены на соответствие исходному коду QRadioLink (ветка next, codeberg.org/qradiolink/qradiolink) таким образом, чтобы графы потоков, параметры фильтров, константы масштабирования и поведение блоков совпадали. Цепочки модуляторов/демодуляторов SSB и AM (включая структуру CESSB и константы клиппера/стретчера) были восстановлены для соответствия оригиналу, где они разошлись. Некоторые блоки в этом модуле не имеют соответствующего источника в src/gr/ из QRadioLink; их происхождение указано в таблице ниже.
Авторство и происхождение:
next, src/gr/): модуляция/демодуляция (2FSK, 4FSK, GMSK, BPSK, QPSK, AM, SSB, NBFM, WBFM), цифровой голос (FreeDV, M17, DMR) и вспомогательные блоки (RSSI, M17 дефреймер, MMDVM источник/приёмник, клиппер, стретчер, zero_idle_bursts, gr_4fsk_discriminator, demod_mmdvm_multi, demod_mmdvm_multi2, mod_mmdvm_multi2). DSP и поведение режимов для этих блоков были получены или реализованы заново из приложения QRadioLink.gr_* в QRadioLink src/gr/): 8FSK, SOQPSK, CPM-4FSK, dPMR, NXDN, POCSAG, D-STAR, YSF, P25. Их происхождение указано в таблице происхождения блоков ниже.Происхождение блоков (валидация / атрибуция):
Код был extensively протестирован с помощью libFuzzer с более чем 104 миллионами выполнений на нескольких блоках, и не было обнаружено ни сбоев, ни утечек памяти. См. fuzzing-results/results.md для деталей покрытия.
SOQPSK — это спектрально-эффективная схема модуляции, обеспечивающая улучшенную спектральную эффективность по сравнению со стандартной QPSK. Реализация поддерживает два рабочих режима:
Режим 1: VHF/UHF Одиночный канал
Режим 2: VHF/UHF Многочастотный (устойчивый к замираниям)
Максимальные доступные сегменты полосы пропускания:
Эффективность SOQPSK: ~1.5 бит/с/Гц
Ёмкость на одну несущую:
Характеристики несущей:
Все блоки доступны через привязки Python, включая:
Привязки Python позволяют использовать их в графах потоков GNU Radio Companion и скриптах Python.
gr-qradiolink/ ├── CMakeLists.txt # Top-level CMake configuration ├── include/ # Public header files │ └── gnuradio/ │ └── qradiolink/ ├── lib/ # Implementation files ├── python/ # Python bindings │ └── qradiolink/ │ └── bindings/ ├── grc/ # GNU Radio Companion block definitions ├── docs/ # Documentation │ ├── doxygen/ │ ├── CODE_MAP.md # Code and function map (all modules) │ ├── GRIDENT_ZMQ.md # gr-ident ZMQ mode routing guide │ ├── DSSS_BLOCKS.md # DSSS spreader/despreader guide │ ├── GDSS_BLOCKS.md # GDSS spreader/despreader guide │ └── PTT_CONTROL.md # PTT control with gr-osmosdr ├── examples/ # Example flowgraphs ├── tests/ # Unit tests └── cmake/ # CMake modules └── Modules/
## Зависимости
Полный список обязательных и опциональных зависимостей см. в [DEPENDENCIES.md](https://github.com/supermagnum/gr-qradiolink/blob/HEAD/DEPENDENCIES.md).
**Краткое описание:**
- Клонируйте с `git clone --recursive` (или выполните `git submodule update --init --recursive` после клонирования)
- GNU Radio >= 3.10 (с компонентом вокодера, собранным с поддержкой Codec2)
- CMake >= 3.16
- Boost библиотеки
- Volk (векторно-оптимизированная библиотека ядер)
- ZeroMQ (опционально, для блоков MMDVM и gr-ident преамбулы SUB)
- Python 3.x с NumPy (для привязок Python)
- fmt библиотека (для тестов)
## Тестирование
Модуль включает всесторонние модульные тесты для всех блоков. Тесты запускаются с помощью CTest и Boost.Test.
### Результаты тестов
Все тесты проходят успешно. См. [tests/results.md](https://github.com/supermagnum/gr-qradiolink/blob/HEAD/tests/results.md) для результатов модульных тестов C++, тестов Python и граничных случаев. См. [fuzzing-results/results.md](https://github.com/supermagnum/gr-qradiolink/blob/HEAD/fuzzing-results/results.md) для подробностей фаззинга и тестов протокола MMDVM.
**Модульные тесты C++:**```
100% tests passed
Test Breakdown:
- 12 Manual tests (with int main): test_mod_2fsk, test_mod_4fsk, test_mod_8fsk,
test_mod_am, test_mod_gmsk, test_mod_bpsk, test_mod_mmdvm, test_mod_freedv,
test_gdss_spreader_cc, test_gdss_despreader_cc, test_dsss_cdma_transmitter_cc,
test_dsss_cdma_receiver_cc
- Boost.Test tests: mod_ssb, mod_qpsk, mod_nbfm, mod_wbfm, mod_dsss, all
demodulators, rssi_tag_block (8 tests), interleaver_bb (13 tests with edge cases)
- gr-ident: test_grident_zmq (JSON parse and mode_id to demod mapping)
Test Coverage:
- Modulators: 2FSK, 4FSK, 8FSK, AM, GMSK, BPSK, SSB, QPSK, NBFM, WBFM, DSSS, M17, DMR, dPMR, NXDN
- Demodulators: 2FSK, 4FSK, 8FSK, AM, GMSK, BPSK, SSB, QPSK, NBFM, WBFM, DSSS, M17, DMR, dPMR, NXDN
- FEC: interleaver_bb (HF burst error handling, 13 tests including edge cases)
- Note: SOQPSK and CPM-4FSK blocks are implemented and available but unit tests are planned for future releases
Тесты протокола MMDVM (Python):``` 41 tests passed, 0 tests failed
См. [fuzzing-results/results.md](https://github.com/supermagnum/gr-qradiolink/blob/HEAD/fuzzing-results/results.md) для получения полных результатов тестирования протокола MMDVM.
**Симуляция BER для DSSS** ([examples/dsss_ber_simulation.py](https://github.com/supermagnum/gr-qradiolink/blob/HEAD/examples/dsss_ber_simulation.py)) запускает скремблер → AWGN → дескремблер и строит график BER в зависимости от SNR для N=64, 128, 256, накладывая теоретическую кривую 0.5*erfc(sqrt(N*Es/N0/2)); кривые совпадают в пределах шума симуляции, что подтверждает корректное поведение DSSS.
### Запуск тестов
Чтобы собрать и запустить набор тестов:```bash
cd build
cmake ..
make
ctest --output-on-failure
Модуль включает всестороннее покрытие фаззингом с использованием libFuzzer. См. fuzzing-results/results.md для получения полных результатов кампании фаззинга, включая:
Модуль включает валидационные тесты на Python для всех типов модуляции. См. fuzzing-results/results.md для результатов валидационных тестов. Все режимы цифрового голоса (FreeDV, M17, DMR, dPMR, NXDN) теперь имеют привязки Python и поддержку валидации. Блоки SOQPSK имеют привязки Python и доступны для использования; валидационные тесты запланированы на будущие выпуски.
mode_id gr-ident.Все блоки имеют определения блоков GRC (GNU Radio Companion) в каталоге grc/. Ключевые блоки:
Цифровые модуляции:
Аналоговые модуляции:
Цифровой голос:
Протоколы MMDVM:
gr-ident (опционально, libzmq):
FEC:
Полный список всех блоков см. в каталоге grc/.
Этот проект лицензирован по GNU General Public License v3.0 или более поздней версии (GPL-3.0-or-later).
Подробнее см. файл LICENSE в репозитории QRadioLink.
| Блок(и) | Происхождение | Примечания |
|---|
| 2FSK, 4FSK, GMSK, BPSK, QPSK, AM, SSB, NBFM, WBFM, FreeDV, M17, DMR | QRadioLink | Проверено на соответствие QRadioLink src/gr/ (gr_demod_, gr_mod_). |
| MMDVM источник/приёмник, demod_mmdvm_multi, demod_mmdvm_multi2, mod_mmdvm_multi2, RSSI, клиппер, стретчер, zero_idle_bursts, gr_4fsk_discriminator | QRadioLink | Проверено на соответствие QRadioLink src/gr/. |
| 8FSK | Реализовано для этого модуля | В QRadioLink нет gr_demod_8fsk/gr_mod_8fsk. Расширение дизайна на основе 4FSK. |
| SOQPSK | Реализовано для этого модуля | В QRadioLink нет gr_demod_soqpsk/gr_mod_soqpsk. Из литературы/спецификаций SOQPSK. |
| CPM-4FSK | Реализовано для этого модуля | В QRadioLink нет gr_mod_cpm_4fsk. |
| dPMR | Реализовано для этого модуля | В QRadioLink нет gr_*. Из ETSI TS 102 658 (тестовые векторы и комментарии в коде). |
| NXDN | Реализовано для этого модуля | В QRadioLink нет gr_*. Из спецификаций форума NXDN; отображение символов ссылается на соглашение MMDVM. |
| POCSAG | Реализовано для этого модуля | В QRadioLink нет gr_*. Из POCSAG/ITU-R M.584-2; протокол совместим с MMDVMHost. |
| D-STAR | Реализовано для этого модуля | В QRadioLink нет gr_*. Из спецификации D-STAR/JARL (Golay FEC); совместим с MMDVMHost. |
| YSF | Реализовано для этого модуля | В QRadioLink нет gr_*. Из документации протокола YSF; совместим с MMDVMHost. |
| P25 | Реализовано для этого модуля | В QRadioLink нет gr_*. Из P25 Phase 1 TIA-102; совместим с MMDVMHost. |
| DSSS (базовый) | QRadioLink | Проверено на соответствие QRadioLink gr_demod_dsss/gr_mod_dsss. |
| DSSS (улучшения), GDSS | Этот модуль | DSSS: улучшения поверх базового QRadioLink. GDSS: из Shakeel et al., Sensors 2023. |
| Маршрутизация ZMQ gr-ident | Этот модуль | Взаимодействие с gr-ident преамбула PUB; не из QRadioLink. |
mode_id на tcp://127.0.0.1:5560 и выбор соответствующего семейства блоков демода/мода (см. GRIDENT_ZMQ.md, CODE_MAP.md)
libzmq)demod_block / mod_block на порт сообщений route_out