DMR End to End is a 14-part deep dive into the GopherTrunk DMR stack — the world’s most widely deployed digital PMR protocol, followed from a raw 4800-symbol-per-second 4FSK carrier all the way to two simultaneous recorded calls, direct-mode handhelds and decrypted Enhanced Privacy voice. Where Protocol Decoders gave DMR one episode and the Cookbook two recipes, this series walks every layer at full depth: bursts, sync words and polarity, the two TDMA cadences, the BPTC/Golay/Reed-Solomon FEC stack, link control and late entry, conventional IPSC repeaters decoded as two calls, the idle beacon, Tier III trunking, direct mode and the gaps that blinded the receiver, wideband decoding and the deaf-heal, AMBE+2 voice, Enhanced Privacy, and the testing discipline behind all of it.
The running thread is that one DMR carrier carries two of everything — two timeslots, two sync polarities, two tiers of trunking, two decode cadences — and the receiver only works when it knows which one it is looking at. Almost every DMR bug in the issue tracker was the decoder assuming the wrong twin: a repeater’s back-to-back bursts where a handheld leaves gaps, a voice burst read as a data slot type, two talkgroups folded into one call. The series ends honestly, with the field runs and captures still open.
Every post reads three ways: a TL;DR + cheat-sheet for skimmers, bold headers, tables, and diagrams for the medium read, and full prose with real code for the deep read.
New here? Start with the DMR Tier 2/3 lesson in the Digital Trunking module for the lay of the land, then come back for how GopherTrunk actually decodes it.<ol class="post-list series-list"><li class="post-card"> <h2 class="post-card__title">DMR End to End, Part 1: The 4FSK Carrier & the Tier Family</h2> <p class="post-card__meta"> Deep dives </p><p class="post-card__desc">What a DMR carrier actually is — 4800 symbols per second of four-level FSK in a 12.5 kHz channel, dibits riding on ±648 and ±1944 Hz deviations, two 30 ms timeslots sharing one frequency, three tiers on one wire format, and the 48 kHz FM-discriminator chain GopherTrunk sizes around all of it.</p></li><li class="post-card"> <h2 class="post-card__title">DMR End to End, Part 2: Bursts, Sync Words & Polarity</h2> <p class="post-card__meta"> Deep dives </p><p class="post-card__desc">How GopherTrunk turns a raw DMR dibit stream into bursts — the 132-dibit layout with its central sync, the nine 48-bit sync words and the polarity flip that maps every data sync onto a voice sync, the Golay-protected slot type that routes each burst, and the one FEC-valid burst that fixes a stream’s polarity.</p></li><li class="post-card"> <h2 class="post-card__title">DMR End to End, Part 3: Two Slots, One Carrier — Repeater vs Simplex Cadence</h2> <p class="post-card__meta"> Deep dives </p><p class="post-card__desc">How GopherTrunk follows a DMR voice superframe across six bursts when only the first carries a sync — the 132, 264 and 288-dibit cadences, embedded-LC and AMBE-FEC cadence detection, the relative Phase label separating two interleaved calls, and the simplex handheld whose empty slot a single-slot decoder sliced as voice.</p></li><li class="post-card"> <h2 class="post-card__title">DMR End to End, Part 4: The FEC Stack & the Forged Terminator</h2> <p class="post-card__meta"> Deep dives </p><p class="post-card__desc">The error-correcting codes a DMR burst passes through in GopherTrunk — BPTC(196,96) with its stride-181 interleave, the (20,8,7) slot-type code, RS(12,9) with three context seeds, the two CRC masks whose convention hid a bug — and how a voice burst’s AMBE bits once Golay-decoded to “Terminator with LC” and ended a live call mid-sentence.</p></li><li class="post-card"> <h2 class="post-card__title">DMR End to End, Part 5: Link Control, Embedded LC & Late Entry</h2> <p class="post-card__meta"> Deep dives </p><p class="post-card__desc">How a DMR call names itself three times over — the 72-bit Full Link Control in the Voice LC Header, the Terminator with LC, and the fragments embedded in voice bursts B–E — and how GopherTrunk turns the embedded copy into late entry, a re-key anchor, and a talker alias.</p></li><li class="post-card"> <h2 class="post-card__title">DMR End to End, Part 6: Conventional IPSC — Two Slots as Two Calls</h2> <p class="post-card__meta"> Deep dives </p><p class="post-card__desc">How GopherTrunk’s conventional DMR state machine turned one IPSC repeater’s two timeslots into two concurrent calls — a per-destination call map, a synthetic slot token the engine keys on, two same-carrier voice taps routed by embedded LC, and the re-key rule that recovered replies lost inside hangtime.</p></li><li class="post-card"> <h2 class="post-card__title">DMR End to End, Part 7: The Idle Beacon & the CSBK Train</h2> <p class="post-card__meta"> Deep dives </p><p class="post-card__desc">What a keyed-but-idle IPSC repeater puts on the air, how GopherTrunk pinned the ETSI Idle burst against MMDVMHost’s constant and turned it into a site-alive lock, how CSBK beacons are gated by CRC — and the cc=7 CSBK train on a cc=12 system that is still, honestly, unresolved.</p></li><li class="post-card"> <h2 class="post-card__title">DMR End to End, Part 8: Tier III Trunking — C_ALOHA, Grants & LCNs</h2> <p class="post-card__meta"> Deep dives </p><p class="post-card__desc">How GopherTrunk reads a DMR Tier III control channel — the 96-bit CSBK and the 0x5A5A CRC mask that once rejected every real one, locking on C_ALOHA, topology from C_BCAST, voice grants that carry a 12-bit LPCN instead of a frequency, vendor feature IDs, multi-block control, and the −56 dBFS WARN that contradicted live decodes.</p></li><li class="post-card"> <h2 class="post-card__title">DMR End to End, Part 9: Direct Mode — The Gaps That Blinded the Receiver</h2> <p class="post-card__meta"> Deep dives </p><p class="post-card__desc">Why a DMR handheld on a simplex frequency never decoded for the whole life of issue 836 — the 32.5 ms gaps between bursts fed receiver noise to every slow tracker — and the three fixes that make it decode from the first header: a variance carrier gate, feed-forward timing acquisition and an acquirer that keeps its lock.</p></li><li class="post-card"> <h2 class="post-card__title">DMR End to End, Part 10: Wideband DMR — Bin Edges & the Deaf Heal</h2> <p class="post-card__meta"> Deep dives </p><p class="post-card__desc">Two IPSC repeaters on one X310 channelizer, one tap deaf for minutes at a time — how the polyphase bin edge folded half a DMR channel back on itself, why the fix was a 2x-oversampled channelizer, and how the wideband engine now heals a receiver deaf at its own decoding level and rejects a coarse offset decode evidence contradicts.</p></li><li class="post-card"> <h2 class="post-card__title">DMR End to End, Part 11: AMBE+2 Voice & the Silence-Frame Bug</h2> <p class="post-card__meta"> Deep dives </p><p class="post-card__desc">How a frame-by-frame diff against two mbelib lineages refuted the ‘AMBE+2 2450 high-band deficit’ theory, found the real DMR voice bug in the silence frames that reset the gain predictor 24 dB low at every utterance onset, and calibrated the unvoiced band and radio tilt against dsd-neo — measured, not tuned by ear.</p></li><li class="post-card"> <h2 class="post-card__title">DMR End to End, Part 12: Enhanced Privacy — RC4 & the IV That Names the Next Superframe</h2> <p class="post-card__meta"> Deep dives </p><p class="post-card__desc">How GopherTrunk decrypts DMR Enhanced Privacy with an operator-held key: the Privacy Indicator header, the RC4 key‖MI keystream with its 256-byte warm-up, the 32-bit LFSR that advances the Message Indicator, the embedded IV that names the NEXT superframe, and the capture that settled it.</p></li><li class="post-card"> <h2 class="post-card__title">DMR End to End, Part 13: Testing DMR Without a Repeater</h2> <p class="post-card__meta"> Deep dives </p><p class="post-card__desc">How GopherTrunk tests a DMR decoder with no repeater in reach — literal vectors from independent decoders, synthetic streams that finally model a real transmitter’s gaps, committed real-air slices in CI, replay harnesses with header and terminator scrubs, and the Golay histogram that says whether frames are scrambled or mis-sliced.</p></li><li class="post-card"> <h2 class="post-card__title">DMR End to End, Part 14: The DMR Playbook</h2> <p class="post-card__meta"> Deep dives </p><p class="post-card__desc">The finale — the whole DMR stack folded into one layer map from antenna to WAV: which symptom points at which layer, the instrument that confirms it, the failure signatures operators actually report, the twin ledger of everything DMR carries two of, and the honest list of what is still open.</p></li></ol><p class="blog-feed-link"> See all deep dives or subscribe via RSS. </p>