OK-DMR / dmr-from-scratch

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

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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


Languages

Language:Python 96.1%Language:Jupyter Notebook 3.9%Language:Nix 0.0%Language:Makefile 0.0%