在新质生产力高质量发展的要求下,中国移动在“人工智能+”和 “数据要素X”方面不断发力,持续发布高质量电信数据集。围绕网元智能、运维智能、服务智能三大方向建设,涵盖无线信道、基站、云网、核心网、哑资源等多领域,支持感知、诊断、预测、决策、大模型等多类网络AI能力研发的标志性数据集。相关数据集均由智慧网络开放创新平台承载。
中国移动 - 智慧网络新一代人工智能开放创新平台https://jiutian.10086.cn/open/
基于AI的CSI压缩反馈
中国移动 - 智慧网络新一代人工智能开放创新平台https://jiutian.10086.cn/open/?src=csdn#/taskParticulars/720003/复杂信道环境的无线信道状态信息数据及仿真环境,提供了丰富的公共信道数据集和用户自构建数据集,用户可自由组合数据集用于AI模型训练。平台还提供了仿真验证环境,可通过系统仿真得出AI模型的效果指标和对无线网络的性能影响。
下面详细介绍引自智慧网络开放创新平台官网 基于AI的CSI压缩反馈介绍页面
特色优势
背景介绍
在5G NR中,CSI(Channel State Information)的反馈是非常重要的一个环节,它能帮助基站精确地了解无线信道状态,从而优化传输参数以提高系统性能。然而,由于无线信道的复杂性以及5G支持的大规模MIMO和高频段大带宽通信,CSI信息通常具有很高的维度和丰富的细节,导致反馈所需的带宽资源非常庞大。
基于此背景,本平台发布了基于AI的CSI压缩反馈任务,利用基于人工智能的方法来高效压缩和编码CSI信息。本平台提供了丰富的公共信道数据集和用户自构建数据集,用户可自由组合数据集用于AI模型训练。本平台还提供了仿真验证环境,可通过系统仿真得出AI模型的效果指标和对无线网络的性能影响。
任务介绍
本任务借助AI的信息压缩、非线性恢复能力,在UE侧将获取到的信道信息经过特征提取后使用AI算法进行压缩并反馈至基站侧,基站侧进行解压缩和特征提取后最大程度还原UE侧实际信道状态信息,如图1。
本任务的数据集包括基于真实地图仿真的信道特征向量和3GPP标准信道模型(IMT2000、SCME、ITU、CDL)仿真的信道特征向量。另外,本任务还为用户提供自建数据集环境,用户可根据研究需求,配置仿真参数,通过平台提供的仿真器,自主生成数据集用于AI模型训练。
本任务提供的系统仿真器孪生了现网某区域21个小区的真实场景,环境特征和信道特征均接近现网实际情况。系统仿真器通过API接口与AI模型实时交互,使用AI模型输出的CSI信息进行下行业务传输。仿真完成后,可在真实地图场景中查看仿真结果,仿真结果按照仿真进度展示整体和小区级模型指标和业务指标。本任务根据评测标准对模型进行综合打分,并在排行榜中进行排名,为用户展示模型的优劣。
图1 基于AI的CSI压缩反馈原理
任务目标
本任务设计了个性化场景选择和差异化AI模型训练/推理能力,通过多场景下的数据集供AI模型训练,提高模型的泛化性,并通过系统仿真在线验证AI模型的性能,展示AI模型指标和无线性能指标,并通过评测标准进行排名。 评测指标包含以下几个方面:
a)信道特征信息反馈精度,即归一化均方误差NMSE,表示原始CSI与重建后的CSI之间的误差,NMSE越小表示信道重建质量越好;
b)模型推理时长T,推理时长越小表示模型性能越好;
c)信道特征信息反馈开销,即压缩比γ,压缩比越小表示模型压缩性能越高;
d)无线性能指标,包括小区下行总业务量、小区下行平均速率、小区下行平均误块率,小区下行总业务量和平均速率越大、平均误块率越小表示无线性能越好。
公共数据集
公共数据集是由平台预定义经典仿真参数和提供的所有真实地图环境生成的数据集,为用户训练模型提供丰富高效的数据资源。
1.数据集格式说明
数据集为经过特征提取后的信道特征向量矩阵,数据集维度为[Sample Numbers][Subband Numbers * Antenna Numbers],每个样本的数据[Subband Numbers * Antenna Numbers]为信道特征向量矩阵H,H为复数形式,存储格式为.mat、.txt。公共数据集说明在进入CSI“任务实例”后“编辑实例”时查看,个人数据集说明在“数据集”中“我的数据”中查看。选择多种数据集时需保证数据集维度一致,数据集维度中的参数说明如下:
Sample Numbers 数据集的样本数
由参数SampleNumber(样本个数)配置,取值范围[1,50],单位万条,步长1万。
Subband Numbers 子带数
由参数BandWidth(系统带宽)和SubcarrierSpacing(子载波间隔)决定,计算公式如下:
SubbandNumbers=MaxRBNum/SubbandRBNumSubbandNumbers=MaxRBNum/SubbandRBNum
其中MaxRBNum取值由BandWidth和SubcarrierSpacing查表1(参考协议TS38.101-1 Table 5.3.2-1)。BandWidth取值{10,20},单位MHz;SubcarrierSpacing取值范围{15,30},单位KHz;SubbandRBNum为每个子带包含的RB数,平台固定为4RB
Antenna Numbers 发射天线数
由参数Nt(发射端天线数量)决定,取值范围{4,8,16,32}。
表1 BandWidth、SubcarrierSpacing与MaxRBNum映射关系
SubcarrierSpacing (kHz) | 10 MHz | 20 MHz |
---|---|---|
15 | 52 | 106 |
30 | 24 | 51 |
2.数据集样例
以10M带宽、子载波间隔15kHz、发射天线数32、接收天线数4为例,构建的数据集样本数为10万,则数据集维度为[100000][416],每一行为一个信道特征向量矩阵,即13*32=416个复数值,下表列举其中一个子带的信道特征向量矩阵,即32个复数值:
0.405321-0.0407126i | 0.0340693+0.284093i | 0.136711-0.176521i | 0.123355+0.0958021i | 0.0361036-0.0563008i | 0.0441498+0.0242935i | 0.00064731-0.0233467i | 0.0153568-0.00262885i |
-0.0495529+0.303224i | -0.217277-0.0296888i | 0.106799+0.238769i | -0.165125+0.0748386i | 0.0626631+0.0759813i | -0.0572406+0.0463061i | 0.0449479-0.00953367i | 0.00896681+0.0327778i |
-0.24742-0.0446197i | 0.0287832-0.182505i | -0.232106-0.0109033i | 0.00296725-0.160904i | -0.088091+0.0284838i | -0.0192436-0.0650404i | -0.00179181+0.0650304i | -0.0490289-0.000743513i |
0.0942051-0.259475i | 0.190207+0.071842i | 0.0832507-0.192398i | 0.136775+0.0532876i | 0.0176146-0.103199i | 0.0727417+0.0154938i | -0.0559226-0.0659561i | 0.0487292-0.0394687i |
系统仿真器
平台提供的系统仿真器是基于真实地图信息和实际基站工参信息进行仿真建模,并为用户提供灵活可配的自构建数据集功能和模型在线推理验证功能。
1.系统仿真器功能介绍
系统仿真器基于某城市真实地理环境,通过航拍将建筑、道路、植被等信息录入仿真器,仿真器进行3D还原和大尺度+小尺度信道建模,并根据实测路测数据校准路损模型,真实还原该仿真区域内的无线信道特征。仿真器的仿真参数与实际工参一致,如基站位置、发射功率、天线波束、时隙配比等。仿真器调度策略与现网设备一致,如无线资源分配、多天线发送和接收、信号调制和解调等。另仿真器中用户位置采用随机撒点,业务模型采用FTP业务建模。
2.系统仿真器数据集构建
用户根据数据集维度需求配置仿真参数,其中数据维度与仿真参数的关系参考“公共数据集”——“数据集格式说明”,另参数cell_id表示真实地图中的小区编号,不同小区的地理环境不同,则仿真器输出信道特征向量H不同。具体参数如表2。
表2 系统仿真器数据构建参数配置
参数名称 | 中文名称 | 数据类型 | 取值范围 | 默认取值 | 备注 |
---|---|---|---|---|---|
BandWidth | 系统带宽 | enum | {10,20},unit:MHz | 10Mhz | |
CenterFreq | 中心载频 | enum | {2,4},unit:GHz | 2GHz | |
SubcarrierSpacing | 子载波间隔 | enum | {15,30},unit:kHz | 15kHz for 2GHz载频, 30kHz for 4GHz载频 | 2GHz-> SubcarrierSpacing=15 4GHz-> SubcarrierSpacing=30 |
cell_id | 小区ID | long | 21个已选小区的xci | 34386239601 | |
Nt | 发射端天线数量 | enum | {4,8,16,32} | 32 | |
Nr | 接收端天线数量 | enum | {2,4} | 4 | |
SampleNumber | 样本个数 | int | [1,50],unit:万条,step:1 | 10 |
自构建数据集生成操作步骤如下:
(1)在“数据集”页面点击“新建数据”,进入仿真参数配置界面;
(2)仿真参数的有效取值范围已在界面显示,根据需求配置仿真参数;
(3)开始仿真后,可在“数据集”页面“生成中数据”观察数据集构建进度,数据集构建完成后可在“我的数据”显示数据集的详细信息。
3.系统仿真器在线推理验证
系统仿真器支持实时调用AI模型接口,仿真器根据真实信道建模生成原始信道特征向量H输入到模型,并读取模型推理还原的信道特征向量,通过无线系统仿真输出业务指标和模型指标,其中模型指标由模型输出给仿真器,包括NMSE、压缩比特数和推理时长。用户根据提交的模型配置仿真参数,其中模型支持的数据维度与仿真参数的关系参考“公共数据集”——“数据集格式说明”。参数配置文件名称csi_sys_simu_param.json,用户可参考“代码示例”——“提交示例”中该文件的生成说明,在Jupyter内修改参数并生成该文件,并与模型一同压缩,相关参数取值说明如表3,具体操作详见算法训练操作指引。
表3 系统仿真器模型验证参数配置
参数名称 | 中文名称 | 数据类型 | 取值范围 | 默认取值 | 备注 |
---|---|---|---|---|---|
BandWidth | 系统带宽 | enum | {10,20},unit:MHz | 1 0Mhz | |
CenterFreq | 中心载频 | enum | {2,4},unit:GHz | 2GHz | |
SubcarrierSpacing | 子载波间隔 | enum | {15,30},unit:kHz | 15kHz for 2GHz载频, 30kHz for 4GHz载频 | 2GHz-> SubcarrierSpacing=15 4GHz->SubcarrierSpacing=30 |
Nt | 发射端天线数量 | enum | {4,8,16,32} | 32 | |
Nr | 接收端天线数量 | enum | {2,4} | 4 |
注:csi_sys_simu_param.json文件中参数名称必须与示例说明中一致,参数取值范围必须符合表3(配置文件中只写数值,无需写单位)。
代码示例
平台支持torch和tensorflow两个版本的模型训练,其运行环境为python 3.9.16、torch 2.0.0、tensorflow 2.12.0。完整运行代码和具体操作指引见算法文档。
1.数据读取
可用于训练模型的数据存储格式为.mat格式或.txt格式,命名为CSI_Simulation_XXXX.mat/CSI_Simulation_XXXX.txt,不同数据格式的读取方式不同;读入的数据是二维 (N,subband_num*Antenna_num)按照子带嵌套天线维度的顺序排列将第二维按照子带和天线分开,变成三维并将实部虚部分开,再增加一个维度,转化后的维度应为(样本数,实部虚部,发送天线数,子带数)=(N,2,antenna_num,subband_num),数据读取与处理的示例代码如下:
def load_data(datadir ,subband_num,antenna_num):
"""
datadir : 数据存储路径
subband_num: 子带数
antenna_num: 天线数
"""
# 数据读取部分
if datadir .endswith('.txt'):
_file = open(datadir)
val_list = _file.readlines()
data_list = []
for string in val_list:
string = string.replace('i', 'j')
_string = string.split(' ')
_string = [complex(i) for i in _string if i != '\n']
data_list.append(_string)
all_data = np.array(data_list)
elif all_data_path.endswith('.mat'):
all_data = sc.loadmat(datadir )['W_train']
all_data = np.array(all_data)
print('shape of raw data: ',all_data.shape)
# 数据处理部分
all_data_splited = split_data(all_data,subband_num,antenna_num)
print('shape of splited data:',all_data_splited.shape)
return all_data_splited
def split_data(sim_data,subband_num,antenna_num):
'''
sim_data: 读取的数据
'''
sim_data = np.expand_dims(sim_data, axis=2)
tmp = sim_data[:, 0:antenna_num, :]
for i in range(1, subband_num):
tmp = np.concatenate((tmp, sim_data[:, i * antenna_num:(i + 1) * antenna_num, :]), axis=2)
tmp = np.expand_dims(tmp, axis=1)
tmp = np.concatenate((tmp.real, tmp.imag), axis=1)
return tmp
datadir = '/root/data/public/CSI_Simulation_00002/CSI_Simulation_00002.txt'
subband_num = 13 # 子带数
antenna_num = 32 # 天线数
all_data = load_data(datadir,subband_num,antenna_num)
2.模型训练
基于上述构造好的数据进行模型训练(以下每一步调用的函数详情定义可参考jupyter页面的baseline代码)
datadir = '/root/data/public/CSI_Simulation_00002/CSI_Simulation_00002.txt'
# step1.加载数据集
subband_num = 13 # 子带数
antenna_num = 32 # 天线数
all_data = load_data(datadir,subband_num,antenna_num)
# step2.拆分训练集和验证集
train_data, val_data = train_val_split(all_data,0.8)
# step3.生成模型存储路径
model_ae_save_dir = '/root/mymodel'
model_type = 'Csi_Net'
period = generate_new_period(model_ae_save_dir,model_type,subband_num,antenna_num)
model_save_path = os.path.join(model_ae_save_dir, f'{model_type}_subband_{subband_num}_antenna_{antenna_num}', str(period))
# step4. 定义模型参数
hp_params = {
'NUM_FEEDBACK_BITS': 128,
'EPOCHS': 2,
'BATCH_SIZE': 256,
'LEARNING_RATE': 0.1e-3,
'LR_DECAY_FREQ': 30,
'LR_DECAY': 0.01,
'BEST_LOSS': 100,
'NUM_WORKERS': 0,
'PRINT_FREQ': 100,
'TRAIN_TEST_RATIO': 0.8,
'subband_num':subband_num,
'antenna_num':antenna_num}
feedback_bits = 128 # 压缩比,祥见任务说明
# step5.模型训练(torch版本)
csi_model = model_train(train_data,val_data,hp_params,feedback_bits)
# step6.保存模型
save_model(csi_model,model_save_path)
3.模型上传
本任务支持PyTorch及TensorFlow两种版本的结果提交。
用户需要按照以下要求提供训练好的模型压缩包文件和推理代码,上传至平台,平台会给出对应的得分和排名:
1)编程语言版本参考:Python3.7及以上
2)上传文件大小:文件大小不得超过400M
3)模型推理时间:总时间不得超过400s
4)每天提交次数:每个队伍每天最多提交5次
4.提交示例
PyTorch版本需要提交model_inference.py、csi_sys_simu_param.json、EncModel_XX.pth.tar和DecModel_XX.pth.tar四个文件。
model_inference.py:模型推理验证代码,代码结构需要和model_inference_example.py模板保持一致。
csi_sys_simu_param.json:保存仿真配置参数,所需参数和样例见csi_sys_simu_param_example.json,参数取值见数据与仿真页面表3,文件生成代码样例如下:
import json
json_data = {
'band_width':10,
'center_freq':2,
'subcarrier_spacing':15,
'nt':32,
'nr':4
}
with open(os.path.join(model_ae_save_dir,f'{model_type}_subband_{subband_num}_antenna_{antenna_num}', str(period),'csi_sys_simu_param.json'),'w') as f:
json.dump(json_data,f)
EncModel_XX.pth.tar和DecModel_XX.pth.tar:分别为编码和解码模型。
将上述文件按照如下结构压缩并命名为pt_submission.zip并上传至参赛平台:
TensorFlow版本需要提交model_inference.py、csi_sys_simu_param.json、EncModel_XX.h5和DecModel_XX.h5四个文件,文件说明同上。将上述文件按照如下结构压缩并命名为tf_submission.zip并上传至参赛平台:
将压缩好的zip文件通过upload_model接口上传至平台,即可在任务首页查看、下载、仿真。上传代码示例如下,详细的接口介绍可参照接口说明。
from csisdk.csi_agent import CSIAgent
my_agent = CSIAgent()
my_agent.upload_model(os.path.join(save_dirpath,'aeModel.zip'),model_name = 'model_lsj_1208',create_new=True)