
Module GNU Radio out-of-tree (OOT) pour les blocs QRadioLink.
AVIS IMPORTANT: Ce code est généré par IA.
Ce code n'a pas été examiné par des codeurs professionnels, c'est une tâche importante. Des tests sont disponibles dans la base de code, veuillez les consulter ainsi que leur code.
Module GNU Radio out-of-tree (OOT) pour les blocs QRadioLink.
Branche main: GNU Radio 3.10 OOT (CMake find_package(gnuradio)). Le port expérimental GNU Radio 4 se trouve sur la branche gnuradio4 (README_gr4.md sur cette branche).
Navigation dans le code: docs/CODE_MAP.md (fichiers, fonctions, index des blocs). Routage de mode ZMQ gr-ident: docs/GRIDENT_ZMQ.md (préambule gr-ident sur :5560).
Les IQ de référence pour les blocs modulateurs ont été vérifiés avec radio-modulation-validator (2026-05-31). Résumé : ÉCHEC LÉGER — 6/19 blocs réussis, 13 échecs légers, 0 échec dur, 3 ignorés.
Tous les modes testés ont été identifiés dans la bonne famille de modulation (FSK, PSK, AM, FM). Les échecs légers au niveau de l'ordre (par exemple FSK prédit comme CPFSK au lieu de 4FSK ou GMSK) reflètent les limites du classificateur d'ordre du validateur, et non une preuve que ces modulateurs produisent la mauvaise famille de forme d'onde.
Le scan utilise des IQ de référence intégrés (pas de blocs OOT construits) ; les résultats s'appliquent aux modes listés dans ce README sur main et sont reflétés sur gnuradio4.
Résultats complets par bloc : VALIDATION_REPORT.md
Ce projet est documenté dans le préprint suivant :
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
Horodatage d'archivage : 21 mars 2026.
Ce module fournit des blocs GNU Radio pour divers schémas de modulation numérique et analogique, spécialisés pour la radio amateur et les communications vocales numériques.
Ce module a été converti à partir de l'application QRadioLink, qui est un émetteur-récepteur SDR multimode pour GNU Radio, ADALM-Pluto, LimeSDR, USRP et autres matériels SDR. Le code source original se trouve à https://codeberg.org/qradiolink/qradiolink.
Validation : Les blocs convertis qui ont un équivalent dans QRadioLink ont été validés par rapport à la source QRadioLink originale (branche next, codeberg.org/qradiolink/qradiolink) afin que les graphes de flux, les paramètres de filtre, les constantes d'échelle et le comportement des blocs correspondent. Les chaînes de modulateur/démodulateur SSB et AM (y compris la structure CESSB et les constantes de clipper/stretcher) ont été restaurées pour correspondre à l'original là où elles avaient divergé. Certains blocs de ce module n'ont pas de source correspondante dans src/gr/ de QRadioLink ; leur origine est indiquée dans le tableau ci-dessous.
Crédits et origine :
next, src/gr/) : modulation/démodulation (2FSK, 4FSK, GMSK, BPSK, QPSK, AM, SSB, NBFM, WBFM), voix numérique (FreeDV, M17, DMR), et blocs de support (RSSI, déframeur M17, source/puits MMDVM, clipper, stretcher, zero_idle_bursts, gr_4fsk_discriminator, demod_mmdvm_multi, demod_mmdvm_multi2, mod_mmdvm_multi2). Le DSP et le comportement de mode pour ces blocs ont été dérivés ou réimplémentés à partir de l'application QRadioLink.gr_* dans QRadioLink src/gr/) : 8FSK, SOQPSK, CPM-4FSK, dPMR, NXDN, POCSAG, D-STAR, YSF, P25. Leur origine est donnée dans le tableau d'origine des blocs ci-dessous.Origine des blocs (validation / attribution) :
Le code a été fuzzé de manière extensive avec libFuzzer avec plus de 104 millions d'exécutions à travers plusieurs blocs, et aucun crash ou fuite mémoire n'a été découvert. Voir fuzzing-results/results.md pour les détails de couverture.
SOQPSK est un schéma de modulation efficace en bande passante qui offre une efficacité spectrale améliorée par rapport au QPSK standard. L'implémentation supporte deux modes opérationnels :
Mode 1 : canal unique VHF/UHF
Mode 2 : multi-porteuse VHF/UHF (résistant à l'évanouissement)
Segments de bande passante maximale disponibles :
Efficacité SOQPSK : ~1,5 bps/Hz
Capacité par porteuse :
Spécifications de la porteuse :
Tous les blocs sont disponibles via les liaisons Python, y compris :
Les liaisons Python permettent une utilisation dans les graphes de flux GNU Radio Companion et les scripts 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/
## Dépendances
Voir [DEPENDENCIES.md](https://github.com/supermagnum/gr-qradiolink/blob/HEAD/DEPENDENCIES.md) pour une liste complète des dépendances requises et optionnelles.
**Résumé rapide:**
- Cloner avec `git clone --recursive` (ou exécuter `git submodule update --init --recursive` après le clonage)
- GNU Radio >= 3.10 (avec le composant vocoder construit avec le support Codec2)
- CMake >= 3.16
- Bibliothèques Boost
- Volk (Bibliothèque de noyaux optimisée vectorielle)
- ZeroMQ (optionnel, pour les blocs MMDVM et le préambule SUB gr-ident)
- Python 3.x avec NumPy (pour les liaisons Python)
- Bibliothèque fmt (pour les tests)
## Tests
Le module comprend des tests unitaires complets pour tous les blocs. Les tests sont exécutés à l'aide de CTest et du framework Boost.Test.
### Résultats des tests
Tous les tests réussissent. Voir [tests/results.md](https://github.com/supermagnum/gr-qradiolink/blob/HEAD/tests/results.md) pour les tests unitaires C++, le harnais de test Python et les résultats de cas limites. Voir [fuzzing-results/results.md](https://github.com/supermagnum/gr-qradiolink/blob/HEAD/fuzzing-results/results.md) pour les détails des tests de fuzzing et du protocole MMDVM.
**Tests unitaires 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
Tests du protocole MMDVM (Python) :``` 41 tests passed, 0 tests failed
Voir [fuzzing-results/results.md](https://github.com/supermagnum/gr-qradiolink/blob/HEAD/fuzzing-results/results.md) pour les résultats complets des tests du protocole MMDVM.
Une **simulation BER DSSS** ([examples/dsss_ber_simulation.py](https://github.com/supermagnum/gr-qradiolink/blob/HEAD/examples/dsss_ber_simulation.py)) exécute l'étaleur -> AWGN -> le désétaleur et trace le BER en fonction du SNR pour N=64, 128, 256, en superposant la courbe théorique 0.5*erfc(sqrt(N*Es/N0/2)) ; les courbes correspondent dans les limites du bruit de simulation, confirmant un comportement DSSS correct.
### Exécution des tests
Pour compiler et exécuter la suite de tests :```bash
cd build
cmake ..
make
ctest --output-on-failure
Le module inclut une couverture de fuzzing complète utilisant libFuzzer. Voir fuzzing-results/results.md pour les résultats complets de la campagne de fuzzing, incluant :
Le module inclut des tests de validation basés sur Python pour tous les types de modulation. Voir fuzzing-results/results.md pour les résultats des tests de validation. Tous les modes vocaux numériques (FreeDV, M17, DMR, dPMR, NXDN) disposent désormais de liaisons Python et d'un support de validation. Les blocs SOQPSK ont des liaisons Python et sont disponibles ; des tests de validation sont prévus pour les versions futures.
Tous les blocs ont des définitions de blocs GRC (GNU Radio Companion) dans le répertoire grc/. Blocs clés :
Modulations numériques :
Modulations analogiques :
Voix numérique :
Protocoles MMDVM :
gr-ident (optionnel, libzmq) :
FEC :
Pour la liste complète de tous les blocs, voir le répertoire grc/.
Ce projet est sous licence GNU General Public License v3.0 ou ultérieure (GPL-3.0-or-later).
Voir le fichier LICENSE dans le dépôt QRadioLink pour plus de détails.
| Bloc(s) | Origine | Notes |
|---|
| 2FSK, 4FSK, GMSK, BPSK, QPSK, AM, SSB, NBFM, WBFM, FreeDV, M17, DMR | QRadioLink | Validé par rapport à QRadioLink src/gr/ (gr_demod_, gr_mod_). |
| source/puits MMDVM, demod_mmdvm_multi, demod_mmdvm_multi2, mod_mmdvm_multi2, RSSI, clipper, stretcher, zero_idle_bursts, gr_4fsk_discriminator | QRadioLink | Validé par rapport à QRadioLink src/gr/. |
| 8FSK | Implémenté pour ce module | Pas de gr_demod_8fsk/gr_mod_8fsk dans QRadioLink. Extension de la conception de type 4FSK. |
| SOQPSK | Implémenté pour ce module | Pas de gr_demod_soqpsk/gr_mod_soqpsk dans QRadioLink. Issu de la littérature/spécifications SOQPSK. |
| CPM-4FSK | Implémenté pour ce module | Pas de gr_mod_cpm_4fsk dans QRadioLink. |
| dPMR | Implémenté pour ce module | Pas de gr_* dans QRadioLink. Issu de l'ETSI TS 102 658 (vecteurs de test et commentaires de code). |
| NXDN | Implémenté pour ce module | Pas de gr_* dans QRadioLink. Issu des spécifications du forum NXDN ; le mapping de symboles fait référence à la convention MMDVM. |
| POCSAG | Implémenté pour ce module | Pas de gr_* dans QRadioLink. Issu de POCSAG/ITU-R M.584-2 ; protocole compatible avec MMDVMHost. |
| D-STAR | Implémenté pour ce module | Pas de gr_* dans QRadioLink. Issu de la spécification D-STAR/JARL (FEC Golay) ; compatible avec MMDVMHost. |
| YSF | Implémenté pour ce module | Pas de gr_* dans QRadioLink. Issu de la documentation du protocole YSF ; compatible avec MMDVMHost. |
| P25 | Implémenté pour ce module | Pas de gr_* dans QRadioLink. Issu de P25 Phase 1 TIA-102 ; compatible avec MMDVMHost. |
| DSSS (base) | QRadioLink | Validé par rapport à QRadioLink gr_demod_dsss/gr_mod_dsss. |
| DSSS (améliorations), GDSS | Ce module | DSSS : améliorations par rapport à la base QRadioLink. GDSS : d'après Shakeel et al., Sensors 2023. |
| Routage ZMQ gr-ident | Ce module | Interop avec le préambule PUB de gr-ident ; non issu de QRadioLink. |
mode_id décodé sur tcp://127.0.0.1:5560 et sélectionner la famille de blocs démod/mod correspondante (voir GRIDENT_ZMQ.md, CODE_MAP.md)
libzmq)demod_block / mod_block sur le port de message route_out