
GNU Radio out-of-tree (OOT) Modul für QRadioLink Blöcke.
WICHTIGER HINWEIS: Dies ist KI-generierter Code.
Dieser Code wurde nicht von professionellen Programmierern überprüft, es ist eine große Aufgabe. Es sind Tests im Codebase verfügbar, bitte überprüfen Sie diese und ihren Code.
GNU Radio Out-of-Tree (OOT)-Modul für QRadioLink-Blöcke.
Branch main: GNU Radio 3.10 OOT (CMake find_package(gnuradio)). Der experimentelle GNU Radio 4-Port befindet sich im Branch gnuradio4 (README_gr4.md auf diesem Branch).
Code-Navigation: docs/CODE_MAP.md (Dateien, Funktionen, Blockindex). gr-ident ZMQ-Modus-Routing: docs/GRIDENT_ZMQ.md (gr-ident Präambel auf :5560).
Referenz-IQ für Modulatorblöcke wurde mit radio-modulation-validator (2026-05-31) überprüft. Zusammenfassung: SOFT FAIL — 6/19 Blöcke bestanden, 13 Soft Fail, 0 Hard Fail, 3 übersprungen.
Alle getesteten Modi wurden der korrekten Modulationsfamilie (FSK, PSK, AM, FM) zugeordnet. Softwarefehler auf Ordnungsebene (z.B. FSK als CPFSK statt 4FSK oder GMSK vorhergesagt) spiegeln die Grenzen des Ordnungsklassifikators des Validators wider, nicht den Nachweis, dass diese Modulatoren die falsche Wellenformfamilie erzeugen.
Der Scan verwendet integriertes Referenz-IQ (nicht eingebaute OOT-Blöcke); die Ergebnisse gelten für die in diesem README auf main aufgeführten Modi und werden auf gnuradio4 gespiegelt.
Vollständige Ergebnisse pro Block: VALIDATION_REPORT.md
Dieses Projekt ist in folgendem Preprint dokumentiert:
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
Archivierungszeitstempel: 21. März 2026.
Dieses Modul bietet GNU-Radio-Blöcke für verschiedene digitale und analoge Modulationsverfahren, spezialisiert auf Amateurfunk und digitale Sprachkommunikation.
Dieses Modul wurde aus der QRadioLink-Anwendung konvertiert, einem Multimode-SDR-Transceiver für GNU Radio, ADALM-Pluto, LimeSDR, USRP und andere SDR-Hardware. Der ursprüngliche Quellcode befindet sich unter https://codeberg.org/qradiolink/qradiolink.
Validierung: Konvertierte Blöcke, die ein Gegenstück in QRadioLink haben, wurden gegen die ursprüngliche QRadioLink-Quelle (Branch next, codeberg.org/qradiolink/qradiolink) validiert, sodass Flowgraphs, Filterparameter, Skalierungskonstanten und Blockverhalten übereinstimmen. SSB- und AM-Modulator-/Demodulator-Ketten (einschließlich CESSB-Struktur und Clipper-/Stretcher-Konstanten) wurden wiederhergestellt, um dem Original zu entsprechen, wo sie abgewichen waren. Einige Blöcke in diesem Modul haben keine entsprechende Quelle in QRadioLinks src/gr/; ihr Ursprung ist in der folgenden Tabelle angegeben.
Quellenangabe und Ursprung:
next, src/gr/): Modulation/Demodulation (2FSK, 4FSK, GMSK, BPSK, QPSK, AM, SSB, NBFM, WBFM), digitale Sprachübertragung (FreeDV, M17, DMR) und unterstützende Blöcke (RSSI, M17-Deframer, MMDVM-Source/Sink, Clipper, Stretcher, zero_idle_bursts, gr_4fsk_discriminator, demod_mmdvm_multi, demod_mmdvm_multi2, mod_mmdvm_multi2). Das DSP- und Modusverhalten dieser Blöcke wurden von der QRadioLink-Anwendung abgeleitet oder daraus neu implementiert.gr_*-Quelle in QRadioLink src/gr/): 8FSK, SOQPSK, CPM-4FSK, dPMR, NXDN, POCSAG, D-STAR, YSF, P25. Ihr Ursprung ist in der folgenden Tabelle zum Blockursprung angegeben.Blockursprung (Validierung / Zuordnung):
Der Code wurde mit libFuzzer umfassend getestet, mit über 104 Millionen Ausführungen über mehrere Blöcke hinweg, und es wurden keine Abstürze oder Speicherlecks festgestellt. Siehe fuzzing-results/results.md für Details zur Abdeckung.
SOQPSK ist ein bandwidth-effizientes Modulationsverfahren, das eine verbesserte spektrale Effizienz im Vergleich zu Standard-QPSK bietet. Die Implementierung unterstützt zwei Betriebsmodi:
Modus 1: VHF/UHF-Einzelkanal
Modus 2: VHF/UHF-Mehrträger (fading-resistent)
Maximal verfügbare Bandbreitensegmente:
SOQPSK-Effizienz: ~1,5 bps/Hz
Kapazität pro Träger:
Trägerspezifikationen:
Alle Blöcke sind über Python-Bindungen verfügbar, darunter:
Die Python-Bindungen ermöglichen die Verwendung in GNU-Radio-Companion-Flussdiagrammen und Python-Skripten.
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/
## Abhängigkeiten
Siehe [DEPENDENCIES.md](https://github.com/supermagnum/gr-qradiolink/blob/main/DEPENDENCIES.md) für eine vollständige Liste der erforderlichen und optionalen Abhängigkeiten.
**Kurzzusammenfassung:**
- Klonen mit `git clone --recursive` (oder `git submodule update --init --recursive` nach dem Klonen ausführen)
- GNU Radio >= 3.10 (mit Vocoder-Komponente, die mit Codec2-Unterstützung erstellt wurde)
- CMake >= 3.16
- Boost-Bibliotheken
- Volk (Vektoroptimierte Bibliothek von Kernen)
- ZeroMQ (optional, für MMDVM-Blöcke und gr-ident preamble SUB)
- Python 3.x mit NumPy (für Python-Bindungen)
- fmt-Bibliothek (für Tests)
## Testen
Das Modul enthält umfassende Unit-Tests für alle Blöcke. Die Tests werden mit dem CTest- und Boost.Test-Framework ausgeführt.
### Testergebnisse
Alle Tests bestehen erfolgreich. Siehe [tests/results.md](https://github.com/supermagnum/gr-qradiolink/blob/main/tests/results.md) für C++-Unit-Tests, Python-Test-Harness und Ergebnisse von Randfällen. Siehe [fuzzing-results/results.md](https://github.com/supermagnum/gr-qradiolink/blob/main/fuzzing-results/results.md) für Details zu Fuzzing- und MMDVM-Protokolltests.
**C++ Unit-Tests:**```
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 Protokoll-Tests (Python):``` 41 tests passed, 0 tests failed
Siehe [fuzzing-results/results.md](https://github.com/supermagnum/gr-qradiolink/blob/main/fuzzing-results/results.md) für vollständige MMDVM-Protokolltestergebnisse.
Eine **DSSS-BER-Simulation** ([examples/dsss_ber_simulation.py](https://github.com/supermagnum/gr-qradiolink/blob/main/examples/dsss_ber_simulation.py)) führt Spreizer -> AWGN -> Entspreizer aus und zeichnet BER vs SNR für N=64, 128, 256, wobei die theoretische Kurve 0.5*erfc(sqrt(N*Es/N0/2)) überlagert wird; die Kurven stimmen innerhalb des Simulationsrauschens überein, was das korrekte DSSS-Verhalten bestätigt.
### Tests ausführen
Um die Testsuite zu erstellen und auszuführen:```bash
cd build
cmake ..
make
ctest --output-on-failure
Das Modul bietet eine umfassende Fuzzing-Abdeckung mit libFuzzer. Siehe fuzzing-results/results.md für die vollständigen Ergebnisse der Fuzzing-Kampagne, einschließlich:
Das Modul enthält Python-basierte Validierungstests für alle Modulationsarten. Siehe fuzzing-results/results.md für die Ergebnisse der Validierungstests. Alle digitalen Sprachmodi (FreeDV, M17, DMR, dPMR, NXDN) haben jetzt Python-Bindungen und Validierungsunterstützung. SOQPSK-Blöcke haben Python-Bindungen und sind zur Verwendung verfügbar; Validierungstests sind für zukünftige Versionen geplant.
mode_id.Alle Blöcke haben GRC (GNU Radio Companion)-Blockdefinitionen im grc/-Verzeichnis. Wichtige Blöcke:
Digitale Modulationen:
Analoge Modulationen:
Digitale Sprachübertragung:
MMDVM-Protokolle:
gr-ident (optional, libzmq):
FEC:
Für eine vollständige Liste aller Blöcke siehe das grc/-Verzeichnis.
Dieses Projekt ist unter der GNU General Public License v3.0 oder später (GPL-3.0-or-later) lizenziert.
Siehe die Datei LICENSE im QRadioLink-Repository für Details.
| Block(s) | Ursprung | Anmerkungen |
|---|
| 2FSK, 4FSK, GMSK, BPSK, QPSK, AM, SSB, NBFM, WBFM, FreeDV, M17, DMR | QRadioLink | Valid gegen 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 | Valid gegen QRadioLink src/gr/. |
| 8FSK | Für dieses Modul implementiert | Kein gr_demod_8fsk/gr_mod_8fsk in QRadioLink. Erweiterung des 4FSK-Designs. |
| SOQPSK | Für dieses Modul implementiert | Kein gr_demod_soqpsk/gr_mod_soqpsk in QRadioLink. Aus SOQPSK-Literatur/-Spezifikationen. |
| CPM-4FSK | Für dieses Modul implementiert | Kein gr_mod_cpm_4fsk in QRadioLink. |
| dPMR | Für dieses Modul implementiert | Kein gr_* in QRadioLink. Aus ETSI TS 102 658 (Testvektoren und Codekommentare). |
| NXDN | Für dieses Modul implementiert | Kein gr_* in QRadioLink. Aus NXDN-Forum-Spezifikationen; Symbolmapping verweist auf MMDVM-Konvention. |
| POCSAG | Für dieses Modul implementiert | Kein gr_* in QRadioLink. Aus POCSAG/ITU-R M.584-2; Protokoll kompatibel mit MMDVMHost. |
| D-STAR | Für dieses Modul implementiert | Kein gr_* in QRadioLink. Aus D-STAR/JARL-Spezifikation (Golay-FEC); kompatibel mit MMDVMHost. |
| YSF | Für dieses Modul implementiert | Kein gr_* in QRadioLink. Aus YSF-Protokoll-Dokumentation; kompatibel mit MMDVMHost. |
| P25 | Für dieses Modul implementiert | Kein gr_* in QRadioLink. Aus P25 Phase 1 TIA-102; kompatibel mit MMDVMHost. |
| DSSS (Basis) | QRadioLink | Valid gegen QRadioLink gr_demod_dsss/gr_mod_dsss. |
| DSSS (Erweiterungen), GDSS | Dieses Modul | DSSS: Erweiterungen auf Basis von QRadioLink. GDSS: von Shakeel et al., Sensors 2023. |
| gr-ident ZMQ-Routing | Dieses Modul | Interop mit gr-ident Präambel PUB; nicht von QRadioLink. |
mode_id unter tcp://127.0.0.1:5560 und Auswahl der passenden Demod-/Mod-Blockfamilie (siehe GRIDENT_ZMQ.md, CODE_MAP.md)
libzmq)demod_block / mod_block auf message port route_out veröffentlichen