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:*
1. *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?
2. *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)?
3. *Frequency offset:* The ±1 kHz sensitivity is possible concerning.
Has anyone implemented effective AFC for FSK in GNU Radio?
Recommendations for libraries or approaches?
4. *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
<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