// rf and rates

RSSI, SNR and MCS

Why signal strength is only half the story

Two clients at identical RSSI can achieve completely different data rates. One at -65 dBm gets 300 Mbps. The other at -65 dBm drops to 6 Mbps. The difference is noise floor. RSSI measures how loud the signal is. SNR measures how much louder it is than the noise. Only SNR determines MCS.

RSSI
Signal power in dBm. Necessary but not sufficient.
+
Noise Floor
Channel noise in dBm. Set by bandwidth and environment.
=
SNR
Signal-to-Noise Ratio in dB. This determines your MCS.
// the fundamental problem

RSSI without context is meaningless

A client reports -65 dBm RSSI. Is that good? It depends entirely on the noise floor. In a clean office at -95 dBm noise floor, SNR = 30 dB and MCS 8 is achievable. In an RF-noisy warehouse at -80 dBm noise floor, SNR = 15 dB and MCS 4 is the ceiling. Same RSSI. Dramatically different throughput.

RSSI - what it measures

Received Signal Strength Indicator

Total power of the received signal at the antenna, measured in dBm. Reported in every 802.11 radiotap header. Tells you how far you are from the AP (roughly), but tells you nothing about whether the signal is decodable.

// Radiotap field - present in every frame Antenna signal: -65 dBm // This is RSSI. Not sufficient to predict rate.
IEEE 802.11-2020 §17.3.9.1 - Received power measurement
SNR - what actually matters

Signal-to-Noise Ratio

The difference between the received signal and the noise floor, in decibels. The radio demodulator works on SNR, not absolute signal strength. A weak signal in silence outperforms a strong signal in noise.

// SNR calculation: SNR = RSSI - NoiseFloor // Example: SNR = -65 dBm - (-95 dBm) = 30 dB // 30 dB SNR achieves MCS 8 (256-QAM 3/4)
802.11-2020 §17.3.10 - Receiver sensitivity
// the noise floor equation

Where noise floor comes from

Thermal noise floor is physics, not configuration. It is set by channel bandwidth and temperature.

Thermal noise floor:
Nfloor = -174 dBm/Hz + 10 log10(BWHz) + NFdB
Channel Width
Thermal Noise
Typical NF 7dB
Practical Floor
20 MHz
-101 dBm
-94 dBm
-95 to -100 dBm
40 MHz
-98 dBm
-91 dBm
-92 to -97 dBm
80 MHz
-95 dBm
-88 dBm
-89 to -94 dBm
160 MHz
-92 dBm
-85 dBm
-86 to -91 dBm
320 MHz (Wi-Fi 7)
-89 dBm
-82 dBm
-83 to -88 dBm
// the wide-channel trap

Every doubling of channel width raises the noise floor by 3 dB, costing 3 dB of SNR. A client that achieves MCS 9 on 80 MHz may drop to MCS 7 on 160 MHz at the same location because the wider channel has a higher noise floor. More bandwidth is not always better range.

// IEEE 802.11-2020 Tables 17-22, 21-25, 26-26

Receiver sensitivity by standard - 20 MHz, 1 spatial stream

These are IEEE minimum requirements at PER less than 10%. Real radios typically perform 3-6 dB better. Sensitivity degrades 3 dB per doubling of channel width.

802.11n (HT) / 802.11ac (VHT)
Wi-Fi 4 / Wi-Fi 5
MCSModulationCode RateMin Sens (20MHz)Min SNR
0BPSK1/2-82 dBm2 dB
1QPSK1/2-79 dBm5 dB
2QPSK3/4-77 dBm9 dB
316-QAM1/2-74 dBm11 dB
416-QAM3/4-70 dBm15 dB
564-QAM2/3-66 dBm18 dB
664-QAM3/4-65 dBm20 dB
764-QAM5/6-64 dBm22 dB
8256-QAM3/4-59 dBm25 dB
9256-QAM5/6-57 dBm28 dB
802.11-2020 Table 21-25 (VHT) / Table 19-26 (HT)
802.11ax (HE)
Wi-Fi 6 / Wi-Fi 6E
MCSModulationCode RateMin Sens (20MHz)Min SNR
0BPSK1/2-82 dBm2 dB
1QPSK1/2-79 dBm5 dB
2QPSK3/4-77 dBm9 dB
316-QAM1/2-74 dBm11 dB
416-QAM3/4-70 dBm15 dB
564-QAM2/3-66 dBm18 dB
664-QAM3/4-65 dBm20 dB
764-QAM5/6-64 dBm22 dB
8256-QAM3/4-59 dBm25 dB
9256-QAM5/6-57 dBm28 dB
101024-QAM3/4-54 dBm31 dB
111024-QAM5/6-52 dBm33 dB
802.11-2020 Table 26-26 (HE) - OFDM 3.2us symbol
802.11be (EHT)
Wi-Fi 7
MCSModulationCode RateMin Sens (20MHz)Min SNR
0-11Same as 802.11ax MCS 0-11-82 to -522-33 dB
124096-QAM3/4-49 dBm36 dB
134096-QAM5/6-46 dBm39 dB
802.11be §36 - EHT sensitivity requirements

MCS 12/13 require SNR greater than 35 dB. In real deployments this means the client must be very close to the AP with minimal interference. Typical indoor range at MCS 13: under 3 metres.

// bandwidth scaling rule

Sensitivity vs channel width - 3 dB per doubling

MCS
20 MHz
40 MHz
80 MHz
160 MHz
320 MHz
0
-82 dBm
-79 dBm
-76 dBm
-73 dBm
-70 dBm
4
-70 dBm
-67 dBm
-64 dBm
-61 dBm
-58 dBm
7
-64 dBm
-61 dBm
-58 dBm
-55 dBm
-52 dBm
9
-57 dBm
-54 dBm
-51 dBm
-48 dBm
-45 dBm
11 (ax)
-52 dBm
-49 dBm
-46 dBm
-43 dBm
-40 dBm
13 (be)
-46 dBm
-43 dBm
-40 dBm
-37 dBm
-34 dBm
Rule: each doubling of bandwidth shifts all thresholds 3 dB upward (less negative = harder to achieve)
// the full picture

Link budget - from transmitter to MCS

A link budget tracks every gain and loss from transmitter to receiver. RSSI is what comes out. From RSSI and noise floor you get SNR. SNR tells you which MCS is reachable.

01
TX Power (EIRP)
EIRP = TxPwrdBm + TxAntennadBi - CableLossdB

In 802.11, max EIRP is regulated. US 2.4 GHz: 30 dBm. US 5 GHz: 23-30 dBm depending on channel. 6 GHz: up to 36 dBm (indoor standard power).

02
Free Space Path Loss (FSPL)
FSPL = 20log(d) + 20log(f) + 20log(4π/c)
FSPL ≈ 20log(dm) + 20log(fGHz) + 92.4 dB

At 5 GHz, 10 m: FSPL = 20 + 14 + 92.4 = 66 dB. At 5 GHz, 30 m: FSPL = 29.5 + 14 + 92.4 = 76 dB. Each doubling of distance adds 6 dB of path loss.

03
RSSI at Receiver
RSSI = EIRP - PathLoss + RxAntennadBi

For an AP at 20 dBm TxPwr, 3 dBi antenna (23 dBm EIRP), FSPL 66 dB, client 0 dBi: RSSI = 23 - 66 + 0 = -43 dBm. That is an excellent signal.

04
SNR
SNR = RSSIdBm - NoiseFloordBm

At -43 dBm RSSI and -95 dBm noise floor: SNR = 52 dB. Theoretical maximum MCS is far more than enough for MCS 11 (802.11ax). At this distance, channel width and interference are the limiting factors, not signal strength.

05
MCS and Throughput
MCS = f(SNR, Standard, BW)

Use the sensitivity tables in Tab 2. Match SNR to the minimum required for each MCS index. Actual throughput also depends on retries, MPDU aggregation, and channel utilization. SNR sets the ceiling, not the floor.

// indoor correction

Indoor path loss - beyond free space

FSPL gets you to the AP wall. Everything after that is partition loss stacked on top.

Obstruction
2.4 GHz loss
5 GHz loss
6 GHz loss
Drywall / Plasterboard
3-4 dB
5-8 dB
6-10 dB
Glass window (plain)
2-3 dB
3-5 dB
4-6 dB
Hollow concrete / CMU
10-15 dB
12-18 dB
15-20 dB
Reinforced concrete
15-25 dB
20-30 dB
25-35 dB
Metal / steel door
15-25 dB
20-25 dB
25-30 dB
Elevator shaft
25-40 dB
30-45 dB
35-50 dB
CWNA-109 exam reference: be able to estimate path loss through common building materials
// reading it in a PCAP

RSSI, SNR and rate in Wireshark

Monitor-mode captures include radiotap headers that carry signal measurements per frame. These are hardware-reported values from the capture interface, not the transmitting radio. Use them to assess link quality at the point of capture.

01
Radiotap signal fields

Every radiotap header includes antenna signal (RSSI) and optionally antenna noise (noise floor). Wireshark displays these under the Radiotap Header section of each frame.

Show frames below -75 dBm RSSI:
radiotap.dbm_antsignal < -75
Show frames at a specific rate or below:
radiotap.datarate <= 12
Rate in 0.5 Mbps units. 12 = 6 Mbps. Low rate on data frames = poor SNR.
02
MCS index in captured frames

HT, VHT, HE, and EHT frames carry the MCS index in their PHY headers. Wireshark decodes these in the WLAN Radio section. Cross-reference MCS with RSSI from the same frame to see if MCS selection is appropriate.

Show HT (802.11n) MCS index:
radiotap.mcs.index
Show frames using low MCS (0-3):
wlan_radio.11n.mcs_index <= 3
Persistent low MCS on a known client at reasonable RSSI suggests high noise floor or interference.
03
Rate drop pattern

Rate Adaptive Algorithm (RAA) continuously adjusts MCS based on observed PER. In a PCAP, watch for a client that starts a session at high MCS then progressively drops to lower MCS over time. This is the RAA responding to increasing retries caused by worsening SNR (client moving away, or increasing interference).

Data frames from a specific client, sorted by rate:
wlan.ta == aa:bb:cc:dd:ee:ff && wlan.fc.type == 2
Sort by wlan_radio.data_rate column to see rate progression over time.
04
Noise floor in radiotap

Some capture adapters report the antenna noise value in the radiotap header. When present, this allows direct SNR calculation per frame. Most adapters only report RSSI. WLANPi with supported Alfa adapters reports both fields.

Frames with noise floor reported:
radiotap.dbm_antnoise
If this field is absent in your capture, noise floor must be measured separately (spectrum analyzer or AP client stats).
// quick diagnosis

RSSI / SNR triage

RSSI
Noise Floor
SNR
Max MCS (ax)
Diagnosis
-40 dBm
-95 dBm
55 dB
MCS 11
Excellent. Bandwidth or interference is the limit.
-65 dBm
-95 dBm
30 dB
MCS 8
Good. Should sustain high rates.
-70 dBm
-92 dBm
22 dB
MCS 7
Acceptable. MCS 8+ marginal.
-75 dBm
-90 dBm
15 dB
MCS 4
Marginal. VoIP SLA at risk.
-80 dBm
-88 dBm
8 dB
MCS 1
Poor. Client should have roamed.
-65 dBm
-70 dBm
5 dB
MCS 1
High noise floor. Good RSSI, terrible SNR. RF noise source nearby.
Last row is the RSSI trap: strong signal, unusable link - only visible when you measure noise floor.
// governing references
IEEE 802.11-2020§17.3.10 DSSS receiver sensitivity | §21.5.2 OFDM sensitivity | §26.5.3.3 HE sensitivity - Table 26-26
IEEE 802.11-2020Table 17-22 (HT 20MHz) | Table 21-25 (VHT 20MHz) | §19.3.18.1 (ERP-OFDM)
IEEE 802.11be§36.3.21 - EHT minimum sensitivity requirements (MCS 12/13 added)
ITU-R P.1238Indoor propagation model - partition loss reference values