
Módulo out-of-tree (OOT) de GNU Radio para bloques de QRadioLink.
AVISO IMPORTANTE: Este código es generado por IA.
Este código no ha sido revisado por programadores profesionales, es una tarea grande. Hay pruebas disponibles en el repositorio de código, revise esas pruebas y su código.
Módulo fuera del árbol (OOT) de GNU Radio para bloques de QRadioLink.
Rama main: OOT de GNU Radio 3.10 (CMake find_package(gnuradio)). El puerto experimental
de GNU Radio 4 está en la rama gnuradio4 (README_gr4.md en esa rama).
Navegación del código: docs/CODE_MAP.md (archivos, funciones, índice de bloques). Enrutamiento de modo ZMQ gr-ident: docs/GRIDENT_ZMQ.md (preámbulo de gr-ident en :5560).
El IQ de referencia para los bloques moduladores se verificó con radio-modulation-validator (2026-05-31). Resumen: FALLO SUAVE — 6/19 bloques pasaron, 13 fallo suave, 0 fallo grave, 3 omitidos.
Todos los modos probados fueron identificados en la familia de modulación correcta (FSK, PSK, AM, FM). Los fallos suaves a nivel de orden (por ejemplo, FSK predicho como CPFSK en lugar de 4FSK o GMSK) reflejan limitaciones del clasificador de orden del validador, no evidencia de que estos moduladores produzcan la familia de forma de onda incorrecta.
El escaneo utiliza IQ de referencia incorporado (no bloques OOT construidos); los resultados se aplican a los modos listados en este README en main y se reflejan en gnuradio4.
Resultados completos por bloque: VALIDATION_REPORT.md
Este proyecto está documentado en el siguiente 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
Marca de tiempo del registro del archivo: 21 de marzo de 2026.
Este módulo proporciona bloques de GNU Radio para varios esquemas de modulación digital y analógica, especializados para radioaficionados y comunicaciones de voz digital.
Este módulo fue convertido desde la aplicación QRadioLink, que es un transceptor SDR multimodo para GNU Radio, ADALM-Pluto, LimeSDR, USRP y otro hardware SDR. El código fuente original se encuentra en https://codeberg.org/qradiolink/qradiolink.
Validación: Los bloques convertidos que tienen una contraparte en QRadioLink han sido validados contra el código fuente original de QRadioLink (rama next, codeberg.org/qradiolink/qradiolink) para que los grafos de flujo, parámetros de filtro, constantes de escalado y comportamiento de los bloques coincidan. Las cadenas de modulador/demodulador SSB y AM (incluyendo la estructura CESSB y las constantes de clipper/stretcher) fueron restauradas para coincidir con las originales donde habían divergido. Algunos bloques en este módulo no tienen una fuente correspondiente en src/gr/ de QRadioLink; su origen se indica en la tabla a continuación.
Crédito y origen:
next, src/gr/): modulación/demodulación (2FSK, 4FSK, GMSK, BPSK, QPSK, AM, SSB, NBFM, WBFM), voz digital (FreeDV, M17, DMR) y bloques de soporte (RSSI, M17 deframer, MMDVM source/sink, clipper, stretcher, zero_idle_bursts, gr_4fsk_discriminator, demod_mmdvm_multi, demod_mmdvm_multi2, mod_mmdvm_multi2). El comportamiento de DSP y modo para estos bloques se derivaron o reimplementaron de la aplicación QRadioLink.gr_* en src/gr/ de QRadioLink): 8FSK, SOQPSK, CPM-4FSK, dPMR, NXDN, POCSAG, D-STAR, YSF, P25. Su origen se da en la tabla de origen de bloques a continuación.Origen de bloques (validación / atribución):
El código ha sido fuzzeado extensamente usando libFuzzer con más de 104 millones de ejecuciones en múltiples bloques, y no se descubrieron fallos ni fugas de memoria. Consulte fuzzing-results/results.md para detalles de cobertura.
SOQPSK es un esquema de modulación eficiente en ancho de banda que proporciona una eficiencia espectral mejorada en comparación con QPSK estándar. La implementación soporta dos modos operativos:
Modo 1: Canal único VHF/UHF
Modo 2: Multiportadora VHF/UHF (resistente al desvanecimiento)
Segmentos de ancho de banda máximo disponibles:
Eficiencia SOQPSK: ~1.5 bps/Hz
Capacidad por portadora:
Especificaciones de portadora:
Todos los bloques están disponibles a través de enlaces Python, incluyendo:
Los enlaces Python permiten su uso en grafos de flujo de GNU Radio Companion y 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/
## Dependencias
Consulte [DEPENDENCIES.md](https://github.com/supermagnum/gr-qradiolink/blob/HEAD/DEPENDENCIES.md) para una lista completa de dependencias requeridas y opcionales.
**Resumen rápido:**
- Clone con `git clone --recursive` (o ejecute `git submodule update --init --recursive` después de clonar)
- GNU Radio >= 3.10 (con el componente vocoder construido con soporte Codec2)
- CMake >= 3.16
- Librerías Boost
- Volk (librería de kernels optimizada para vectores)
- ZeroMQ (opcional, para bloques MMDVM y preámbulo SUB de gr-ident)
- Python 3.x con NumPy (para enlaces Python)
- Librería fmt (para pruebas)
## Pruebas
El módulo incluye pruebas unitarias exhaustivas para todos los bloques. Las pruebas se ejecutan usando CTest y el framework Boost.Test.
### Resultados de pruebas
Todas las pruebas pasan exitosamente. Consulte [tests/results.md](https://github.com/supermagnum/gr-qradiolink/blob/HEAD/tests/results.md) para pruebas unitarias de C++, el harness de pruebas Python y resultados de casos extremos. Consulte [fuzzing-results/results.md](https://github.com/supermagnum/gr-qradiolink/blob/HEAD/fuzzing-results/results.md) para detalles sobre fuzzing y pruebas del protocolo MMDVM.
**Pruebas unitarias 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
Pruebas de Protocolo MMDVM (Python):``` 41 tests passed, 0 tests failed
Consulte [fuzzing-results/results.md](https://github.com/supermagnum/gr-qradiolink/blob/HEAD/fuzzing-results/results.md) para obtener los resultados completos de las pruebas del protocolo MMDVM.
Una **simulación de BER DSSS** ([examples/dsss_ber_simulation.py](https://github.com/supermagnum/gr-qradiolink/blob/HEAD/examples/dsss_ber_simulation.py)) ejecuta un propagador -> AWGN -> despropagador y representa gráficamente la BER frente a la SNR para N=64, 128, 256, superponiendo la curva teórica 0.5*erfc(sqrt(N*Es/N0/2)); las curvas coinciden dentro del ruido de simulación, lo que confirma el comportamiento correcto del DSSS.
### Ejecutar las pruebas
Para compilar y ejecutar el conjunto de pruebas:```bash
cd build
cmake ..
make
ctest --output-on-failure
El módulo incluye una cobertura exhaustiva de fuzzing utilizando libFuzzer. Consulte fuzzing-results/results.md para conocer los resultados completos de la campaña de fuzzing, que incluyen:
El módulo incluye pruebas de validación basadas en Python para todos los tipos de modulación. Consulte fuzzing-results/results.md para ver los resultados de las pruebas de validación. Todos los modos de voz digital (FreeDV, M17, DMR, dPMR, NXDN) ahora disponen de enlaces Python y soporte de validación. Los bloques SOQPSK tienen enlaces Python y están disponibles para su uso; las pruebas de validación están planificadas para futuras versiones.
mode_id de gr-ident.Todos los bloques tienen definiciones de bloque GRC (GNU Radio Companion) en el directorio grc/. Bloques clave:
Modulaciones digitales:
Modulaciones analógicas:
Voz digital:
Protocolos MMDVM:
gr-ident (opcional, libzmq):
FEC:
Para obtener la lista completa de todos los bloques, consulte el directorio grc/.
Este proyecto está licenciado bajo la Licencia Pública General de GNU v3.0 o posterior (GPL-3.0-or-later).
Consulte el archivo LICENSE en el repositorio de QRadioLink para obtener más detalles.
| Block(s) | Origin | Notes |
|---|
| 2FSK, 4FSK, GMSK, BPSK, QPSK, AM, SSB, NBFM, WBFM, FreeDV, M17, DMR | QRadioLink | Validado contra 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 | Validado contra QRadioLink src/gr/. |
| 8FSK | Implementado para este módulo | No hay gr_demod_8fsk/gr_mod_8fsk en QRadioLink. Extensión del diseño estilo 4FSK. |
| SOQPSK | Implementado para este módulo | No hay gr_demod_soqpsk/gr_mod_soqpsk en QRadioLink. De literatura/especificaciones SOQPSK. |
| CPM-4FSK | Implementado para este módulo | No hay gr_mod_cpm_4fsk en QRadioLink. |
| dPMR | Implementado para este módulo | No hay gr_* en QRadioLink. De ETSI TS 102 658 (vectores de prueba y comentarios de código). |
| NXDN | Implementado para este módulo | No hay gr_* en QRadioLink. De especificaciones del foro NXDN; el mapeo de símbolos referencia la convención MMDVM. |
| POCSAG | Implementado para este módulo | No hay gr_* en QRadioLink. De POCSAG/ITU-R M.584-2; protocolo compatible con MMDVMHost. |
| D-STAR | Implementado para este módulo | No hay gr_* en QRadioLink. De especificación D-STAR/JARL (FEC Golay); compatible con MMDVMHost. |
| YSF | Implementado para este módulo | No hay gr_* en QRadioLink. De documentación del protocolo YSF; compatible con MMDVMHost. |
| P25 | Implementado para este módulo | No hay gr_* en QRadioLink. De P25 Fase 1 TIA-102; compatible con MMDVMHost. |
| DSSS (base) | QRadioLink | Validado contra QRadioLink gr_demod_dsss/gr_mod_dsss. |
| DSSS (mejoras), GDSS | Este módulo | DSSS: mejoras sobre la base de QRadioLink. GDSS: de Shakeel et al., Sensors 2023. |
| Enrutamiento ZMQ gr-ident | Este módulo | Interoperabilidad con PUB de preámbulo de gr-ident; no proviene de QRadioLink. |
mode_id decodificado en tcp://127.0.0.1:5560 y seleccione la familia de bloques demod/mod coincidente (ver GRIDENT_ZMQ.md, CODE_MAP.md)
libzmq)demod_block / mod_block en el puerto de mensajes route_out