Field Guide · term

Also known as: LDU, LDU1, LDU2, logical link data unit

The P25 Logical Data UnitsLDU1 and LDU2 — are the 1728-bit voice frames that carry a P25 Phase 1 transmission.1 Each spans 180 ms of audio as nine IMBE voice codewords, and the two types alternate through a call, differing only in the metadata woven between the voice: LDU1 carries a Link Control word (who is talking to whom), LDU2 carries Encryption Sync (how to decrypt), and both carry two blocks of Low-Speed Data. The recurring LDU1→LDU2→LDU1… sequence keeps that metadata fresh throughout the transmission.

FS NID u0 u1 LC u2 LC u3 u4…u6 · LC u7 LSD u8 9 voice (144b) + 6 LC/ES (40b) + 2 LSD (16b) + FS + NID + 24 status = 1728 bits
An LDU interleaves nine 144-bit IMBE voice subframes (u0…u8) with six 40-bit LC/ES blocks and two 16-bit LSD blocks after the frame sync and NID; 24 status symbols are woven across the whole 1728-bit stream.

How it works

Stripped of its 24 interleaved status symbols, the 1728-bit LDU leaves a 1680-bit payload whose fields sit in a fixed interleaved order:

Field Length Notes
Frame Sync (FS) 48 Fixed sync pattern opening the LDU
Network ID (NID) 64 NAC + DUID (0x5 LDU1, 0xA LDU2) + BCH
Voice frames u0–u8 9 × 144 IMBE codewords, one per 20 ms of audio
LC / ES blocks 6 × 40 Link Control (LDU1) or Encryption Sync (LDU2)
Low-Speed Data 2 × 16 Cyclic-coded out-of-band signalling

The nine voice subframes are not contiguous — LDU1 reads u0 and u1 back-to-back, then a 40-bit LC/ES block after each of u1 through u6, with the two Low-Speed Data blocks sitting together between u7 and u8. Each 144-bit voice subframe is an on-air IMBE codeword that the vocoder front end deinterleaves, descrambles, and FEC-decodes into an 11-byte recorder-ready frame. The six 40-bit metadata blocks concatenate into the 240-bit LC or ES field, which is 24 inner Hamming(10,6,3) codewords protecting a 72-bit word under an outer RS(24,12,13) (Link Control) or RS(24,16,9) (Encryption Sync) code.

In practice

The exact interleave order is load-bearing and easy to get wrong. An earlier GopherTrunk model placed an LC/ES block between u0 and u1, shifting u1…u7 by one 40-bit block; it round-tripped against the synthetic injector but did not match real on-air P25, so only u0 and u8 decoded and every other subframe was read from the wrong bits. Getting the offsets right — sourced against a reference decoder — is what makes a whole call decode instead of stuttering. Because the metadata repeats every LDU pair, a decoder also stays robust to loss: miss one LDU1’s Link Control and the next one restates the talkgroup and source.

Relevance to SDR

internal/radio/p25/phase1/ldu.go holds the structural constants and the extractors: ExtractVoiceFrames slices u0…u8 at the sourced offsets and IMBE-decodes each, ExtractLCESBlocks returns the six metadata blocks for the Link Control or Encryption Sync parser, and ExtractLSDBlocks pulls the Low-Speed Data. A compile-time assertion pins the field arithmetic to 1728 bits. The LDU is the heart of P25 voice — everything a scanner records and every talkgroup it reports flows through these frames.

Sources

  1. Project 25 — Wikipedia, on the P25 standard and its Phase 1 voice frames. 

See also