Digital Mobile Radio (DMR) from scratch
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.
Development
$ nix-shell
$ make test
Resources and references
ETSI standard (ETSI TS 102 361):
- Air interface protocol
- DMR voice and generic services
- Data protocol
- Trunking protocol
Other projects:
Assets and example files:
Implementation of error-correcting codes and checksums
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
Currently working on
- Decoding full LCs from voice superframes