Asking the fleet what it is doing…
monad-knowledge Wi-Fi sensing lab · FIIT STU
Instrument · one metronome, nine listeners

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.

In plain words Imagine a metronome in a hall and nine people counting its beats. Speed it up and at some point they start to miss beats; fill the hall with other conversations and they miss more. The fleet runs exactly that: the transmitter steps through a ladder of rates while every receiver counts what arrives.

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 148375 (2026-09-11T10:23+00:00). The reduction that scopes a minute's frame count to our transmitter is reduction schema 4.

Why it matters

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 18 ladders on 3 channels (6, 11, 48): 12 at night and 6 by day, 197 illuminator steps in all. 5 of them have their receivers' minutes reduced, 1140 minutes in all.

§1

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.

sent rate = frames the illuminator reports sent ÷ the rung's seconds    (should equal the commanded rate)
Fig. 1 · the staircase · lib-doppler-ladder-2026-09-09-04ch 48 · 2026-09-09 · day
The rungs of this ladder in order. "Commanded" is the rate the inventory declares for the step's profile; "sent" is the illuminator's own count divided by the step's seconds. "Skipped" is the number of frames csid could not send at the cadence.
StepProfileCommanded (Hz)FromToSecondsSentSent (Hz)SkippedErrors
1illum-dop48-25025018345,018246.000
2illum-dop48-0909018316,20888.600
3illum-dop48-045451848,10444.000
4illum-dop48-0909011610,11787.200
5illum-dop48-25025018345,021246.000
The commanded rate as a staircase over the ladder's hour, with the illuminator's own sent rate as a dot on each tread. Where the receivers' minutes exist they are drawn as faint marks under the staircase, one per receiver-minute, so a tread and what arrived on it sit on one clock. Hover a tread for its numbers.steps: sessions rows of the illuminator's profiles · commanded: infra/ansible/inventory/group_vars/csi_nodes.yml
§2

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.

delivered rate at a receiver = our frames it reported in the minute ÷ the minute's seconds
Fig. 2 · delivered against commanded · channel 48night ladders 1 · day ladders 5
Per period, commanded rate and receiver: the minutes inside the rung across every ladder, the median delivered rate and its 10th to 90th percentile. Hertz against hertz.
PeriodCommanded (Hz)ReceiverMinutesDelivered median (Hz)p10p90Ladders
day25monad01124.724.724.71
day25monad02124.524.524.51
day25monad03213.54.522.51
day25monad0429.82.117.51
day25monad05124.824.824.81
day25monad0627.81.614.01
day25monad07212.52.522.41
day25monad08215.214.915.41
day25monad10124.524.524.51
day45monad01244.844.744.81
day45monad02244.544.544.51
day45monad03244.844.744.91
day45monad04244.844.744.91
day45monad05243.142.743.51
day45monad06244.544.444.51
day45monad07244.744.544.81
day45monad08243.943.244.51
day45monad10244.544.544.51
day50monad01549.529.249.61
day50monad02548.116.448.81
day50monad03549.329.049.51
day50monad04549.229.049.31
day50monad05549.329.449.51
day50monad06548.228.548.71
day50monad07549.848.449.91
day50monad08548.928.449.21
day50monad10547.828.448.71
day90monad01388.086.488.81
day90monad02385.785.586.71
day90monad03390.089.690.01
day90monad04389.889.689.81
day90monad05388.988.789.01
day90monad06388.086.188.61
day90monad07389.989.690.01
day90monad08388.588.388.51
day90monad10386.585.686.51
day100monad01998.968.599.81
day100monad02996.448.597.21
day100monad03998.668.599.71
day100monad04898.694.299.01
day100monad05998.368.599.51
day100monad06997.066.797.91
day100monad07999.278.899.81
day100monad08997.564.998.71
day100monad10997.167.497.81
day250monad0111247.3170.1248.62
day250monad0210241.0112.8245.92
day250monad0311246.0133.4250.02
day250monad0411247.3113.5249.92
day250monad0510247.4234.6248.12
day250monad0611246.1103.9248.42
day250monad0711247.9239.1249.72
day250monad0810228.236.2248.52
day250monad1010236.487.1245.42
day500monad019496.5164.7498.31
day500monad029485.086.0488.91
day500monad039496.3118.5498.01
day500monad049494.4149.8496.31
day500monad059494.8126.7496.91
day500monad069488.8145.1491.91
day500monad079497.4378.9498.71
day500monad089489.6105.3493.61
day500monad109485.2134.4490.31
Delivered against commanded, one line per receiver, solid for night ladders and dashed for day ladders, with the 45-degree line drawn as the ceiling. The band around each fleet point is the 10th to 90th percentile of its minutes. A day line that lies on the night line says the bend belongs to the radios; a day line below it at the same commanded rate says the building's traffic took the difference.Delivered rate is our injector's frames the receiver actually reported in that minute, divided by the minute's seconds: hertz against hertz, never a percentage. The reduction scopes the count to the injector's own address, so ambient traffic on the channel is not in it. A minute counts toward a step only when it lies wholly inside that step's window.
§3

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.

Fig. 3 · envelope and Doppler by rung · channel 48medians over the rung's minutes
Per period, commanded rate and receiver: the median injector-scoped envelope (dB) and Doppler-band power over the rung's minutes. A dash is a rung whose minutes the reduction could not score.
PeriodCommanded (Hz)ReceiverMinutesEnvelope median (dB)Doppler 20–60 Hz median
day25monad0110.03
day25monad0210.07
day25monad0320.06
day25monad0420.04
day25monad0510.03
day25monad0620.07
day25monad0720.04
day25monad0820.05
day25monad1010.07
day45monad0120.07
day45monad0220.05
day45monad0320.06
day45monad0420.06
day45monad0520.04
day45monad0620.05
day45monad0720.04
day45monad0820.05
day45monad1020.05
day50monad0150.03
day50monad0250.07
day50monad0350.07
day50monad0450.04
day50monad0550.04
day50monad0650.06
day50monad0750.06
day50monad0850.05
day50monad1050.08
day90monad0130.07
day90monad0230.05
day90monad0330.06
day90monad0430.06
day90monad0530.04
day90monad0630.05
day90monad0730.04
day90monad0830.05
day90monad1030.05
day100monad0190.03
day100monad0290.07
day100monad0390.07
day100monad0480.04
day100monad0590.04
day100monad0690.06
day100monad0790.06
day100monad0890.05
day100monad1090.07
day250monad01110.030.0033
day250monad02100.070.0005
day250monad03110.070.0018
day250monad04110.040.0068
day250monad05100.040.0021
day250monad06110.060.0057
day250monad07110.060.0026
day250monad08100.050.0010
day250monad10100.070.0022
day500monad0190.030.0018
day500monad0290.070.0004
day500monad0390.070.0014
day500monad0490.040.0033
day500monad0590.040.0011
day500monad0690.060.0029
day500monad0790.060.0017
day500monad0890.050.0005
day500monad1090.080.0015
The same rungs and receivers as Fig. 2, with the envelope or the Doppler-band power on the vertical axis (switch above the figure). A flat line across rungs means the statistic does not care how fast the metronome ticks, which is what a good occupancy statistic should do above the floor.inj_ratio_amp_sd_db and inj_doppler_pw_20_60 from the lake's blocks at reduction schema 4
§4

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.

Every ladder in the snapshot, newest first. "Reduced" is the number of receiver-minutes the lake has scored inside this ladder's rungs; zero means decoded to the frame and not yet reduced. Pick a row to draw its staircase in §1.
DayStartPeriodChRunStepsRates (Hz)ReceiversReducedSteps with skips
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.