可以,但要分清两种“获取 SNR”的含义:
1)正常 STA 连接状态:基本拿不到“真实 SNR”
ESP-IDF 在常规 Wi-Fi 连接(STA)里常用能拿到的是RSSI(例如esp_wifi_sta_get_ap_info()里的wifi_ap_record_t.rssi),但不会同时给你噪声底(noise floor),所以没法直接算出SNR = RSSI - NoiseFloor。(官方常规 Wi-Fi API/连接信息里并没有直接暴露 SNR 字段。)
2)通过 CSI / Sniffer:可以“间接算 SNR”
在ESP32-C6 / ESP32-C5上,如果你开启Wi-Fi CSI,官方文档明确提到wifi_csi_info_t的rx_ctrl里包含RSSI、RF noise floor 等信息,你就可以用它们来计算 SNR。(Espressif Systems)
另外 Espressif 的esp-csi项目示例也明确把C5 / C6作为推荐使用对象。(GitHub)
计算方式(概念):
snr_db ≈ rx_ctrl.rssi - rx_ctrl.noise_floor
但要注意一个坑
历史上很多人在promiscuous/sniffer里读到的noise_floor可能一直是 0(或不稳定),导致算出来的 SNR 不可信;这在 esp-idf issue 里有人长期讨论过。(GitHub)
所以如果你要做“可量化、稳定”的 SNR 指标,建议优先走CSI 的 rx_ctrl路径,并在你当前 IDF 版本 + 芯片上实际验证noise_floor是否有效。