diff --git a/docs/re/reverify-pulse-and-decomposition.md b/docs/re/reverify-pulse-and-decomposition.md new file mode 100644 index 00000000..eef0df7e --- /dev/null +++ b/docs/re/reverify-pulse-and-decomposition.md @@ -0,0 +1,51 @@ +# Re-verifying the two findings that rested on the truncating reader + +The port asked me to **re-run these rather than reason about them**, having +watched me retract a "these are unaffected" argument once already. Right call. + +**Instrument:** ⟨capture⟩, same logs, re-read by +[`read_draws.py`](../../tools/re-capture/read_draws.py). + +## ✅ The `ptbtn00f` pulse ratio — holds + +| | median pulse | sweep loop | ratio | leaf units | +|---|---|---|---|---| +| `f6b` | 60 frames, 16 clean cycles | 600 | **0.1000** | 60.0 | +| `f6` | 116 frames | 1168 | **0.0993** | 59.6 | + +Unchanged by the reader. **60 leaf units × 2 = 120 title units = +`ptbtn00f`'s declared loop.** The independent leg under `leaf/title = 0.5` +stands. + +## 🟡 Unit 10's decomposition — the conclusion survives, **my numbers were wrong** + +Unit 10 said the implied parent "pins at 255.0 and holds: **254.0–256.9** (`f6`) +and **253.9–254.9** (`f6b`)". Those came from the **rows I printed** — every 20th +frame — quoted as if they were the range of the whole series. The real figures: + +| | first cycle, post-ramp | after the leaf wraps | +|---|---|---| +| `f6b` | 253.1–255.0, median **254.4**, n=560 | median 254.3, one 41.3 outlier | +| `f6` | 250.9–260.5, median **252.9**, n=1128 | 237.3–283.2, median 267.9, n=584 | + +**The conclusion holds on the first cycle** — a flat ~254 across 560 and 1128 +frames while the drawn alpha swings 8→255→132. The parent multiplies in. + +**The post-wrap spread is my phase model, not the parent.** `t = (f−onset)×rate` +accumulates error, and it degrades **only in `f6`** — the run whose pulse periods +show dropped frames (65 and 93 against a median 116). `f6b`, which paces cleanly +(all pulse periods exactly 60), stays at median 254.3 after its wrap. A parent +that actually varied would degrade in both. + +So: ✅ the finding, with the bounds above and **restricted to the first cycle**; +the post-wrap series needs a phase model fitted per cycle, which I have not done. + +## The error worth naming + +Quoting a range off the sampled rows I happened to print, as though off the +series. It flatters — sampling every 20th frame skips the excursions — and it is +**the same shape as an error already in my record**: presenting +`sorted(set(...))[:9]` as a trajectory when it was a 14-sample tail of 1754. + +Both times the printed subset was doing the work of the population, and both +times nothing in the output looked wrong.