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

This branch is 1 commit ahead of, 1 commit behind thomastoye/dmr-from-scratch:master.

Folders and files

NameName
Last commit message
Last commit date

Latest commit

3fc0b17 · Nov 21, 2021

History

39 Commits
Jun 18, 2021
Jun 4, 2021
Nov 21, 2021
Jun 18, 2021
May 7, 2021
May 7, 2021
Jun 18, 2021
Jul 2, 2021
Nov 21, 2021
Jul 9, 2021

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%