Skip to content

An attempt to decode Digital Mobile Radio (DMR) from scratch in idiomatic Python

Notifications You must be signed in to change notification settings

OK-DMR/dmr-from-scratch

 
 

Repository files navigation

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

About

An attempt to decode Digital Mobile Radio (DMR) from scratch in idiomatic Python

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 96.1%
  • Jupyter Notebook 3.9%