你提供的新代码片段是:
```c
/* 6G 40M rate set X */ N,
WL_RATE_..., ...
```
并且包含了从 `rate set 1` 到 `15` 的完整定义,还混合了 **OFDM、HE、EHT、TXBF、CDD** 等多种技术。
---
## ✅ 目标
我们要用 Python 脚本:
1. 解析所有 `/* 6G 40M rate set ... */` 块
2. 提取每个块中的速率码(如 `WL_RATE_1X1_HE0SS1`)
3. 分类分析:标准、天线数、技术、MCS 类型等
4. 输出结构化表格(Excel 或打印)
---
## ✅ 完整可运行脚本(适配你的新格式)
```python
import re
import pandas as pd
from typing import List, Dict, Set
# =============================
# ✅ 粘贴你的完整 C 代码
# =============================
C_CODE = '''
WL_RATE_1X1_OFDM_6, WL_RATE_1X1_OFDM_9, WL_RATE_1X1_OFDM_12, WL_RATE_1X1_OFDM_18,
WL_RATE_1X1_OFDM_24, WL_RATE_1X1_OFDM_36, WL_RATE_1X1_OFDM_48, WL_RATE_1X1_OFDM_54,
WL_RATE_1X2_CDD_OFDM_6, WL_RATE_1X2_CDD_OFDM_9, WL_RATE_1X2_CDD_OFDM_12, WL_RATE_1X2_CDD_OFDM_18,
WL_RATE_1X2_CDD_OFDM_24, WL_RATE_1X2_CDD_OFDM_36, WL_RATE_1X2_CDD_OFDM_48, WL_RATE_1X2_CDD_OFDM_54,
WL_RATE_1X2_TXBF_OFDM_6, WL_RATE_1X2_TXBF_OFDM_9, WL_RATE_1X2_TXBF_OFDM_12, WL_RATE_1X2_TXBF_OFDM_18,
WL_RATE_1X2_TXBF_OFDM_24, WL_RATE_1X2_TXBF_OFDM_36, WL_RATE_1X2_TXBF_OFDM_48, WL_RATE_1X2_TXBF_OFDM_54,
WL_RATE_1X1_HE0SS1, WL_RATE_1X1_HE1SS1, WL_RATE_1X1_HE2SS1, WL_RATE_1X1_HE3SS1,
WL_RATE_1X1_HE4SS1, WL_RATE_1X1_HE5SS1, WL_RATE_1X1_HE6SS1, WL_RATE_1X1_HE7SS1,
WL_RATE_1X1_HE8SS1, WL_RATE_1X1_HE9SS1, WL_RATE_1X1_HE10SS1, WL_RATE_1X1_HE11SS1,
WL_RATE_1X2_HE0SS1, WL_RATE_1X2_HE1SS1, WL_RATE_1X2_HE2SS1, WL_RATE_1X2_HE3SS1,
WL_RATE_1X2_HE4SS1, WL_RATE_1X2_HE5SS1, WL_RATE_1X2_HE6SS1, WL_RATE_1X2_HE7SS1,
WL_RATE_1X2_HE8SS1, WL_RATE_1X2_HE9SS1, WL_RATE_1X2_HE10SS1, WL_RATE_1X2_HE11SS1,
WL_RATE_1X2_TXBF_HE0SS1, WL_RATE_1X2_TXBF_HE1SS1, WL_RATE_1X2_TXBF_HE2SS1, WL_RATE_1X2_TXBF_HE3SS1,
WL_RATE_1X2_TXBF_HE4SS1, WL_RATE_1X2_TXBF_HE5SS1, WL_RATE_1X2_TXBF_HE6SS1, WL_RATE_1X2_TXBF_HE7SS1,
WL_RATE_1X2_TXBF_HE8SS1, WL_RATE_1X2_TXBF_HE9SS1, WL_RATE_1X2_TXBF_HE10SS1, WL_RATE_1X2_TXBF_HE11SS1,
WL_RATE_2X2_HE0SS2, WL_RATE_2X2_HE1SS2, WL_RATE_2X2_HE2SS2, WL_RATE_2X2_HE3SS2,
WL_RATE_2X2_HE4SS2, WL_RATE_2X2_HE5SS2, WL_RATE_2X2_HE6SS2, WL_RATE_2X2_HE7SS2,
WL_RATE_2X2_HE8SS2, WL_RATE_2X2_HE9SS2, WL_RATE_2X2_HE10SS2, WL_RATE_2X2_HE11SS2,
WL_RATE_2X2_TXBF_HE0SS2, WL_RATE_2X2_TXBF_HE1SS2, WL_RATE_2X2_TXBF_HE2SS2, WL_RATE_2X2_TXBF_HE3SS2,
WL_RATE_2X2_TXBF_HE4SS2, WL_RATE_2X2_TXBF_HE5SS2, WL_RATE_2X2_TXBF_HE6SS2, WL_RATE_2X2_TXBF_HE7SS2,
WL_RATE_2X2_TXBF_HE8SS2, WL_RATE_2X2_TXBF_HE9SS2, WL_RATE_2X2_TXBF_HE10SS2, WL_RATE_2X2_TXBF_HE11SS2,
WL_RATE_1X1_EHT12SS1, WL_RATE_1X1_EHT13SS1, WL_RATE_1X1_EHT14SS1, WL_RATE_1X1_EHT15SS1,
WL_RATE_1X2_EHT12SS1, WL_RATE_1X2_EHT13SS1, WL_RATE_1X2_EHT14SS1, WL_RATE_1X2_EHT15SS1,
WL_RATE_1X2_TXBF_EHT12SS1, WL_RATE_1X2_TXBF_EHT13SS1, WL_RATE_1X2_TXBF_EHT14SS1, WL_RATE_1X2_TXBF_EHT15SS1,
WL_RATE_2X2_EHT12SS2, WL_RATE_2X2_EHT13SS2, WL_RATE_2X2_TXBF_EHT12SS2, WL_RATE_2X2_TXBF_EHT13SS2,
/* 6G 40M rate set 1 */ 12,
WL_RATE_1X1_HE0SS1, WL_RATE_1X1_HE1SS1, WL_RATE_1X1_HE2SS1, WL_RATE_1X1_HE3SS1,
WL_RATE_1X1_HE4SS1, WL_RATE_1X1_HE5SS1, WL_RATE_1X1_HE6SS1, WL_RATE_1X1_HE7SS1,
WL_RATE_1X1_HE8SS1, WL_RATE_1X1_HE9SS1, WL_RATE_1X1_HE10SS1, WL_RATE_1X1_HE11SS1,
/* 6G 40M rate set 2 */ 16,
WL_RATE_1X2_CDD_OFDM_6, WL_RATE_1X2_CDD_OFDM_9, WL_RATE_1X2_CDD_OFDM_12, WL_RATE_1X2_CDD_OFDM_18,
WL_RATE_1X2_CDD_OFDM_24, WL_RATE_1X2_CDD_OFDM_36, WL_RATE_1X2_CDD_OFDM_48, WL_RATE_1X2_CDD_OFDM_54,
WL_RATE_1X2_TXBF_OFDM_6, WL_RATE_1X2_TXBF_OFDM_9, WL_RATE_1X2_TXBF_OFDM_12, WL_RATE_1X2_TXBF_OFDM_18,
WL_RATE_1X2_TXBF_OFDM_24, WL_RATE_1X2_TXBF_OFDM_36, WL_RATE_1X2_TXBF_OFDM_48, WL_RATE_1X2_TXBF_OFDM_54,
/* 6G 40M rate set 3 */ 20,
WL_RATE_1X2_TXBF_OFDM_6, WL_RATE_1X2_TXBF_OFDM_9, WL_RATE_1X2_TXBF_OFDM_12, WL_RATE_1X2_TXBF_OFDM_18,
WL_RATE_1X2_TXBF_OFDM_24, WL_RATE_1X2_TXBF_OFDM_36, WL_RATE_1X2_TXBF_OFDM_48, WL_RATE_1X2_TXBF_OFDM_54,
WL_RATE_1X2_TXBF_HE0SS1, WL_RATE_1X2_TXBF_HE1SS1, WL_RATE_1X2_TXBF_HE2SS1, WL_RATE_1X2_TXBF_HE3SS1,
WL_RATE_1X2_TXBF_HE4SS1, WL_RATE_1X2_TXBF_HE5SS1, WL_RATE_1X2_TXBF_HE6SS1, WL_RATE_1X2_TXBF_HE7SS1,
WL_RATE_1X2_TXBF_HE8SS1, WL_RATE_1X2_TXBF_HE9SS1, WL_RATE_1X2_TXBF_HE10SS1, WL_RATE_1X2_TXBF_HE11SS1,
/* 6G 40M rate set 4 */ 20,
WL_RATE_1X1_OFDM_6, WL_RATE_1X1_OFDM_9, WL_RATE_1X1_OFDM_12, WL_RATE_1X1_OFDM_18,
WL_RATE_1X1_OFDM_24, WL_RATE_1X1_OFDM_36, WL_RATE_1X1_OFDM_48, WL_RATE_1X1_OFDM_54,
WL_RATE_1X1_HE0SS1, WL_RATE_1X1_HE1SS1, WL_RATE_1X1_HE2SS1, WL_RATE_1X1_HE3SS1,
WL_RATE_1X1_HE4SS1, WL_RATE_1X1_HE5SS1, WL_RATE_1X1_HE6SS1, WL_RATE_1X1_HE7SS1,
WL_RATE_1X1_HE8SS1, WL_RATE_1X1_HE9SS1, WL_RATE_1X1_HE10SS1, WL_RATE_1X1_HE11SS1,
/* 6G 40M rate set 5 */ 24,
WL_RATE_1X2_HE0SS1, WL_RATE_1X2_HE1SS1, WL_RATE_1X2_HE2SS1, WL_RATE_1X2_HE3SS1,
WL_RATE_1X2_HE4SS1, WL_RATE_1X2_HE5SS1, WL_RATE_1X2_HE6SS1, WL_RATE_1X2_HE7SS1,
WL_RATE_1X2_HE8SS1, WL_RATE_1X2_HE9SS1, WL_RATE_1X2_HE10SS1, WL_RATE_1X2_HE11SS1,
WL_RATE_1X2_TXBF_HE0SS1, WL_RATE_1X2_TXBF_HE1SS1, WL_RATE_1X2_TXBF_HE2SS1, WL_RATE_1X2_TXBF_HE3SS1,
WL_RATE_1X2_TXBF_HE4SS1, WL_RATE_1X2_TXBF_HE5SS1, WL_RATE_1X2_TXBF_HE6SS1, WL_RATE_1X2_TXBF_HE7SS1,
WL_RATE_1X2_TXBF_HE8SS1, WL_RATE_1X2_TXBF_HE9SS1, WL_RATE_1X2_TXBF_HE10SS1, WL_RATE_1X2_TXBF_HE11SS1,
/* 6G 40M rate set 6 */ 24,
WL_RATE_2X2_HE0SS2, WL_RATE_2X2_HE1SS2, WL_RATE_2X2_HE2SS2, WL_RATE_2X2_HE3SS2,
WL_RATE_2X2_HE4SS2, WL_RATE_2X2_HE5SS2, WL_RATE_2X2_HE6SS2, WL_RATE_2X2_HE7SS2,
WL_RATE_2X2_HE8SS2, WL_RATE_2X2_HE9SS2, WL_RATE_2X2_HE10SS2, WL_RATE_2X2_HE11SS2,
WL_RATE_2X2_TXBF_HE0SS2, WL_RATE_2X2_TXBF_HE1SS2, WL_RATE_2X2_TXBF_HE2SS2, WL_RATE_2X2_TXBF_HE3SS2,
WL_RATE_2X2_TXBF_HE4SS2, WL_RATE_2X2_TXBF_HE5SS2, WL_RATE_2X2_TXBF_HE6SS2, WL_RATE_2X2_TXBF_HE7SS2,
WL_RATE_2X2_TXBF_HE8SS2, WL_RATE_2X2_TXBF_HE9SS2, WL_RATE_2X2_TXBF_HE10SS2, WL_RATE_2X2_TXBF_HE11SS2,
/* 6G 40M rate set 7 */ 24,
WL_RATE_1X1_OFDM_6, WL_RATE_1X1_OFDM_9, WL_RATE_1X1_OFDM_12, WL_RATE_1X1_OFDM_18,
WL_RATE_1X1_OFDM_24, WL_RATE_1X1_OFDM_36, WL_RATE_1X1_OFDM_48, WL_RATE_1X1_OFDM_54,
WL_RATE_1X1_HE0SS1, WL_RATE_1X1_HE1SS1, WL_RATE_1X1_HE2SS1, WL_RATE_1X1_HE3SS1,
WL_RATE_1X1_HE4SS1, WL_RATE_1X1_HE5SS1, WL_RATE_1X1_HE6SS1, WL_RATE_1X1_HE7SS1,
WL_RATE_1X1_HE8SS1, WL_RATE_1X1_HE9SS1, WL_RATE_1X1_HE10SS1, WL_RATE_1X1_HE11SS1,
WL_RATE_1X1_EHT12SS1, WL_RATE_1X1_EHT13SS1, WL_RATE_1X1_EHT14SS1, WL_RATE_1X1_EHT15SS1,
/* 6G 40M rate set 8 */ 28,
WL_RATE_2X2_HE0SS2, WL_RATE_2X2_HE1SS2, WL_RATE_2X2_HE2SS2, WL_RATE_2X2_HE3SS2,
WL_RATE_2X2_HE4SS2, WL_RATE_2X2_HE5SS2, WL_RATE_2X2_HE6SS2, WL_RATE_2X2_HE7SS2,
WL_RATE_2X2_HE8SS2, WL_RATE_2X2_HE9SS2, WL_RATE_2X2_HE10SS2, WL_RATE_2X2_HE11SS2,
WL_RATE_2X2_TXBF_HE0SS2, WL_RATE_2X2_TXBF_HE1SS2, WL_RATE_2X2_TXBF_HE2SS2, WL_RATE_2X2_TXBF_HE3SS2,
WL_RATE_2X2_TXBF_HE4SS2, WL_RATE_2X2_TXBF_HE5SS2, WL_RATE_2X2_TXBF_HE6SS2, WL_RATE_2X2_TXBF_HE7SS2,
WL_RATE_2X2_TXBF_HE8SS2, WL_RATE_2X2_TXBF_HE9SS2, WL_RATE_2X2_TXBF_HE10SS2, WL_RATE_2X2_TXBF_HE11SS2,
WL_RATE_2X2_EHT12SS2, WL_RATE_2X2_EHT13SS2, WL_RATE_2X2_TXBF_EHT12SS2, WL_RATE_2X2_TXBF_EHT13SS2,
/* 6G 40M rate set 9 */ 40,
WL_RATE_1X2_CDD_OFDM_6, WL_RATE_1X2_CDD_OFDM_9, WL_RATE_1X2_CDD_OFDM_12, WL_RATE_1X2_CDD_OFDM_18,
WL_RATE_1X2_CDD_OFDM_24, WL_RATE_1X2_CDD_OFDM_36, WL_RATE_1X2_CDD_OFDM_48, WL_RATE_1X2_CDD_OFDM_54,
WL_RATE_1X2_TXBF_OFDM_6, WL_RATE_1X2_TXBF_OFDM_9, WL_RATE_1X2_TXBF_OFDM_12, WL_RATE_1X2_TXBF_OFDM_18,
WL_RATE_1X2_TXBF_OFDM_24, WL_RATE_1X2_TXBF_OFDM_36, WL_RATE_1X2_TXBF_OFDM_48, WL_RATE_1X2_TXBF_OFDM_54,
WL_RATE_1X2_HE0SS1, WL_RATE_1X2_HE1SS1, WL_RATE_1X2_HE2SS1, WL_RATE_1X2_HE3SS1,
WL_RATE_1X2_HE4SS1, WL_RATE_1X2_HE5SS1, WL_RATE_1X2_HE6SS1, WL_RATE_1X2_HE7SS1,
WL_RATE_1X2_HE8SS1, WL_RATE_1X2_HE9SS1, WL_RATE_1X2_HE10SS1, WL_RATE_1X2_HE11SS1,
WL_RATE_1X2_TXBF_HE0SS1, WL_RATE_1X2_TXBF_HE1SS1, WL_RATE_1X2_TXBF_HE2SS1, WL_RATE_1X2_TXBF_HE3SS1,
WL_RATE_1X2_TXBF_HE4SS1, WL_RATE_1X2_TXBF_HE5SS1, WL_RATE_1X2_TXBF_HE6SS1, WL_RATE_1X2_TXBF_HE7SS1,
WL_RATE_1X2_TXBF_HE8SS1, WL_RATE_1X2_TXBF_HE9SS1, WL_RATE_1X2_TXBF_HE10SS1, WL_RATE_1X2_TXBF_HE11SS1,
/* 6G 40M rate set 10 */ 44,
WL_RATE_1X2_CDD_OFDM_6, WL_RATE_1X2_CDD_OFDM_9, WL_RATE_1X2_CDD_OFDM_12, WL_RATE_1X2_CDD_OFDM_18,
WL_RATE_1X2_CDD_OFDM_24, WL_RATE_1X2_CDD_OFDM_36, WL_RATE_1X2_CDD_OFDM_48, WL_RATE_1X2_CDD_OFDM_54,
WL_RATE_1X2_HE0SS1, WL_RATE_1X2_HE1SS1, WL_RATE_1X2_HE2SS1, WL_RATE_1X2_HE3SS1,
WL_RATE_1X2_HE4SS1, WL_RATE_1X2_HE5SS1, WL_RATE_1X2_HE6SS1, WL_RATE_1X2_HE7SS1,
WL_RATE_1X2_HE8SS1, WL_RATE_1X2_HE9SS1, WL_RATE_1X2_HE10SS1, WL_RATE_1X2_HE11SS1,
WL_RATE_2X2_HE0SS2, WL_RATE_2X2_HE1SS2, WL_RATE_2X2_HE2SS2, WL_RATE_2X2_HE3SS2,
WL_RATE_2X2_HE4SS2, WL_RATE_2X2_HE5SS2, WL_RATE_2X2_HE6SS2, WL_RATE_2X2_HE7SS2,
WL_RATE_2X2_HE8SS2, WL_RATE_2X2_HE9SS2, WL_RATE_2X2_HE10SS2, WL_RATE_2X2_HE11SS2,
WL_RATE_2X2_TXBF_HE0SS2, WL_RATE_2X2_TXBF_HE1SS2, WL_RATE_2X2_TXBF_HE2SS2, WL_RATE_2X2_TXBF_HE3SS2,
WL_RATE_2X2_TXBF_HE4SS2, WL_RATE_2X2_TXBF_HE5SS2, WL_RATE_2X2_TXBF_HE6SS2, WL_RATE_2X2_TXBF_HE7SS2,
WL_RATE_2X2_TXBF_HE8SS2, WL_RATE_2X2_TXBF_HE9SS2, WL_RATE_2X2_TXBF_HE10SS2, WL_RATE_2X2_TXBF_HE11SS2,
/* 6G 40M rate set 11 */ 48,
WL_RATE_1X2_CDD_OFDM_6, WL_RATE_1X2_CDD_OFDM_9, WL_RATE_1X2_CDD_OFDM_12, WL_RATE_1X2_CDD_OFDM_18,
WL_RATE_1X2_CDD_OFDM_24, WL_RATE_1X2_CDD_OFDM_36, WL_RATE_1X2_CDD_OFDM_48, WL_RATE_1X2_CDD_OFDM_54,
WL_RATE_1X2_TXBF_OFDM_6, WL_RATE_1X2_TXBF_OFDM_9, WL_RATE_1X2_TXBF_OFDM_12, WL_RATE_1X2_TXBF_OFDM_18,
WL_RATE_1X2_TXBF_OFDM_24, WL_RATE_1X2_TXBF_OFDM_36, WL_RATE_1X2_TXBF_OFDM_48, WL_RATE_1X2_TXBF_OFDM_54,
WL_RATE_1X2_HE0SS1, WL_RATE_1X2_HE1SS1, WL_RATE_1X2_HE2SS1, WL_RATE_1X2_HE3SS1,
WL_RATE_1X2_HE4SS1, WL_RATE_1X2_HE5SS1, WL_RATE_1X2_HE6SS1, WL_RATE_1X2_HE7SS1,
WL_RATE_1X2_HE8SS1, WL_RATE_1X2_HE9SS1, WL_RATE_1X2_HE10SS1, WL_RATE_1X2_HE11SS1,
WL_RATE_1X2_TXBF_HE0SS1, WL_RATE_1X2_TXBF_HE1SS1, WL_RATE_1X2_TXBF_HE2SS1, WL_RATE_1X2_TXBF_HE3SS1,
WL_RATE_1X2_TXBF_HE4SS1, WL_RATE_1X2_TXBF_HE5SS1, WL_RATE_1X2_TXBF_HE6SS1, WL_RATE_1X2_TXBF_HE7SS1,
WL_RATE_1X2_TXBF_HE8SS1, WL_RATE_1X2_TXBF_HE9SS1, WL_RATE_1X2_TXBF_HE10SS1, WL_RATE_1X2_TXBF_HE11SS1,
WL_RATE_1X2_EHT12SS1, WL_RATE_1X2_EHT13SS1, WL_RATE_1X2_EHT14SS1, WL_RATE_1X2_EHT15SS1,
WL_RATE_1X2_TXBF_EHT12SS1, WL_RATE_1X2_TXBF_EHT13SS1, WL_RATE_1X2_TXBF_EHT14SS1, WL_RATE_1X2_TXBF_EHT15SS1,
/* 6G 40M rate set 12 */ 8,
WL_RATE_1X1_OFDM_6, WL_RATE_1X1_OFDM_9, WL_RATE_1X1_OFDM_12, WL_RATE_1X1_OFDM_18,
WL_RATE_1X1_OFDM_24, WL_RATE_1X1_OFDM_36, WL_RATE_1X1_OFDM_48, WL_RATE_1X1_OFDM_54,
/* 6G 40M rate set 13 */ 84,
WL_RATE_1X1_OFDM_6, WL_RATE_1X1_OFDM_9, WL_RATE_1X1_OFDM_12, WL_RATE_1X1_OFDM_18,
WL_RATE_1X1_OFDM_24, WL_RATE_1X1_OFDM_36, WL_RATE_1X1_OFDM_48, WL_RATE_1X1_OFDM_54,
WL_RATE_1X2_CDD_OFDM_6, WL_RATE_1X2_CDD_OFDM_9, WL_RATE_1X2_CDD_OFDM_12, WL_RATE_1X2_CDD_OFDM_18,
WL_RATE_1X2_CDD_OFDM_24, WL_RATE_1X2_CDD_OFDM_36, WL_RATE_1X2_CDD_OFDM_48, WL_RATE_1X2_CDD_OFDM_54,
WL_RATE_1X2_TXBF_OFDM_6, WL_RATE_1X2_TXBF_OFDM_9, WL_RATE_1X2_TXBF_OFDM_12, WL_RATE_1X2_TXBF_OFDM_18,
WL_RATE_1X2_TXBF_OFDM_24, WL_RATE_1X2_TXBF_OFDM_36, WL_RATE_1X2_TXBF_OFDM_48, WL_RATE_1X2_TXBF_OFDM_54,
WL_RATE_1X1_HE0SS1, WL_RATE_1X1_HE1SS1, WL_RATE_1X1_HE2SS1, WL_RATE_1X1_HE3SS1,
WL_RATE_1X1_HE4SS1, WL_RATE_1X1_HE5SS1, WL_RATE_1X1_HE6SS1, WL_RATE_1X1_HE7SS1,
WL_RATE_1X1_HE8SS1, WL_RATE_1X1_HE9SS1, WL_RATE_1X1_HE10SS1, WL_RATE_1X1_HE11SS1,
WL_RATE_1X2_HE0SS1, WL_RATE_1X2_HE1SS1, WL_RATE_1X2_HE2SS1, WL_RATE_1X2_HE3SS1,
WL_RATE_1X2_HE4SS1, WL_RATE_1X2_HE5SS1, WL_RATE_1X2_HE6SS1, WL_RATE_1X2_HE7SS1,
WL_RATE_1X2_HE8SS1, WL_RATE_1X2_HE9SS1, WL_RATE_1X2_HE10SS1, WL_RATE_1X2_HE11SS1,
WL_RATE_1X2_TXBF_HE0SS1, WL_RATE_1X2_TXBF_HE1SS1, WL_RATE_1X2_TXBF_HE2SS1, WL_RATE_1X2_TXBF_HE3SS1,
WL_RATE_1X2_TXBF_HE4SS1, WL_RATE_1X2_TXBF_HE5SS1, WL_RATE_1X2_TXBF_HE6SS1, WL_RATE_1X2_TXBF_HE7SS1,
WL_RATE_1X2_TXBF_HE8SS1, WL_RATE_1X2_TXBF_HE9SS1, WL_RATE_1X2_TXBF_HE10SS1, WL_RATE_1X2_TXBF_HE11SS1,
WL_RATE_2X2_HE0SS2, WL_RATE_2X2_HE1SS2, WL_RATE_2X2_HE2SS2, WL_RATE_2X2_HE3SS2,
WL_RATE_2X2_HE4SS2, WL_RATE_2X2_HE5SS2, WL_RATE_2X2_HE6SS2, WL_RATE_2X2_HE7SS2,
WL_RATE_2X2_HE8SS2, WL_RATE_2X2_HE9SS2, WL_RATE_2X2_HE10SS2, WL_RATE_2X2_HE11SS2,
WL_RATE_2X2_TXBF_HE0SS2, WL_RATE_2X2_TXBF_HE1SS2, WL_RATE_2X2_TXBF_HE2SS2, WL_RATE_2X2_TXBF_HE3SS2,
WL_RATE_2X2_TXBF_HE4SS2, WL_RATE_2X2_TXBF_HE5SS2, WL_RATE_2X2_TXBF_HE6SS2, WL_RATE_2X2_TXBF_HE7SS2,
WL_RATE_2X2_TXBF_HE8SS2, WL_RATE_2X2_TXBF_HE9SS2, WL_RATE_2X2_TXBF_HE10SS2, WL_RATE_2X2_TXBF_HE11SS2,
/* 6G 40M rate set 14 */ 16,
WL_RATE_1X1_HE0SS1, WL_RATE_1X1_HE1SS1, WL_RATE_1X1_HE2SS1, WL_RATE_1X1_HE3SS1,
WL_RATE_1X1_HE4SS1, WL_RATE_1X1_HE5SS1, WL_RATE_1X1_HE6SS1, WL_RATE_1X1_HE7SS1,
WL_RATE_1X1_HE8SS1, WL_RATE_1X1_HE9SS1, WL_RATE_1X1_HE10SS1, WL_RATE_1X1_HE11SS1,
WL_RATE_1X1_EHT12SS1, WL_RATE_1X1_EHT13SS1, WL_RATE_1X1_EHT14SS1, WL_RATE_1X1_EHT15SS1,
/* 6G 40M rate set 15 */ 32,
WL_RATE_1X2_HE0SS1, WL_RATE_1X2_HE1SS1, WL_RATE_1X2_HE2SS1, WL_RATE_1X2_HE3SS1,
WL_RATE_1X2_HE4SS1, WL_RATE_1X2_HE5SS1, WL_RATE_1X2_HE6SS1, WL_RATE_1X2_HE7SS1,
WL_RATE_1X2_HE8SS1, WL_RATE_1X2_HE9SS1, WL_RATE_1X2_HE10SS1, WL_RATE_1X2_HE11SS1,
WL_RATE_1X2_TXBF_HE0SS1, WL_RATE_1X2_TXBF_HE1SS1, WL_RATE_1X2_TXBF_HE2SS1, WL_RATE_1X2_TXBF_HE3SS1,
WL_RATE_1X2_TXBF_HE4SS1, WL_RATE_1X2_TXBF_HE5SS1, WL_RATE_1X2_TXBF_HE6SS1, WL_RATE_1X2_TXBF_HE7SS1,
WL_RATE_1X2_TXBF_HE8SS1, WL_RATE_1X2_TXBF_HE9SS1, WL_RATE_1X2_TXBF_HE10SS1, WL_RATE_1X2_TXBF_HE11SS1,
WL_RATE_1X2_EHT12SS1, WL_RATE_1X2_EHT13SS1, WL_RATE_1X2_EHT14SS1, WL_RATE_1X2_EHT15SS1,
WL_RATE_1X2_TXBF_EHT12SS1, WL_RATE_1X2_TXBF_EHT13SS1, WL_RATE_1X2_TXBF_EHT14SS1, WL_RATE_1X2_TXBF_EHT15SS1,
'''
# =============================
# 解析函数
# =============================
def parse_rate_set(c_code: str) -> List[Dict]:
"""
解析 6G 40M rate set 格式
支持:/* 6G 40M rate set X */ N, ...
"""
pattern = re.compile(
r'/\*\s*6G\s+40M\s+rate\s+set\s+(\d+)\s*\*/\s*(\d+)\s*,\s*([^/]+?)(?=/\*\s*6G\s+40M\s+rate\s+set|\Z)',
re.DOTALL | re.IGNORECASE
)
matches = pattern.findall(c_code)
rate_sets = []
for match in matches:
rate_set_id = int(match[0])
count = int(match[1])
content = match[2].strip()
# 提取所有 WL_RATE_xxx
rates = re.findall(r'WL_RATE_[^,\s}]+', content)
rates = [r.strip() for r in rates if r.strip()]
rate_sets.append({
'id': rate_set_id,
'count': count,
'rates': rates
})
return sorted(rate_sets, key=lambda x: x['id'])
def classify_rate(rate: str) -> Dict:
"""对单个 rate code 进行分类"""
info = {
'standard': 'Unknown',
'tx_chains': 1,
'rx_chains': 1,
'technology': set(),
'mcs_type': 'Unknown',
'spatial_streams': 'N/A'
}
# 标准判断
if 'EHT' in rate:
info['standard'] = '802.11be (6GHz)'
info['mcs_type'] = 'EHT-MCS'
elif 'HE' in rate:
info['standard'] = '802.11ax (Wi-Fi 6/6E)'
info['mcs_type'] = 'HE-MCS'
elif 'VHT' in rate or 'P_' in rate:
info['standard'] = '802.11ac'
info['mcs_type'] = 'VHT-MCS'
elif 'MCS' in rate and 'OFDM' not in rate:
info['standard'] = '802.11n'
info['mcs_type'] = 'HT-MCS'
elif 'OFDM' in rate:
info['standard'] = '802.11a/g'
info['mcs_type'] = 'OFDM'
# 天线配置
if '_1X2_' in rate:
info['tx_chains'] = 1
info['rx_chains'] = 2
elif '_2X2_' in rate:
info['tx_chains'] = 2
info['rx_chains'] = 2
else:
info['tx_chains'] = 1
info['rx_chains'] = 1
# 技术特性
if 'CDD' in rate:
info['technology'].add('CDD')
if 'STBC' in rate:
info['technology'].add('STBC')
if 'TXBF' in rate:
info['technology'].add('TX Beamforming')
if 'SDM' in rate:
info['technology'].add('Spatial Multiplexing')
# 空间流
if 'SS1' in rate:
info['spatial_streams'] = 1
elif 'SS2' in rate:
info['spatial_streams'] = 2
return info
def analyze_rate_set(rs: Dict) -> Dict:
"""分析一个 RATE_SET"""
all_info = [classify_rate(r) for r in rs['rates']]
standards = sorted(set(info['standard'] for info in all_info))
technologies = sorted(set(t for info in all_info for t in info['technology']))
mcs_types = sorted(set(info['mcs_type'] for info in all_info))
spatial_streams = sorted(set(str(info['spatial_streams']) for info in all_info))
tx_chains = max(info['tx_chains'] for info in all_info)
rx_chains = max(info['rx_chains'] for info in all_info)
is_base = len(standards) == 1 and len(technologies) <= 1
type_label = 'Base' if is_base else 'Composite'
tech_str = ', '.join(technologies) if technologies else 'None'
std_str = ', '.join(standards)
mcs_str = ', '.join(mcs_types)
ss_str = ', '.join(spatial_streams)
desc_parts = [std_str]
if tx_chains == 1 and rx_chains == 1:
desc_parts.append("SISO")
elif tx_chains == 1 and rx_chains == 2:
desc_parts.append("1x2 RX Diversity")
elif tx_chains == 2 and rx_chains == 2:
desc_parts.append("2x2 MIMO")
if technologies:
desc_parts.append('+'.join(technologies))
desc_parts.append(mcs_str)
description = " + ".join(desc_parts)
return {
'Set ID': rs['id'],
'Standard(s)': ', '.join(standards),
'Tx Chains': tx_chains,
'Rx Chains': rx_chains,
'Technologies': tech_str,
'MCS Types': mcs_str,
'NSS': ss_str,
'Count': rs['count'],
'Type': type_label,
'Description': description
}
def main():
print("[*] 开始解析 6G 40M rate sets...")
rate_sets = parse_rate_set(C_CODE)
if not rate_sets:
print("❌ 错误:未提取到任何 rate set,请检查 C_CODE 格式!")
return
print(f"[*] 共找到 {len(rate_sets)} 个 RATE_SET")
results = []
for rs in rate_sets:
result = analyze_rate_set(rs)
results.append(result)
df = pd.DataFrame(results)
columns = [
'Set ID', 'Standard(s)', 'Tx Chains', 'Rx Chains',
'Technologies', 'MCS Types', 'NSS', 'Count',
'Type', 'Description'
]
df = df[columns]
output_file = '6g_40m_rate_set_analysis.xlsx'
df.to_excel(output_file, index=False)
print(f"[+] 分析完成!结果已保存至 '{output_file}'")
print("\n" + df.to_string(index=False))
if __name__ == '__main__':
main()
```
---
## ✅ 输出示例(前几行)
| Set ID | Standard(s) | Tx Chains | Rx Chains | Technologies | MCS Types | NSS | Count | Type | Description |
|--------|----------------------------------|-----------|-----------|-------------------------|----------------|-------|-------|------------|-------------|
| 1 | 802.11ax (Wi-Fi 6/6E) | 1 | 1 | None | HE-MCS | 1 | 12 | Base | 802.11ax (Wi-Fi 6/6E) + SISO + HE-MCS |
| 2 | 802.11a/g | 1 | 2 | CDD, TX Beamforming | OFDM | N/A | 16 | Composite | 802.11a/g + 1x2 RX Diversity + CDD+TX Beamforming + OFDM |
---
## ✅ 功能亮点
- ✅ 自动识别 `/* 6G 40M rate set X */ N,` 格式
- ✅ 支持 EHT/HE/VHT/HT/OFDM 多标准识别
- ✅ 区分 SISO / 1x2 / 2x2 配置
- ✅ 识别 TXBF、CDD、SDM 等技术
- ✅ 输出 Excel 并带描述字段
---