This project is my attempt to decode Digital Mobile Radio (DMR) from scratch in idiomatic, modern Python. It's optimized for legibility and ease of understanding rather than performance.
$ nix-shell
$ make test
ETSI standard (ETSI TS 102 361):
Other projects:
Assets and example files:
DMR uses a lot of different error-correcting codes and checksums. The description of the FEC and CRC codes used can be found in ETSI TS 102 361-1 Annex B.
- Block Product Turbo Codes (BPTC)
- BPTC(196,96)
- Variable length BPTCs
- Rate 3/4 Trellis Code
- Quadratic Residue (16,7,6)
- Golay (20,8,7)
- Hamming Codes
- Hamming (7,4,3)
- Hamming (13,9,3), Hamming (15,11,3), Hamming (16,11,4): Used in BPTC
- Reed-Solomon (12,9,4)
- 8-bit CRC, 32-bit CRC, CRC-CCITT, CRC-9, 7-bit CRC, CRC mask for Data Types
- 5-bit Checksum
- Decoding full LCs from voice superframes