ESP-CSI

本文详细描述了ESP-IDF框架v5.2.1中定义的`wifi_csi_info_t`结构体,它包含了CSI(ChannelStateInformation)数据以及与接收到的Wi-Fi数据包相关的元数据,如RSSI、速率、MCS等。
摘要由CSDN通过智能技术生成

在frameworks\esp-idf-v5.2.1\components\esp_wifi\include\esp_wifi_types.h有关于csi的结构体数据:

typedef struct {
    wifi_pkt_rx_ctrl_t rx_ctrl;/**< 接收到的 CSI 数据的无线数据包元数据头 */
    uint8_t mac[6];            /**< CSI 数据的源 MAC 地址 */
    uint8_t dmac[6];           /**< CSI 数据的目的 MAC 地址 */
    bool first_word_invalid;   /**< CSI 数据的前四个字节是否无效,true 表示前四个字节由于硬件限制而无效 */
    int8_t *buf;               /**< CSI 数据的有效缓冲区 */
    uint16_t len;              /**< CSI 数据的有效长度 */
    uint8_t *hdr;              /**< Wi-Fi 数据包的头部 */
    uint8_t *payload;          /**< Wi-Fi 数据包的有效载荷 */
    uint16_t payload_len;      /**< Wi-Fi 数据包的有效载荷长度 */
} wifi_csi_info_t;

其中wifi_pkt_rx_ctrl_t 内容为:

typedef struct {
    signed rssi:8;                /**< 接收到的数据包的接收信号强度指示(RSSI),单位:dBm */
    unsigned rate:5;              /**< 数据包的物理层速率编码。仅适用于非 HT(11bg) 数据包 */
    unsigned :1;                  /**< 保留位 */
    unsigned sig_mode:2;          /**< 接收到的数据包的协议类型,0: 非 HT(11bg) 数据包;1: HT(11n) 数据包;3: VHT(11ac) 数据包 */
    unsigned :16;                 /**< 保留位 */
    unsigned mcs:7;               /**< 调制编码方案。如果是 HT(11n) 数据包,表示调制方式,范围从 0 到 76(MSC0 ~ MCS76) */
    unsigned cwb:1;               /**< 数据包的信道带宽。0: 20MHz; 1: 40MHz */
    unsigned :16;                 /**< 保留位 */
    unsigned smoothing:1;         /**< 设置为 1 表示推荐使用信道估计平滑。
                                       设置为 0 表示仅推荐使用每个载波独立的(非平滑的)信道估计。 */
    unsigned not_sounding:1;      /**< 设置为 0 表示 PPDU 是 sounding PPDU。设置为 1 表示 PPDU 不是 sounding PPDU。
                                       sounding PPDU 用于接收方进行信道估计 */
    unsigned :1;                  /**< 保留位 */
    unsigned aggregation:1;       /**< 数据包聚合。0: MPDU 数据包; 1: AMPDU 数据包 */
    unsigned stbc:2;              /**< 空时分组编码(STBC)。0: 非 STBC 数据包; 1: STBC 数据包 */
    unsigned fec_coding:1;        /**< 前向错误纠正(FEC)。对于是 LDPC 的 11n 数据包设置标志 */
    unsigned sgi:1;               /**< 短导频间隔(SGI)。0: 长 GI; 1: 短 GI */
#if CONFIG_IDF_TARGET_ESP32
    signed noise_floor:8;         /**< 无线频率模块(RF)的噪声水平。单位:dBm */
#elif CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C2
    unsigned :8;                  /**< 保留位 */
#endif
    unsigned ampdu_cnt:8;         /**< 在 AMPDU 中聚合的子帧数 */
    unsigned channel:4;           /**< 接收到该数据包的主要信道 */
    unsigned secondary_channel:4; /**< 接收到该数据包的次要信道。0: 无; 1: 上方; 2: 下方 */
    unsigned :8;                  /**< 保留位 */
    unsigned timestamp:32;        /**< 时间戳。接收到该数据包时的本地时间。仅当未启用调制解调器睡眠或轻度睡眠时才精确。单位:微秒 */
    unsigned :32;                 /**< 保留位 */
#if CONFIG_IDF_TARGET_ESP32S2
    unsigned :32;                 /**< 保留位 */
#elif CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C2
    signed noise_floor:8;         /**< 无线频率模块(RF)的噪声水平。单位:dBm */
    unsigned :24;                 /**< 保留位 */
    unsigned :32;                 /**< 保留位 */
#endif
    unsigned :31;                 /**< 保留位 */
    unsigned ant:1;               /**< 接收到该数据包的天线编号。0: Wi-Fi 天线 0; 1: Wi-Fi 天线 1 */
#if CONFIG_IDF_TARGET_ESP32S2
    signed noise_floor:8;         /**< 无线频率模块(RF)的噪声水平。单位:dBm */
    unsigned :24;                 /**< 保留位 */
#elif CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C2
    unsigned :32;                 /**< 保留位 */
    unsigned :32;                 /**< 保留位 */
#endif
    unsigned sig_len:12;          /**< 数据包长度,包括帧校验序列(FCS) */
    unsigned :12;                 /**< 保留位 */
    unsigned rx_state:8;          /**< 数据包的状态。0: 无错误; 其他: 不公开的错误号 */
} wifi_pkt_rx_ctrl_t;
#endif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值