Also known as: dPMR sync word, FS1, FS2, FS3
A dPMR frame sync is one of three fixed 48-bit patterns that mark burst boundaries on a dPMR channel, letting a decoder both locate a burst and learn what kind of burst it is.1 Unlike a protocol with a single universal sync word, dPMR carries three distinct words — FS1, FS2, and FS3 — and which one a correlator matches is itself information: FS1 opens a superframe, FS2 marks a mid-superframe resync point, and FS3 opens a control-channel signalling burst.2 Each is 48 bits, 24 dibits at dPMR’s 4FSK air interface.
The three words
GopherTrunk stores the three patterns as canonical 48-bit hex constants and materialises them MSB-first into 24-dibit arrays for the symbol-domain correlator:
| Word | Hex (48 bits) | Role |
|---|---|---|
| FS1 | 0x57FF5F75F575 |
start of a voice/data superframe |
| FS2 | 0x5F7F77FD7DFD |
mid-superframe resync (every 4th burst) |
| FS3 | 0x7DDFFD5F55D5 |
start of a control-channel CSBK burst |
Having a separate mid-superframe word (FS2) is what makes dPMR robust to a late lock: a receiver that joins a call after FS1 has already passed does not have to wait for the next superframe — it can re-acquire on the next FS2 and slot straight into the burst grid. FS3 is the one the trunking engine watches most closely, because a control channel is a stream of FS3 bursts, each opening a CSBK signalling block.
Detecting a sync
Detection is an access-code correlation: the decoder
slides a 24-dibit window over the demodulated stream and, at each position, counts how many
dibits differ from a target pattern; a count at or under the configured tolerance declares a
match at that position. GopherTrunk’s SyncDetector takes one pattern and a tolerance — a
tolerance of zero demands an exact match — and reports the absolute dibit index where each hit
ends. A control-channel monitor runs an FS3 detector; a call-follower runs FS1 and FS2 to hold
the traffic superframe. The detector’s shape deliberately mirrors the Phase 1, DMR, and NXDN
sync detectors so the higher-level state machine treats every protocol the same way.
Relevance to SDR
internal/radio/dpmr/sync.go holds the FS1Hex / FS2Hex / FS3Hex constants, the
FS1Dibits / FS2Dibits / FS3Dibits helpers that expand them, and the tolerant
SyncDetector. The intended control-channel flow is FS3 sync detect → 80-bit CSBK slice →
CSBKFromBits → ingest, so the sync stage is the first link in the dPMR trunking chain: no FS3
lock means no CSBK, and no CSBK means no grants to follow. Because the three words are distinct
and each is tied to a burst type, dPMR’s sync layer does double duty — it recovers timing and
classifies the burst in a single correlation, which is why the decoder can tell a control burst
from a traffic burst before it has decoded a single payload bit.
Sources
-
dPMR — Wikipedia, on the ETSI dPMR narrowband digital standard and its burst structure. ↩
-
Frame synchronization — Wikipedia, on using fixed sync sequences to locate frame boundaries. ↩