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.
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
-
Project 25 — Wikipedia, on P25 Phase 2 and its TDMA traffic channel. ↩
-
Time-division multiple access — Wikipedia, on dividing a carrier into recurring timeslots. ↩