ADS-B receiver

Aircraft broadcast their identity, position and velocity on 1090 MHz. This receiver pulls those messages out of the air: preamble detection, bit slicing, CRC-24, and CPR position decoding, with every stage shown.

–Aircraft decoded
–Messages per second
–Messages decoded
–Time

What is modelled. The traffic is synthetic: departures, arrivals and overflights around three made-up airports, with random callsigns and addresses. Message formats, timing and encodings follow the ICAO Mode S and DO-260B standards. Transmit power (125 to 500 W), transponder frequency error and message rates are typical values. The receiver works on complex baseband samples with thermal noise; its decoder follows the open-source dump1090.

1

Airspace

The receiver sits at the centre. Triangles are where the aircraft really are; circles are where the receiver has decoded them from their own broadcasts. Aircraft beyond the radio horizon, which is lower for aircraft closer to the ground, can't be heard at all.

Map

Zoom with the buttons, ⌘/Ctrl-scroll or a pinch; drag to pan once zoomed; double-click to reset. Click an aircraft to select it.

True positionDecoded positionSelected aircraftAirport
ICAOCallsignAltitude (ft)Speed (kt)TrackClimb (ft/min)Range (km)MessagesLevel (dB)PositionSeen
2

The signal at 1090 MHz

What the receiver samples: the magnitude of the complex baseband signal. Each message is a burst of 0.5 µs pulses: an 8 µs preamble, then one bit per microsecond, sent by pulse position (a pulse in the first half of the microsecond is a 1, in the second half a 0). A 112-bit message lasts 120 µs.

Magnitude, 1 ms

Decoded messageCollidedMissed
3

Preamble detection

Every sample is a possible message start. The detector checks for four pulses at 0, 1, 3.5 and 4.5 µs, with quiet between them, then tries each alignment within half a bit and keeps the best. Lower thresholds catch weaker aircraft but pass more noise, which the CRC then has to reject.

Selected message: preamble

Pulse windowsQuiet windowsThreshold

4

Bit slicing

For each bit, the receiver compares the energy in the first and second half of its microsecond. The bigger half wins. When the two are close, noise can flip the decision; those weak bits are outlined. Click any bit to flip it and see what the CRC does.

Data bits

5

CRC-24 parity check

The last 24 bits are parity: the remainder of dividing the rest of the message by a fixed polynomial. The receiver recomputes it. For extended squitters (DF17) and acquisition squitters (DF11) the two must match. Replies to radar (DF4) carry parity overlaid with the aircraft's address, so the result must equal an address already heard. A one-bit error leaves a unique remainder, so it can be corrected.

Selected message

Last 10 seconds

Generator polynomial 0x1FFF409 (x²⁴ + x²³ + … + x¹⁰ + x³ + 1).

6

Message fields

A message that passes the CRC is split into its fields. DF17 extended squitters carry a 56-bit ME field whose type code (TC) says what's inside: identification and callsign (TC 1-4), airborne position (TC 9-18) or velocity (TC 19).

FieldBitsRawMeaning
7

CPR position decoding

To fit latitude and longitude into 17 bits each, position messages give only the position within a zone, not which zone. Even messages use 60 latitude zones of 6°, odd messages 59 zones of 6.1°. One message alone fits a position in every zone. An even and an odd message together agree in only one place, because the two zone sizes differ. A decoder can also pick the zone closest to a known reference, such as its own location, if the aircraft is within about 300 km.

Aircraft

Latitude: where each frame could be

Even frame's candidatesOdd frame's candidatesWhere they agree

Longitude at that latitude

EvenOddSolution
8

Garble: overlapping messages

Every aircraft transmits about six messages a second, at random times, on the same frequency. As traffic grows, messages overlap. Sometimes the stronger one still decodes; often both are lost. This is why busy airspace needs more receivers.

Messages arriving, last 20 ms

DecodedOverlapped and lostOverlapped but decodedToo weak

Decoded against signal level recent messages

Decoded against traffic run a sweep

Simulates 10 to 400 aircraft for 5 s each, then restores this scenario.
DecodedOverlapped
9

Message log

Every decoded message, newest first. Click one to show it in stages 3 to 6.

Time (s)ICAODFContentLevel (dB)CRCTruth