Field Guide · term

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

8 info bits … 8 bits … each bit → 2 wire bits 16 wire bits transmitted majority vote → 1 bit then even-parity check over bits 0–6
The LICH doubles each of its 8 information bits into a 16-bit on-air field; the receiver majority-votes each pair back to one bit, then validates an even-parity bit computed over the first seven, flagging any pair whose two copies disagreed as soft.

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

  1. NXDN — Wikipedia, on the NXDN standard and its logical channels. 

  2. Repetition code — Wikipedia, on the bit-repetition-plus-majority-vote coding the LICH uses. 

See also