Hi GNU Radio community,
I've been developing gr-sleipnir, an open-source digital voice protocol for amateur radio using GNU Radio 3.10. I'm sharing current test results and would appreciate feedback on the implementation approach.
Project Overview: gr-sleipnir implements 4FSK/8FSK modulation with Opus voice codec (6-8 kbps), LDPC error correction (rates 2/3 and 3/4), and optional ChaCha20-Poly1305 encryption with ECDSA authentication. The protocol supports text messaging and multi-recipient encryption.
Test Methodology:
- Platform: GNU Radio 3.10 simulation environment
- Test coverage: 8,560 scenarios across SNR range (-2 to +20 dB), multiple channel conditions (AWGN, Rayleigh/Rician fading, frequency offset ±100/500/1000 Hz)
- Performance metrics: FER, BER, WarpQ audio quality scores
- All tests automated using Python test framework
Key Simulation Results:
- Operational SNR (FER < 5%): 4FSK at -1 dB, 8FSK at 0 dB
- FER floor: 4-6% at high SNR (hard-decision LDPC decoder limitation)
- Crypto overhead: <1 dB for ChaCha20-Poly1305 + ECDSA
- Frequency offset tolerance: ±500 Hz acceptable, ±1 kHz causes significant degradation
- Fading: Minimal performance degradation in simulated Rayleigh/Rician channels
Technical Implementation:
- Out-of-tree module structure with hierarchical blocks
- Custom LDPC decoder (hard-decision, alist matrix format)
- Integration with gr-opus for voice encoding/decoding
- Frame structure: 40ms Opus frames with LDPC protection
- All cryptographic operations using standard Linux kernel crypto API
Known Limitations:
- Hard-decision LDPC decoder creates 4-6% FER floor (soft-decision implementation would improve this)
- Frequency offset >±1 kHz requires compensation (AFC not yet implemented)
- Results are from simulation; real-world hardware validation planned for Q1 2025
Questions for the Community:
- Channel modeling: Are the GNU Radio fading channel models (Rayleigh/Rician) representative of real-world mobile conditions, or should I expect different results on-air?
- LDPC implementation: I'm using hard-decision decoding for simplicity. For those who've implemented soft-decision LDPC in GNU Radio, what's the practical performance gain (measured, not theoretical)?
- Frequency offset: The ±1 kHz sensitivity is possible concerning. Has anyone implemented effective AFC for FSK in GNU Radio? Recommendations for libraries or approaches?
- Performance validation: How do simulation results typically compare to hardware testing in your experience? What factors cause the biggest discrepancies?
Code and Documentation: Project: https://github.com/Supermagnum/gr-sleipnir Test results and detailed analysis available in the repository.
Waiting to be tested
Complete 8FSK 'sign' crypto mode
396 tests remaining
Same matrix: 7 channels × 23 SNR × 2 data modes × 3 recipients
8FSK 'encrypt' crypto mode
0 tests completed
966 tests expected
Test matrix: 7 channels × 23 SNR × 2 data modes × 3 recipients
8FSK 'both' crypto mode
0 tests completed
966 tests expected
Test matrix: 7 channels × 23 SNR × 2 data modes × 3 recipients
Test matrix for remaining tests
Each crypto mode tests:
7 channel conditions (clean, AWGN, Rayleigh, Rician, freq_offset_100hz, freq_offset_500hz, freq_offset_1khz)
23 SNR points (-2 to +20 dB in 1 dB steps)
2 data modes (voice, voice_text)
3 recipient scenarios (single, two, multi)
Total: 7 × 23 × 2 × 3 = 966 tests per crypto mode
Summary
Currently: Finishing 8FSK 'sign' crypto (396 tests remaining)
Next: 8FSK 'encrypt' crypto (966 tests)
Then: 8FSK 'both' crypto (966 tests)
Total remaining: 2,328 tests (396 + 966 + 966)
Those will be completed around midnight local time.
Next Steps:
I'm also considering implementing soft-decision LDPC to eliminate the FER floor.
Any feedback on the approach, implementation details, or testing methodology would be appreciated. I'm particularly interested in hearing from those who've validated GNU Radio simulations against real RF hardware.
LA1RMA