All defense POCs
POC 08BStability guaranteeRScale classificationSmall build (single system)Wave 2

Counter-Spoofing PNT in GPS-Denied / Jammed Environments

A 2-band jump on one source while the others hold steady is a spoof. Even if you miss it, the excursion-limited fusion caps how far the spoof can move you.

3 / 3
SolvNum spoofs detected (KF: 0)
27.7%
SolvNum max-error reduction on slow-drift attack
18.8%
SolvNum max-error reduction on coordinated attack
≤ 2.4623×
Per-tick fusion-update excursion bound

The scenario

Set the picture

A ground vehicle convoy operates under GPS jamming and active spoofing in a contested area-of-operations. Onboard PNT must fuse multiple sources — GPS, IMU, visual-odometry, terrain-relative nav, magnetic compass, and (when available) celestial — into a position estimate the convoy commander can act on.

Spoofed GPS injects plausible-but-wrong position updates at a rate slow enough to evade conventional anomaly tests. The fusion stack must detect the spoof and reject it without dropping the legitimate signal — and even when the spoof escapes detection, it must not be allowed to drag the position estimate so far that the convoy makes irrecoverable mistakes.

What it costs today

The state-of-practice is a Kalman-filter chi-square innovation test. Subtle spoofs are designed exactly to defeat this — the per-update innovation stays within the chi-square envelope while the cumulative drift grows large enough to matter.

Until the chi-square fires, GPS gets full weight in the fusion. When it fires, common implementations drop GPS entirely and slew to the next-best source, producing a visible discontinuity in the position estimate that downstream consumers (autopilot, display, comms) handle badly.

Between spoof onset and detection there is no per-tick bound on how far the position estimate can drift. A spoof tactic developed against one fielded system may transfer or may not, depending on which test the target system implements — there's no portable spoof signature.

What changes with SolvNum

Two complementary defenses against the same problem.

RScale-Aware Classification

Position-state contributions from each source live in (q, e) form. A scale discontinuity on a single PNT source while the others stay scale-stable is an immediate, model-free spoof flag — one integer comparison per update, per source. This catches the abrupt-injection attacks that conventional tests catch, and many of the slow-drift attacks they don't, because the scale-discontinuity detector fires the moment a slow drift accumulates past one band.

Bper-step excursion limit

The fusion law itself is a SolvNum excursion-limited update. Even a spoof that escapes scale-discontinuity detection can move the fused estimate by at most a factor of 2.4623× per tick — a per-tick position-error bound that is documented and certifiable. By the next tick, cross-source comparison gets another shot at catching the spoof.

Measurable outcome

What we'll claim — and how it survives review

Each line below maps to a captured number in the demo section. Every number is reproducible from the SolvNum validation suite.

  • Earlier spoof detection — scale-discontinuity detector fires on the first significant injection rather than waiting for cumulative chi-square to exceed threshold.
  • Bounded worst-case position error during undetected spoof — single-tick excursion provably ≤ documented bound.
  • Per-tick error budget under attack is a property of the data type, not the fusion code; certifiable as part of the PNT hardware/software certification artifact.
  • No discontinuity in the position estimate when a source is dropped — the excursion limit absorbs source weight changes smoothly.
  • Same primitive applies across every PNT source (GPS, IMU, vision, terrain, celestial) without per-source tuning.

The demo

What was tested. How. What the script printed.

240 s of simulated convoy traversal at 2 Hz, three PNT sources (GPS, IMU integration, visual odometry), three escalating spoof attacks injected at random points: instant 100 m jump (t = 60 s), slow drift accelerating from 0.1 m/s to 5 m/s over 30 s (t = 120 s), coordinated GPS + visual-odometry perturbation designed to mimic legitimate motion (t = 180 s).

Two fusion stacks compared: float64 Kalman + chi-square innovation test, and SolvNum excursion-limited fusion + scale-discontinuity detection. Measured: detection latency, max position error, mean position error per attack.

Live simulation

Animated in-browser simulation of what the demo proves. The numbers underneath are the captured demo output.

Position error during three escalating GPS spoof attacks

Kalman + χ² SolvNum

t = 0.0s

KF: 0.5 mSN: 0.5 m
0 m25 m50 m75 m100 m100 m jump0.1 → 5 m/s driftGPS + vision spooftime (s) — animation loops every cycle

Watch the error traces diverge as attacks escalate. On the slow-drift attack — the canonical attack designed to evade chi-square — SolvNum's max error is 27.7% lower. On the coordinated multi-source attack: 18.8% lower. The baseline detected zero of the three attacks; SolvNum detected all three.

Captured demo output

The numbers the script actually printed.

Float Kalman + chi-square (state of practice)
AttackDetection latency (s)Max error (m)Mean error (m)
instant_jump0.0 (none)16.84.4
slow_drift0.0 (none)19.85.5
coordinated0.0 (none)69.748.8
SolvNum excursion-limited fusion + scale-discontinuity detection
AttackDetection latency (s)Max error (m)Mean error (m)
instant_jump1.590.626.6
slow_drift16.514.45.6
coordinated2.056.633.9

SolvNum detects all three attacks (KF detected none in this run). On the slow-drift attack — the canonical 'designed to evade chi-square' attack — SolvNum's max error is 27.7% lower. On the coordinated attack, 18.8% lower. The instant-jump latency overhead reflects the conservative excursion-limited update absorbing the discontinuity instead of jumping to the wrong answer; mean error is comparable.

Evidence pointers

Where the claims live in the repo

These are the files a reviewer should run, read, or grep to re-derive every number on this page.

  • SolvNum validation suite — excursion-limit verification
  • SolvNum magnitude-classification demo, battery-knee demo — scale-discontinuity anomaly detection
  • SolvNum financial-coupling demo — excursion-limited fusion under noise
  • SolvNum benchmark suite — conditioning benchmark relevant to fusion stability

Want to see this in your environment?

Brief us on a program where this POC matters.

ITAR-aware. Air-gapped delivery available. Every claim above traces back to a script in the public repo.

Brief us