Live status · Read the latest
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 407171 (2026-10-26T21:19+00:00). The reduction that scopes a minute's frame count to our transmitter is reduction schema 5.

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 25 ladders on 3 channels (6, 11, 48): 16 at night and 9 by day, 261 illuminator steps in all. 24 of them have their receivers' minutes reduced, 11689 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 · rate-ladder-48-01ch 48 · 2026-08-20 · 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. "Heard" says whether any receiver reported one of our frames inside the step; a dash means no minute of the step is reduced.
StepProfileCommanded (Hz)FromToSecondsSentSent (Hz)SkippedErrorsHeard
1illum-rate48-025253007,50325.000—
2illum-rate48-05050572,83049.600—
3illum-rate48-025253007,50325.000yes
4illum-rate48-0505030015,00550.000yes
5illum-rate48-10010030030,010100.000yes
6illum-rate48-25025030075,025250.100yes
7illum-rate48-500500301150,050498.500yes
8illum-rate48-500500301150,055498.500yes
9illum-rate48-25025028069,826249.400yes
10illum-rate48-025251313,26824.900—
11illum-rate48-025253007,50325.000—
12illum-rate48-025253007,50325.000—
13illum-rate48-0505030015,00550.000yes
14illum-rate48-10010030030,011100.000yes
15illum-rate48-25025030075,026250.100yes
16illum-rate48-500500301150,049498.500yes
17illum-rate48-500500301150,056498.500yes
18illum-rate48-25025030175,024249.200yes
19illum-rate48-10010030030,009100.000yes
20illum-rate48-0505030015,00650.000yes
21illum-rate48-025253007,50325.000yes
22illum-rate48-025253007,50325.000—
23illum-rate48-0505030015,00550.000yes
24illum-rate48-10010030030,010100.000yes
25illum-rate48-25025030175,025249.300yes
26illum-rate48-500500301150,053498.500yes
27illum-rate48-500500300150,052500.200yes
28illum-rate48-25025030175,024249.200yes
29illum-rate48-10010030030,011100.000yes
30illum-rate48-0505030115,00649.900yes
31illum-rate48-025253007,50325.000yes
32illum-rate48-025253017,50324.900—
33illum-rate48-0505030015,00550.000yes
34illum-rate48-10010030030,010100.000yes
35illum-rate48-25025030075,024250.100yes
36illum-rate48-500500301150,052498.500yes
37illum-rate48-500500301150,052498.500yes
38illum-rate48-25025030075,026250.100yes
39illum-rate48-10010030130,01199.700yes
40illum-rate48-0505030115,00649.900yes
41illum-rate48-025253017,50324.900yes
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 5 · day ladders 8
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
day25monad012124.924.525.03
day25monad021324.724.524.73
day25monad032524.924.825.05
day25monad042124.824.425.05
day25monad051724.824.725.03
day25monad061724.821.925.04
day25monad071724.924.725.05
day25monad082225.024.825.04
day25monad101325.024.525.04
day30monad01224.623.525.71
day30monad02221.415.527.31
day30monad03229.529.429.51
day30monad04328.828.729.21
day30monad06228.928.529.31
day30monad07229.829.829.81
day30monad08225.322.228.31
day30monad10228.928.928.91
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
day50monad013549.522.949.84
day50monad023148.611.349.54
day50monad034349.722.750.06
day50monad043949.418.249.96
day50monad053549.621.649.94
day50monad063149.022.650.05
day50monad073149.846.550.06
day50monad083849.822.250.05
day50monad102849.417.450.06
day60monad01258.958.659.21
day60monad02258.257.658.71
day60monad03259.259.059.51
day60monad04258.358.158.61
day60monad06259.259.059.51
day60monad07259.859.859.91
day60monad08258.858.758.91
day60monad10257.156.058.21
day90monad01688.476.189.02
day90monad02686.376.688.62
day90monad03589.789.590.02
day90monad04589.567.489.82
day90monad05388.988.789.01
day90monad06687.077.189.02
day90monad07689.878.889.92
day90monad08688.578.488.82
day90monad10586.585.888.52
day100monad015299.393.899.84
day100monad024397.989.499.24
day100monad03238100.099.3100.06
day100monad04230100.098.5100.06
day100monad055299.294.299.84
day100monad06137100.096.8100.05
day100monad0722299.799.2100.06
day100monad08230100.099.1100.05
day100monad10214100.099.0100.06
day125monad012121.9121.8122.01
day125monad022118.8117.8119.71
day125monad032123.0122.8123.31
day125monad042119.1119.0119.21
day125monad062122.3122.2122.41
day125monad072124.2124.0124.51
day125monad082121.2120.6121.91
day125monad102119.3118.6120.01
day250monad0158248.7239.8249.46
day250monad0249246.5233.9248.36
day250monad0366249.5238.6250.08
day250monad0458248.4238.2249.38
day250monad0557248.1242.0249.65
day250monad0654247.5238.0249.07
day250monad0750249.4247.2249.88
day250monad0857249.6228.9249.87
day250monad1041247.6231.4249.58
day500monad0157497.3284.9498.94
day500monad0248486.7134.0496.24
day500monad0362497.7333.3499.66
day500monad0454494.0235.5497.86
day500monad0556496.1325.0499.24
day500monad0651492.3208.3498.05
day500monad0746498.3472.7499.46
day500monad0854498.1317.9499.65
day500monad1038493.7232.0498.86
night25monad01421.516.225.01
night25monad02412.87.718.51
night25monad031625.021.825.04
night25monad041624.921.725.04
night25monad05421.616.224.91
night25monad061624.921.625.04
night25monad071625.022.725.04
night25monad081625.010.925.04
night25monad101624.921.725.04
night50monad01549.624.449.91
night50monad02548.623.049.41
night50monad031750.042.950.04
night50monad041749.839.850.04
night50monad05549.525.749.81
night50monad061749.640.150.04
night50monad071750.048.950.04
night50monad081749.941.750.04
night50monad101749.841.650.04
night100monad01899.891.999.91
night100monad02898.887.499.01
night100monad03287100.099.8100.04
night100monad0428799.799.1100.04
night100monad05899.592.799.61
night100monad0628799.898.9100.04
night100monad07287100.0100.0100.04
night100monad0828799.999.8100.04
night100monad1028799.799.4100.04
night250monad018249.5189.6249.61
night250monad028247.0152.5247.31
night250monad0320249.7244.3250.04
night250monad0420249.2242.8250.04
night250monad058248.7191.8249.11
night250monad0620247.9242.2250.04
night250monad0720250.0246.2250.04
night250monad0820249.7243.7249.94
night250monad1020248.9242.8250.04
night500monad018498.8164.4498.91
night500monad028493.9172.6494.41
night500monad0317498.9254.2500.04
night500monad0417498.4279.5500.04
night500monad058497.7208.2498.01
night500monad0617494.9244.2500.04
night500monad0717500.0482.9500.04
night500monad0817499.3254.1499.84
night500monad1017495.2247.3500.04
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. A minute in which no receiver reported a single frame from our transmitter is left out of the curve: the transmitter was off the air, whatever its own sent count says, so the minute says nothing about what the channel delivers. A step with no such frame in any minute is marked not heard. The last block of each 30-minute capture segment holds only the seconds before the cut and is dropped too, because the next segment's first block covers the same minute in full. This snapshot leaves out 5669 receiver-minutes nobody heard (64 whole steps) and 287 segment-tail blocks.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 and comes from the receiver's capture session for this ladder.
§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
day25monad01211.05—
day25monad02130.78—
day25monad03250.20—
day25monad04210.19—
day25monad05170.18—
day25monad06170.21—
day25monad07170.32—
day25monad08220.20—
day25monad10130.28—
day30monad0120.74—
day30monad0221.28—
day30monad0321.04—
day30monad0432.09—
day30monad0620.66—
day30monad0720.45—
day30monad0820.57—
day30monad1021.02—
day45monad0120.32—
day45monad0220.34—
day45monad0320.37—
day45monad0420.55—
day45monad0520.18—
day45monad0620.32—
day45monad0720.17—
day45monad0820.34—
day45monad1020.81—
day50monad01350.98—
day50monad02310.90—
day50monad03430.21—
day50monad04390.19—
day50monad05350.19—
day50monad06310.24—
day50monad07310.45—
day50monad08380.24—
day50monad10280.47—
day60monad0120.14—
day60monad0220.56—
day60monad0320.26—
day60monad0420.71—
day60monad0620.20—
day60monad0720.14—
day60monad0820.61—
day60monad1020.23—
day90monad0160.18—
day90monad0260.43—
day90monad0350.35—
day90monad0450.51—
day90monad0530.14—
day90monad0660.25—
day90monad0760.13—
day90monad0860.32—
day90monad1050.34—
day100monad01521.01—
day100monad02430.82—
day100monad032380.27—
day100monad042300.19—
day100monad05520.18—
day100monad061370.11—
day100monad072220.33—
day100monad082300.22—
day100monad102140.21—
day125monad0120.160.0002
day125monad0220.620.0061
day125monad0320.230.0002
day125monad0420.630.0012
day125monad0620.250.0006
day125monad0720.130.0005
day125monad0820.550.0002
day125monad1020.240.0005
day250monad01581.030.0002
day250monad02490.820.0004
day250monad03660.220.0004
day250monad04580.190.0007
day250monad05570.180.0008
day250monad06540.230.0004
day250monad07500.310.0000
day250monad08570.200.0001
day250monad10410.360.0005
day500monad01571.020.0001
day500monad02480.920.0004
day500monad03620.220.0003
day500monad04540.190.0003
day500monad05560.180.0005
day500monad06510.250.0002
day500monad07460.430.0001
day500monad08540.210.0000
day500monad10380.370.0003
night25monad0140.23—
night25monad0240.24—
night25monad03160.16—
night25monad04160.19—
night25monad0540.25—
night25monad06160.22—
night25monad07160.22—
night25monad08160.33—
night25monad10160.14—
night50monad0150.25—
night50monad0250.31—
night50monad03170.15—
night50monad04170.21—
night50monad0550.15—
night50monad06170.34—
night50monad07170.22—
night50monad08170.84—
night50monad10170.17—
night100monad0180.18—
night100monad0280.21—
night100monad032870.15—
night100monad042870.16—
night100monad0580.14—
night100monad062870.14—
night100monad072870.22—
night100monad082870.20—
night100monad102870.11—
night250monad0180.190.0004
night250monad0280.210.0005
night250monad03200.210.0001
night250monad04200.210.0013
night250monad0580.130.0003
night250monad06200.490.0012
night250monad07200.210.0001
night250monad08201.470.0001
night250monad10200.170.0002
night500monad0180.190.0003
night500monad0280.200.0002
night500monad03170.300.0001
night500monad04170.220.0007
night500monad0580.130.0001
night500monad06170.680.0011
night500monad07170.220.0000
night500monad08171.620.0000
night500monad10170.330.0001
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 5
§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 skipsSteps not heard
2026-10-07 night 48 lib-mesh-bench-2026-10-07-07 4 25·250 0 0 0 0
2026-10-07 night 48 matrix-ladder-3h-night-2026-10-06-07 11 25·50·100·250·500 6 648 on 6 0 0
2026-10-01 night 48 matrix-ladder-3h-night-2026-09-30-03 11 25·50·100·250·500 6 648 on 6 0 0
2026-09-19 day 48 matrix-ladder-3h-weekend-2026-09-19-05 11 25·50·100·250·500 6 648 on 6 0 0
2026-09-18 night 48 matrix-ladder-3h-night-2026-09-18-07 11 25·50·100·250·500 6 648 on 6 0 0
2026-09-16 day 48 matrix-ladder-3h-day-2026-09-16-05 11 25·50·100·250·500 6 540 on 5 0 0
2026-09-11 day 48 lib-doppler-ladder-2026-09-11-06 5 250·125·60·30·90 8 78 on 8 0 0
2026-09-09 day 48 lib-doppler-ladder-2026-09-09-04 5 250·90·45 9 61 on 9 0 0
2026-09-05 night 6 lib-rate-ladder-6-2026-09-05-02 8 50·100·250·500·25 9 164 on 9 0 4
2026-09-04 day 48 lib-rate-ladder-48-day-2026-09-04-09 10 25·50·100·250·500 9 270 on 9 0 0
2026-09-02 day 48 lib-rate-ladder-48-day-2026-09-02-07 9 25·50·100·250·500 9 266 on 9 0 0
2026-09-02 night 6 lib-rate-ladder-6-2026-09-01-04 10 25·50·100·250·500 9 296 on 9 1 6
2026-09-01 night 11 lib-rate-ladder-24-2026-09-01-02 10 25·50·100·250·500 9 296 on 9 1 5
2026-08-31 night 6 lib-rate-ladder-6-2026-08-30-05 3 25·50·100 9 45 on 9 1 0
2026-08-31 night 11 lib-rate-ladder-24-2026-08-30-04 10 25·50·100·250·500 9 297 on 9 0 5
2026-08-30 night 48 lib-rate-ladder-48-2026-08-30-02 10 25·50·100·250·500 9 297 on 9 0 0
2026-08-26 night 11 lib-rate-ladder-24-2026-08-26-02 10 25·50·100·250·500 9 297 on 9 1 4
2026-08-26 night 6 lib-rate-ladder-6-2026-08-26-01 10 25·50·100·250·500 9 292 on 9 0 6
2026-08-26 night 11 lib-rate-ladder-24-2026-08-25-03 10 25·50·100·250·500 9 297 on 9 0 7
2026-08-26 night 6 lib-rate-ladder-6-2026-08-25-02 10 25·50·100·250·500 9 297 on 9 0 6
2026-08-25 night 11 lib-rate-ladder-24-2026-08-24-03 10 25·50·100·250·500 9 293 on 9 1 5
2026-08-25 night 6 lib-rate-ladder-6-2026-08-24-02 10 25·50·100·250·500 9 293 on 9 0 6
2026-08-23 day 48 lib-rate-ladder-48-2026-08-22-02 10 25·50·100·250·500 8 264 on 8 0 0
2026-08-20 day 48 rate-ladder-48-01 41 25·50·100·250·500 9 839 on 9 0 0
2026-08-16 day 11 monad01-ch11-20260816-0858 11 5·10·25·50·100 5 3615 on 5 0 10

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.