Five sensors that disagree
Seemorgh operator console · Overview · 1 The crossing · 2 Sensors · 3 Fusion · 4 AI layer · 5 Checks · 6 Beyond the scenario
Before FUSE can ask whether two reports describe the same aircraft, it has to make them comparable. The scenario’s five feeds disagree on where they measure from, in what units, on what clock, and what their “id” field means. Two of them emit filtered tracks; one emits raw single-scan detections, some of them clutter.
Part of the Seemorgh operator console project.
The five feeds
| Feed | Where it sits | What it sends | Units and clock | What its ID means |
|---|---|---|---|---|
| Long-range radar | 17.8 km north | Tracks as slant range, azimuth and elevation from its own site, plus range rate and beamwidth | Metres, degrees; Unix seconds | A small integer, unique only within this radar and recycled when a track drops |
| Precision tracker | At the ground station | Tracks in east, north and up metres, with a 3D velocity and a 0–1 quality score | Metres, m/s; Unix milliseconds | A local string such as PS-0007 |
| Plot radar | 4.5 km east | Single-scan plots as range, azimuth and elevation, with signal-to-noise ratio. No velocity, no identity, some clutter | Metres, degrees, dB; Unix seconds | Minted fresh every scan |
| C2 network | A partner’s feed | Tracks in latitude and longitude, with altitude, ground speed, course, an IFF call and a circular error probable | Feet, knots; ISO 8601 text | A UUID that is never shared with any other sensor |
| RF direction finder | 3.0 km west | A bearing to a drone’s radio link, a coarse range from signal strength, and a threat call | Degrees, metres, dBm; Unix seconds | A local detection ID, recycled |
Only the C2 network says a contact is friendly. Only the RF sensor independently says a contact is hostile, and it never says “friend”: RF alone cannot clear a contact. The plot radar says nothing about identity at all.
One frame, one set of units, one clock
Frame. FUSE puts every report into east, north and up metres about the ground station, at 48.05° N, 11.65° E. The radar feeds are converted from polar coordinates about their own sites, the C2 feed from latitude and longitude, and the RF fix from a bearing and range about the RF site. The conversion is a flat-earth approximation, accurate to well under a metre over the 25 km play area. A test feeds one point through the long-range radar and the precision tracker; both must land within 50 m of it and fuse into one track.
Units. C2 speed is converted from knots and altitude from feet. Tests check that 200 knots comes out near 102.9 m/s, and 1,000 ft near 304.8 m.
Time. The three time formats are parsed to Unix seconds and used for one thing: a track’s last_update is its reports’ latest timestamp, not the computer’s clock. FUSE doesn’t align reports in time. The C2 feed’s specification says it can lag, but in this scenario every report at timestep t carries the same second, so a lag correction is never needed, and the engine doesn’t have one.
Identity. None of the five ID fields can link one sensor’s report to another’s. So FUSE never associates by ID: a test gives two precision tracks the same ID 7 km apart, and they must stay two tracks.
How much FUSE trusts each feed
Every report becomes a position plus a 2×2 covariance: an uncertainty ellipse in the horizontal plane. The ellipse is the engine’s model of how that sensor errs:
| Feed | Rule in FUSE |
|---|---|
| Long-range radar | Across the beam: range × half the beamwidth. Along it: 2% of range, at least 60 m |
| Precision tracker | 3 m divided by the tracker’s quality score (floored at 0.3): 3.0–3.5 m here |
| Plot radar | 800 m divided by the SNR in dB, kept between 15 and 100 m. Real plots come out at 31–57 m; clutter at 67–100 m |
| C2 network | CEP ÷ 1.1774; the scenario’s 90 m CEP gives 76 m |
| RF direction finder | Along the bearing: the reported range error. Across it: range × bearing error, at least 5 m |
Two consequences follow:
- The precision tracker dominates any track it joins. The friendly interceptor’s track is ±3 m because of it.
- The RF fix is not a bearing-only line. It is placed at its estimated range and contributes horizontal position like any other report. The console draws it as a bearing ray, which is why RF is often described as bearing-only; in the engine it isn’t.
The scenario’s simplifications
The scenario generator came with the original challenge brief. It is deterministic, with noise seeded by the timestep. It has three objects moving in straight lines at constant velocity, plus three clutter plots a frame scattered over about 18 × 20 km. That makes 15 reports in each of the 91 timesteps: 12 from real objects and 3 clutter, 1,365 in all. A clean result here shows less than it might seem, for five reasons:
- Noise is horizontal and mild. Positions are perturbed 120 m per axis for the long-range radar, 60 m for C2, 35 m for plots, 40 m for the RF fix (plus 1° of bearing and 200 m of range noise), and 3 m for the precision tracker.
- Altitude is nearly exact. Only the precision tracker adds altitude noise, so the drone’s fused altitude is exactly 320 m in all 91 frames.
- C2 motion is exact. The drone’s fused velocity is the true 60.1 m/s throughout.
- Coverage is generous. The precision tracker’s specification says it loses contacts beyond about 3.5 km; the scenario keeps it on the interceptor to 5.5 km.
- Labels are always right. Every C2 and RF identity call matches the truth.
Basis: the feed specifications, geometry helpers, scenario generator and normalisation code in the FUSE package at the export commit named in the replay README (private source); the recorded frames in the public replay data; and the phase 1 and 2 tests. Ellipse sizes are computed from the scenario’s stated parameters at t=74, not measured from hardware.
Further reading: Merrill I. Skolnik (ed.), Radar Handbook, 3rd edition (McGraw-Hill, 2008), on why a radar’s cross-range error grows with range and beamwidth.
Previous: The crossing, frame by frame · Next: How FUSE builds one picture · Back to the overview