MU-MIMO Beamforming Pattern
A uniform linear array of N elements. Drag the steering angle and watch the array factor pattern reshape in real time. Flip to MU-MIMO mode and place a second user — the array automatically nulls toward them so two beamformees can share the same time-frequency resource.
— Shankar K. · Source: IEEE 802.11ax-2021 §26.7 (HE sounding), §9.6.31.2 (HE Compressed BF Report frame) · Wireshark: wlan.fc.type_subtype == 0x15
The polar plot shows where the array radiates energy. Outer ring = 0 dB (peak), inner ring = -30 dB (deep null). The marker labelled U1 is the user you are pointing the main beam at. Drag the steering slider to re-aim. Switch to MU mode to add U2 — the array places a null toward U2 while keeping the beam on U1.
wlan.fc.type_subtype == 0x15 finds VHT/HE NDP Announcement Control frames. wlan.fixed.category_code == 30 filters HE Action category (carries HE Compressed BF Report). wlan.fixed.category_code == 21 is VHT Action (legacy), == 7 is HT Action. CAT_HE = 30 follows Wireshark dissector convention (see packet-ieee80211.c CAT_* defines), verify against your local Wireshark.
Wi-Fi 6 and Wi-Fi 7 both support two distinct beamforming modes: SU (single user) where the array concentrates energy toward one beamformee, and MU (multi-user) where the beamformer transmits concurrent streams to multiple beamformees on the same time-frequency resource by placing nulls toward each non-target user. SU is universal; MU is the throughput multiplier in dense scenes.
Wi-Fi 6 enterprise AP, four spatial streams (4x4), MU-MIMO advertised in HE Capabilities. Conference room with 60 laptops on the same SSID. Aggregate throughput collapses to under 50 Mbps. Single-client speedtest from any one laptop reads 400 Mbps. So SU works fine and MU does not.
Capture the air. Look for HE Compressed Beamforming Report frames coming back from clients in response to NDP Announcements. Common failure: a chunk of clients respond with feedback type = SU only, or with very coarse Ng = 16 quantization, or never respond at all. Cheap or older client chipsets often advertise MU support but produce useless V matrices. Result: the AP can only schedule SU transmissions, falling back to one user per TXOP.
Once you know the problem is feedback quality, you can act. Force MU-friendly clients (or just the AP) into 2x2 SU + scheduled OFDMA which pairs well with limited beamforming, instead of relying on 4-user MU-MIMO that needs four good V matrices simultaneously. In Wi-Fi 7 the picture improves: EHT mandates better feedback resolution and 16x16 MU-MIMO support, and the air-side overhead of asking and receiving the V matrix is amortized across more users.
MU-MIMO needs accurate, recent V matrices. If users move (laptops in a meeting room are mostly stationary, but phones in a hand are not), the V matrix you sounded 200 ms ago no longer matches the current channel. Sounding too aggressively eats airtime; sounding too rarely degrades MU performance toward SU. Vendors tune this and rarely expose the cadence.
A normal omnidirectional antenna radiates in every direction equally. Most of that energy reaches no useful receiver: it heats walls, ceilings, and people. Beamforming is the trick of replacing one antenna with several (an array) and applying a small, controlled phase shift to each one before transmission. The shifts are tuned so the radio waves from the elements add up in one chosen direction and cancel each other out in the others.
The result is a directional beam pointed at a specific user. The same total transmit power, but more of it arrives at the intended receiver and less of it disturbs everything else. For a uniform array of N elements, the gain at the chosen direction is roughly N times higher than a single element — that is +6 dB for a 4-element array, +9 dB for 8 elements, +12 dB for 16 elements.
Wi-Fi 6 and Wi-Fi 7 access points have multiple antennas (4, 8, sometimes 16) and beamform automatically once they learn what the channel looks like. The learning happens via a sounding sequence: the AP sends a known training signal (the NDP), the client measures it and replies with a compressed description of the channel (the V matrix), and the AP uses that to compute its phase weights.
For a uniform linear array (ULA) with N isotropic elements spaced d wavelengths apart, the array factor is the sum of the per-element responses with progressive phase. When all elements feed equal amplitude and the beam is steered to theta_0, the half-power beamwidth (the angular width where the pattern is at -3 dB) is approximately HPBW ≈ 0.886 / (N * d * cos(theta_0)) radians. At 8 elements with 0.5 wavelength spacing and boresight (theta_0 = 0), HPBW comes out near 12.7 degrees.
Steering off boresight makes the beam wider (the cos term in the denominator). At 60 degrees off boresight, the beamwidth is 2x what it is at boresight. That is why Wi-Fi APs with end-fire mounting struggle with clients well off-axis and why 6 GHz handhelds with limited array sizes do not always benefit much from MU-MIMO when users sit at the edges of the cell.
Sidelobes are the smaller bumps either side of the main beam. For uniform amplitude, the first sidelobe sits roughly 13.3 dB below the peak, regardless of N. Real arrays apply a tapered amplitude (Taylor, Chebyshev, Hamming) to suppress sidelobes at the cost of widening the main beam — commercial Wi-Fi APs typically pick a mild taper around -20 to -25 dB sidelobe level.
SU beamforming uses a single steering vector pointed at one user. MU-MIMO requires a different construction. Given V matrices from all K targeted users (each V_k is the unitary spatial signature of user k), the beamformer computes a precoding matrix Q such that the channel-times-precoder product H_i * Q_k = 0 for i != k. The classic algebraic solution is zero-forcing (ZF): Q = V * (V_H * V)^-1, where V is the stacked feedback. Real APs use regularized variants (MMSE, regularized ZF) to avoid noise amplification when V matrices are ill-conditioned.
The visualizer above approximates this with a simpler 2-user constraint: place a beam at theta_0 (U1) while forcing AF(theta_null) = 0 (U2). For a ULA this works out to weights w_n = c1 * exp(j * n * k * d * sin(theta_0)) - c2 * exp(j * n * k * d * sin(theta_null)), with c1 and c2 chosen so the constraints hold. The geometry is correct; the algebra in a real beamformer extends across all subcarriers and all spatial streams.
Practically: every dB of null depth toward a non-target user is a dB less inter-user interference. A null of -25 dB (typical for 8x8 enterprise APs in benign channels) means user 1 hears 1/316th of user 2's stream — usually below the noise floor. A null of -10 dB (common in moving or multipath-heavy environments where V matrices age fast) means user 1 sees significant inter-user crosstalk and the MU benefit collapses. This is why MU-MIMO is sounding-cadence-sensitive and why Wi-Fi 7's tighter angle quantization (more bits per phi/psi) directly improves MU efficacy.
Building WiFi Analyser V2 · CWNA-109 in progress · one post every two weeks