-
Notifications
You must be signed in to change notification settings - Fork 0
Notch closed-loop hover is a non-deterministic oracle: chaotically fragile under rotor-line vibration (kernel-agnostic; mechanism unknown) #290
Description
Summary
The falcon-core test notch_reduces_rate_loop_noise_under_rotor_vibration (NOTCH-P01 closed-loop, v1.122) is a non-deterministic oracle and is now #[ignore]d. Enabling the RPM notch destabilizes the analytic-plant hover under moderate rotor-line vibration, chaotically and non-monotonically, and the flip is not kernel-specific. The robust NOTCH-P01 evidence (relay-notch frequency-domain suite: ≥20 dB attenuation, sweep-within-3 dB, <10° crossover phase, bit-exact bypass, line rejection) is unaffected and still passing.
Surfaced by the v1.125 f32-kernel work (a ≤2 ulp trig change flipped the test), but the kernel is exonerated — see the sweep.
Evidence (SimBackend hover, 250 Hz, rotor_vib = per-motor gyro line amplitude; final tilt, rad)
| vib | libm off | libm on | f32-kernel off | f32-kernel on |
|---|---|---|---|---|
| 0.2 | 0.10 | 0.56 | 0.10 | 0.055 |
| 0.3 | 0.09 | 0.10 | 0.10 | 2.32 |
| 0.4 | 0.80 | 1.06 | 0.09 | 1.62 |
| 0.5 | 0.00 | 0.10 | 0.09 | 0.78 |
| 0.6 | 3.14 | 0.45 | 0.00 | 0.07 |
| 0.8 | 0.00 | 0.00 | 0.09 | 1.89 |
Both kernels flip; libm flips notch-OFF at 0.4 and 0.6 (bold = tilt ≥ 0.25 rad, i.e. departed hover). The v1.122 pass at vib=0.8 (libm 0.00/0.00) was a lucky-stable point. Thrash at stable low injections shows the notch gives no motor-thrash reduction in this plant (notch-on ≈ notch-off, occasionally slightly worse) — the plant's LPF+ADRC already reject the line.
What has been ruled out
- Kernel accuracy: the f32 kernels conform to libm ≤2 ulp over |x|≤128 (4M-point sweep), pass totality + Pythagorean-identity; not the cause.
- Center-frequency chasing the thrashing eRPM (parametric excitation): tried a one-pole low-pass (12 Hz) on the tracked frequency — did NOT fix it. Mechanism is deeper.
The discriminating experiment (do this first)
A filter with the measured <10° crossover phase cannot destabilize its loop via steady-state response — yet it does. So the <10° unit test isn't capturing the real closed-loop effect. Run notch-on at CONSTANT RPM (static coefficients, no vibration) + a small attitude disturbance:
- stable → it's a transient / time-varying-coefficient (retune-per-tick) problem;
- unstable → the <10° phase figure understates the real margin (full 4-motor-bank stacking, or Direct-Form-1 state under continuous drive).
Either answer is a real result. "It's chaotic" is a description, not a root cause.
Do NOT
- Re-enable the test or lower
vibto green CI until root-caused. - Correct/demote FV-FALCON-NOTCH-001 until the root-cause lands (its own two-commit traceability action).
Relates to #270 (gz hover limit-cycle — same fragility family). NOTCH-P01 closed-loop validation ultimately belongs on the real X500 airframe / a faithful gz vibration spectrum.
🤖 Generated with Claude Code