-
Notifications
You must be signed in to change notification settings - Fork 0
Case Study Haarlem Damiaatjes
Alexander Refsum Jensenius edited this page Jul 18, 2026
·
3 revisions
The first field validation of the rhythm module: one evening recording of
the Damiaatjes — the two bells of the Grote Kerk (St. Bavo) in Haarlem, NL,
rung nightly 21:00–21:30 in commemoration of the Siege of Damietta (1218).
Zoom H3-VR, AmbiX, 24.5 min from street level (2026-07-17).
- Two sources separated by strike-synchronous partial clustering: bell A (hum 475 Hz, near-ideal 1:2:2.4:3:4 minor-third profile, strike note ≈ B♭5) and bell B (hum 598 Hz, flat prime and nominal — older-style tuning, strike note ≈ D6).
- One shared cycle of 3.1669 s (Rayleigh point-process estimate, 399 cycles): A strikes at 0 and 0.66 of the cycle (asymmetric swing + backswing), B once at 0.52. Composite: a long–short–long pattern (1.37 / 0.42 / 1.38 s), B♭ … D–B♭.
- Phase locking: B's per-strike phase relative to A has R = 0.998 (circular SD 31 ms); the 60 s-windowed clocks agree to 7 ms SD. Two independent pendulums cannot do this — the bells are one mechanically coordinated system.
- Repetition vs. variation: A₁ and B share their slow tempo wander (residual correlation 0.96, ±100 ms over minutes; cycle-to-cycle jitter ~30 ms), while A's backswing strike carries all the free variation (115 ms jitter, 9% missed cycles, lag-1 ≈ 0).
- Timbre: hum T60 ≈ 17 s ≫ 3.17 s cycle — the pattern rides on a continuous B♭+D drone; 29 Hz mode pairs in bell A add strike roughness.
-
Both bells swing (
rhythm.partial_fm): partials are frequency-modulated at the cycle rate (2.35 / 1.26 cents at the nominals, 30–60× above an off-rate control) — Doppler from the moving bells. Bell B swings but sounds one audible strike per cycle, so the millisecond phase lock is synchronization of two swinging bells. -
Masking is frequency-selective (
background.masking_index): the typical floor rises 9–14 dB in the bells' partial bands but only 1.3 dB in the 250 Hz–8 kHz median — "lo-fi", but surgically so.
- Partials from the cached per-minute mean PSD (
minspec), contrasting source-active vs quiet minutes — no extra audio pass to find them. - ACF-informed onset picking and periodicity bounds (avoids the subharmonic trap the first automated run fell into).
- Strike-triggered rise spectra as the cross-talk test: an apparent
"second strike" of bell B had only bell A partials in its rise spectrum —
leakage, not a strike. Now automated as
crosstalk_suspects. - Per-partial DOA scattered over ~70° of azimuth (street-canyon reflections): per-source azimuths are sector estimates, not bearings.
- The recorder clock was 665 s slow, calibrated against the known 21:30:00
end of ringing — the origin of
clock_offset_sincalibration.json.
ambiscape analyze SESSION/ && ambiscape rhythm SESSION/
ambiscape taxonomy SESSION/ # after authoring annotations.json
ambiscape iso SESSION/See Recipes for the walkthrough. The trimmed recording (speechgate PASS, 0.00% speech) is published on Freesound.