How many people were in the library?
Pick a day. Each minute is the CSI room level, calibrated that day against the Bluetooth devices the fleet heard, and fused with them. Bluetooth addresses become people through a calibration on few labels, so every count carries a wide range.
Companion labs in Occupancy
This page is a snapshot, built ; it is not live. Other views: the frozen estimator, day by day · Bluetooth in the room.
People at 2.00 Bluetooth addresses per person, the Bluetooth occupancy model's estimate from 4 labelled windows (90 %: 0.57–10.69). The range column carries the model band and that calibration range together.
| Day | Busiest hour, people | Range | CSI minutes | Bluetooth-only minutes | CSI calibration |
|---|---|---|---|---|---|
| 2026-09-14 | 0 at 23:00 | 0–0 | 0 | 66 | pooled |
| 2026-09-15 | 80 at 13:00 | 14–292 | 0 | 1440 | pooled |
| 2026-09-16 | 96 at 13:00 | 17–347 | 117 | 1323 | pooled-slope |
| 2026-09-17 | 74 at 15:00 | 13–272 | 135 | 1305 | pooled-slope |
| 2026-09-18 | 27 at 10:00 | 5–102 | 218 | 1222 | pooled-slope |
| 2026-09-19 | 13 at 13:00 | 2–48 | 850 | 590 | pooled-slope |
| 2026-09-20 | 6 at 14:00 | 1–23 | 396 | 1044 | pooled-slope |
| 2026-09-21 | 76 at 14:00 | 13–277 | 429 | 1011 | pooled-slope |
| 2026-09-22 | 77 at 13:00 | 14–281 | 513 | 927 | pooled-slope |
| 2026-09-23 | 95 at 13:00 | 17–345 | 270 | 1170 | pooled-slope |
| 2026-09-24 | 78 at 13:00 | 14–285 | 977 | 448 | pooled-slope |
| 2026-09-25 | 19 at 12:00 | 3–74 | 827 | 613 | pooled-slope |
| 2026-09-26 | 4 at 15:00 | 1–18 | 1044 | 396 | pooled-slope |
| 2026-09-27 | 10 at 15:00 | 2–37 | 609 | 831 | pooled-slope |
| 2026-09-28 | 88 at 12:00 | 16–320 | 534 | 906 | pooled-slope |
| 2026-09-29 | 92 at 13:00 | 16–334 | 625 | 815 | pooled-slope |
| 2026-09-30 | 81 at 13:00 | 14–295 | 716 | 724 | pooled-slope |
| 2026-10-01 | 67 at 11:00 | 12–246 | 1150 | 290 | pooled-slope |
| 2026-10-02 | 34 at 10:00 | 6–124 | 492 | 904 | pooled-slope |
| 2026-10-03 | 4 at 16:00 | 1–16 | 449 | 991 | pooled-slope |
| 2026-10-04 | 4 at 15:00 | 1–16 | 760 | 680 | pooled-slope |
| 2026-10-05 | 86 at 14:00 | 15–313 | 1033 | 407 | pooled-slope |
| 2026-10-06 | 95 at 13:00 | 17–345 | 644 | 796 | pooled-slope |
| 2026-10-07 | 92 at 15:00 | 17–335 | 795 | 645 | pooled-slope |
| 2026-10-08 | 116 at 13:00 | 21–417 | 1244 | 196 | pooled-slope |
| 2026-10-09 | 82 at 12:00 | 15–295 | 495 | 945 | pooled-slope |
| 2026-10-10 | 15 at 14:00 | 3–56 | 225 | 1215 | pooled-slope |
| 2026-10-11 | 11 at 15:00 | 2–41 | 760 | 680 | pooled-slope |
| 2026-10-12 | 80 at 13:00 | 14–295 | 916 | 524 | pooled-slope |
| 2026-10-13 | 95 at 13:00 | 17–348 | 1076 | 364 | pooled-slope |
| 2026-10-14 | 94 at 13:00 | 17–342 | 1287 | 153 | pooled-slope |
| 2026-10-15 | 65 at 11:00 | 11–239 | 1200 | 240 | pooled-slope |
| 2026-10-16 | 22 at 12:00 | 4–85 | 1079 | 361 | pooled-slope |
| 2026-10-17 | 13 at 16:00 | 2–50 | 1203 | 237 | pooled-slope |
| 2026-10-18 | 13 at 15:00 | 2–49 | 884 | 556 | pooled-slope |
| 2026-10-20 | 98 at 13:00 | 17–357 | 582 | 858 | pooled-slope |
| 2026-10-21 | 93 at 13:00 | 17–341 | 1112 | 328 | pooled-slope |
| 2026-10-22 | 90 at 10:00 | 16–326 | 1258 | 182 | pooled-slope |
| 2026-10-23 | 39 at 10:00 | 7–144 | 1257 | 183 | pooled-slope |
| 2026-10-24 | 8 at 13:00 | 1–29 | 1257 | 183 | pooled-slope |
| 2026-10-25 | 6 at 13:00 | 1–24 | 1259 | 181 | pooled-slope |
| 2026-10-26 | 12 at 08:00 | 2–45 | 180 | 390 | pooled-slope |
2026-10-15, hour by hour
| Hour | People (mean) | Range | Share of minutes with CSI |
|---|---|---|---|
| 00:00 | 0 | 0–14 | 100 % |
| 01:00 | 0 | 0–14 | 100 % |
| 02:00 | 0 | 0–14 | 100 % |
| 03:00 | 0 | 0–14 | 52 % |
| 04:00 | 0 | 0–14 | 48 % |
| 05:00 | 0 | 0–14 | 100 % |
| 06:00 | 0 | 0–15 | 100 % |
| 07:00 | 12 | 2–55 | 100 % |
| 08:00 | 8 | 1–43 | 100 % |
| 09:00 | 52 | 9–194 | 100 % |
| 10:00 | 65 | 11–239 | 100 % |
| 11:00 | 65 | 11–239 | 100 % |
| 12:00 | 53 | 9–198 | 23 % |
| 13:00 | 58 | 10–217 | 100 % |
| 14:00 | 34 | 6–131 | 100 % |
| 15:00 | 46 | 8–172 | 100 % |
| 16:00 | 42 | 7–160 | 100 % |
| 17:00 | 35 | 6–137 | 100 % |
| 18:00 | 21 | 3–88 | 100 % |
| 19:00 | 14 | 2–61 | 100 % |
| 20:00 | 5 | 0–31 | 100 % |
| 21:00 | 4 | 0–26 | 77 % |
| 22:00 | 0 | 0–14 | 0 % |
| 23:00 | 0 | 0–14 | 0 % |
How the count is made, and what it cannot claim
- Teacher. Non-public Bluetooth addresses per receiver-minute, the median over receivers. Their night floor is 0.
- CSI model. Addresses = b0 + b1·(CSI room level) + b2·(clock) + b3·(Wi-Fi frame rate). The slopes b1–b3 are fitted on every other day; only the intercept b0 is set from the day's own minutes, when it has at least 60 with every reading. A full refit on one day's minutes was tried and rejected: it missed by far more, and its coefficients swung between days. The clock is the other days' mean at the same hour and day class. The frame rate counts frames from anyone but our injector. A day without enough minutes of its own uses the level and the frame rate, fitted on the other days, without the clock: the other days' hour pattern belongs to the semester and would leak in.
- Fusion. Where both exist, the inverse-variance mean of the CSI prediction and the heard addresses. The CSI variance is the fit's residual less the Bluetooth minute-to-minute jitter. The CSI weight slider overrides the measured weight; its band then follows the chosen weight.
- People. Addresses divided by μ, the addresses one person adds to one receiver in one minute. μ comes from the Bluetooth occupancy model fitted on OL-001, OL-002, OL-003, OL-004: 2.00 (90 %: 0.57–10.69); on OL-003, OL-004 alone it is 2.91 (1.47–6.87). Those labels are two and three people on one morning (2 September), so the scale is weakly known. The receivers also hear beyond the library: in this hall the signal falls off slowly with distance, so devices in the corridors and rooms nearby count too. Counting sweeps on busy days are what will fix the scale.
Does CSI read the crowd here? Every slope is fitted on the other days. On each of 39 days, the first 60 minutes with every reading may set a daily intercept, and the rest are scored against the addresses heard.
| Model | Median error, addresses a minute |
|---|---|
| Clock alone | 15.1 |
| Clock + Wi-Fi frame rate | 14.9 |
| Clock + Wi-Fi + CSI | 14.2 |
| Clock + Wi-Fi, daily intercept | 13.9 |
| Clock + Wi-Fi + CSI, daily intercept | 15.3 |
What CSI adds the way this page uses it — the last row against the one before — is +0.2 addresses a minute (mean over days, 95 % bootstrap over days [-2.0, +2.0]; negative favours CSI). CSI wins on 17 of 39 days. The interval reaches zero, so no gain from CSI is detectable here. Last week's two-link study found −1.7 addresses (95 % [−3.1, −0.9]) on fixed links.