Participant collection now uses the stationary ground protocol. The aircraft/consumer sections below preserve the earlier method and its evidence; they are not the current stationary decision policy. NASA archival analysis remains primary. See the stationary method and validation needs.
Evidence for docs/METHODOLOGY_TECHNICAL.md
Start with Evidence so far for a readable account of the current results and limits. This reference preserves historical numerical tables; it is not a report of the latest campaigns.
Historical evidence notice (software 0.6.0): the tables below predate the corrected crab objective, calibration covariance and pilot-2 gates. They are not validation of the current release. The pooling coverage figure in §9 measured ±2 standard errors, not the reported t-based interval. Full evidence regeneration and tail campaigns require separate approval; see VALIDATION_TECHNICAL.md and CURATION.md. Small 0.6.0 pilot results, when generated, are stored separately and do not replace the historical tables or establish tail calibration.
With an approved compute budget, generate a new technical record using
~/venv/bin/python analysis/tests/evidence.py; preserve these historical results separately.
1. lll.models against independent geometry
Largest difference over 5 states × 3 models: 8.6e-12 rad/s (1.8e-06 °/h).
2. What a single flight can identify (truth: still globe)
| route | bias-likeness k_curv | bias-likeness k_disc | k_curv | wrong models rejected | flagged not identified |
|---|---|---|---|---|---|
| north, east, south | 0.92 | 0.45 | 0.97 ± 0.94 | 1 of 2 | no |
| zigzag 60°/100°/20° | 0.98 | 0.93 | 0.84 ± 0.95 | 1 of 2 | yes |
| straight, no IMU turns | 1.00 | 0.99 | 1.01 ± 1.06 | 1 of 2 | yes |
| straight, IMU turned about the vertical ×3 | 0.67 | 0.99 | 1.11 ± 0.17 | 2 of 2 | no |
| straight, IMU flipped ×3 | 1.00 | 1.00 | 1.08 ± 0.76 | 0 of 2 | yes |
3. Ground calibration: horizontal rate against g-sensitivity
| truth | sequence | g-sensitivity up to 40 °/h/g | horizontal measured (°/h) | predicted | vertical measured | predicted |
|---|---|---|---|---|---|---|
| sphere_rotating | single | no | 13.11 ± 1.21 | 11.44 | 9.77 | 9.77 |
| sphere_rotating | single | yes | 12.94 ± 1.34 | 11.44 | 49.34 | 9.77 |
| sphere_rotating | palindrome | no | 11.43 ± 1.39 | 11.44 | 10.09 | 9.77 |
| sphere_rotating | palindrome | yes | 11.80 ± 1.15 | 11.44 | 50.58 | 9.77 |
| flat_still | single | no | 0.00 ± 1.37 | 0.00 | -0.26 | 0.00 |
| flat_still | single | yes | 1.00 ± 1.26 | 0.00 | 39.85 | 0.00 |
| flat_still | palindrome | no | 0.00 ± 1.12 | 0.00 | 0.68 | 0.00 |
| flat_still | palindrome | yes | 0.00 ± 1.37 | 0.00 | 40.55 | 0.00 |
4. 16-bit quantization of the gyro
| gyro range | one count (°/h) | g-sensitivity | fitted drift x, y, z (°/h per h) |
|---|---|---|---|
| ±2000 °/s | 220 | no | 7.2, -5.7, 6.1 |
| ±2000 °/s | 220 | yes | 7.7, -6.0, 15.4 |
| ±500 °/s | 55 | no | 6.5, -8.6, 7.8 |
| ±500 °/s | 55 | yes | 6.7, -8.6, 9.5 |
| ±250 °/s | 27 | no | 8.1, -8.5, 8.9 |
| ±250 °/s | 27 | yes | 7.1, -8.3, 9.6 |
By design, drift and position effects are separated, so g-sensitivity alone can't move the fitted drift. What moves it here is quantization: coarse counts interact with constant offsets. Compare the z column with and without g-sensitivity at each range.
5. Temperature
| with term | without | |
|---|---|---|
| coefficient (°/h/°C), injected 1.0, −0.8, 0.6 | 0.98, -0.77, 0.72 | – |
| noise per 60-s bin (°/h) | 1.39 | 2.12 |
| k_curv | 1.19 ± 0.99 | 2.39 ± 0.95 |
6. Mount slip watchdog
| true slip (°/h) | measured, WMM declination (per segment) | measured, no declination model (cross-check) | segments left out |
|---|---|---|---|
| 0.0 | -0.1, -0.2, -0.1 | 2.7, 3.3, 0.9 | none |
| 2.0 | 2.0, 1.8, 1.9 | 4.7, 5.3, 2.9 | [0, 1, 2] |
| 3.0 | 3.0, 2.8, 2.9 | 5.7, 6.3, 3.9 | [0, 1, 2] |
| 8.0 | 8.0, 7.7, 7.8 | 10.6, 11.2, 8.8 | [0, 1, 2] |
The WMM version decides, at 1.5 °/h. The cross-check reads the route's declination change as slip.
7. Hard conditions: the true model is never rejected
| condition | truth | truth rejected? | models rejected | largest |k − true| / σ | |---|---|---|---|---| | adverse flight (temperature, turbulence, tilt slip, climb/descent, GNSS gaps) | sphere_rotating | no | sphere_still, flat_still | 1.0 | | adverse flight (temperature, turbulence, tilt slip, climb/descent, GNSS gaps) | sphere_still | no | sphere_rotating, flat_still | 1.5 | | adverse flight (temperature, turbulence, tilt slip, climb/descent, GNSS gaps) | flat_still | no | sphere_rotating | 0.7 | | hardware faults (all at once) | sphere_rotating | no | sphere_still, flat_still | 1.4 | | hardware faults (all at once) | sphere_still | no | sphere_rotating, flat_still | 2.1 | | hardware faults (all at once) | flat_still | no | sphere_rotating | 2.2 |
8. Five-hour single-heading cruise
| bias-likeness k_curv | k_curv (truth 1) | models rejected (truth: still globe) | |
|---|---|---|---|
| no IMU turns | 1.00 | 1.32 ± 0.80 | sphere_rotating |
| IMU turned about the vertical hourly | 0.71 | 1.33 ± 0.29 | sphere_rotating, flat_still |
9. Pooling when units differ
| method | 95 % interval covers the truth |
|---|---|
| random effects (REML, Hartung–Knapp), sessions → units → population | 91 % |
| fixed effects (all sessions as independent) | 23 % |
8 units × 4 sessions, unit offsets σ = 0.3, session errors σ = 0.1.
10. IMU turns measured by the gyro
Measured turn angles (true 180°): 179.93°, 179.96°, 179.98°
11. Crab angle (fuselage off the GNSS track)
| truth | crab | truth rejected? | k_rot | k_curv | k span over crab priors (σ) | crab-sensitive flag? |
|---|---|---|---|---|---|---|
| sphere_rotating | none | no | 1.06 ± 0.19 | 0.92 ± 0.28 | 1.78 | yes |
| sphere_rotating | 8°, no crab term | YES | 0.63 ± 0.11 | 1.51 ± 0.15 | – | no |
| sphere_rotating | 8°, crab term (5° prior) | no | 0.63 ± 0.20 | 1.54 ± 0.28 | 0.35 | no |
| sphere_still | none | no | -0.08 ± 0.12 | 1.11 ± 0.17 | 0.97 | no |
| sphere_still | 8°, no crab term | no | -0.19 ± 0.10 | 1.25 ± 0.14 | – | no |
| sphere_still | 8°, crab term (5° prior) | no | -0.22 ± 0.12 | 1.29 ± 0.16 | 0.76 | no |
Straight route with three same-side-up IMU turns. A flat truth has no horizontal signal, so crab doesn't affect it.
Crab-prior sweep with 8° of true crab (k_rot / k_curv):
| truth | 3° prior | 5° prior | 10° prior | 15° prior |
|---|---|---|---|---|
| sphere_rotating | 0.63 / 1.54 | 0.63 / 1.54 | 0.65 / 1.51 | 0.70 / 1.44 |
| sphere_still | -0.20 / 1.27 | -0.22 / 1.29 | -0.26 / 1.35 | -0.29 / 1.38 |
12. BLE timing under lost notifications
| notification loss | samples lost | detected | timing error, 95th percentile (ms) |
|---|---|---|---|
| 0.0 % | 0 | 0 | 0.0 |
| 0.1 % | 178 | 178 | 0.0 |
| 1.0 % | 1781 | 1779 | 11.8 |
| 3.0 % | 5301 | 5296 | 22.4 |
30 min at 100 Hz, 7.5-ms connection interval.
13. Reversal test with strong g-sensitivity
| truth | pairs | horizontal rate (°/h) | predicted | repeatability σ (°/h) |
|---|---|---|---|---|
| sphere_rotating | 6 | 11.07 ± 0.72 | 11.44 | 1.25 |
| flat_still | 6 | 0.00 ± 0.64 | 0.00 | 0.92 |