Skip to content

Latest commit

 

History

History
54 lines (37 loc) · 1.88 KB

README.md

File metadata and controls

54 lines (37 loc) · 1.88 KB

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):

  1. Air interface protocol
  2. DMR voice and generic services
  3. Data protocol
  4. 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