
Módulo fora da árvore (OOT) do GNU Radio para blocos do QRadioLink.
AVISO IMPORTANTE: Este código foi gerado por IA.
Este código não foi revisado por programadores profissionais, é uma tarefa grande. Existem testes disponíveis no código base, por favor revise-os e seu código.
Módulo GNU Radio fora da árvore (OOT) para blocos do QRadioLink.
Branch main: GNU Radio 3.10 OOT (CMake find_package(gnuradio)). A porta experimental
GNU Radio 4 está no branch gnuradio4 (README_gr4.md naquele branch).
Navegação pelo código: docs/CODE_MAP.md (arquivos, funções, índice de blocos). Roteamento de modo ZMQ do gr-ident: docs/GRIDENT_ZMQ.md (preâmbulo do gr-ident em :5560).
O IQ de referência para blocos moduladores foi verificado com radio-modulation-validator (2026-05-31). Resumo: SOFT FAIL — 6/19 blocos passaram, 13 soft fail, 0 hard fail, 3 ignorados.
Todos os modos testados foram identificados na família de modulação correta (FSK, PSK, AM, FM). Os soft fails de nível de ordem (por exemplo, FSK previsto como CPFSK em vez de 4FSK ou GMSK) refletem limites do classificador de ordem do validador, não evidência de que esses moduladores produzam a família de forma de onda errada.
A varredura usa IQ de referência integrado (não blocos OOT compilados); os resultados se aplicam aos modos listados neste
README no main e são espelhados no gnuradio4.
Resultados completos por bloco: VALIDATION_REPORT.md
Este projeto está documentado no seguinte preprint:
Espectro Disperso de Distribuição Gaussiana Chaveado Criptograficamente para Comunicações Encobertas Aprimoradas: Projeto, Implementação e Desempenho Simulado em Modelos de Canal da UIT IACR Cryptology ePrint Archive, Paper 2025/108456 https://eprint.iacr.org/2025/108456
Registro de arquivo com timestamp: 21 de março de 2026.
Este módulo fornece blocos GNU Radio para vários esquemas de modulação digital e analógica, especializados para rádio amador e comunicações de voz digital.
Este módulo foi convertido do aplicativo QRadioLink, que é um transceptor SDR multimodo para GNU Radio, ADALM-Pluto, LimeSDR, USRP e outros hardware SDR. O código fonte original está localizado em https://codeberg.org/qradiolink/qradiolink.
Validação: Blocos convertidos que possuem contraparte no QRadioLink foram validados contra o código fonte original do QRadioLink (branch next, codeberg.org/qradiolink/qradiolink) para que fluxogramas, parâmetros de filtro, constantes de escala e comportamento dos blocos coincidam. As cadeias de modulador/demodulador SSB e AM (incluindo estrutura CESSB e constantes de clipper/stretcher) foram restauradas para corresponder ao original onde haviam divergido. Alguns blocos neste módulo não possuem fonte correspondente em src/gr/ do QRadioLink; sua origem é indicada na tabela abaixo.
Crédito e origem:
next, src/gr/): modulação/demodulação (2FSK, 4FSK, GMSK, BPSK, QPSK, AM, SSB, NBFM, WBFM), voz digital (FreeDV, M17, DMR) e blocos de suporte (RSSI, M17 deframer, MMDVM source/sink, clipper, stretcher, zero_idle_bursts, gr_4fsk_discriminator, demod_mmdvm_multi, demod_mmdvm_multi2, mod_mmdvm_multi2). O DSP e o comportamento de modo para esses blocos foram derivados ou reimplementados do aplicativo QRadioLink.gr_* no src/gr/ do QRadioLink): 8FSK, SOQPSK, CPM-4FSK, dPMR, NXDN, POCSAG, D-STAR, YSF, P25. Sua origem é fornecida na tabela de origem dos blocos abaixo.Origem dos blocos (validação/atribuição):
O código foi submetido a fuzzing extensivo usando libFuzzer com mais de 104 milhões de execuções em vários blocos, e nenhuma falha ou vazamento de memória foi descoberto. Consulte fuzzing-results/results.md para detalhes de cobertura.
SOQPSK é um esquema de modulação eficiente em largura de banda que proporciona eficiência espectral melhorada em comparação com o QPSK padrão. A implementação suporta dois modos operacionais:
Modo 1: Canal Único VHF/UHF
Modo 2: Multiportadora VHF/UHF (resistente a desvanecimento)
Segmentos de largura de banda máxima disponíveis:
Eficiência SOQPSK: ~1,5 bps/Hz
Capacidade por Portadora:
Especificações da portadora:
Todos os blocos estão disponíveis através de ligações Python, incluindo:
As ligações Python permitem uso em fluxogramas do GNU Radio Companion e 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/
## Dependências
Consulte [DEPENDENCIES.md](https://github.com/supermagnum/gr-qradiolink/blob/HEAD/DEPENDENCIES.md) para obter uma lista completa de dependências necessárias e opcionais.
**Resumo Rápido:**
- Clone com `git clone --recursive` (ou execute `git submodule update --init --recursive` após clonar)
- GNU Radio >= 3.10 (com componente vocoder construído com suporte a Codec2)
- CMake >= 3.16
- bibliotecas Boost
- Volk (Biblioteca de Kernels Otimizada por Vetores)
- ZeroMQ (opcional, para blocos MMDVM e gr-ident preamble SUB)
- Python 3.x com NumPy (para ligações Python)
- biblioteca fmt (para testes)
## Testes
O módulo inclui testes unitários abrangentes para todos os blocos. Os testes são executados usando CTest e o framework Boost.Test.
### Resultados dos Testes
Todos os testes passam com sucesso. Consulte [tests/results.md](https://github.com/supermagnum/gr-qradiolink/blob/HEAD/tests/results.md) para testes unitários C++, test harness Python e resultados de casos extremos. Consulte [fuzzing-results/results.md](https://github.com/supermagnum/gr-qradiolink/blob/HEAD/fuzzing-results/results.md) para detalhes de testes de fuzzing e protocolo MMDVM.
**Testes Unitários 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
Testes 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 obter resultados completos dos testes de protocolo MMDVM.
Uma simulação **DSSS BER** ([examples/dsss_ber_simulation.py](https://github.com/supermagnum/gr-qradiolink/blob/HEAD/examples/dsss_ber_simulation.py)) executa spreader -> AWGN -> despreader e plota BER vs SNR para N=64, 128, 256, sobrepondo a curva teórica 0.5*erfc(sqrt(N*Es/N0/2)); as curvas coincidem dentro do ruído de simulação, confirmando o comportamento correto do DSSS.
### Executando Testes
Para construir e executar o conjunto de testes:```bash
cd build
cmake ..
make
ctest --output-on-failure
O módulo inclui cobertura abrangente de fuzzing usando libFuzzer. Consulte fuzzing-results/results.md para obter resultados completos da campanha de fuzzing, incluindo:
O módulo inclui testes de validação baseados em Python para todos os tipos de modulação. Consulte fuzzing-results/results.md para os resultados dos testes de validação. Todos os modos de voz digital (FreeDV, M17, DMR, dPMR, NXDN) agora possuem bindings Python e suporte a validação. Os blocos SOQPSK possuem bindings Python e estão disponíveis para uso; testes de validação estão planejados para lançamentos futuros.
mode_id do gr-ident.Todos os blocos possuem definições de blocos GRC (GNU Radio Companion) no diretório grc/. Blocos principais:
Modulações Digitais:
Modulações Analógicas:
Voz Digital:
Protocolos MMDVM:
gr-ident (opcional, libzmq):
FEC:
Para lista completa de todos os blocos, consulte o diretório grc/.
Este projeto está licenciado sob a GNU General Public License v3.0 ou posterior (GPL-3.0-or-later).
Consulte o arquivo LICENSE no repositório QRadioLink para detalhes.
| Bloco(s) | Origem | Notas |
|---|
| 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 | Nenhum gr_demod_8fsk/gr_mod_8fsk no QRadioLink. Extensão do design estilo 4FSK. |
| SOQPSK | Implementado para este módulo | Nenhum gr_demod_soqpsk/gr_mod_soqpsk no QRadioLink. Da literatura/especificações SOQPSK. |
| CPM-4FSK | Implementado para este módulo | Nenhum gr_mod_cpm_4fsk no QRadioLink. |
| dPMR | Implementado para este módulo | Nenhum gr_* no QRadioLink. Do ETSI TS 102 658 (vetores de teste e comentários de código). |
| NXDN | Implementado para este módulo | Nenhum gr_* no QRadioLink. Das especificações do Fórum NXDN; mapeamento de símbolos referência a convenção MMDVM. |
| POCSAG | Implementado para este módulo | Nenhum gr_* no QRadioLink. Do POCSAG/ITU-R M.584-2; protocolo compatível com MMDVMHost. |
| D-STAR | Implementado para este módulo | Nenhum gr_* no QRadioLink. Da especificação D-STAR/JARL (Golay FEC); compatível com MMDVMHost. |
| YSF | Implementado para este módulo | Nenhum gr_* no QRadioLink. Da documentação do protocolo YSF; compatível com MMDVMHost. |
| P25 | Implementado para este módulo | Nenhum gr_* no QRadioLink. Do P25 Phase 1 TIA-102; compatível com MMDVMHost. |
| DSSS (base) | QRadioLink | Validado contra QRadioLink gr_demod_dsss/gr_mod_dsss. |
| DSSS (aprimoramentos), GDSS | Este módulo | DSSS: aprimoramentos sobre a base do QRadioLink. GDSS: de Shakeel et al., Sensors 2023. |
| Roteamento ZMQ gr-ident | Este módulo | Interoperabilidade com preâmbulo PUB do gr-ident; não do QRadioLink. |
mode_id decodificado em tcp://127.0.0.1:5560 e selecione a família de bloco demod/mod correspondente (veja GRIDENT_ZMQ.md, CODE_MAP.md)
libzmq)demod_block / mod_block na porta de mensagem route_out