spaxel/docs/research/03-algorithms.md
jedarden 948c966226 init: spaxel project — docs, plan, and marathon infrastructure
- WiFi CSI-based indoor positioning system for self-hosted home environments
- docs/plan/plan.md: full 9-phase implementation plan (65 gaps closed by analysis)
- docs/research/: CSI fundamentals, physics, algorithms, signal processing, mesh topology, accuracy limits, literature
- docs/notes/: recovery mechanisms, simulation testing, UX visualization
- .marathon/instruction.md: per-iteration marathon instructions with detailed commit format
- .marathon/start.sh: GLM-5 tmux launcher via ZAI proxy

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-26 06:43:25 -04:00

177 lines
7.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Detection and Localization Algorithms
## Background Subtraction
### Exponential Moving Average (EMA)
```
H_bg(t) = α · H_bg(t1) + (1α) · H(t)
H_diff(t) = H(t) H_bg(t)
```
α ≈ 0.90.99. Simple, real-time capable. Fails for slowly drifting environments; adapts to stationary persons over time — the primary *stillness problem*.
### Robust PCA (RPCA)
Decomposes a CSI matrix M = L + S, where L is low-rank (static background) and S is sparse (motion events). Applied to a matrix with rows = time samples, columns = subcarriers:
- L captures stable multipath environment
- S captures transient changes due to human motion
Solved via Principal Component Pursuit:
```
minimise ||L||_* + λ||S||_1 subject to L + S = M
```
More robust than EMA but computationally intensive. Typically applied in batch windows rather than fully online.
### Gaussian Mixture Models (GMM)
Model each subcarrier's CSI amplitude distribution as a mixture of K Gaussians over time. Background is the dominant component. Foreground (person present) is detected when the observation probability under the background GMM falls below a threshold. Can track multiple states (empty / occupied / different activity levels).
---
## Fresnel Zone Weighted Localization
For multi-link systems without per-link AoA:
1. For each link (TX_i, RX_j), compute the RMS delta from baseline across subcarriers.
2. For each candidate grid point P, compute the Fresnel influence weight:
```
w(P, i, j) = deltaRMS × (1 excess/r₁) if excess < r₁, else 0
```
where `excess = (d₁ + d₂) direct_distance` and `r₁` is the first Fresnel zone radius at P.
3. Sum influence weights across all links → spatial probability field.
4. Find peaks via non-maximum suppression → blob positions.
Model-based and geometric — no fingerprint training required. Accuracy depends on link count, geometry, and delta precision.
---
## MUSIC (MUltiple SIgnal Classification)
Subspace-based super-resolution algorithm for estimating directions of arrival.
**Setup**: M antennas receive signals from D sources (D < M). Received signal vector: `x(t) = A·s(t) + n(t)`.
**Steps**:
1. Estimate spatial covariance matrix: `R = E[x·x^H]`
2. Eigendecompose R into signal subspace (U_s) and noise subspace (U_n)
3. MUSIC pseudospectrum: `P_MUSIC(θ) = 1 / (a(θ)^H · U_n · U_n^H · a(θ))`
4. Peaks of P_MUSIC(θ) are the estimated AoAs
### SpotFi Extension (Joint AoA-ToF)
SpotFi (Kotaru et al., SIGCOMM 2015) treats each (antenna, subcarrier) pair as a virtual element. For M antennas and J subcarriers, this gives M×J virtual elements. The 2D steering vector becomes:
```
a(θ, τ) = [e^(j·2π·d·sin(θ)/λ₁), ..., e^(j·2π·d·sin(θ)/λ_J)]
× [e^(j·2π·f₁·τ), ..., e^(j·2π·f_J·τ)]
```
This enables joint AoA + Time-of-Flight estimation from a single antenna with multiple subcarriers. SpotFi achieves **40 cm median localization error** in tested environments.
**Spatial smoothing for coherent signals**: When multipath signals are correlated, spatial smoothing divides the virtual array into overlapping subarrays and averages their covariance matrices, de-correlating coherent components at the cost of reduced effective aperture.
**Single-antenna limitation**: MUSIC directly requires multiple spatially separated antennas. A single-antenna ESP32-S3 cannot apply MUSIC for AoA unless signals from multiple nodes are combined coherently (requires phase-synchronised hardware or the ESPARGOS platform).
---
## ESPRIT
Estimation of Signal Parameters via Rotational Invariance Techniques. Exploits rotational invariance between two identical subarrays displaced by a known distance d. Avoids the grid search of MUSIC by solving a generalised eigenvalue problem. Computationally cheaper than MUSIC but requires a specific two-subarray structure. Same spatial smoothing requirements as MUSIC.
---
## DFS-Based Tracking (Widar Family)
Doppler Frequency Shift from a moving body: `f_d = 2v·cos(θ) / λ`
For walking at 1 m/s at 2.4 GHz: f_d ≈ 2×1×1/0.125 = **16 Hz**.
### Widar (2017)
Extracts DFS from CSI time series to estimate velocity vector. Decimeter-level passive tracking from velocity monitoring alone.
### Widar2.0 (2018)
First single-link passive localization. Jointly estimates AoA, ToF, and DFS from one link using a unified signal model. Key insight: range refinement from 0.3 m to 0.05 m by combining ToF with cumulative DFS-derived path length changes.
Accuracy: **0.75 m median error** (1 link), **0.63 m** (2 links).
---
## IndoTrack (Doppler-MUSIC)
Applies MUSIC to the DFS domain rather than the spatial domain — resolves velocity components of multiple people simultaneously. Combined with probabilistic AoA estimation for trajectory reconstruction.
Requires minimum 3 antennas. Achieves **35 cm median trajectory error** with commodity hardware.
---
## Fingerprinting
**Training phase**: Collect CSI at known grid positions throughout the space. Store as a map.
**Runtime**: Match incoming CSI to nearest reference via k-NN, SVM, or deep neural network.
**Pros**: Works in complex multipath environments where geometric models fail. Can exploit full CSI as a high-dimensional feature vector.
**Cons**: Training burden scales with area × spatial resolution. Sensitive to environmental changes — moving furniture invalidates the map. Must be periodically recollected.
Accuracy: 0.52 m in controlled settings. Deep learning approaches (ResNet on CSI images) reach ~0.51 m without explicit geometric models.
---
## Kalman Filter for Trajectory Smoothing
State vector: `[x, y, ẋ, ẏ]` (2D) or `[x, y, z, ẋ, ẏ, ż]` (3D).
Constant velocity motion model:
```
F = [[1, 0, dt, 0],
[0, 1, 0, dt],
[0, 0, 1, 0],
[0, 0, 0, 1]]
```
Predict-correct cycle:
```
Predict: x̂⁻ = F·x̂, P⁻ = F·P·F^T + Q
Update: K = P⁻·H^T·(H·P⁻·H^T + R)⁻¹
x̂ = x̂⁻ + K·(z H·x̂⁻)
```
The **Unscented Kalman Filter (UKF)** is preferred for nonlinear sensing models (e.g., when measurements are bistatic ranges rather than direct positions). Recent work combines UKF with self-attention mechanisms for WiFi CSI tracking.
---
## Breathing and Stillness Detection
A stationary person still breathes at 0.10.5 Hz (1220 breaths/min).
Chest displacement ~5 mm at 2.4 GHz:
```
phase change ≈ 2π × 2 × 0.005 / 0.125 ≈ 0.5 rad
```
This is detectable above noise with 1030 s averaging. Processing:
1. Apply bandpass filter to CSI amplitude time series at 0.10.5 Hz
2. FFT of filtered signal — peak frequency = breathing rate
3. Presence of breathing peak = person present but stationary
Heartbeat (~12 Hz, ~12 mm displacement) is marginally detectable on commodity hardware and requires very stable mounting and extended averaging windows.
---
## Algorithm Selection for Spaxel
| Condition | Recommended algorithm |
|---|---|
| Moving target, N nodes | Fresnel zone weighted intersection + Kalman |
| Moving target, need high accuracy | Widar2.0-style joint AoA-ToF-DFS (single link) |
| Stationary target | Breathing bandpass detection |
| Multiple people | IndoTrack-style Doppler-MUSIC (requires ≥3 antennas) |
| Post-calibration fingerprinting | k-NN or ResNet on CSI feature vectors |
| Trajectory smoothing | UKF with constant velocity model |