Skip to content

Fix lock acquisition - #24

Open
colincoleman wants to merge 1 commit into
xyzzy42:masterfrom
colincoleman:fix-lock-acquisition
Open

Fix lock acquisition#24
colincoleman wants to merge 1 commit into
xyzzy42:masterfrom
colincoleman:fix-lock-acquisition

Conversation

@colincoleman

Copy link
Copy Markdown

compute_update() hill-climbs the analysis-window size: from the last locked window it moves to a larger (more accurate) one while the lock holds, and drops to a smaller one when it stops. But from a cold start it began at the smallest (2s) window and, if that failed, dropped to -1 and gave up - it never tried the larger windows.

A weak or jittery watch produces a cleaner, lower-jitter period in a larger window (more cycles to average), so it often can only lock at 8s or 16s, never at 2s. Such a watch therefore "usually doesn't register", yet "once locked, stays locked" - because acquisition needs the 2s window but tracking, once established at a larger window, sustains fine.

Separate acquisition from tracking: while unlocked, probe one window per cycle, cycling through the sizes, until one locks; then the existing hill-climb tracks it. This acquires a normal watch on the first probe (every window locks) and a marginal watch on whichever window works. It does not add a new CPU cost regime: probing cycles through the sizes (the 16s FFT runs at most every fourth idle cycle), which is less work than tracking a locked watch already does (that runs the largest locked window every cycle).

compute_update() hill-climbs the analysis-window size: from the last
locked window it moves to a larger (more accurate) one while the lock
holds, and drops to a smaller one when it stops.  But from a cold start
it began at the smallest (2s) window and, if that failed, dropped to -1
and gave up - it never tried the larger windows.

A weak or jittery watch produces a cleaner, lower-jitter period in a
larger window (more cycles to average), so it often can only lock at 8s
or 16s, never at 2s.  Such a watch therefore "usually doesn't register",
yet "once locked, stays locked" - because acquisition needs the 2s
window but tracking, once established at a larger window, sustains fine.

Separate acquisition from tracking: while unlocked, probe one window per
cycle, cycling through the sizes, until one locks; then the existing
hill-climb tracks it.  This acquires a normal watch on the first probe
(every window locks) and a marginal watch on whichever window works.
It does not add a new CPU cost regime: probing cycles through the sizes
(the 16s FFT runs at most every fourth idle cycle), which is less work
than tracking a locked watch already does (that runs the largest locked
window every cycle).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant