Wiki › Signals & priority › How signal timing works, from phases and rings to SPaT signal groups

Updated 2026-10-09

Movements and phases

A traffic signal controls movements: eastbound through, northbound left, the crosswalk on the west leg. A phase is the controller's unit of timing, the green-yellow-red sequence that serves one or more movements that do not conflict. In the United States most intersections follow the NEMA eight-phase convention:

PhaseMovement (typical)PhaseMovement (typical)
1Southbound left5Northbound left
2Northbound through (main street)6Southbound through (main street)
3Westbound left7Eastbound left
4Eastbound through (side street)8Westbound through (side street)

Some agencies rotate the assignment so that 2 and 6 are east-west; what matters is that 2 and 6 are the opposing throughs on the main street, 4 and 8 on the side street, and the odd phases are the lefts that precede or follow them. Pedestrian movements are timed with the through phase they run parallel to: the crosswalk parallel to phase 2 is "ped 2". Right turns usually run with their through phase; a right-turn arrow may be an overlap, a signal output derived from one or more parent phases.

Rings and barriers

The controller runs two rings at once. Ring 1 holds phases 1, 2, 3, 4; ring 2 holds 5, 6, 7, 8. Each ring times one phase at a time, so two phases are green together, one from each ring. A barrier separates the main-street side (1, 2, 5, 6) from the side-street side (3, 4, 7, 8): both rings must cross the barrier together, which is what stops a main-street phase from being green while a side-street phase is.


 Ring 1 |  1  |    2    ||  3  |    4    |
 Ring 2 |  5  |    6    ||  7  |    8    |
          left  through  || left  through
          main street    ||  side street
                   barrier

Within a side of the barrier the controller may run the lefts first (lead), or the throughs first (lag), or split them (lead-lag), and it may skip a phase that has no call from its detectors.

Intervals inside a phase

Each phase has a timing sheet:

IntervalWhat it isTypical value
Minimum greenThe shortest green once the phase starts5 to 15 s
Passage (gap)Each vehicle detected extends green by this amount2 to 4 s
Maximum greenThe green cannot extend beyond this while there is a conflicting call20 to 60 s
Yellow (clearance)Yellow change interval3 to 6 s
All-redRed clearance before the next phase1 to 3 s
WalkPedestrian WALK4 to 7 s
Pedestrian clearanceFlashing DON'T WALK countdowncrossing distance ÷ 3.5 ft/s

An actuated phase runs minimum green, then extends with each detector call until it gaps out or hits maximum green, then clears. A fixed-time phase runs the same split every cycle. A coordinated intersection runs a fixed cycle length with a coordinated phase (usually 2 and 6) that is guaranteed to be green at a point in the cycle called the offset, so that platoons released from the upstream signal arrive on green; the other phases are actuated within their splits, and unused time is returned to the coordinated phase. Preemption interrupts all of this for a train or an emergency vehicle; priority nudges it, by extending or advancing a phase, for a bus or a plow (see signal priority).

What the controller exposes over NTCIP 1202

NTCIP 1202 is the object standard for actuated signal controllers, carried over SNMP on the cabinet network. Version 03 (2019) added the objects a connected intersection needs, and version 04 (2024) extended them. The relevant groups:

GroupWhat you get
Phase status (phaseStatusGroup*)Which phases are green, yellow, red, walk, pedestrian clearance, don't walk, next, and whether each has a call
Phase timing (phase* parameters)Minimum green, maximum green, yellow, red clearance, walk and pedestrian clearance per phase
Overlap statusThe state of each overlap output
Coordination (coord*)Pattern, cycle length, offset, splits
Preemption and priority (preempt*, and the NTCIP 1211 prioritization objects)Which preempt or priority inputs are active
SPaT support objects (v03)A block the controller fills at 10 Hz with, for each phase and overlap, the current state and the minimum and maximum time to change, plus the intersection status bits; NTCIP 1202 v03 Annex defines a UDP broadcast of this block so the RSU need not poll

A controller that implements the v03 SPaT block can feed an RSU directly; one that does not needs a cabinet device (a "SPaT box" or roadside processor) that polls phase status and timing parameters and computes the times itself, with less accuracy.

From phases to signal groups

A SPaT does not talk about phases. It talks about signal groups, which are the numbers that a MAP's connectsTo entries reference. The SPaT generator holds a mapping table:

Signal groupSourceeventState mapping
2Phase 2 vehiclegreen → protected-Movement-Allowed, yellow → protected-clearance, red → stop-And-Remain
5Phase 5 vehicle (protected left arrow)the same three states
1Flashing yellow arrow overlap for the permissive leftflashing yellow → permissive-Movement-Allowed, solid yellow → permissive-clearance, red → stop-And-Remain
9Overlap A (right-turn arrow fed by phases 2 and 3)overlap outputs mapped like a phase
22Ped 2 (some agencies use phase + 20, others reuse the phase number in a separate range)walk → protected-Movement-Allowed, flashing don't walk → protected-clearance, don't walk → stop-And-Remain

The convention CTI 4501 encourages is to number vehicle signal groups with their NEMA phase number, so a technician reading signal group 4 in a SPaT knows it is phase 4, and to give overlaps and pedestrian movements numbers that do not collide. The same table is what the MAP author uses when assigning signalGroup in connectsTo (see MAP to SPaT).

For each signal group, every 100 ms, the generator writes a MovementState with:

  • eventState from the mapping above. Flashing red (an intersection in flash) becomes stop-Then-Proceed; a dark signal becomes dark.
  • timing.minEndTime from the controller's "minimum time to change": for a green that has not reached minimum green, the end of minimum green; for a green in extension, now plus the passage time it has left. For a red, the earliest the conflicting phases could clear.
  • timing.maxEndTime from "maximum time to change": for a green, the end of maximum green (or the end of its split under coordination); for a red, the latest the green could begin given every other phase running to its maximum.
  • timing.likelyTime from the controller's prediction when it has one, with confidence.
  • All three as TimeMarks, tenths of a second past the current UTC hour, computed from the controller's clock, which is why the cabinet needs a disciplined time source.

For a fixed-time or coordinated phase, minEndTime and maxEndTime coincide and vehicles get an exact countdown. For an actuated phase the window is wide and a vehicle only knows that the green will end sometime between the two; that is what the standard intends, and a generator that reports a fake exact time is worse than one that reports an honest window.

The status bits of the IntersectionState come from controller flags: preemptIsActive, signalPriorityIsActive, failureFlash, manualControlIsEnabled and the coordination mode bits. enabledLanes is filled when a time-of-day plan turns a revocable lane on.

Checking it with the portal

Decode a SPaT from your RSU in the decoder and lay the controller's phase display beside it. Every green phase should appear as protected-Movement-Allowed (or permissive for a green ball with opposing traffic) under the expected signal group, the yellow should appear as a clearance state for the right 3 to 6 seconds, and minEndTime should never be in the past. The live view replays the same comparison over time and highlights a signal group whose state does not advance or whose timing contradicts itself. If a mapping is wrong, the fix is in the generator's table, not in the MAP.

  • NTCIP 1202 v03/v04 (Actuated Signal Controller objects, SPaT block), NTCIP 1211 (Signal Control and Prioritization), CTI 4501 (Connected Intersections Implementation Guide), the FHWA Signal Timing Manual for the engineering behind the intervals.
  • SPaT, MAP, MAP to SPaT, signal priority, TMC and ATMS integration.