How a level is made.
Think of a room with a ticking metronome and nine microphones. In an empty room every tick comes back the same; people walking through make the echo flutter. The occupancy app turns that flutter into one number per minute. This page follows one real minute from the flutter of a single frame to the headcount, one declared step at a time: a scalar per frame, a quarter-second window, a minute, a floor, an octave, a bucket, a fleet, a count. Every step is the reduction's own code or the snapshot's own row.
Frames and windows: the committed sample envelope-csiq.zst (monad07_exp-chan-36_20260901-010744, 397 frames in 2.10 s), reduced on this request by lake/ingest.py's own functions. Minute onward: the occupancy snapshot (web/occupancy_atlas.py, schema 4), the row the app shows for 2026-09-01 11:20 library time.
Capture for the frame stages: band-2.4__condition-clean__width-HT20 · band-5__condition-clean__width-HT20 · band-5__condition-quarantined__width-HT20 · band-5__condition-clean__width-HT40+ · band-5__condition-clean__width-80MHz · envelope-csiq · envelope-csiq.zst · writer-modern · writer-legacy · band-6 · Minute: open the day in the app
A frame becomes a number
The reduction never keeps a record's table. From each frame it keeps two scalars: the median over tones of the two-chain ratio's size in decibels, and the circular median of its angle. The first is the envelope observable; the second feeds the motion statistic. Both survive the card's per-frame gain, because both chains share it.
| t (s) | ratio_amp_db | ratio phase (rad) |
|---|---|---|
| 0.000 | 0.212 | -0.278 |
| 0.008 | 0.225 | -0.2552 |
| 0.009 | 0.235 | -0.3424 |
| 0.019 | 0.243 | -0.2922 |
| 0.020 | 0.232 | -0.2489 |
| 0.024 | 0.167 | -0.3687 |
| 0.024 | 0.178 | -0.3112 |
| 0.025 | 0.198 | -0.3212 |
| 0.025 | 0.234 | -0.3342 |
| 0.026 | 0.25 | -0.2877 |
| 0.026 | 0.181 | -0.3732 |
| 0.027 | 0.175 | -0.326 |
| 0.038 | 0.241 | -0.3562 |
| 0.043 | 0.182 | -0.3205 |
| 0.044 | 0.149 | -0.2598 |
| 0.047 | 0.158 | -0.301 |
| 0.051 | 0.227 | -0.3552 |
| 0.056 | 0.197 | -0.3719 |
| 0.060 | 0.229 | -0.3705 |
| 0.062 | 0.207 | -0.2901 |
| 0.072 | -0.1 | -0.4656 |
| 0.072 | 0.026 | -0.3482 |
| 0.073 | -0.084 | -0.493 |
| 0.076 | -0.093 | -0.4307 |
| 0.077 | 0.143 | -0.3601 |
| 0.077 | 0.217 | -0.3735 |
| 0.083 | 0.242 | -0.2625 |
| 0.089 | -0.054 | -0.3237 |
| 0.090 | 0.114 | -0.3168 |
| 0.091 | 0.022 | -0.4843 |
| 0.092 | 0.022 | -0.3573 |
| 0.092 | -0.147 | -0.4564 |
| 0.102 | 0.192 | -0.2844 |
| 0.110 | 0.203 | -0.2901 |
| 0.121 | 0.205 | -0.2924 |
| 0.127 | 0.25 | -0.2772 |
| 0.128 | 0.177 | -0.349 |
| 0.129 | 0.169 | -0.261 |
| 0.135 | -0.099 | -0.3738 |
| 0.135 | 0.035 | -0.353 |
A quarter of a second becomes two statistics
Frames are grouped into 0.25 s sub-windows from the segment's first frame. A window with fewer than thirty frames is not scored, which is the 120 Hz floor under every statistic on the site. In a scored window, the standard deviation of the frame scalars is the envelope statistic, and the unnormalised Lomb–Scargle power of the unwrapped, detrended ratio phase in the 20 to 60 Hz band, divided by the frame count, is the walker statistic.
| Window | Frames | sd (dB) | Doppler 20–60 | Doppler 5–20 | Scored |
|---|---|---|---|---|---|
| 0 | 89 | 0.125 | 0.008251 | 0.002765 | yes |
| 1 | 41 | 0.1071 | 0.006546 | 0.001194 | yes |
| 2 | 40 | 0.0778 | 0.000974 | 0.00048 | yes |
| 3 | 36 | 0.0792 | 0.002467 | 0.001512 | yes |
| 4 | 50 | 0.08 | 0.002734 | 0.000871 | yes |
| 5 | 37 | 0.0963 | 0.00991 | 0.005086 | yes |
| 6 | 38 | 0.095 | 0.000777 | 0.00014 | yes |
| 7 | 43 | 0.1031 | 0.001789 | 0.000317 | yes |
| 8 | 23 | 0.1054 | — | — | no |
A minute becomes an octave
Each receiver's minute is the standard deviation of its frame scalars over the injector's frames. It is divided by that receiver's own floor: the median of its certified-empty night minutes when the day has thirty of them (rule A), else the day's own tenth percentile (rule B), and the rule is stored beside the number. The quotient in base-two logarithm is the level in octaves: one octave means the spread doubled against the empty room.
| Receiver | value (dB) | floor (dB) | rule | floor minutes | level (oct) | bucket | rate (Hz) |
|---|---|---|---|---|---|---|---|
| monad02 | 0.0454 | 0.0231 | B | 337 | 0.97 | occupied | 230 |
| monad03 | 0.0511 | 0.0333 | B | 336 | 0.62 | low | 230 |
| monad07 | 0.0674 | 0.0611 | B | 336 | 0.14 | empty | 226 |
| monad09 | 0.0556 | 0.0352 | B | 337 | 0.66 | low | 220 |
| monad10 | 0.0511 | 0.0569 | B | 337 | -0.15 | empty | 220 |
A fleet becomes a probability, and a probability a count
The fleet level is the median over the receivers that scored the minute, at least 3 of them. The receivers are resampled 1000 times and the median recomputed; the 5th and 95th percentiles of those medians are the band, and the share of them that fall in each bucket is the bucket's probability. Nine receivers on one illuminator is an optimistic n, and the band is labelled a receiver bootstrap wherever it appears.
| Receivers | Fleet level | 5 % | 95 % | P(empty) | P(low) | P(occupied) | P(high) | Most likely | People |
|---|---|---|---|---|---|---|---|---|---|
| 5 | 0.618 | -0.155 | 0.972 | 32.0 % | 62.2 % | 5.8 % | 0.0 % | low (62 %) | 1 (0 to 3 or more) |
Anchors of the count map: 0 → 0.00 oct; 2 → 0.88 oct (p10 0.50, p90 1.18, 8 min); 3 → 0.93 oct (p10 0.48, p90 1.21, 18 min).
A count becomes a confidence
The map in §4 returns one integer and one interval at no stated confidence. The same fleet level can instead be read against every count the anchors can speak for: the level each count would produce, its spread, and the minute's own bootstrap band. The result is a probability per count, from which any bucket's confidence follows. Above the top labelled count the instrument cannot tell "3" from "more", so that mass is shown as its own state and never hidden.
| 0 | 1 | 2 | 3 | 4 or more |
|---|---|---|---|---|
| 6.9 % | 28.4 % | 22.7 % | 21.0 % | 21.0 % |
50 %: 1 to 2 (mass 51 %) · 80 %: 1 or more (mass 93 %) · 90 %: 1 or more (mass 93 %) · 95 %: 0 or more (mass 100 %)
| 0 or more |
|---|
| 100.0 % |
| 0 | 1 | 2 to 3 | 4 or more |
|---|---|---|---|
| 6.9 % | 28.4 % | 43.7 % | 21.0 % |
Related: the app on this day · the episodes · the confidence behind the count · one record of this capture · JSON: frames · minute