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.
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
-
Project 25 — Wikipedia, on P25 Phase 2 and its TDMA sub-frame structure. ↩
-
Binary Golay code — Wikipedia, on the extended Golay(24,12,8) code that protects the ISCH. ↩