The rate ladder.
Our transmitter is a metronome: it sends the same short frame at a fixed rate, and every receiver counts the frames that arrive. Speed the metronome up and at some rate the receivers start to miss beats. A rate ladder finds that rate by stepping through it, up and back down, while everything else in the room stays as it was.
Declared step rates from the fleet inventory (infra/ansible/inventory/group_vars/csi_nodes.yml);
the illuminator's own step sessions and the receivers' reduced minutes from the measurement lake, snapshot 149907 (2026-09-11T13:00+00:00).
The reduction that scopes a minute's frame count to our transmitter is reduction schema 4.
Every statistic behind the headcount is computed over the frames that arrive. The Doppler band needs at least thirty frames in a quarter of a second, which is 120 frames a second, and the envelope shares that floor. If the room cannot deliver 120 frames a second, the instrument goes blind before the room goes quiet, and a busy day, with more radios competing for the same channel, may take the floor away exactly when there is most to see. The ladder measures where that happens.
The fleet has run 19 ladders on 3 channels (6, 11, 48): 12 at night and 7 by day, 202 illuminator steps in all. 5 of them have their receivers' minutes reduced, 1140 minutes in all.
What a ladder is
One node is the illuminator. For five minutes it sends 25 frames a second; then 50; then 100, 250 and 500; then back down the same rungs. Each rung is its own capture session on the illuminator, so its start and end are recorded to the second, and the illuminator counts what it sent. The other nodes run one continuous session across all ten rungs, so every rung is judged by the same receivers in the same hour.
| Step | Profile | Commanded (Hz) | From | To | Seconds | Sent | Sent (Hz) | Skipped | Errors |
|---|---|---|---|---|---|---|---|---|---|
| 1 | illum-rate48-025 | 25 | 301 | 7,503 | 24.9 | 0 | 0 | ||
| 2 | illum-rate48-050 | 50 | 300 | 15,006 | 50.0 | 0 | 0 | ||
| 3 | illum-rate48-100 | 100 | 300 | 30,013 | 100.0 | 0 | 0 | ||
| 4 | illum-rate48-250 | 250 | 301 | 75,028 | 249.3 | 0 | 0 | ||
| 5 | illum-rate48-500 | 500 | 300 | 150,055 | 500.2 | 0 | 0 | ||
| 6 | illum-rate48-500 | 500 | 301 | 150,063 | 498.5 | 0 | 0 | ||
| 7 | illum-rate48-250 | 250 | 301 | 75,028 | 249.3 | 0 | 0 | ||
| 8 | illum-rate48-100 | 100 | 301 | 30,011 | 99.7 | 0 | 0 | ||
| 9 | illum-rate48-050 | 50 | 308 | 15,007 | 48.7 | 0 | 0 |
What arrives
If every frame reached every receiver, a plot of delivered rate against commanded rate would be a straight line at 45 degrees. The interesting shape is where it bends: the rate above which sending faster no longer delivers faster. Wi-Fi radios share a channel by listening before they talk, so on a busy channel the illuminator itself has to wait its turn, and a receiver can also drop frames it heard but could not process. Both look like a miss. This figure shows the bend per receiver, night ladders and day ladders on one axis, so the two hours can be compared without a percentage in between.
| Period | Commanded (Hz) | Receiver | Minutes | Delivered median (Hz) | p10 | p90 | Ladders |
|---|---|---|---|---|---|---|---|
| day | 25 | monad01 | 1 | 24.7 | 24.7 | 24.7 | 1 |
| day | 25 | monad02 | 1 | 24.5 | 24.5 | 24.5 | 1 |
| day | 25 | monad03 | 2 | 13.5 | 4.5 | 22.5 | 1 |
| day | 25 | monad04 | 2 | 9.8 | 2.1 | 17.5 | 1 |
| day | 25 | monad05 | 1 | 24.8 | 24.8 | 24.8 | 1 |
| day | 25 | monad06 | 2 | 7.8 | 1.6 | 14.0 | 1 |
| day | 25 | monad07 | 2 | 12.5 | 2.5 | 22.4 | 1 |
| day | 25 | monad08 | 2 | 15.2 | 14.9 | 15.4 | 1 |
| day | 25 | monad10 | 1 | 24.5 | 24.5 | 24.5 | 1 |
| day | 45 | monad01 | 2 | 44.8 | 44.7 | 44.8 | 1 |
| day | 45 | monad02 | 2 | 44.5 | 44.5 | 44.5 | 1 |
| day | 45 | monad03 | 2 | 44.8 | 44.7 | 44.9 | 1 |
| day | 45 | monad04 | 2 | 44.8 | 44.7 | 44.9 | 1 |
| day | 45 | monad05 | 2 | 43.1 | 42.7 | 43.5 | 1 |
| day | 45 | monad06 | 2 | 44.5 | 44.4 | 44.5 | 1 |
| day | 45 | monad07 | 2 | 44.7 | 44.5 | 44.8 | 1 |
| day | 45 | monad08 | 2 | 43.9 | 43.2 | 44.5 | 1 |
| day | 45 | monad10 | 2 | 44.5 | 44.5 | 44.5 | 1 |
| day | 50 | monad01 | 5 | 49.5 | 29.2 | 49.6 | 1 |
| day | 50 | monad02 | 5 | 48.1 | 16.4 | 48.8 | 1 |
| day | 50 | monad03 | 5 | 49.3 | 29.0 | 49.5 | 1 |
| day | 50 | monad04 | 5 | 49.2 | 29.0 | 49.3 | 1 |
| day | 50 | monad05 | 5 | 49.3 | 29.4 | 49.5 | 1 |
| day | 50 | monad06 | 5 | 48.2 | 28.5 | 48.7 | 1 |
| day | 50 | monad07 | 5 | 49.8 | 48.4 | 49.9 | 1 |
| day | 50 | monad08 | 5 | 48.9 | 28.4 | 49.2 | 1 |
| day | 50 | monad10 | 5 | 47.8 | 28.4 | 48.7 | 1 |
| day | 90 | monad01 | 3 | 88.0 | 86.4 | 88.8 | 1 |
| day | 90 | monad02 | 3 | 85.7 | 85.5 | 86.7 | 1 |
| day | 90 | monad03 | 3 | 90.0 | 89.6 | 90.0 | 1 |
| day | 90 | monad04 | 3 | 89.8 | 89.6 | 89.8 | 1 |
| day | 90 | monad05 | 3 | 88.9 | 88.7 | 89.0 | 1 |
| day | 90 | monad06 | 3 | 88.0 | 86.1 | 88.6 | 1 |
| day | 90 | monad07 | 3 | 89.9 | 89.6 | 90.0 | 1 |
| day | 90 | monad08 | 3 | 88.5 | 88.3 | 88.5 | 1 |
| day | 90 | monad10 | 3 | 86.5 | 85.6 | 86.5 | 1 |
| day | 100 | monad01 | 9 | 98.9 | 68.5 | 99.8 | 1 |
| day | 100 | monad02 | 9 | 96.4 | 48.5 | 97.2 | 1 |
| day | 100 | monad03 | 9 | 98.6 | 68.5 | 99.7 | 1 |
| day | 100 | monad04 | 8 | 98.6 | 94.2 | 99.0 | 1 |
| day | 100 | monad05 | 9 | 98.3 | 68.5 | 99.5 | 1 |
| day | 100 | monad06 | 9 | 97.0 | 66.7 | 97.9 | 1 |
| day | 100 | monad07 | 9 | 99.2 | 78.8 | 99.8 | 1 |
| day | 100 | monad08 | 9 | 97.5 | 64.9 | 98.7 | 1 |
| day | 100 | monad10 | 9 | 97.1 | 67.4 | 97.8 | 1 |
| day | 250 | monad01 | 11 | 247.3 | 170.1 | 248.6 | 2 |
| day | 250 | monad02 | 10 | 241.0 | 112.8 | 245.9 | 2 |
| day | 250 | monad03 | 11 | 246.0 | 133.4 | 250.0 | 2 |
| day | 250 | monad04 | 11 | 247.3 | 113.5 | 249.9 | 2 |
| day | 250 | monad05 | 10 | 247.4 | 234.6 | 248.1 | 2 |
| day | 250 | monad06 | 11 | 246.1 | 103.9 | 248.4 | 2 |
| day | 250 | monad07 | 11 | 247.9 | 239.1 | 249.7 | 2 |
| day | 250 | monad08 | 10 | 228.2 | 36.2 | 248.5 | 2 |
| day | 250 | monad10 | 10 | 236.4 | 87.1 | 245.4 | 2 |
| day | 500 | monad01 | 9 | 496.5 | 164.7 | 498.3 | 1 |
| day | 500 | monad02 | 9 | 485.0 | 86.0 | 488.9 | 1 |
| day | 500 | monad03 | 9 | 496.3 | 118.5 | 498.0 | 1 |
| day | 500 | monad04 | 9 | 494.4 | 149.8 | 496.3 | 1 |
| day | 500 | monad05 | 9 | 494.8 | 126.7 | 496.9 | 1 |
| day | 500 | monad06 | 9 | 488.8 | 145.1 | 491.9 | 1 |
| day | 500 | monad07 | 9 | 497.4 | 378.9 | 498.7 | 1 |
| day | 500 | monad08 | 9 | 489.6 | 105.3 | 493.6 | 1 |
| day | 500 | monad10 | 9 | 485.2 | 134.4 | 490.3 | 1 |
When only the rate moved
The ladder is also a test of the statistics themselves. The room was the same on every rung, so any change in the envelope or the Doppler band between rungs is the instrument responding to its own frame rate, not to a person. A statistic that drifts with the rate has to be read against the rate it was measured at, and the 120 frames a second floor is where both go silent: below it a quarter-second window holds fewer than thirty frames and the reduction refuses to score it.
| Period | Commanded (Hz) | Receiver | Minutes | Envelope median (dB) | Doppler 20–60 Hz median |
|---|---|---|---|---|---|
| day | 25 | monad01 | 1 | 0.03 | — |
| day | 25 | monad02 | 1 | 0.07 | — |
| day | 25 | monad03 | 2 | 0.06 | — |
| day | 25 | monad04 | 2 | 0.04 | — |
| day | 25 | monad05 | 1 | 0.03 | — |
| day | 25 | monad06 | 2 | 0.07 | — |
| day | 25 | monad07 | 2 | 0.04 | — |
| day | 25 | monad08 | 2 | 0.05 | — |
| day | 25 | monad10 | 1 | 0.07 | — |
| day | 45 | monad01 | 2 | 0.07 | — |
| day | 45 | monad02 | 2 | 0.05 | — |
| day | 45 | monad03 | 2 | 0.06 | — |
| day | 45 | monad04 | 2 | 0.06 | — |
| day | 45 | monad05 | 2 | 0.04 | — |
| day | 45 | monad06 | 2 | 0.05 | — |
| day | 45 | monad07 | 2 | 0.04 | — |
| day | 45 | monad08 | 2 | 0.05 | — |
| day | 45 | monad10 | 2 | 0.05 | — |
| day | 50 | monad01 | 5 | 0.03 | — |
| day | 50 | monad02 | 5 | 0.07 | — |
| day | 50 | monad03 | 5 | 0.07 | — |
| day | 50 | monad04 | 5 | 0.04 | — |
| day | 50 | monad05 | 5 | 0.04 | — |
| day | 50 | monad06 | 5 | 0.06 | — |
| day | 50 | monad07 | 5 | 0.06 | — |
| day | 50 | monad08 | 5 | 0.05 | — |
| day | 50 | monad10 | 5 | 0.08 | — |
| day | 90 | monad01 | 3 | 0.07 | — |
| day | 90 | monad02 | 3 | 0.05 | — |
| day | 90 | monad03 | 3 | 0.06 | — |
| day | 90 | monad04 | 3 | 0.06 | — |
| day | 90 | monad05 | 3 | 0.04 | — |
| day | 90 | monad06 | 3 | 0.05 | — |
| day | 90 | monad07 | 3 | 0.04 | — |
| day | 90 | monad08 | 3 | 0.05 | — |
| day | 90 | monad10 | 3 | 0.05 | — |
| day | 100 | monad01 | 9 | 0.03 | — |
| day | 100 | monad02 | 9 | 0.07 | — |
| day | 100 | monad03 | 9 | 0.07 | — |
| day | 100 | monad04 | 8 | 0.04 | — |
| day | 100 | monad05 | 9 | 0.04 | — |
| day | 100 | monad06 | 9 | 0.06 | — |
| day | 100 | monad07 | 9 | 0.06 | — |
| day | 100 | monad08 | 9 | 0.05 | — |
| day | 100 | monad10 | 9 | 0.07 | — |
| day | 250 | monad01 | 11 | 0.03 | 0.0033 |
| day | 250 | monad02 | 10 | 0.07 | 0.0005 |
| day | 250 | monad03 | 11 | 0.07 | 0.0018 |
| day | 250 | monad04 | 11 | 0.04 | 0.0068 |
| day | 250 | monad05 | 10 | 0.04 | 0.0021 |
| day | 250 | monad06 | 11 | 0.06 | 0.0057 |
| day | 250 | monad07 | 11 | 0.06 | 0.0026 |
| day | 250 | monad08 | 10 | 0.05 | 0.0010 |
| day | 250 | monad10 | 10 | 0.07 | 0.0022 |
| day | 500 | monad01 | 9 | 0.03 | 0.0018 |
| day | 500 | monad02 | 9 | 0.07 | 0.0004 |
| day | 500 | monad03 | 9 | 0.07 | 0.0014 |
| day | 500 | monad04 | 9 | 0.04 | 0.0033 |
| day | 500 | monad05 | 9 | 0.04 | 0.0011 |
| day | 500 | monad06 | 9 | 0.06 | 0.0029 |
| day | 500 | monad07 | 9 | 0.06 | 0.0017 |
| day | 500 | monad08 | 9 | 0.05 | 0.0005 |
| day | 500 | monad10 | 9 | 0.08 | 0.0015 |
Every ladder the fleet has run
A ladder is listed the moment the lake holds its sessions, whether or not its minutes are reduced. Night and day are the library's clock, 22:00 to 04:00 being night. A ladder with fewer than ten steps lost steps to a timer that did not fire, or is still running when the snapshot was taken.
| Day | Start | Period | Ch | Run | Steps | Rates (Hz) | Receivers | Reduced | Steps with skips |
|---|---|---|---|---|---|---|---|---|---|
| 2026-09-11 | day | 48 | lib-doppler-ladder-2026-09-11-06 |
5 | 250·125·60·30·90 | 8 | 0 | 0 | |
| 2026-09-09 | day | 48 | lib-doppler-ladder-2026-09-09-04 |
5 | 250·90·45 | 9 | 61 on 9 | 0 | |
| 2026-09-05 | night | 6 | lib-rate-ladder-6-2026-09-05-02 |
8 | 50·100·250·500·25 | 9 | 165 on 9 | 0 | |
| 2026-09-04 | day | 48 | lib-rate-ladder-48-day-2026-09-04-09 |
10 | 25·50·100·250·500 | 9 | 299 on 9 | 0 | |
| 2026-09-02 | day | 48 | lib-rate-ladder-48-day-2026-09-02-07 |
9 | 25·50·100·250·500 | 9 | 0 | 0 | |
| 2026-09-02 | night | 6 | lib-rate-ladder-6-2026-09-01-04 |
10 | 25·50·100·250·500 | 9 | 303 on 9 | 1 | |
| 2026-09-01 | night | 11 | lib-rate-ladder-24-2026-09-01-02 |
10 | 25·50·100·250·500 | 9 | 312 on 9 | 1 | |
| 2026-08-31 | night | 6 | lib-rate-ladder-6-2026-08-30-05 |
3 | 25·50·100 | 9 | 0 | 1 | |
| 2026-08-31 | night | 11 | lib-rate-ladder-24-2026-08-30-04 |
10 | 25·50·100·250·500 | 9 | 0 | 0 | |
| 2026-08-30 | night | 48 | lib-rate-ladder-48-2026-08-30-02 |
10 | 25·50·100·250·500 | 9 | 0 | 0 | |
| 2026-08-26 | night | 11 | lib-rate-ladder-24-2026-08-26-02 |
10 | 25·50·100·250·500 | 9 | 0 | 1 | |
| 2026-08-26 | night | 6 | lib-rate-ladder-6-2026-08-26-01 |
10 | 25·50·100·250·500 | 9 | 0 | 0 | |
| 2026-08-26 | night | 11 | lib-rate-ladder-24-2026-08-25-03 |
10 | 25·50·100·250·500 | 9 | 0 | 0 | |
| 2026-08-26 | night | 6 | lib-rate-ladder-6-2026-08-25-02 |
10 | 25·50·100·250·500 | 9 | 0 | 0 | |
| 2026-08-25 | night | 11 | lib-rate-ladder-24-2026-08-24-03 |
10 | 25·50·100·250·500 | 9 | 0 | 1 | |
| 2026-08-25 | night | 6 | lib-rate-ladder-6-2026-08-24-02 |
10 | 25·50·100·250·500 | 9 | 0 | 0 | |
| 2026-08-23 | day | 48 | lib-rate-ladder-48-2026-08-22-02 |
10 | 25·50·100·250·500 | 8 | 0 | 0 | |
| 2026-08-20 | day | 48 | rate-ladder-48-01 |
41 | 25·50·100·250·500 | 9 | 0 | 0 | |
| 2026-08-16 | day | 11 | monad01-ch11-20260816-0858 |
11 | 5·10·25·50·100 | 5 | 0 | 0 |
Scope of inference. One ladder is one draw of the channel: its ten steps are paired on the same hour, room and roster, so a step against a step is measured, instrument only. A night ladder against a day ladder holds everything fixed but the hour and the people in the building, which is the contrast the day arm was added for. Two ladders on two different days are observed, not measured.