AI赋能5G,利用神经网络进行信道估计
随着5G和AI技术不断成熟和发展,如今基于AI辅助的无线通信正逐步从学术界走向产业界落地。
1、2022MWC上的5G+AI
近日举行的2022年世界移动通信大会(MWC)上,各大通信玩家纷纷拿出自己的新产品亮相。
高通公司在2022MWC巴塞罗那展上,宣布发布第5代调制解调器到天线5G解决方案——骁龙 X70 5G调制解调器及射频系统。骁龙X70在调制解调器及射频系统中引入全球首个5G AI处理器,利用AI能力实现突破性的5G性能,包括10Gbps 5G下载速度、更快的上传速度、低时延、更好的网络覆盖和能效,一定程度上缓解或者解决5G网络给手机等移动设备带来的功耗问题。
高通的5G AI套件展示创新的AI辅助调制解调器及射频技术,包括AI辅助信道状态反馈(CSI)和AI辅助波束管理,以此提升5G速度、网络覆盖、移动性和稳健性。
毫无疑问,高通这一5G+AI的技术创新,将给移动通信的发展带来重大影响。
虽然目前国内外都在积极研究将AI融入无线通信系统,但产业界的产品落地显然不能一步到位。
我们可以看到,MWC上华为推出业界首款FDD超宽频多天线系列产品,将Sub-3GHz频谱的中、低频的多个频段结合在一个射频模块中,支持4T4R、8T8R以及Massive MIMO多天线技术。
从目前的创新态势上看,AI技术将逐步进入无线通信系统设计中,这也是未来6G的重要发展方向。
2、5G+AI如何开始?
传统通信链路设计时,人们采取分而治之的方法,将各功能模块进行独立的设计和优化,无线通信链路如下图所示。
在某些功能模块的设计和优化过程中,可能存在着性能损失。例如,为了降低设计复杂度,将某些非线性处理简化假设为线性操作。
此时,使用AI/ML 方法替换这些模块可以带来性能的提升以及处理时延的降低。这也是将AI/ML 方法用于空口技术设计的最直接方式。
目前,AI/ML 在无线物理层中的应用包括利用神经网络来取代传统发射机和接收机中的基本功能模块,或者将物理层通信看作一个端到端的信号重构问题,并应用自编码器概念来表示物理层通信过程,进行端到端通信的联合优化。
AI/ML 在无线物理层中的应用主要可以分为两种方式。其一为数据驱动方式。目前现有的深度学习网络大多数是基于这种方式的,它使用标准的神经网络结构作为黑匣子并通过大量数据进行训练。然而,训练标准的神经网络除了需要庞大的数据集之外,还需要大量的训练时间。
另一种方式为模型驱动深度学习方法,该方法基于已知的物理机制和领域知识构建网络拓扑,因此需要较少的训练数据和较短的训练时间,成为实现智能通信的有效手段。
针对模型驱动深度学习的无线物理层设计问题,研究者分别研究了基于模型驱动深度学习的大规模MIMO 信道估计、信号检测、信道译码、CSI 反馈和多用户预编码等。
我们知道,AI中的深度学习研究已经持续很多年了,特别是在近年来的图像视觉领域,得到极大的推广应用。
作为一名AI爱好者兼无线通信小玩家,如何体验一下AI技术给无线通信带来的乐趣呢?
为了直观感到AI在无线通信中的好处,我们通过本文的一个示例,体验利用深度学习中的神经网络训练方法来进行信道估计。
为了跟上本文所述的体验过程,需要你做准备一台电脑,安装好MATLAB软件(最好R2021a/R2021b版本),然后结合深度学习工具箱和5G工具箱进行今天的体验。
3、深度学习+信道估计概述
现在我们开始使用深度学习工具箱和5G工具箱生成的数据,训练卷积神经网络(CNN)进行信道估计。使用训练好的CNN或者在线CNN训练,在单输入单输出(SISO)模式下,利用物理下行共享信道(PDSCH)解调参考信号(DM-RS)进行信道估计。
众所周知,信道估计的一般方法是将已知的参考导频符号插入到传输数据流中,然后在接收端利用这些导频符号,除以与发射端相同的DMRS序列得到导频信号的信道值,通过插值,求得其余信号的信道响应。
除此之外,我们还可以使用深度学习技术来执行信道估计。例如,通过将PDSCH资源网格看作一个2-D图像,可以将信道估计问题转化为图像处理问题,类似于去噪或超分辨率,这种情况下,CNN将是有效的。
使用5G工具箱,我们可以定制和生成标准兼容的波形和通道模型,以用作训练数据。使用深度学习工具箱,可以使用这个训练数据来训练一个信道估计CNN。这个例子展示了如何生成这样的训练数据,以及如何训练一个信道估计CNN。这个例子也展示了如何使用信道估计CNN来处理包含线性插值接收到的导频符号的图像。最后,将神经网络信道估计器的结果与实际估计器和完美估计器的结果进行了比较。利用CNN进行信道估计过程如下图所示。
此处,利用CNN恢复图像分辨率和降噪的性能,使用CNN 拟合信道时频点间的非线性关系,提升插值估计精度,降低导频开销。
估计流程如图所示。
那么,我们怎样进行神经网络训练呢?
4、神经网络训练
神经网络训练包括以下步骤:
· 数据生成
· 将生成的数据拆分为训练集和验证集
· 定义CNN架构
· 指定训练选项、优化器和学习速度
· 训练网络
由于大量的信号和可能的场景,训练可能需要几分钟。若为了节省时间,我们可以禁用训练,使用预训练的模型。我们也可以通过将trainModel设置为true来启用训练。
trainModel = true;
如果安装了并行计算工具箱(Parallel Computing Toolbox),并设置了支持CUDA的NVIDIA GPU,那么网络训练默认使用GPU加速。trainNetwork(深度学习工具箱)函数允许你覆盖这个默认行为。支持的GPU列表,请参见GPU支持的版本(并行计算工具箱)。
数据生成设置为生成256个训练示例或训练数据集。这样的数据量足以在合理的时间内训练CPU上的功能性信道估计网络。为了比较,预训练模型基于16384个训练实例。
MATLAB示例的CNN模型的训练数据具有固定的尺寸维数,网络只能接受612×14×1的网格,即612个子载波,14个OFDM符号和1个天线。因此,该模型只能工作在固定带宽分配、循环前缀长度和单个接收天线上。因此,考虑到实际情况,需要支持100MHz带宽的有效子载波以及多天线收发,该模型需要定制设计。
CNN将资源网格视为二维图像,因此网格中的每个元素必须是实数。在信道估计场景中,资源网格数据复杂。因此,将这些网格的实部和虚部分别输入到CNN中。在这个例子中,训练数据从一个复杂的612×14矩阵转换为一个实值的612×14×2矩阵,其中第三维表示实分量和虚分量。因为在进行预测时,必须将实部网格和虚部网格分别输入到神经网络中,因此示例将训练数据转换为612×14 ×1×2N的4-D数组,其中N是训练示例的数量。
为了保证CNN不会过度拟合训练数据,训练数据被分割成验证集和训练集。验证数据用于定期监测训练神经网络的性能,如valFrequency定义的,大约5次/epoch。当验证损失停止改善时,停止训练。在本例中,由于数据集的大小较小,验证数据大小与单个微小批处理的大小相同。
返回的信道估计CNN在不同的信道配置下进行训练,基于不同的延迟扩展、多普勒频移和0 ~ 10 dB的信噪比范围。
代码:
% Set the random seed for reproducibility (this has no effect if a GPU is
% used)
rng(42)
if trainModel
% Generate the training data
[trainData,trainLabels] = hGenerateTrainingData(256);
% Set the number of examples per mini-batch
batchSize = 32;
% Split real and imaginary grids into 2 image sets, then concatenate
trainData = cat(4,trainData(:,:,1,:),trainData(:,:,2,:));
trainLabels = cat(4,trainLabels(:,:,1,:),trainLabels(:,:,2,:));
% Split into training and validation sets
valData = trainData(:,:,:,1:batchSize);
valLabels = trainLabels(:,:,:,1:batchSize);
trainData = trainData(:,:,:,batchSize+1:end);
trainLabels = trainLabels(:,:,:,batchSize+1:end);
% Validate roughly 5 times every epoch
valFrequency = round(size(trainData,4)/batchSize/5);
% Define the CNN structure
layers = [ ...
imageInputLayer([612 14 1],'Normalization','none')
convolution2dLayer(9,64,'Padding',4)
reluLayer
convolution2dLayer(5,64,'Padding',2,'NumChannels',64)
reluLayer
convolution2dLayer(5,64,'Padding',2,'NumChannels',64)
reluLayer
convolution2dLayer(5,32,'Padding',2,'NumChannels',64)
reluLayer
convolution2dLayer(5,1,'Padding',2,'NumChannels',32)
regressionLayer
];
% Set up a training policy
options = trainingOptions('adam', ...
'InitialLearnRate',3e-4, ...
'MaxEpochs',5, ...
'Shuffle','every-epoch', ...
'Verbose',false, ...
'Plots','training-progress', ...
'MiniBatchSize',batchSize, ...
'ValidationData',{valData, valLabels}, ...
'ValidationFrequency',valFrequency, ...
'ValidationPatience',5);
% Train the network. The saved structure trainingInfo contains the
% training progress for later inspection. This structure is useful for
% comparing optimal convergence speeds of different optimization
% methods. [channelEstimationCNN,trainingInfo] = trainNetwork(trainData, ... trainLabels,layers,options);
else
% Load pretrained network if trainModel is set to false
load('trainedChannelEstimationNetwork.mat')
end
发表评论
请输入评论内容...
请输入评论/评论长度6~500个字
暂无评论
暂无评论