Field Guide · term

Also known as: ISCH, inter-slot signalling channel, inter-slot signaling channel

The P25 ISCH (Inter-Slot Signalling Channel) is the short field that prefixes every Phase 2 sub-frame and names what that sub-frame carries.1 It is the field a receiver reads to tell a voice sub-frame from a MAC-signalling sub-frame without inspecting the payload — 12 information bits protected by an extended Golay(24,12,8) code, so it survives a noisy channel and can be trusted before any of the heavier FEC downstream has run.2 Because it recurs on both TDMA slots, the ISCH is also how the two slots stay coordinated: each one carries a counter naming its position in the 12-sub-frame superframe.

sync ISCH · 24b sub-frame payload (voice or MAC) SlotType 4b Counter 4b rsvd 4b Golay(24,12,8) corrects up to 3 bit errors → SlotType read before any payload FEC
Each Phase 2 sub-frame opens with the ISCH: 12 data bits (slot type, sub-frame counter, reserved) Golay-encoded to 24 bits, letting the decoder classify the sub-frame under error before touching the payload.

Field layout

The 12 data bits, in GopherTrunk’s working model, are: bits 0–3 the 4-bit SlotType (voice-4V, voice-2V, MAC-PTT, MAC-idle, MAC-active, and the other MAC variants); bits 4–7 a counter naming the sub-frame’s 0..11 position within the 360 ms superframe; and bits 8–11 reserved, transmitted as zero. Those 12 bits are wrapped in the extended Golay(24,12,8) code already in internal/radio/framing — a distance-8 block code that corrects up to three bit errors within its 24 coded bits (12 dibits on wire). A receiver runs the Golay decoder over the codeword, reports how many bits it corrected, and rejects the ISCH outright if the codeword falls outside the correction radius.

TIA-102.BBAB §6.3 defines the ISCH and its FEC, but the repository has no figure pinning the exact bit packing or code choice, so this layout is deliberately the project’s working model. All ISCH knowledge is confined to one file: the rest of the pipeline only ever sees a decoded SlotType, so if a real capture shows a different packing, the correction stays local.

Keeping the slots coordinated

Phase 2 interleaves two logical timeslots on one carrier, and both need to agree on where they are in the shared 12-sub-frame superframe. The ISCH counter is what supplies that agreement: every sub-frame announces its own position, so a decoder that locks the sync word can immediately place the sub-frame on the 0..11 grid and know which slot’s stream it belongs to — even across a burst that briefly corrupts the payload. The SlotType half then routes the sub-frame: a voice type sends the payload to the vocoder chain, while a MAC type (MAC PDU) sends it to the signalling FEC and opcode dispatch. In effect the ISCH is a compact, heavily protected table-of-contents entry emitted once per sub-frame.

Relevance to SDR

internal/radio/p25/phase2/isch.go implements DecodeISCH (Golay decode → SlotType + Counter + corrected-error count) and its EncodeISCH inverse for building fixtures. The superframe decoder calls it once per sub-frame and stamps the result onto the sub-frame it just sliced, which is what lets the trunking layer follow a call across the two slots. Because the ISCH is short and well protected, it is one of the most reliable fields on a marginal Phase 2 channel — often decodable when the payload behind it is not. The spec is TIA-102.BBAB §6.3.

Sources

  1. Project 25 — Wikipedia, on P25 Phase 2 and its TDMA sub-frame structure. 

  2. Binary Golay code — Wikipedia, on the extended Golay(24,12,8) code that protects the ISCH. 

See also