Also known as: LICH, link information channel
The NXDN Link Information Channel (LICH) is an 8-bit field near the head of every NXDN frame that tells the receiver how to interpret the rest of the frame: whether it is a control or traffic channel, what function the frame serves, and which direction it is travelling.1 Those 8 information bits are so important — a decoder that misreads them mis-routes the whole frame — that NXDN protects them with the simplest robust code there is: each bit is transmitted twice (1-to-2 repetition), making 16 wire bits, and the receiver recovers the original 8 by a per-bit majority vote.2
What the bits mean
The 8-bit information field packs four steering values plus a parity bit, laid out most-significant-first:
| Info bit | Field | Meaning |
|---|---|---|
| 0 | RFCT — RF channel type | 0 = RCCH (control), 1 = RDCH (traffic) |
| 1–2 | FCT — function channel type | 00 = NSACCH, 01 = NUDCH, 10 = Frame Step, 11 = Reserved |
| 3–4 | Option | 2-bit service/variant selector |
| 5 | Reserved | fixed 0 |
| 6 | Direction | 0 = outbound (BS→MS), 1 = inbound (MS→BS) |
| 7 | Parity | even parity over bits 0–6 |
RFCT is the first thing a scanner reads once a frame locks: it says whether the frame is control-channel signalling (RCCH) worth ingesting into the trunking state machine, or traffic (RDCH) to be followed as a call. FCT then narrows the function, Option selects a service variant, and Direction distinguishes downlink from uplink — consistent with, but independent of, the directional Frame Sync Word that located the frame. The parity bit is a final cheap integrity check on top of the repetition code.
Recovery and reliability
Decoding is deliberately trivial. For each of the 8 bit positions the receiver takes the two wire copies and, if they agree, keeps that value; if they disagree, it flags the pair as unreliable (a disagreement means at least one of the two copies took a bit error) and falls back to the first copy. The count of disagreeing pairs is a direct, per-frame quality metric: zero means a clean LICH, and a rising count is an early warning that the channel is degrading before the heavier-coded fields start failing. After the vote, the even-parity bit over bits 0–6 gives one more line of defence — it catches a fraction of the cases where both copies of a bit flipped the same way, which majority vote alone cannot.
Because the LICH is short and cheaply coded, it is one of the most reliably recovered fields on an NXDN channel, which is exactly why NXDN puts the frame’s routing decision there rather than deeper in the more fragile CAC or SACCH.
Relevance to SDR
internal/radio/nxdn/lich.go implements the whole path: EncodeLICHWire doubles the 8 info
bits to 16, DecodeLICHWire majority-votes them back and returns the count of disagreeing
pairs, and ParseLICH unpacks the 8-bit field into typed RFChannelType,
FunctionChannelType, Option, and Direction values with a validated even-parity flag. The
disagreement count and the parity flag together give GopherTrunk a soft-quality read on every
frame at almost no cost — the LICH is the first checkpoint that tells the decoder whether a
freshly-synced frame is a control block to route or traffic to follow, and how much to trust
that decision.
Sources
-
NXDN — Wikipedia, on the NXDN standard and its logical channels. ↩
-
Repetition code — Wikipedia, on the bit-repetition-plus-majority-vote coding the LICH uses. ↩