
Modulo GNU Radio out-of-tree (OOT) per blocchi QRadioLink.
AVVISO IMPORTANTE: Questo è codice generato da intelligenza artificiale.
Questo codice non è stato revisionato da programmatori professionisti; si tratta di un compito complesso. Nel codice sono disponibili dei test; si prega di esaminarli insieme al loro codice.
Modulo GNU Radio out-of-tree (OOT) per i blocchi QRadioLink.
Branch main: OOT GNU Radio 3.10 (CMake find_package(gnuradio)). Il port sperimentale per
GNU Radio 4 si trova sul branch gnuradio4 (README_gr4.md su quel branch).
Navigazione del codice: docs/CODE_MAP.md (file, funzioni, indice dei blocchi). Routing modalità ZMQ di gr-ident: docs/GRIDENT_ZMQ.md (preambolo gr-ident su :5560).
L'IQ di riferimento per i blocchi modulatore è stato verificato con (31-05-2026). Riepilogo: — 6/19 blocchi superati, 13 soft fail, , 3 saltati.
Tutte le modalità testate sono state identificate nella famiglia di modulazione corretta (FSK, PSK, AM, FM). I soft fail a livello di ordine (ad esempio FSK previsto come CPFSK invece di 4FSK o GMSK) riflettono i limiti del classificatore di ordine del validatore, non prove che questi modulatori producano la famiglia di forme d'onda sbagliata.
La scansione utilizza l'IQ di riferimento integrato (non blocchi OOT compilati); i risultati si applicano alle modalità elencate in questo
README su main e sono rispecchiati su gnuradio4.
Risultati completi per singolo blocco: VALIDATION_REPORT.md
Questo progetto è documentato nel seguente preprint:
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
Data di archiviazione: 21 marzo 2026.
Questo modulo fornisce blocchi GNU Radio per vari schemi di modulazione digitale e analogica, specializzati per le comunicazioni radioamatoriali e la voce digitale.
Questo modulo è stato convertito dall'applicazione QRadioLink, che è un ricetrasmettitore SDR multimodo per GNU Radio, ADALM-Pluto, LimeSDR, USRP e altre apparecchiature SDR. Il codice sorgente originale si trova su https://codeberg.org/qradiolink/qradiolink.
Validazione: I blocchi convertiti che hanno una controparte in QRadioLink sono stati validati rispetto al codice QRadioLink originale (branch next, codeberg.org/qradiolink/qradiolink) in modo che i flowgraph, i parametri dei filtri, le costanti di scala e il comportamento dei blocchi corrispondano. I modulatori/demodulatori SSB e AM (inclusa la struttura CESSB e le costanti di clipper/stretcher) sono stati ripristinati per corrispondere all'originale dove si erano discostati. Alcuni blocchi in questo modulo non hanno una fonte corrispondente in src/gr/ di QRadioLink; la loro origine è indicata nella tabella seguente.
Crediti e origini:
next, src/gr/): modulazione/demodulazione (2FSK, 4FSK, GMSK, BPSK, QPSK, AM, SSB, NBFM, WBFM), voce digitale (FreeDV, M17, DMR) e blocchi di supporto (RSSI, M17 deframer, MMDVM source/sink, clipper, stretcher, zero_idle_bursts, gr_4fsk_discriminator, demod_mmdvm_multi, demod_mmdvm_multi2, mod_mmdvm_multi2). Il DSP e il comportamento delle modalità per questi blocchi sono stati derivati o reimplementati dall'applicazione QRadioLink.gr_* in QRadioLink src/gr/): 8FSK, SOQPSK, CPM-4FSK, dPMR, NXDN, POCSAG, D-STAR, YSF, P25. La loro origine è indicata nella tabella Origine dei blocchi di seguito.Origine dei blocchi (validazione / attribuzione):
| Blocco(i) | Origine | Note |
|---|---|---|
| 2FSK, 4FSK, GMSK, BPSK, QPSK, AM, SSB, NBFM, WBFM, FreeDV, M17, DMR | QRadioLink | Validato rispetto a QRadioLink src/gr/ (gr_demod_, gr_mod_). |
| MMDVM source/sink, demod_mmdvm_multi, demod_mmdvm_multi2, mod_mmdvm_multi2, RSSI, clipper, stretcher, zero_idle_bursts, gr_4fsk_discriminator | QRadioLink | Validato rispetto a QRadioLink src/gr/. |
| 8FSK | Implementato per questo modulo | Nessun gr_demod_8fsk/gr_mod_8fsk in QRadioLink. Estensione del design stile 4FSK. |
| SOQPSK | Implementato per questo modulo | Nessun gr_demod_soqpsk/gr_mod_soqpsk in QRadioLink. Dalla letteratura/specifiche SOQPSK. |
| CPM-4FSK | Implementato per questo modulo | Nessun gr_mod_cpm_4fsk in QRadioLink. |
| dPMR | Implementato per questo modulo | Nessun gr_* in QRadioLink. Da ETSI TS 102 658 (vettori di test e commenti del codice). |
| NXDN | Implementato per questo modulo | Nessun gr_* in QRadioLink. Dalle specifiche NXDN Forum; il mapping dei simboli fa riferimento alla convenzione MMDVM. |
| POCSAG | Implementato per questo modulo | Nessun gr_* in QRadioLink. Da POCSAG/ITU-R M.584-2; protocollo compatibile con MMDVMHost. |
| D-STAR | Implementato per questo modulo | Nessun gr_* in QRadioLink. Dalla specifica D-STAR/JARL (Golay FEC); compatibile con MMDVMHost. |
| YSF | Implementato per questo modulo | Nessun gr_* in QRadioLink. Dalla documentazione del protocollo YSF; compatibile con MMDVMHost. |
| P25 | Implementato per questo modulo | Nessun gr_* in QRadioLink. Da P25 Phase 1 TIA-102; compatibile con MMDVMHost. |
| DSSS (base) | QRadioLink | Validato rispetto a QRadioLink gr_demod_dsss/gr_mod_dsss. |
| DSSS (miglioramenti), GDSS | Questo modulo | DSSS: miglioramenti sopra la base QRadioLink. GDSS: da Shakeel et al., Sensors 2023. |
| Routing ZMQ gr-ident | Questo modulo | Interoperabilità con gr-ident preambolo PUB; non da QRadioLink. |
Il codice è stato sottoposto a fuzzing estensivo utilizzando libFuzzer con oltre 104 milioni di esecuzioni su più blocchi, e non sono stati scoperti crash o perdite di memoria. Vedi fuzzing-results/results.md per i dettagli sulla copertura.
mode_id decodificato su tcp://127.0.0.1:5560 e seleziona la famiglia di blocchi demod/mod corrispondente (vedi GRIDENT_ZMQ.md, CODE_MAP.md)
libzmq)demod_block / mod_block sulla porta messaggi route_outSOQPSK è uno schema di modulazione efficiente in banda che offre una migliore efficienza spettrale rispetto al QPSK standard. L'implementazione supporta due modalità operative:
Modalità 1: Singolo canale VHF/UHF
Modalità 2: Multi-portante VHF/UHF (resistente allo sbiadimento)
Segmenti di banda massima disponibili:
Efficienza SOQPSK: ~1,5 bps/Hz
Capacità per portante:
Specifiche della portante:
Tutti i blocchi sono disponibili tramite binding Python, inclusi:
I binding Python consentono l'uso nei flowgraph di GNU Radio Companion e negli script 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/
## Dipendenze
Vedi [DEPENDENCIES.md](https://github.com/supermagnum/gr-qradiolink/blob/main/DEPENDENCIES.md) per un elenco completo delle dipendenze richieste e opzionali.
**Riepilogo rapido:**
- Clona con `git clone --recursive` (o esegui `git submodule update --init --recursive` dopo la clonazione)
- GNU Radio >= 3.10 (con il componente vocoder compilato con supporto Codec2)
- CMake >= 3.16
- Librerie Boost
- Volk (Vector-Optimized Library of Kernels)
- ZeroMQ (opzionale, per i blocchi MMDVM e il SUB preambolo gr-ident)
- Python 3.x con NumPy (per i binding Python)
- Libreria fmt (per i test)
## Testing
Il modulo include test unitari completi per tutti i blocchi. I test vengono eseguiti utilizzando i framework CTest e Boost.Test.
### Risultati dei test
Tutti i test vengono superati con successo. Vedi [tests/results.md](https://github.com/supermagnum/gr-qradiolink/blob/main/tests/results.md) per i test unitari C++, il test harness Python e i risultati dei casi limite. Vedi [fuzzing-results/results.md](https://github.com/supermagnum/gr-qradiolink/blob/main/fuzzing-results/results.md) per i dettagli dei test di fuzzing e del protocollo MMDVM.
**Test unitari 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
Test del protocollo MMDVM (Python):``` 41 tests passed, 0 tests failed
Vedi [fuzzing-results/results.md](https://github.com/supermagnum/gr-qradiolink/blob/main/fuzzing-results/results.md) per i risultati completi dei test del protocollo MMDVM.
Una **simulazione BER DSSS** ([examples/dsss_ber_simulation.py](https://github.com/supermagnum/gr-qradiolink/blob/main/examples/dsss_ber_simulation.py)) esegue spreader -> AWGN -> despreader e traccia BER vs SNR per N=64, 128, 256, sovrapponendo la curva teorica 0.5*erfc(sqrt(N*Es/N0/2)); le curve coincidono entro il rumore di simulazione, confermando il corretto comportamento del DSSS.
### Esecuzione dei test
Per compilare ed eseguire la suite di test:```bash
cd build
cmake ..
make
ctest --output-on-failure
Il modulo include una copertura completa di fuzzing tramite libFuzzer. Vedi fuzzing-results/results.md per i risultati completi della campagna di fuzzing, inclusi:
Il modulo include test di validazione basati su Python per tutti i tipi di modulazione. Vedi fuzzing-results/results.md per i risultati dei test di validazione. Tutte le modalità voce digitale (FreeDV, M17, DMR, dPMR, NXDN) ora hanno binding Python e supporto per la validazione. I blocchi SOQPSK hanno binding Python e sono disponibili per l'uso; i test di validazione sono pianificati per rilasci futuri.
mode_id.Tutti i blocchi hanno definizioni di blocchi GRC (GNU Radio Companion) nella directory grc/. Blocchi chiave:
Modulazioni Digitali:
Modulazioni Analogiche:
Voce Digitale:
Protocolli MMDVM:
gr-ident (facoltativo, libzmq):
FEC:
Per l'elenco completo di tutti i blocchi, vedere la directory grc/.
Questo progetto è concesso in licenza secondo i termini della GNU General Public License v3.0 o successiva (GPL-3.0-or-later).
Fare riferimento al file LICENSE nel repository QRadioLink per i dettagli.