The question: What are the core signal-processing and machine-learning methods that turn raw CSI captures into actionable sensing outputs?

Every paper cited as "state of the art" in CSI sensing is making exactly one swap in exactly one of four pipeline boxes. If you don't know which box, you can't tell whether the reported gain generalises to a new room or just overfits to a single afternoon's data.

The raw input is a complex-valued matrix — shaped (N × N_ant) × 242 subcarrier channels, arriving at 173 packets per second — and what happens next, in four distinct and independently swappable stages, is what this episode maps. With an October FIIT-library deployment and a January DP2 deadline locked in the 2026-05-13 CSI Experiments meeting, this is a live decision, not a survey exercise.

The four-box pipeline at a glance

Every stage below is a slot, not a fixed algorithm. Swap the occupant of one slot without touching the others and you have a new system. That modularity is the point.

Stage What it does Current lab pick Why-not notes
1. Subcarrier feature extraction Turns the raw CFR matrix into a fixed-length feature vector Amplitude variance + phase difference + RSS std (Wi-CaL recipe) Raw complex values: too noisy; learned embeddings: sample-hungry
2. Model family Maps features → occupancy count RF / LSTM / CNN triple under test in EXP-002 Heterogeneous GAT identified as next swap; not yet benchmarked
3. Few-shot domain adaptation Transfers a trained model to a new room with minimal re-labelling Last-layer fine-tune on 10–30 min BLE-labelled window Full retraining: costs 2 h per room; bigger model: hits the ~30 k-sample ceiling
4. BLE-triggered drift correction Detects and repairs model degradation post-deployment Continuous BLE labels → fine-tune trigger Manual recalibration: unscalable; periodic retraining: misses sudden shifts

Stage 1 — Subcarrier feature extraction

The CFR (Channel Frequency Response) matrix from meneghello2023_0a93 is the universal raw input: 242 usable OFDM subcarriers (out of 256, with pilots and DC bins removed) captured on 80 MHz channel 42 via Nexmon. That complex-valued tensor is what every downstream method actually consumes.

The first decision is what to throw away. Raw complex amplitudes carry too much noise from multipath reflections — small furniture shifts contaminate the signal. The lab uses the feature recipe from choi2022_17c2: amplitude variance per subcarrier (computed over a 1-second sliding window), phase difference across antenna pairs, and RSS (Received Signal Strength) standard deviation. These three statistics compress the 242-channel matrix into a compact, noise-tolerant vector without discarding the spatial information that makes crowd-counting possible.

The hardware constrains the feature stage in ways the literature ignores. Andrej's ESP32-C5 firmware — 5 GHz channel switching, a 10-second CSI-heartbeat watchdog, SD-card SPI logging — determines what the feature extractor can actually consume in production. Channels 32 and 68 crash the radio; the second channel must be set to none to prevent duplicate sensing during frequency hopping. Those constraints are not in any paper; they live in meetings/2026-05-13-csi-experiments.md.

Why not raw complex values? Multipath noise dominates. Why not learned embeddings? They need tens of thousands of labelled samples per room to converge — which is exactly the ceiling stage 3 exists to break.


Stage 2 — The model-family box is still open

This is the most contested slot, and we don't have a settled answer yet.

experiments/EXP-002 CSI Model Drift Measurement Over Time.md is running precisely to rank three families by drift-robustness: a Random Forest (fast, interpretable, no temporal memory), an LSTM on the raw feature sequence (captures temporal dynamics, slower to update), and a CNN treating amplitude variance as a 2D image (spatially aware, fixed input size). The experiment holds the feature set constant — the Wi-CaL recipe from stage 1 — so whatever ranking emerges isolates the model family as the variable.

The expected result is not obvious. LSTMs remember temporal patterns that matter for occupancy transitions, but that memory is also what makes them brittle when the environment drifts. CNNs are less sensitive to sequence order, which might make them more robust. Random Forests are the fastest to retrain from scratch, which is a different kind of robustness entirely.

The next swap the vault has identified is a Heterogeneous Graph Attention Network (HAN-style GAT, where attention weights function as per-window sensor trust scores). The argument from diary/2026-05-10 - GAT for BLE-Calibrated CSI Crowd Sensing.md: a GAT can up-weight BLE during high-mobility windows where CSI is noisy, then shift trust back to CSI during static windows where BLE drifts. Every existing crowd-counting backbone in the vault — Wi-CaL, DASECount, Wang 2024 — is CNN- or LSTM-based. The GAT box is identified but not yet tested; EXP-002 has to finish first.


Stage 3 — Few-shot domain adaptation breaks the sample ceiling

The same room on a different day is a statistically different domain. meneghello2023_0a93 quantifies this directly: Pearson correlation between empty-bedroom CFR traces collected on different days is near zero. A model trained on Monday's data is already operating out-of-distribution by Friday. Training a bigger model doesn't fix this — it just demands more samples from the new domain, and the ~30 k-sample ceiling is a practical deployment constraint, not a theoretical limit.

Few-shot domain adaptation — retraining a subset of model parameters on a small number of examples drawn from the target domain — is the canonical fix. hou2023_bf83 is the closest published analogue: domain-agnostic pre-training followed by sample-efficient fine-tuning. wang2026_2758 provides the cross-domain taxonomy that lets us classify each approach without re-deriving it.

The lab's instantiation is experiments/EXP-004 Multi-Room Generalization with BLE Transfer.md: train in Room A, transfer to Room B via a 10–30 minute BLE-labelled calibration campaign, target >80% of native Room-B accuracy. That cuts deployment cost from roughly two hours of manual data collection per room to ten minutes of BLE-assisted labelling. The BLE-derived count needs to land within ±1 person of manual count for >90% of windows — which is what experiments/EXP-001 BLE-Assisted CSI Ground Truth Collection.md is validating as the prerequisite.

Why not full retraining? Two hours per room, at scale, is not a deployment strategy. Why not a domain-invariant feature space? The decorrelation lives in the channel physics, not the feature choice; engineering it away requires assumptions about room geometry that don't hold across sites.


Stage 4 — BLE-triggered drift correction keeps the other three honest

Stages 1–3 can produce a model that works on day one. Stage 4 is what keeps it working on day thirty.

billah2021_69a2 puts a number on the problem: F1 dropped from 92.2% to 70.3% over seven days in a static room with no deliberate environmental changes. That degradation is not a failure mode to be engineered around — it is the baseline behaviour of any CSI model operating in a real building. koo2026_a08d names "lightweight self-calibration routines" as the open methodological direction; the BLE-triggered last-layer fine-tune is that routine made concrete.

The mechanism: BLE advertisement counts from participants' phones arrive continuously at 1 Hz. When the running F1 estimate — computed by comparing model output against BLE-derived occupancy — crosses a threshold, the system fires a last-layer fine-tune using the recent BLE-labelled window. No human in the loop. The fine-tune touches only the final layer (or the final few), so it runs on the ESP32-class hardware already deployed.

This stage is what makes the ~30 k-sample ceiling survivable. The model never needs a full retrain from scratch; it just needs a 10-minute fresh-label window whenever the environment drifts enough to matter.


Which stage is actually load-bearing?

Stage 4. Not because the others are unimportant, but because stages 1–3 produce a snapshot and stage 4 is the only thing that keeps that snapshot accurate after the doors open and the furniture moves.

The feature-extraction stage (1) is largely settled — the Wi-CaL recipe is robust and well-understood. The model-family stage (2) is a live question that EXP-002 will answer, but even a suboptimal model family survives if drift correction is running. The domain-adaptation stage (3) cuts the deployment cost of stage 2's answer to a manageable 10 minutes per room.

Stage 4 is load-bearing because it is the only stage that operates continuously. The others run once at deployment time; stage 4 runs forever.


If EXP-002 shows the CNN degrades slowest under drift, does swapping the model-family box to a heterogeneous GAT still buy enough interpretability — attention weights as per-window sensor trust scores — to justify the added complexity? Or does that story only matter once BLE-triggered fine-tuning is already doing the heavy lifting, at which point the model family becomes a second-order concern?