ArrayTrack
Indoors, an access point’s antenna array hears a client arrive from several bearings at once: the direct line-of-sight path plus copies bounced off walls and furniture. A straight row of antennas can’t even tell front from back. ArrayTrack (Xiong & Jamieson, NSDI ’13) stacks four tricks to find the one bearing that points at the client, then multiplies bearings from several APs into a location. Drag the client, the pillars and the APs; switch stages off to see what each one is for.
Floor plan drag the client, APs and pillars · click an AP to inspect it
Disambiguation pipeline AoA spectrum at the selected AP, one stage per card
Every path carries the same packet, so MUSIC sees one blurred source and its mirror image across the array axis.
Average the covariance of overlapping sub-arrays to decorrelate the copies, so each path gets its own peak.
Near the array axis a tiny phase error swings the bearing a lot. Multiply by W(θ) = sin θ within 15° of endfire.
A ninth antenna sits off the row. Steer all nine at each half, total the power, and drop the weaker half.
Take 2–3 frames a few cm apart. The direct peak holds still; reflection peaks shift. Keep only peaks that reappear within 5°.
Radio & deployment
2.45 GHz (λ = 12.2 cm), antennas at λ/2 like the paper’s WARP prototype. Walls reflect specularly and scatter weakly from rough spots near each bounce; a pillar costs a path about 15 dB. The calibration error is the phase mismatch left per antenna after the one-time cable-swap calibration.
Scenarios
How the stages fit together
Why one array gets it wrong. MUSIC splits the antenna covariance R = A Rss A* + σ²I into a signal subspace and a noise subspace and peaks wherever the steering vector a(θ) is orthogonal to the noise subspace: P(θ) = 1 / a(θ)* EN EN* a(θ). Multipath copies of one packet are perfectly correlated, so Rss has rank one and MUSIC sees a single blended source. A linear array only measures cos θ, so every bearing also has a mirror twin across the array axis.
Getting the peaks right. Spatial smoothing averages NG shifted sub-arrays, which restores rank at the cost of NG−1 antennas of aperture (the paper settles on NG = 2). Geometry weighting discounts endfire bearings, where dθ = dφ / (π sin θ) blows up. The off-row ninth antenna breaks the mirror symmetry: only the true side makes its phase line up.
Picking the direct one. Moving a few centimetres (less than a wavelength) barely changes where the direct ray comes from, but it reshuffles the phases inside each reflection’s cluster of bounce and scatter points, so those peaks shift or vanish. A peak that doesn’t return within 5° in the other frames is removed. Finally every AP votes on every point in the room: L(x) = Πi Pi(θi(x)). A reflection that slips through at one AP points somewhere the other APs disagree with, so it rarely survives the product.
This simulation is idealized: the scattering is two-dimensional and only first-order, and the client and APs share a height. Results lean on the scene, so treat the location error as a qualitative guide, not a replication of the paper’s 23 cm median.