Shaper response estimation: old vs new

The ~2x speedup to SHAPER_CALIBRATE. Both methods score a shaper by the minimum of the shaped step-response velocity. The old method built the position response and finite-differenced it; the new one uses the analytic velocity, evaluates it exactly at the impulse kinks, and refines the discrete minimum with a parabola — accurate with far fewer samples.

shaper_freq (Hz)50
damping_ratio0.10
old-method samples n_t40

Click a legend entry on either chart to hide or show that line.

residual vibration vs frequency (drop n_t and watch the old method deviate)
step-response velocity at the peak, near 50 Hz (the metric is this curve's minimum)
detail frequency (Hz)62

Ported from shaper_calibrate.estimate_shaper: window [T₀, T_N + 2·max(1/f, t_s)], step_response / step_response_velocity / step_response_min_velocity, kink-exact evaluation at impulse times, and the parabolic _refined_min. The old path builds the position response and takes Δpos/(ω·Δt). Both normalized by the single-step minimum velocity. Rendered with Chart.js.