Field Guide · term

Also known as: Phase 2 superframe, P25P2 superframe

The P25 Phase 2 superframe is the 360 ms frame that organises the two-slot TDMA traffic channel.1 Running the H-DQPSK waveform at 6000 symbols/second, the superframe carries 12 sub-frames of 30 ms each, alternating between the two timeslots, and each sub-frame is typed by the ISCH that prefixes it as either a voice sub-frame or a MAC-signalling sub-frame.2 Its span — 2160 dibits, or 4320 bits — is exactly the period of the PN44 scrambler, which restarts at the top of every superframe, so the superframe is the natural unit both the framing and the descrambler are keyed to.

TS1 TS2 TS1 TS2 TS1 TS2 TS1 TS2 12 sub-frames × 30 ms = 360 ms · 180 dibits each · 2160 dibits = 4320 bits PN44 scrambler restarts here, once per superframe the 12-superframe "ultraframe" (≈4.32 s) is spec-defined but not modeled in GopherTrunk
The 360 ms superframe holds 12 alternating-timeslot sub-frames (4320 bits total); the PN44 sequence resets at its start, and its ISCH typing steers each sub-frame to voice or MAC decode.

Timing and structure

The superframe’s dimensions all follow from the 6000 sym/s symbol rate:

Quantity Value
Superframe duration 360 ms
Sub-frame duration 30 ms
Sub-frames per superframe 12
Timeslots 2 (alternating)
Symbol rate 6000 sym/s
Dibits per sub-frame 180
Dibits per superframe 2160
Bits per superframe 4320

Each sub-frame is composed of either a voice slot (4 voice frames, or 2 voice frames plus MAC) or a MAC slot, and the ISCH’s 4-bit SlotType names which. GopherTrunk models the subset the trunking layer cares about: Voice4V, Voice2V, and the MAC types MAC_PTT, MAC_END, MAC_IDLE, MAC_ACTIVE, MAC_HANGTIME, MAC_SIGNALING, and MAC_END_CONT. Voice and signalling therefore interleave within a slot’s stream across the superframe rather than living on separate channels — an active call’s voice sub-frames are punctuated by the MAC sub-frames that carry its grant updates, hang-time, and end-of-transmission.

The SuperframeDecoder anchors the 0..11 sub-frame grid on a sync-word match. The sub-frame index at which the outbound sync recurs (SyncSubframeIndex = 0) is the project’s working value: the spec fixes the exact cadence, but the repo has no figure for it, so the decoder anchors on every match and derives the whole slice geometry from that one constant — a single-line fix if a real capture disagrees.

The ultraframe (not modeled)

Above the superframe, TIA-102.BBAB defines an ultraframe of 12 superframes — roughly 4.32 seconds — used chiefly to schedule slower housekeeping such as encryption-sync repetition across the traffic channel. GopherTrunk does not model the ultraframe. Nothing in the Phase 2 decode path depends on ultraframe alignment: the encryption sync a follower needs arrives in the MAC_PTT message that opens a transmission (see the MAC PDU), and the PN44 descrambler is keyed to the 360 ms superframe, not the ultraframe. The absence is a deliberate scope choice, noted here so a reader does not mistake it for an oversight.

Relevance to SDR

internal/radio/p25/phase2/superframe.go holds the superframe constants and the SlotType enum, and the superframe decoder slices a structured superframe out of the raw dibit stream so the trunking engine can follow a call across both slots. The 4320-bit period tying the superframe to the PN44 sequence is what keeps framing and descrambling in lock-step. The spec is TIA-102.BBAB §7.

Sources

  1. Project 25 — Wikipedia, on P25 Phase 2 and its TDMA traffic channel. 

  2. Time-division multiple access — Wikipedia, on dividing a carrier into recurring timeslots. 

See also