How it is built
Architecture overview
A land mobile radio (LMR) network connects handheld and vehicle radios to dispatchers and to each other so that one press of a button reaches a whole group, within a fraction of a second, at the edge of coverage, and even when the backbone has failed. Police, fire, ambulance, rail and utilities use standards such as P25 (the TIA-102 suite, developed for public safety), TETRA (an ETSI standard for professional mobile radio) and DMR (an ETSI digital standard with a cheaper, simpler goal) (sources: Wikipedia, Project 25; Terrestrial Trunked Radio; Digital mobile radio). The design centre is not data rate. It is call setup time, group calling, priority, coverage and survivability, with voice carried at a few kilobits per second.
Two ideas shape the architecture. First, trunking: a small pool of radio channels is shared by many talkgroups, and a control channel tells each radio which channel to use for a call, so spectrum is used efficiently and users never pick frequencies. A trunked system "is essentially a packet switching computer network" in which radios send requests to a controller on a dedicated frequency (source: Wikipedia, Trunked radio system). Second, push-to-talk floor control: only one speaker holds the floor at a time in a talkgroup, and a higher-priority request can take it away. Newer broadband systems keep the same service on LTE: 3GPP created a working group in 2014 to specify mission critical push-to-talk (MCPTT) in Release 13 (source: 3GPP, LTE Mission Critical Applications).
Parts:
- Radio receiver — locks to carrier and symbol timing and undoes multipath distortion — Phase-locked loop (digital),
symbol-timing-recovery(no page yet),adaptive-equalization(no page yet) - Voice and error protection — compresses speech at a few kbit/s and protects each frame — Linear predictive coding (LPC), Convolutional codes and the Viterbi decoder, Reed-Solomon codes,
hamming-codes(no page yet) - Channel access — divides a carrier into time slots and arbitrates who may send a request —
tdma-scheduling(no page yet),aloha-random-access(no page yet) - Trunking controller — assigns channels to talkgroups, ranks calls, and keeps a moving radio's call alive —
trunked-channel-assignment(no page yet),priority-and-preemption(no page yet),handover-management(no page yet) - Security — authenticates radio and network and keeps voice keys fresh — AKA (authentication and key agreement),
aes-key-wrap(no page yet),key-rotation(no page yet) - Push-to-talk and IP transport — floor control, session setup, voice packets between sites, consoles and broadband clients —
ptt-floor-control(no page yet),sip-signaling(no page yet), RTP and RTCP, SRTP, Jitter buffer, IP multicast - Resilience — duplicated controllers, links and sites, plus a mode that works without the network — Hot-standby redundancy
- Operations — keeps the infrastructure up, its subscriber and key data recoverable and its call setup measured — Primary-backup replication, Point-in-time recovery, Process supervision, Graceful draining, Mutual TLS, hdr-histogram (no page yet), Deterministic simulation testing, Coverage-guided fuzzing
handheld ──radio──► base station / repeater ──► site controller ──► zone controller ──► core
(PTT, vocoder, (receiver: PLL, timing, (control channel, (talkgroups, (AAA/keys, console
FEC, TDMA slot) equalizer, Viterbi) channel grants) priority, roaming) gateway, recorder)
▲ │ │ │
│ voice frames over IP (RTP / SRTP, multicast to sites that need them)
│ ▼ ▼ ▼
└── direct mode ◄── talkgroup members dispatch consoles other sites, other networks
(no network) ▲
hot-standby pairs at controllers and core
How the parts fit together
Receiver chain: lock, undo the channel, decode
A digital voice radio sends symbols: P25 Phase I uses 4-level FM (C4FM) at 4,800 baud with two bits per symbol, 9,600 bit/s per channel (source: Wikipedia, Project 25); DMR uses 4-state FSK at the same 4,800 symbols/s (source: Wikipedia, Digital mobile radio). The receiver must recover three things before decoding. It must lock to the carrier frequency, which a Phase-locked loop (digital) does, tracking the offset between transmitter and receiver oscillators. It must find the symbol boundaries, symbol-timing-recovery (no page yet), so it samples at the right instant. And it must remove inter-symbol interference from multipath with adaptive-equalization (no page yet), with a training sequence in each burst to adapt on.
Error protection and the vocoder
Voice is compressed by a vocoder because the channel carries very little: TETRA's ACELP codec belongs to the linear-prediction family (see Linear predictive coding (LPC)), while P25's IMBE and AMBE+2 are multi-band excitation codecs. The budget in P25 Phase I shows the proportions: of 9,600 bit/s, 4,400 is voice data from the IMBE codec, 2,800 is forward error correction and 2,400 is signalling (source: Wikipedia, Project 25). DMR leaves 2,450 bit/s for one voice channel after overhead, error correction and splitting into two channels (source: Wikipedia, Digital mobile radio). TETRA samples speech at 8 kHz and compresses it with ACELP to 4.567 kbit/s, then error-protects it to 7.2 kbit/s (source: Wikipedia, Terrestrial Trunked Radio). P25 uses the proprietary IMBE and AMBE+2 codecs from Digital Voice Systems (source: Wikipedia, Project 25).
The code families are used where each fits: Convolutional codes and the Viterbi decoder for the main protection of the stream, Reed-Solomon codes for block-level protection against bursts, and short block codes such as hamming-codes (no page yet) for small fields like headers and control words. Which code protects which field is in the air-interface specifications (not read for this page). Control and header information deserve stronger protection than voice: a wrong grant is worse than a garbled syllable.
Channel access: slots for traffic, random access for requests
Spectrum is shared two ways. Traffic channels are divided in time with tdma-scheduling (no page yet): P25 Phase II and DMR use two slots in a 12.5 kHz channel, and TETRA uses four slots on a 25 kHz carrier (source: Wikipedia, Digital mobile radio). DMR's two-slot structure is built around 30 ms; a TETRA frame has four slots and a multiframe of 18 frames lasts 1.02 s (sources: Wikipedia, Digital mobile radio; Terrestrial Trunked Radio). Slots are assigned by the base station, so a voice call is scheduled and collision-free.
The inbound request is different. A radio that has just been keyed does not yet own a slot, and many radios may ask at once, so requests use aloha-random-access (no page yet) on a shared channel. A collision is detected by the missing reply and retried after a random wait. This suits rare, short messages and not traffic, so the call moves onto an assigned slot as soon as the grant arrives. Request load can spike in an emergency, so retries must be bounded.
Trunking: channel assignment, priority, handover
trunked-channel-assignment (no page yet) turns the shared pool into a service. When a user presses the push-to-talk key, the radio sends a request on the control channel naming its talkgroup; the controller picks an idle channel and sends a grant that every radio monitoring that talkgroup follows; when speech ends, the radios return to the control channel (source: Wikipedia, Trunked radio system). Groups, not frequencies, are the unit users see, and an agency's talkgroups are laid out in a "fleetmap" (same source). Channel count for a given load is an Erlang-B problem; once capacity is used up, later users get a busy signal, the failure to plan for in a disaster (same source).
priority-and-preemption (no page yet) decides who wins when capacity runs out. Talkgroups are assigned different priority levels, sometimes with pre-emption (source: Wikipedia, Trunked radio system). TETRA terminals have an emergency button that signals the dispatcher and overrides other activity (source: Wikipedia, Terrestrial Trunked Radio). The mechanism is a priority-ordered queue plus a rule for taking a busy channel from the lowest-ranked call; the agencies set the policy, the system enforces it uniformly.
handover-management (no page yet) keeps a call alive as the radio moves between sites. In TETRA a voice call is not interrupted when moving to another network site, which the source lists as a feature (source: Wikipedia, Terrestrial Trunked Radio). The radio measures neighbouring sites; the infrastructure moves the call or the radio re-registers and rejoins its talkgroup. Check that the target site has a free channel before the move.
Security: who is allowed, and whose keys
TETRA authenticates terminals to the infrastructure and the infrastructure to terminals, and offers air-interface and end-to-end encryption (source: Wikipedia, Terrestrial Trunked Radio). P25 supports several cipher options up to AES with 256-bit keys, and specifies a Key Fill Interface for loading keys into radios from a key-fill device and an interface between key management facilities (source: Wikipedia, Project 25). The pattern is the one in AKA (authentication and key agreement): the radio and the network prove they hold a shared secret, and session keys are derived from it. Voice and talkgroup keys then have to reach thousands of radios without being exposed in transit, which is the job of key wrapping, aes-key-wrap (no page yet), defined in RFC 3394 as an algorithm for wrapping AES keys (source: RFC 3394). Keys have a lifetime: key-rotation (no page yet) replaces them on a schedule and when a radio is lost, and the system must make the old key stop working on the old radio. 3GPP's MC security specification covers the same needs for broadband: a key management server, user key provisioning, and derivation of SRTP master keys for group media (source: ETSI TS 133 180).
The engineering risk sits less in the cipher than in key distribution, rotation and the weakest permitted mode: P25's 40-bit RC4 option is described as offering no real protection (source: Wikipedia, Project 25), and TETRA's original TEA1 cipher was intentionally weakened to meet export controls (source: Wikipedia, Terrestrial Trunked Radio). Disable weak modes by policy.
Push-to-talk and IP transport
Inside the network, voice travels as IP packets between sites, consoles, recorders and gateways. Voice frames use RTP and RTCP, encrypted per packet with SRTP (RFC 3550 and RFC 3711). One speaker's stream must reach all sites that host members of the talkgroup, which is a one-to-many problem for IP multicast inside the network, or replication by a media server where multicast is unavailable. Receivers use a small Jitter buffer, because push-to-talk suffers most from added delay.
Session setup between IP-attached parties uses sip-signaling (no page yet), an application-layer protocol for creating, modifying and terminating sessions with one or more participants (source: RFC 3261). ptt-floor-control (no page yet) is the arbiter on top of it. In 3GPP MCPTT, the media-plane protocol (TS 24.380) defines floor control with a floor request when the button is pressed, a floor granted reply, and queue position information, and defines the effective priority of a participant, including a pre-emptive priority that can take the floor from the current speaker (source: ETSI TS 124 380). The architecture of the whole service is in TS 23.179 (source: ETSI TS 123 179). Floor control is a distributed state machine with timers: a lost release must not hold the floor forever, so every grant times out.
Resilience: no single point of failure, and no network at all
Mission-critical networks duplicate their controllers, core and links. Hot-standby redundancy is the pattern: a standby shadows the primary and takes over within a few cycles, with an epoch or lease so that the old primary cannot return and drive the outputs. TETRA's description adds the cases beyond duplication: networks can be built so that "all aspects are fail-safe/multiple-redundant", base stations can process local calls in a fall-back mode, and terminals can use direct mode, which does not rely on any network (source: Wikipedia, Terrestrial Trunked Radio). In TETRA's direct mode a chain of terminals can relay, or a gateway can bridge a direct-mode group back into the trunked network (same source). A radio that can still talk to its neighbours when everything else has failed is the reason the system exists.
Operations
Primary-backup replication. Hot-standby controllers keep the call state of the radio air interface, but the data behind them also needs a copy: subscriber records, talkgroup membership and priorities, site configuration and key-management tables. Their database has a primary and a backup (Primary-backup replication), so that when the controller fails over the new controller authenticates radios and grants calls with the same talkgroup and priority rules. The epoch of the standby decides who is primary, so the old controller cannot come back and grant a channel as well.
Point-in-time recovery. A wrong bulk change (a talkgroup merge, a priority table edit, a key-table import) can strip radios of access across a whole agency. Point-in-time recovery restores the subscriber, talkgroup and key tables to the moment before the change from base backups plus the log, and the restore is done on a side copy first so that the radios keep working on the current tables while it is checked.
Process supervision. Site controllers, the trunking controller, the SIP and push-to-talk servers, gateways to consoles and recorders, and the key-management service run as supervised processes (Process supervision). A restarted media server rejoins its talkgroups from the controller's call table. A supervisor never restarts a process into a mode that bypasses security checks or accepts unauthenticated radios.
Graceful draining. Upgrading an IP gateway, media server or console server must not cut a transmission. Such a node is drained by no longer being chosen for new calls, while calls in progress finish at the next release of the push-to-talk key (Graceful draining); the floor timer still frees the floor if a release is lost. Sites are drained at a quiet time and handover moves radios to neighbouring sites first.
Mutual TLS. On the IP side, sites, controllers, consoles, recorders, gateways and the key-management facility authenticate each other with certificates (Mutual TLS), in addition to SRTP for the voice packets. That makes "who may fetch or load keys" and "who may join a talkgroup from the IP network" a question of certified identity, and a rogue console or recorder on the network cannot subscribe to voice.
Latency percentiles. The service is defined by call setup, so hdr-histogram (no page yet) records the intervals: key press to grant, grant to first voice frame heard by the receivers, and the handover interruption. Emergency and routine calls are recorded separately, so a priority-override path that is slow shows up even when routine calls are fast, and busy hours show the tail rather than an average.
Deterministic simulation testing. Channel assignment, priority preemption, handover and failover interact in rare orders: an emergency request during a handover, a release lost while a standby takes over, the same talkgroup requested from two sites at once. Deterministic simulation testing runs the trunking controller, a simulated radio population and a simulated lossy control channel and backbone under a seeded clock, and checks that no channel is granted twice and an emergency call is never delayed behind routine ones. A failing seed replays exactly.
Coverage-guided fuzzing. Coverage-guided fuzzing is aimed at the decoders of untrusted input: control-channel messages from radios, the SIP and push-to-talk floor-control messages, RTP/SRTP packets arriving from the IP network, and the key-fill and key-management interfaces.
Data and control flow
Flow 1: a group call
- The user presses the push-to-talk key. The radio sends a request on the control channel (random access), carrying its identity and talkgroup.
- The controller checks the radio is authenticated and allowed on the talkgroup, finds an idle traffic channel or slot, applies priority if none is free, and sends a grant.
- Radios in the talkgroup move to the assigned channel; sites with members open the channel and the voice path is set up between them.
- The speaker's vocoder produces frames; they are protected with error correction, encrypted with the group key, and sent in the assigned slot.
- Each receiver locks, equalises, decodes, decrypts and plays; network sites forward the frames over IP via multicast or replication, and consoles and recorders listen in.
- When the key is released, the controller frees the channel; the radios return to the control channel. A timer frees the floor if the release is lost.
Flow 2: priority override
- All channels are busy with routine calls. An emergency request arrives on the control channel.
- The controller ranks it above all active calls and selects the lowest-priority one.
- That call is ended or moved and its radios are told; the emergency talkgroup is granted the channel.
- The dispatcher is alerted, the call is recorded, and the displaced groups see a busy indication and can retry.
Scaling
- Voice capacity is channels, not bandwidth. Plan with Erlang-B for normal load, then separately for the disaster load the system exists for.
- Slots multiply channels. Two-slot (P25 Phase II, DMR) and four-slot (TETRA) TDMA give more voice paths per carrier, at the cost of tighter timing.
- The control channel is the bottleneck. Every call setup, status message and registration passes through it; separate registration, data and voice load where possible and cap retries.
- Keys scale by hierarchy. Provision once into a key management facility and distribute from there.
- Broadband relieves capacity and adds a dependency. MCPTT moves group voice to LTE with the same floor and priority concepts, but needs the cell network (source: 3GPP, LTE Mission Critical Applications).
Failure modes
| Failure | Symptom | Cause | Fix |
|---|---|---|---|
| Control channel overload | long or failed call setups in a big incident | too many requests and registrations, retry storms | bounded retries with random back-off; priority for emergency; more control capacity |
| Busy signal at the worst time | critical users cannot talk | channels sized only for normal load | Erlang-B for disaster load; priority and pre-emption; reserved channels |
| Call drops on moving | voice cuts out between sites | no free channel at the target site; late handover decision | check target capacity first; hand over earlier; keep neighbour lists current |
| Floor stuck | nobody can talk in a group | release message lost; the speaker's radio died holding the floor | floor timers; dispatcher override; periodic floor-keepalive |
| Key out of sync | some radios hear noise or silence on an encrypted group | key rollover reached some radios and not others | overlap old and new keys for a transition period; verify key state at registration |
| Choppy voice between sites | late or missing packets | congested backhaul; badly sized jitter buffer | prioritise voice traffic; small adaptive jitter buffer |
| Split brain in the core | two controllers grant the same channel | standby promoted while the primary is still alive | epoch or lease fencing; heartbeat over two paths |
Real implementations
| name | what it is | repo | licence | notes |
|---|---|---|---|---|
| GNU Radio | open-source signal processing runtime and toolkit | gnuradio/gnuradio | GPL-3.0 | has digital and filtering modules; use for receiver-chain experiments |
| osmo-tetra | experimental TETRA MAC/PHY code between MAC blocks and the modulator bits, with demodulator tools | osmocom/osmo-tetra | AGPL-3.0 | experimental; project description says so |
| MMDVM | open-source multi-mode digital voice modem firmware (D-Star, DMR, System Fusion, P25, NXDN, POCSAG, FM) | g4klx/MMDVM | GPL-2.0 | amateur-radio hotspot and repeater firmware, a small working example of the radio modes |
| Kamailio | open-source SIP signalling server | kamailio/kamailio | GPL-2.0, some parts BSD | the SIP layer, not the radio floor control |
The standards themselves (P25, TETRA, DMR, 3GPP MCPTT) are publicly documented and are listed in Sources. Commercial systems named in the field (Motorola ASTRO 25, Airbus TETRA, Hytera) are closed source and are not covered, because no official architecture document was fetched.
The alternative: commercial cellular push-to-talk or a plain LTE app is cheaper to deploy where coverage is good. Choose a dedicated LMR network when coverage at the edge, guaranteed priority, direct mode without any network and independence from public infrastructure are requirements.
Sources
- Wikipedia, Project 25: Phase I and II, the bit budget, NAC, cipher options, key fill interface. article
- Wikipedia, Terrestrial Trunked Radio: TDMA structure, ACELP rate, modes, authentication, security issues. article; ETSI, TETRA technology page
- Wikipedia, Digital mobile radio: two-slot TDMA, 4FSK, bit budget, tiers. article
- Wikipedia, Trunked radio system: control channel, talkgroups, fleetmaps, Erlang-B, priority. article
- 3GPP, LTE Mission Critical Applications (2014): creation of the MCPTT work. page
- ETSI TS 124 380, MCPTT media plane control, protocol specification (3GPP TS 24.380): floor control and priority. directory
- ETSI TS 123 179, functional architecture for mission critical communication services (3GPP TS 23.179). directory
- ETSI TS 133 180, security of the MC service (3GPP TS 33.180): key management, SRTP key derivation. directory
- RFC 3261, SIP: Session Initiation Protocol. RFC
- RFC 3550, RTP: A Transport Protocol for Real-Time Applications. RFC
- RFC 3711, The Secure Real-time Transport Protocol (SRTP). RFC
- RFC 3394, Advanced Encryption Standard (AES) Key Wrap Algorithm. RFC
- GNU Radio repo; osmo-tetra repo; MMDVM repo; Kamailio repo