re(flight): clean pitch sweep -- magnitudes agree, the interpolation law does not

Fresh flight, row pinning CONFIDENT (margin 0.413), one sweep and nothing before
it. axis_probe now REFUSES to measure on a WEAK pin (ALLOW_WEAK_PIN=1 overrides)
since it is a precondition, not a warning: roll is immune to the up/right
labelling but pitch and yaw are not.

Clock x1.26. Binned by speed, both in game units, against the linear
interpolation of AV_PitchPlus_Min 150 (at MinimumVelocity 100) to _Max 70 (at
MaximumVelocity 1200):

    speed ~435   measured 100.8   predicted 125.6
    speed ~572            113.8             115.7
    speed ~709            126.3             105.7
    speed ~846             83.1              95.7
    speed ~983             72.7              85.8

Supported: the magnitudes (73-126 measured vs 86-126 predicted) and a falling
high-speed end. NOT supported: the interpolation law. Scatter is +-25%, the two
fastest bins hold 1 and 2 windows (the first moments before the speed bled), and
the slowest bin misses in the wrong direction.

The flaw is structural, not statistical: a sweep DRIVEN by the speed bleeding
cannot dwell at either extreme, which is exactly where the law is most testable.

What would settle it: hold a settled throttle and pitch for ~1 SECOND, so speed
barely moves inside the burst and each burst gives one honest (speed, rate) point;
repeat at LT / neutral / RT for three clean points at known speeds. Recorded as
the next design rather than attempted as a fifth variation of the same sweep.
This commit is contained in:
2026-08-13 23:12:50 +00:00
parent 0a84c1358e
commit a3f14710a4
3 changed files with 83 additions and 2 deletions

View File

@@ -585,3 +585,38 @@ measurement taken through a doubtful instrument cannot settle it.
Data: [aliased, for reference](captures/rate-curve-aliased-BAD.csv) ·
[windowed](captures/rate-curve-windowed.csv).
## The clean sweep: magnitudes agree, the LAW does not follow 🟡
Fresh flight, row pinning **CONFIDENT** (margin 0.413), one sweep and nothing before
it — the conditions the previous attempt lacked. Clock 01:16.08 → 01:41.46 (×1.26).
Binned by speed, both converted to game units:
| speed (game) | measured °/game-s | linear interpolation of the caps |
|---|---|---|
| ~435 | 100.8 | 125.6 |
| ~572 | 113.8 | 115.7 |
| ~709 | 126.3 | 105.7 |
| ~846 | 83.1 | 95.7 |
| ~983 | 72.7 | 85.8 |
(prediction = `AV_PitchPlus_Min` 150 at `MinimumVelocity` 100 → `_Max` 70 at
`MaximumVelocity` 1200, interpolated linearly.)
**What this supports:** the magnitudes are right — measured 73126 °/game-s across
speeds 4001 050 against a predicted 86126 — and the high-speed end falls, as a
speed-dependent cap should.
**What it does not support:** the interpolation *law*. The scatter is ±25 %, the two
fastest bins hold only 1 and 2 windows each (they are the first moments before the
speed bled), and the slowest bin disagrees in the wrong direction (100.8 measured vs
125.6 predicted). A sweep that is *driven* by the speed bleeding cannot spend long at
either extreme, which is exactly where the law is most testable.
**The design that would settle it**, and why this one cannot: hold a *settled*
throttle, pitch for only **~1 second**, and read the rate — the speed barely moves
inside a 1 s burst, so each burst yields one honest `(speed, rate)` point. Repeat at
`LT` / neutral / `RT` for three clean points at known speeds, instead of one smeared
sweep. Data:
[`captures/pitch-rate-curve-clean.csv`](captures/pitch-rate-curve-clean.csv).