文档目的:
相较于当前常用于获取 CSI 信息的 intel 5300 NIC 或 Atheros 9580,使用乐鑫公司 (Espressif Systems) 的 ESP32 系列芯片可以相当便捷地获取 CSI 信息。但是截至 20230908, 乐鑫公司的 CSI 例程中对所收取到 CSI 数据的支持还不完善,因此查阅相关资料对 wifi_csi_info_t 结构体和 wifi_pkt_rx_ctrl_t 结构体中的成员进行注释。
释义及相关链接:
wifi_csi_info_t | |
---|---|
rx_ctrl | 解析包时所解析出的信息,具体见下表 |
mac | 发送端 mac 地址 |
dmac | 目的地址 |
first_word_invalid | 如果 :cpp:type:wifi_csi_info_t 的 first_word_invalid 字段为 true,表示由于 {IDF_TARGET_NAME} 的硬件限制,CSI 数据的前四个字节无效。 |
buf | 有效 CSI 数据内容 |
len | 有效 CSI 数据长度 |
wifi_pkt_rx_ctrl_t | |
---|---|
rssi | 信号强度 |
rate | 意义: 接受到的包的传输速率,这一位只有在协商的模式是11bg下面才生效;如果是11n/ac/ax模式的话(只要是通过HT 速率接收到的),就去看MCS这一位,并查表获得传输速率。 其他参考: Wi-Fi 7有多快?–Wi-Fi速率理论计算 WiFi速率计算IEEE 802.11G—54Mbps |
sig_mode | 意义: 所收到包所符合的协议。 值为 0 时代表 802.11 b/g,值为 1 时代表 802.11 n,值为 2 时代表 802.11 ac。 Tips: 若使用 esp 发包,可以使用 esp_wifi_set_protocol API 修改所发包的 protocol,但要注意和 esp_wifi_config_espnow_rate 中所配置的发包速率匹配。 |
mcs | 意义: 所使用的调制编码方案 (Modulation and Coding Scheme) 。 对于802.11 b/g/n ,mcs 值为 0~7,对于 802.11 ax,mcs 值为 0~9。(参考 esp-idf/docs/en/api_guides/wifi.rst) Tips: 1. 对于 C6,mcs 支持到 256-QAM、带宽支持到 20MHz 2. LoRa 不支持获取 CSI,因为 CSI信息是只有在OFDM 以上的才有 其他参考: MCS 速率表参考: 802.11 n/ac 802.11 ax 使用 esp_now 发送 LoRa LoRa 包结构 |
cwb | 意义: 所收到包的带宽。 0 为 20MHz,1 为 40MHz |
smoothing | 意义: Set to 1 indicates that channel estimate smoothing is recommended. Set to 0 indicates that only per-carrier independent (unsmoothed) channel estimate is recommended. 其他参考: 802.11-2020 Tips: 对 subcarrier 进行平滑有助于提升 SNR |
not_sounding | 意义: Set to 0 indicates that PPDU is a sounding PPDU. Set to 1 indicates that the PPDU is not a sounding PPDU. sounding PPDU 用于让请求接收端进行信道估计。 其他参考: 802.11-2020 Channel measurement (sounding) procedures,在 802.11 ac 协议中,波束成形之前需要进行信道校准过程(即 channel sounding) |
aggregation | 意义: 所收到的包是否启用了 ampdu 0 为仅对一个子帧进行 MPDU 方式聚合;1 为对多个子帧进行 MPDU 方式聚合,聚合的子帧数目见 ampdu_cnt |
stbc | 意义: STBC 为 1 表示所接受到的包是通过STBC的方式发送的,0 的话就代表不是 |
fec_coding | 意义: fec: forward error correction。对于 802.11 n 引入了低密度奇偶校验码 (low density parity check),LDPC码是由Gallager (1962)发现的,LDPC码是一类特殊的线性分组码。此外,它们是奇偶校验码的一种特殊情况,奇偶校验矩阵的大部分元素为零,只有少数矩阵元素包含1。LDPC名称的“低密度”部分就是根据这个属性来命名的。 1 代表此 802.11 n 包使用了 LDPC。 |
sgi | 意义: 是否启用短保护间隔(SGI / Short guard interval) 。 0 为使用长保护间隔,1 为使用短时间间隔。 解释: 由于信号沿多条路径传播,导致在接收侧,最新接收的信息符号(information symbol)可能会和上一个接收过程尚未结束的信息符号进行碰撞,从而导致干扰。为此,802.11a/g标准要求在发送信息符号时,必须要保证在信息符号之间存在800ns的时间间隔,这个间隔被称为Guard Interval(GI)。802.11n缺省时仍然使用800nsGI。 Tips: 当多径效应不是很严重时,可以将该间隔配置为400ns,可以将吞吐提高将近10%。如果GI时长不合理,会降低链路的有效SNR。Short GI使用于多径情况较少、射频环境较好的应用场景。在多径效应影响较大的时候,应该关闭short GI功能。 |
noise_floor | 意义: 背景噪声的大小,单位为 dBm,结合信号强度 (RSSI) 可以计算出 SNR。 |
ampdu_cnt | 意义: 检测到收到包使用 AMPDU 方式对多个子帧进行聚合时,指示聚合的子帧数目。 解释: 使用信息协议数据单位 (MPDU / Message Protocol Data Unit) 方式对多帧进行聚合时,一个汇聚帧所包含子帧个数。 Tips: 1. ampdu 方式下每个子帧都有 mac 头,但一个聚合帧只有一个 phy 头。但 csi 属于 phy 层的数据,这意味着当 ampdu_cut 不是 0 的时候同一个聚合帧内的多个子帧不会被分别计算 csi。 2. 为保证收到 CSI 的时间均匀性,应将 ampdu 配置成 1 |
channel | 意义: 所收到包使用的传输信道号 |
secondary_channel | 意义: 分析所收到包在传输时所使用的 second channel 相较 primary channel 是 above 还是 below。 0 代表未使用 second channel,1 代表 second channel 在 primary channel 的“上方”,2 代表在其下方。 Tips: 当收到包的带宽为 20MHz 时,secondary channel 的值为接收端的配置,而不是发送端的 secondary channel 配置。 |
timestamp | 意义: 当收到包时的本机时间,单位为微秒 |
ant | 意义: 所收到包是通过哪个天线采集的 0 代表天线 0,1 代表天线 1 |
sig_len | 意义: 代表整个包的长度,单位为 bytes |
rx_state | 意义: 指示包的状态 0 代表包解析无误,其他数字代表解析错误,错误代码含义不公开 |
其他相关链接:
- ESP-CSI 官方仓库:esp-csi
- ESP 对 CSI raw_data 的格式说明:Wi-Fi Channel State Information