Also known as: BPTC, BPTC(196,96), block product turbo code
BPTC (Block Product Turbo Code), in its BPTC(196,96) form, is the forward-error-correction scheme that protects DMR data and control bursts.1 It is a product code: bits are laid out in a grid and a short Hamming code is applied both across each row and down each column, so the two dimensions cover each other’s blind spots — an error a row check misses is very likely caught by the column check that crosses it.
How it works
A DMR burst carries 196 coded bits in its payload (98 before and 98 after the sync/embedded signalling), of which 96 are actual information bits — hence “(196,96)”. BPTC first de-interleaves those 196 bits, reversing the standard’s bit permutation to place them into a logical grid, then decodes the grid in two directions. Each row is a shortened Hamming(15,11) codeword and each column is a shortened Hamming(13,9) codeword; both are distance-3 codes, so each can locate and flip a single error in its line. Running the row pass and the column pass means most single and many multiple error patterns get corrected, because an error that survives its row lands at the intersection of a column that can still catch it. The 96 recovered data bits are then read out in their defined order to form the link-control or data payload.
The name calls it a “turbo” product code by analogy: strong product codes can be decoded iteratively, passing soft reliability information back and forth between the row and column decoders in the spirit of true turbo codes. DMR’s practical decoders usually run a single hard-decision row-then-column pass, which is enough for the short Hamming components at DMR’s block sizes, but the product structure is what gives the label its “turbo.”
In practice
BPTC’s real strength shows up against bursts. On its own a Hamming code fails the moment two errors land next to each other; the built-in interleaving and the second (column) dimension between them convert a physical burst on the channel into isolated single errors, one per row codeword, which the Hamming passes then mop up. That robustness is exactly what a fading, mobile DMR channel demands — and it matters most for the CSBK control-signalling blocks that carry channel grants and keep a Tier III trunked system coordinated, where losing a burst can mean missing a call entirely.
Relevance to SDR
BPTC(196,96) is core to decoding DMR. GopherTrunk implements the full chain — de-interleave the 196 payload bits, run the row and column Hamming decoders, extract the 96 information bits, and hand them up as a CSBK, voice link-control, or data header — for both direct-mode and trunked DMR traffic. Getting the de-interleave permutation and the two Hamming component definitions exactly right is what lets GopherTrunk correct real bit hits on a marginal DMR signal instead of discarding the burst, which is often the difference between reporting a talkgroup and hearing nothing. The same product-code idea — short block codes crossed in two dimensions with interleaving — recurs across digital radio wherever burst resilience is needed on a short frame.
Sources
-
Digital mobile radio — Wikipedia, for the DMR standard whose 196-bit data and control bursts BPTC(196,96) protects. ↩