-
Notifications
You must be signed in to change notification settings - Fork 0
Case Study Haarlem Loft
The field validation behind the v0.3.0 case-study toolbox (states,
background.source_fingerprint, schedule.grid_scan,
io.export_segment/stereo_preview): an 11.7 h two-session recording of a
loft in Haarlem, NL (2026-07-15/16, Zoom H3-VR, AmbiX) — a quiet hi-fi
afternoon at a niche position and a full night on the living-room couch
under a wall-mounted air-pump drone. The analysis lives as an executable
Jupyter report in the Intercontinental database session folder
(2026-07-15-Haarlem-loft/analysis/REPORT.ipynb): every number is an
ambiscape function call, the interpretation is written around the cells.
-
A two-state room (
states.state_segmentson the 250–1000 Hz machine band): ventilation off = hi-fi afternoon/morning; on = a lo-fi night with band-level SD 0.4 dB over 8.7 h — a machine, not weather. The manual switch-off (button beep at 07:53:54, a 4 kHzband_levelspike; collapse one second later) is found by the segmentation to the second. -
Fridge duty cycle (
states.duty_cycleon the 2.4 kHz compressor-whine band): period 24.1 min at ≈ 45 % duty, 7 cycles across the afternoon — the "cyclic-machine detector" the roadmap asked for. -
Air-pump fingerprint (
source_fingerprint, night-on minus morning-off): +14 dB turbulence hump at ~770 Hz carrying tonal lines at 146 / 258 / 650 / 820 Hz that hold 0 cents drift for 7+ hours (tonality.tonal_tracks). A cautionary tale: the original prose report read these as a clean "130 Hz blade comb"; the recomputation supports that only partially. Masking (masking_index): median floor +12.5 dB, 86 % of 250 Hz–8 kHz bands elevated > 6 dB — the "lo-fi" claim as a number. -
A soundmark's fate (
schedule.grid_scan, 900 s grid, bell band 350–800 Hz): the church clock is unambiguous only in the post-switch-off morning (08:00 and 08:15, +26 dB rises), marginal-to-absent through the closed shell in the afternoon, and completely masked all night. The strikes' consistent ~+32 s offset from the nominal quarter measured the recorder-clock drift (→schedule.clock_offset). -
Structure-borne night thumps at roughly hourly spacing, sharing the pump-wall bearing (az ≈ +150°, el ≈ +10°), including a −8.6 dBFS double bang at 04:42:51 that was also the night's best reverberation source (ψ = 0.31, the most directional second of the corpus).
-
The European grid, read acoustically (
enf.enf_track, v0.4.0): a 50 Hz hum line +17–25 dB above the floor in every minute of 11.7 h, whose frequency (mean 49.996 Hz, SD 21 mHz) hugs the ENTSO-E ±50 mHz band and agrees with the 100 Hz hum to ~1 mHz — a continuous ENF log of the Continental synchronous grid. A second stable line at ~49.8 Hz (SD 356 mHz) is a rotor just under synchronous speed, not the grid — the motivating example for the cross-harmonic authenticity check. -
Biophony created by a switch-off (
biophony, v0.6.0): the bird band (2–11 kHz) is masked all night; within minutes of the 07:53:55 pump-off it lights up with narrowband, bursty (low temporal entropy), elevated, directionally-spread events — the structural signature of a dove chorus, invisible to the whole-session NDSI (negative, dominated by the machine hours). The motivating case for reading biophony as a combination of structural + spatial measures rather than band energy.
- On/off segmentation needs a bimodal threshold with hysteresis and a minimum duration, and the within-state SD is itself a descriptor (machines are steady; ambience is not).
- Difference spectra (active minus quiet minutes) are the cheap, robust source fingerprint — computed entirely from the cached per-minute PSDs.
- Scanning a known civic grid for band energy finds soundmarks the broadband event detector never sees, and doubles as clock calibration.
- Reports should be executable: converting the prose report to a notebook caught two over-confident readings (the "130 Hz comb", the "~40 s" clock offset) that the original narrative had locked in.
pip install ambiscape # >= 0.3.0
# open 2026-07-15-Haarlem-loft/analysis/REPORT.ipynb and run all cells