Also known as: FSW, NXDN sync word, NXDN frame sync
The NXDN Frame Sync Word (FSW) is the fixed 16-bit pattern that opens every
NXDN frame, letting a decoder find where a frame begins in the incoming
dibit stream.1 Its value depends on direction: 0xC55A for the outbound link
(base station to mobile) and 0x3AA5 for the inbound link (mobile to base station).
Before a decoder can read the LICH, the SACCH, or the information
field, it must know where the frame starts — and the FSW is the landmark it searches for,
exactly the job of frame synchronization.2
How it works
An NXDN receiver produces a stream of dibits (two bits per 4FSK symbol) from the
demodulator. The FSW is 8 of those dibits in a fixed order, so the decoder runs a sliding
access-code correlation: at each new dibit it compares
the last 8 dibits against the known pattern and declares a frame boundary wherever the number
of mismatches falls under a configured tolerance. GopherTrunk’s SyncDetector accepts one or
more FSW patterns and reports each hit’s dibit index, plus whether the matched pattern was the
inbound word — a downlink monitor searches for 0xC55A, while an uplink or direct-mode monitor
also carries 0x3AA5.
The two directional words are exact bit-complements of one another: 0xC55A XOR 0x3AA5
equals 0xFFFF. Expanded to dibits (most-significant first), the outbound word is
3 0 1 1 1 1 2 2 and the inbound word is 0 3 2 2 2 2 1 1. That complementary relationship
means a whole-alphabet polarity flip on the demodulator — a common consequence of a
conjugated I/Q input — turns one direction’s pattern into the other’s, so a detector that
carries both words is naturally robust to a swapped-sideband front end.
| Direction | Hex | Dibits (MSB-first) |
|---|---|---|
| Outbound (BS→MS) | 0xC55A |
3 0 1 1 1 1 2 2 |
| Inbound (MS→BS) | 0x3AA5 |
0 3 2 2 2 2 1 1 |
FSW versus RAN
The FSW answers where a frame starts; it does not say which system the frame belongs to. That second job falls to the Radio Access Number (RAN), the 6-bit per-frame identifier NXDN carries in the SACCH so a repeater or radio accepts only its own system’s traffic on a shared channel. The FSW is identical for every NXDN system on a given link direction — it is a universal landmark — whereas the RAN differs per system. A decoder first correlates the FSW to lock the frame grid, then reads the RAN to decide whether the frame is worth following. The two are complementary: sync without RAN would lock onto every co-channel system indiscriminately; RAN without sync would have no aligned bits to read the RAN from.
Relevance to SDR
The FSW is the front door of GopherTrunk’s NXDN decoder. internal/radio/nxdn/sync.go holds
the canonical FSWOutboundHex / FSWInboundHex constants, materialises them into 8-dibit
patterns, and runs a SyncDetector that slides those patterns over the demodulated dibits and
reports each hit’s absolute index and direction. Every NXDN frame — control (CAC), voice, or
data — begins at an FSW hit, so getting this search right is what lets everything downstream
decode at all. The exact bit patterns follow the values cited across public NXDN reference
implementations; GopherTrunk’s source flags that they should be cross-checked against the
published NXDN technical document before being trusted on unusual captures, since the sync
search is the one place a wrong constant would silently prevent any lock.
Sources
-
NXDN — Wikipedia, on the NXDN narrowband digital land-mobile standard and its frame structure. ↩
-
Frame synchronization — Wikipedia, on using a fixed sync sequence to locate frame boundaries in a bit stream. ↩