Field Guide · term

Also known as: FSW, P25 sync word, frame sync word

The P25 frame sync word (FSW) is the fixed 48-bit pattern 0x5575F5FF77FF that opens every P25 Phase 1 frame.1 Before a decoder can read a NID, a voice frame, or a TSBK, it must know where the frame starts in the incoming symbol stream — and the FSW is the landmark it searches for, exactly the job of frame synchronization.2

FSW · 48 bits NID · 64 bits frame body 0x5575F5FF77FF = +3 +3 +3 +3 +3 −3 … (24 dibits) correlator peak = frame start
Every P25 Phase 1 frame opens with the same 24-dibit sync word; a sliding correlator locks onto it to mark the boundary, then the decoder reads the NID and body that follow.

How it works

A P25 Phase 1 receiver produces a stream of dibits (two bits at a time) from the C4FM demodulator — the four transmit deviations map to dibit values by the TIA-102 rule +3→01, +1→00, −1→10, −3→11. The FSW is 24 of those dibits in a fixed order, so the decoder runs a sliding access-code correlation: at each new dibit it compares the last 24 dibits against the known pattern and declares a frame boundary wherever the number of mismatches falls under a threshold (GopherTrunk defaults to tolerating 4 of 24). The sync word is chosen for a sharp autocorrelation peak, so a genuine alignment stands out clearly from noise.

Because the FSW pattern is designed to be recognisable even under error, the correlator can lock a frame a few dB into the noise where a strict all-or-nothing match would fail — the same tolerance that lets a scanner hold a marginal P25 signal.

In practice

Two subtleties make real-world FSW search harder than the textbook version:

  • Polarity / rotation ambiguity. An FM discriminator can hand the decoder the dibit alphabet cyclically rotated — most commonly a whole-alphabet polarity flip (dibit + 2) from a conjugated I/Q input. GopherTrunk’s detector tries cyclic rotations and records which one matched. On a true C4FM stream only rotation 0 (identity) and rotation 2 (polarity flip) are physically possible; the CQPSK / π/4-DQPSK path has a genuine four-fold phase ambiguity and needs all four. Allowing the non-physical rotations 1 and 3 on C4FM actually hurt: the downstream BCH decoder would sometimes miscorrect a misaligned window into a parity-valid pseudo-NID at the wrong rotation (the root of GopherTrunk issue #275).
  • Status symbols. P25 inserts an interstitial status symbol into the stream at a fixed cadence, so the raw symbol positions do not map one-to-one onto frame bits — the deframer must account for them when it reads the NID and body after the sync.

Relevance to SDR

The FSW is the front door of GopherTrunk’s P25 Phase 1 decoder. internal/radio/p25/phase1 holds the canonical 24-dibit FrameSyncWord, the SymbolToDibit mapping, and a SyncDetector that slides the pattern over the demodulated dibits and reports each hit’s position, matched rotation, and correlation margin — the last of which the measurement harness turns into a sync-health metric (a margin pressed against the threshold means lock is barely holding). Every P25 Phase 1 frame type — HDU, LDU1/LDU2, TDU, TSDU, PDU — begins at an FSW hit, so getting this search right, rotations and all, is what lets everything downstream decode at all.

Sources

  1. Project 25 — Wikipedia, on the P25 standard and its Phase 1 frame structure. 

  2. Frame synchronization — Wikipedia, on using a fixed sync sequence to locate frame boundaries in a bit stream. 

See also