主要内容

波束选择的神经网络

这个例子展示了如何使用神经网络来减少波束选择任务中的开销。在本例中,您只使用接收者的位置,而不使用通信通道的知识。你可以通过在选定的光束对中搜索来减少头顶上的光束扫描,而不是对所有光束对进行详尽的光束搜索 K 梁对。本例中的仿真结果表明,所设计的机器学习算法仅对一半的光束对进行穷举搜索,就可以实现90%的精度。

简介

为了实现毫米波(mmWave)通信,必须使用波束管理技术,因为在高频时会出现高路径损耗和阻塞。波束管理是一套第1层(物理层)和第2层(介质访问控制)程序,用以建立和保持最佳的波束对(发射波束和相应的接收波束),以实现良好的连通性[1].有关5G新无线电(NR)波束管理程序的模拟,请参见NR SSB光束扫描而且基于CSI-RS的NR下行传输端波束细化的例子。

本例考虑在用户设备(UE)和接入网节点(gNB)之间建立连接时的波束选择过程。在5G NR中,初始接入的波束选择过程包括波束扫描,这需要对发射机和接收机侧的所有波束进行彻底搜索,然后选择提供最强参考信号接收功率(RSRP)的波束对。由于毫米波通信需要许多天线元件,意味着许多波束,对所有波束进行详尽的搜索将变得计算昂贵,并增加初始访问时间。

为了避免重复执行穷尽搜索和减少通信开销,将机器学习应用于波束选择问题。通常,波束选择问题被作为一个分类任务,其中目标输出是最佳波束对索引。外部信息,包括激光雷达、GPS信号和路边摄像头图像,被用作机器学习算法的输入[2] - [6].具体来说,给定这些带外信息,经过训练的机器学习模型会推荐一组 K 好梁对。模拟不是对所有的波束对进行详尽的搜索,而是通过只在选定的波束对中搜索来减少波束扫描开销 K 梁对。

本例使用神经网络仅使用接收机的GPS坐标来执行波束选择。固定发射器和散射器的位置,示例生成一组训练样本:每个样本由接收器位置(GPS数据)和真正的最佳波束对索引(通过在发射端和接收端对所有波束对执行穷举搜索得到)组成。本例设计并训练了一个神经网络,该神经网络使用接收器的位置作为输入,真正的最优波束对索引作为正确的标签。在测试阶段,神经网络首先输出 K 好梁对。详尽的搜索 K 神经网络选择平均RSRP最高的梁对作为最终预测梁对。

该示例使用两个指标来衡量所提出方法的有效性:平均RSRP和top-K精度(2] - [6].该图显示了主要的处理步骤。

beamSelectionSchematic.png

rng (211);为可重复性设置RNG状态

生成培训数据

在预先录制的数据中,接收机随机分布在一个6米正方形的周长上,并配置了16个波束对(每端4个波束,模拟波束由1个射频链组成)。在设置了MIMO散射信道后,该示例考虑了训练集中200个不同的接收机位置和测试集中100个不同的接收机位置。预先录制的数据使用二维位置坐标。具体来说,每个样本的第三个GPS坐标始终为零。就像NR SSB光束扫描例如,对于每个位置,执行基于ssb的波束扫描,对所有16对波束进行详尽搜索。由于在穷举搜索过程中添加了AWGN,对于每个位置,示例运行四次不同的试验,并通过选择具有最高平均RSRP的梁对来确定真正的最佳梁对。

要生成新的训练集和测试集,可以调整useSavedData而且SaveData逻辑值。请注意,重新生成数据需要大量的时间。

useSavedData = true;saveData = false;如果useSavedData负载nnBS_prm.mat负载梁选择系统参数负载nnBS_TrainingData.mat装入预先录制的训练样本%(输入:接收方位置;输出:最优光束对指数)负载nnBS_TestData.mat装入预先录制的测试样品其他的

配置频率和波束扫描角度

人口、难民和移民事务局。NCellID = 1;单元格ID人口、难民和移民事务局。FreqRange =“FR1”%频率范围:'FR1'或'FR2'人口、难民和移民事务局。CenterFreq = 2.5e9;%赫兹人口、难民和移民事务局。SSBlockPattern =“案例B”%箱子A/B/C/D/E人口、难民和移民事务局。SSBTransmitted = [1 (1,4) 0 (1,0)];% 4/8或64的长度人口、难民和移民事务局。TxArraySize = [8 8];%传输数组大小,[rows cols]人口、难民和移民事务局。TxAZlim = [-163 177];发送方位扫描限制人口、难民和移民事务局。TxELlim = [-90 0];发送仰角扫描限制人口、难民和移民事务局。RxArraySize = [2 2];%接收数组大小,[rows cols]人口、难民和移民事务局。RxAZlim = [-177 157];接收方位扫描限制人口、难民和移民事务局。RxELlim = [0 90];接收高度扫描限制人口、难民和移民事务局。ElevationSweep = false;启用/禁用仰角扫描人口、难民和移民事务局。SNRdB = 30;%信噪比,dB人口、难民和移民事务局。RSRPMode =“SSSwDMRS”% {'SSSwDMRS', 'SSSonly'}prm =验证params (prm);

同步信号突发配置

txBurst = nrWavegenSSBurstConfig;txBurst。BlockPattern = prm.SSBlockPattern;txBurst。TransmittedBlocks = prm.SSBTransmitted;txBurst。周期= 20;txBurst。SubcarrierSpacingCommon = prm.SubcarrierSpacingCommon;

散射体配置

C = physconst(“光速”);%传播速度人口、难民和移民事务局。lambda = c/prm.CenterFreq;%的波长人口、难民和移民事务局。rightCoorMax = 10;最大x坐标人口、难民和移民事务局。topCoorMax = 10;最大y坐标人口、难民和移民事务局。posTx = [3.5;4.2;0];%发射阵列位置,[x;y;z],米%分散位置%在随机位置生成散射体Nscat = 10;%散射体数目azRange = prm.TxAZlim(1):prm.TxAZlim(2);elRange = -90:90;%更多均匀分布的散射体randAzOrder = round(linspace(1, length(azRange), Nscat));azAngInSph = azRange(randAzOrder(1:Nscat));%考虑一个二维区域,即仰角为零elAngInSph = 0 (size(azAngInSph));R = 2;%半径[x,y,z] = sph2cart(deg2rad(azAngInSph),deg2rad(elAngInSph),r);人口、难民和移民事务局。ScatPos = [x;y;z] + [prm.rightCoorMax/2;prm.topCoorMax/2;0];

天线阵列配置

%发射阵列如果人口、难民和移民事务局。IsTxURA均匀矩形阵列arrayTx = phase . ura (prm.TxArraySize,0.5*prm.lambda,...“元素”,分阶段。IsotropicAntennaElement (“BackBaffled”,真的));其他的均匀线阵数组tx = phase . ula (prm.NumTx,...“ElementSpacing”0.5 * prm.lambda...“元素”,分阶段。IsotropicAntennaElement (“BackBaffled”,真的));结束%接收数组如果人口、难民和移民事务局。IsRxURA均匀矩形阵列arrayRx = phase . ura (prm.RxArraySize,0.5*prm.lambda,...“元素”, phased.IsotropicAntennaElement);其他的均匀线阵arrayRx = phase . ula (prm.NumRx,...“ElementSpacing”0.5 * prm.lambda...“元素”, phased.IsotropicAntennaElement);结束

确定Tx/Rx位置

%接收方位置%训练数据:矩形周围有X个点:每边有X/4个随机点% X: X/4为约平方,X/10为验证=> lcm(4,10) = 20最小NDiffLocTrain = 200;pointsEachSideTrain = NDiffLocTrain/4;人口、难民和移民事务局。NDiffLocTrain = NDiffLocTrain;locationX = 2*ones(pointsEachSideTrain, 1);locationY = 2 + (8-2)*rand(pointsEachSideTrain, 1);locationX = [locationX;2 + (8-2)*rand(pointsEachSideTrain, 1)];locationY = [locationY;8 * 1 (pointsEachSideTrain 1)]; locationX = [locationX; 8*ones(pointsEachSideTrain, 1)]; locationY = [locationY; 2 + (8-2)*rand(pointsEachSideTrain, 1)]; locationX = [locationX; 2 + (8-2)*rand(pointsEachSideTrain, 1)]; locationY = [locationY; 2*ones(pointsEachSideTrain, 1)]; locationZ = zeros(size(locationX)); locationMat = [locationX locationY locationZ];确定接收器的位置,运行重复的模拟来考虑%不同的AWGN实现人口、难民和移民事务局。NRepeatSameLoc = 4;locationMatTrain = repelem(locationMat,prm。NRepeatSameLoc, 1);%测试数据:矩形周围有Y个点:每边有Y/4个随机点%与测试数据不同,但数值较小NDiffLocTest = 100;pointsEachSideTest = NDiffLocTest/4;人口、难民和移民事务局。NDiffLocTest = NDiffLocTest;locationX = 2*ones(pointsEachSideTest, 1);locationY = 2 + (8-2)*rand(pointsEachSideTest, 1);locationX = [locationX;2 + (8-2)*rand(pointsEachSideTest, 1)];locationY = [locationY;8 * 1 (pointsEachSideTest 1)]; locationX = [locationX; 8*ones(pointsEachSideTest, 1)]; locationY = [locationY; 2 + (8-2)*rand(pointsEachSideTest, 1)]; locationX = [locationX; 2 + (8-2)*rand(pointsEachSideTest, 1)]; locationY = [locationY; 2*ones(pointsEachSideTest, 1)]; locationZ = zeros(size(locationX)); locationMat = [locationX locationY locationZ]; locationMatTest = repelem(locationMat,prm.NRepeatSameLoc,1); [optBeamPairIdxMatTrain,rsrpMatTrain] = hGenDataMIMOScatterChan(“培训”人口、难民和移民事务局,locationMatTrain txBurst、arrayTx arrayRx, 311);[optBeamPairIdxMatTest,rsrpMatTest] = hGenDataMIMOScatterChan(“测试”人口、难民和移民事务局,locationMatTest txBurst、arrayTx arrayRx, 411);保存生成的数据如果saveData保存(“nnBS_prm.mat”人口、难民和移民事务局的);保存(“nnBS_TrainingData.mat”“optBeamPairIdxMatTrain”“rsrpMatTrain”“locationMatTrain”);保存(“nnBS_TestData.mat”“optBeamPairIdxMatTest”“rsrpMatTest”“locationMatTest”);结束结束

绘制发射机和散射器位置

图散射(prm.posTx (1) prm.posTx(2), 100年,“r ^”“填充”);持有;scatter(prm.ScatPos(1,:),prm.ScatPos(2,:),100,[0.9290 0.6940 0.1250],,“年代”“填充”);Xlim ([0 10]) ylim([0 10]) title(“发射机和散射器位置”)传说(“发射器”“散射”)包含(“x (m)”) ylabel (“y (m)”

图中包含一个轴对象。标题为Transmitter和Scatterers Positions的axis对象包含2个类型为scatter的对象。这些物体代表发射机、散射器。

数据处理与可视化

接下来,将平均RSRP最高的光束对标记为真正的最优光束对。将单热编码标签转换为用于分类的分类数据。最后,增加分类数据,使其总共有16个类,以匹配可能的束对数量(尽管类的元素数量可能不相等)。增强是为了确保神经网络的输出具有所需的维数16。

流程培训数据

通过选择平均RSRP最高的光束对来选择最佳光束对%(在每个位置的NRepeatSameLoc不同试验中取平均值)avgOptBeamPairIdxCellTrain = cell(size(optBeamPairIdxMatTrain, 1)/prm。NRepeatSameLoc, 1);avgOptBeamPairIdxScalarTrain = zeros(size(optBeamPairIdxMatTrain, 1)/prm。NRepeatSameLoc, 1);locIdx = 1:size(optBeamPairIdxMatTrain, 1)/prm. locIdx = 1:NRepeatSameLoc avgRsrp = squeeze(rsrpMatTrain(:,:,locIdx));[~, targetBeamIdx] = max(avgRsrp(:));avgOptBeamPairIdxScalarTrain(locIdx) = targetBeamIdx;avgOptBeamPairIdxCellTrain{locIdx} = num2str(targetBeamIdx);结束尽管总共有16对光束,由于固定的拓扑结构%(发射机/散射器/接收机位置),这是可能的%,某些光束对从未被选为最优光束对因此,我们增加了类别,数据中总共有16个类别%(尽管有些类可能没有元素)allBeamPairIdxCell = cellstr(string((1:prm.numBeams^2)'));avgOptBeamPairIdxCellTrain = categorical(avgOptBeamPairIdxCellTrain, allBeamPairIdxCell);NBeamPairInTrainData = number (categories(avgoptbeampairridxcelltrain));%应为16

工艺测试数据

通过选择平均RSRP最高的光束来决定最佳光束对avgOptBeamPairIdxCellTest = cell(size(optBeamPairIdxMatTest, 1)/prm。NRepeatSameLoc, 1);avgOptBeamPairIdxScalarTest = 0 (size(optBeamPairIdxMatTest, 1)/prm.;NRepeatSameLoc, 1);locIdx = 1:size(optBeamPairIdxMatTest, 1)/prm。NRepeatSameLoc avgRsrp = squeeze(rsrpMatTest(:,:,locIdx));[~, targetBeamIdx] = max(avgRsrp(:));avgOptBeamPairIdxScalarTest(locIdx) = targetBeamIdx;avgOptBeamPairIdxCellTest{locIdx} = num2str(targetBeamIdx);结束增加类别,使数据总共有16个类别avgOptBeamPairIdxCellTest = categorical(avgOptBeamPairIdxCellTest, allBeamPairIdxCell);nbeampairntestdata = number(类别(avgoptbeampairridxcelltest));%应为16

为神经网络创建输入/输出数据

trainDataLen = size(locationMatTrain, 1)/prm.NRepeatSameLoc;trainOut = avgOptBeamPairIdxCellTrain;sampledLocMatTrain = locationMatTrain(1:prm.)NRepeatSameLoc:最终,);trainInput = sampledLocMatTrain(1:trainDataLen,:);从测试数据中抽取10%作为验证数据valTestDataLen = size(locationMatTest, 1)/prm.NRepeatSameLoc;valDataLen = round(0.1*size(locationMatTest, 1))/prm.NRepeatSameLoc;testDataLen = valTestDataLen-valDataLen;随机打乱测试数据,使其分布%提取的验证数据更接近测试数据rng(111) shuffledIdx = randperm(prm.NDiffLocTest);avgOptBeamPairIdxCellTest = avgOptBeamPairIdxCellTest(shuffledIdx);avgOptBeamPairIdxScalarTest = avgOptBeamPairIdxScalarTest(shuffledIdx);rsrpMatTest = rsrpMatTest(:,:,shuffledIdx);valOut = avgOptBeamPairIdxCellTest(1:valDataLen,:);testOutCat = avgOptBeamPairIdxCellTest(1+valDataLen:end,:);sampledLocMatTest = locationMatTest(1:prm。NRepeatSameLoc:最终,);sampledLocMatTest = sampledLocMatTest(shuffledIdx,:);valInput = sampledLocMatTest(1:valDataLen,:);testInput = sampledLocMatTest(valDataLen+1:end,:);

为训练数据绘制最佳光束对分布图

为每个训练样本(总共200个)绘制位置和最佳光束对。每种颜色代表一个光束对指数。换句话说,相同颜色的数据点属于同一个类。增加训练数据集,尽可能包括每个波束对的值,尽管波束对的实际分布将取决于散射器和发射机的位置。

图rng (111)%表示图形中的颜色color = rand(NBeamPairInTrainData, 3);uniqueOptBeamPairIdx = unique(avgOptBeamPairIdxScalarTrain);n = 1:length(uniqueOptBeamPairIdx) beamPairIdx = find(avgOptBeamPairIdxScalarTrain == uniqueOptBeamPairIdx(n));locX = sampledLocMatTrain(beamPairIdx, 1);loy = sampledLocMatTrain(beamPairIdx, 2);scatter(locX, locY, [], color(n,:));持有结束散射(prm.posTx (1) prm.posTx(2), 100年,“r ^”“填充”);scatter(prm.ScatPos(1,:),prm.ScatPos(2,:),100,[0.9290 0.6940 0.1250],,“年代”“填充”);持有包含(“x (m)”) ylabel (“y (m)”xlim([0 10]) ylim([0 10])“最佳光束对指数(训练数据)”

图中包含一个轴对象。标题为“最佳光束对指数(训练数据)”的轴对象包含18个散点类型的对象。

数字直方图(trainOut)最优光束对指数直方图(训练数据))包含(“光束对指数”) ylabel (“发生次数”

图中包含一个轴对象。标题为“最优光束对指数直方图(训练数据)”的坐标轴对象包含一个类别直方图类型的对象。

为验证数据绘制最佳光束对分布图

图rng (111)%表示图形中的颜色color = rand(nbeampairntestdata, 3);uniqueOptBeamPairIdx = unique(avgOptBeamPairIdxScalarTest(1:valDataLen));n = 1:length(uniqueOptBeamPairIdx) beamPairIdx = find(avgOptBeamPairIdxScalarTest(1:valDataLen) == uniqueOptBeamPairIdx(n));locX = sampledLocMatTest(beamPairIdx, 1);loy = sampledLocMatTest(beamPairIdx, 2);scatter(locX, locY, [], color(n,:));持有结束散射(prm.posTx (1) prm.posTx(2), 100年,“r ^”“填充”);scatter(prm.ScatPos(1,:),prm.ScatPos(2,:),100,[0.9290 0.6940 0.1250],,“年代”“填充”);持有包含(“x (m)”) ylabel (“y (m)”xlim([0 10]) ylim([0 10])“最佳光束对指数(验证数据)”

图中包含一个轴对象。标题为“最佳光束对指数(验证数据)”的axis对象包含9个散点类型的对象。

数字直方图(valOut)最佳光束对指数直方图(验证数据))包含(“光束对指数”) ylabel (“发生次数”

图中包含一个轴对象。标题为“最优光束对指数直方图(验证数据)”的axis对象包含一个类别直方图类型的对象。

为测试数据绘制最佳光束对分布图

图rng (111)%表示图形中的颜色color = rand(nbeampairntestdata, 3);uniqueOptBeamPairIdx = unique(avgOptBeamPairIdxScalarTest(1+valDataLen:end));n = 1:length(uniqueOptBeamPairIdx) beamPairIdx = find(avgOptBeamPairIdxScalarTest(1+valDataLen:end) == uniqueOptBeamPairIdx(n));locX = sampledLocMatTest(beamPairIdx, 1);loy = sampledLocMatTest(beamPairIdx, 2);scatter(locX, locY, [], color(n,:));持有结束散射(prm.posTx (1) prm.posTx(2), 100年,“r ^”“填充”);scatter(prm.ScatPos(1,:),prm.ScatPos(2,:),100,[0.9290 0.6940 0.1250],,“年代”“填充”);持有包含(“x (m)”) ylabel (“y (m)”xlim([0 10]) ylim([0 10])最佳光束对指数(测试数据)

图中包含一个轴对象。标题为“最佳光束对指数(测试数据)”的axis对象包含16个散点类型的对象。

直方图(testOutCat)最佳光束对指数直方图(测试数据))包含(“光束对指数”) ylabel (“发生次数”

图中包含一个轴对象。标题为“最优光束对指数直方图(测试数据)”的axis对象包含一个类别直方图类型的对象。

神经网络的设计与训练

训练带有四个隐藏层的神经网络。设计的动机是[3.](四个隐藏层)及[5](两层隐层,每层128个神经元),其中接收器位置也被视为神经网络的输入。若要启用培训,请调整doTraining合乎逻辑的。

这个例子还提供了一个对类进行加权的选项。频繁出现的类具有较小的权重,而不频繁出现的类具有较大的权重。要使用类权重,请调整useDiffClassWeights合乎逻辑的。

修改网络以试验不同的设计。如果您修改了其中一个提供的数据集,则必须使用修改后的数据集重新训练网络。重新训练网络可能需要大量的时间。调整saveNet在后续运行中使用经过训练的网络是合乎逻辑的。

doTraining = false;useDiffClassWeights = false;saveNet = false;如果doTraining如果useDiffClassWeights catCount = countcats(trainOut);catFreq = catCount/length(trainOut);nnzIdx = (catFreq ~= 0);medianCount = median(catFreq(nnzIdx));classWeights = 10*ones(size(catFreq));classWeights(nnzIdx) = medianCount./catFreq(nnzIdx);文件名=“nnBS_trainedNetwWeighting.mat”其他的classWeights = ones(1, nbeampairntestdata);文件名=“nnBS_trainedNet.mat”结束神经网络设计层= [...featureInputLayer (3“名字”“输入”“归一化”“rescale-zero-one”) fullyConnectedLayer (96,“名字”“linear1”) leakyReluLayer (0.01,“名字”“leakyRelu1”) fullyConnectedLayer (96,“名字”“linear2”) leakyReluLayer (0.01,“名字”“leakyRelu2”) fullyConnectedLayer (96,“名字”“linear3”) leakyReluLayer (0.01,“名字”“leakyRelu3”) fullyConnectedLayer (96,“名字”“linear4”) leakyReluLayer (0.01,“名字”“leakyRelu4”) fullyConnectedLayer (NBeamPairInTrainData“名字”“linear5”) softmaxLayer (“名字”“softmax”) classificationLayer (“ClassWeights”classWeights,“类”allBeamPairIdxCell,“名字”“输出”));maxEpochs = 1000;miniBatchSize = 256;选项= trainingOptions(“亚当”...“MaxEpochs”maxEpochs,...“MiniBatchSize”miniBatchSize,...“InitialLearnRate”1的军医,...“ValidationData”{valInput, valOut},...“ValidationFrequency”, 500,...“OutputNetwork”“best-validation-loss”...“洗牌”“every-epoch”...“阴谋”“训练进步”...“ExecutionEnvironment”“cpu”...“详细”, 0);%培训网络net = trainNetwork(trainInput,trainOut,layers,options);如果saveNet保存(文件名,“净”);结束其他的如果useDiffClassWeights负载“nnBS_trainedNetwWeighting.mat”其他的负载“nnBS_trainedNet.mat”结束结束

比较不同的方法K精度

本节使用不可见的测试数据测试训练网络,考虑top-K精度度量。top-K精度度量已广泛应用于基于神经网络的光束选择任务[2] - [6].

给定一个接收器位置,神经网络首先输出 K 推荐的光束对。然后它对这些执行详尽的顺序搜索 K 并选择平均RSRP最高的光束对作为最终预测。如果真正的最优光束对是最终选择的光束对,则预测成功。等效地,当真正的最优光束对是其中之一时,成功发生 K 神经网络推荐梁对。

比较了三个基准。每个方案产生 K 推荐的光束对。

  1. KNN -对于测试样本,该方法首先收集 K 基于GPS坐标的最接近的训练样本。然后,该方法推荐与这些相关的所有光束对 K 训练样本。由于每个训练样本都有相应的最优光束对,因此推荐的光束对数量最多 K (一些光束对可能是相同的)。

  2. 统计资料[5-该方法首先根据训练集中所有波束对的相对频率进行排序,然后总是选择第一个波束对 K 梁对。

  3. 随机(5-对于测试样本,该方法随机选择 K 梁对。

这幅图显示了 K 8 ,精度已经超过90%,突出了使用训练过的神经网络进行波束选择任务的有效性。当 K 1 6 ,每种方案(除KNN外)都松弛到对所有16对光束进行穷举搜索,因此精度达到100%。然而,当 K 1 6 KNN考虑16个最接近的训练样本,其中截然不同的来自这些样品的光束对通常小于16。因此,KNN没有达到100%的准确率。

rng (111)%表示“随机”策略的可重复性testOut = avgOptBeamPairIdxScalarTest(1+valDataLen:end,:);statisticCount = countcats(testOutCat);predTestOutput = predict(net,testInput,“ExecutionEnvironment”“cpu”);K = prm.numBeams^2;accNeural = 0 (1,K);accKNN = 0 (1,K);accStatistic = 0 (1,K);accRandom = 0 (1,K);k = 1: k predCorrectNeural = 0 (testDataLen,1);predCorrectKNN = 0 (testDataLen,1);predCorrectStats = 0 (testDataLen,1);predCorrectRandom = 0 (testDataLen,1);knnIdx = knnsearch(trainInput,testInput,“K”、k);n = 1:testDataLen trueoptbeamide = testOut(n);神经网络[~, topKPredOptBeamIdx] = maxk(predTestOutput(n,:),k);如果sum(topKPredOptBeamIdx == trueOptBeamIdx) > 0%如果为真,则正确的指标属于K个预测指标中的一个predCorrectNeural(n,1) = 1;结束%资讯neighborsIdxInTrainData = knnIdx(n,:);topKPredOptBeamIdx = avgOptBeamPairIdxScalarTrain (neighborsIdxInTrainData);如果sum(topKPredOptBeamIdx == trueOptBeamIdx) > 0%如果为真,则正确的指标属于K个预测指标中的一个predCorrectKNN(n,1) = 1;结束%统计信息[~, topKPredOptBeamIdx] = maxk(statisticCount,k);如果sum(topKPredOptBeamIdx == trueOptBeamIdx) > 0%如果为真,则正确的指标属于K个预测指标中的一个predCorrectStats(n,1) = 1;结束%随机topKPredOptBeamIdx = randperm(prm.numBeams*prm.numBeams,k);如果sum(topKPredOptBeamIdx == trueOptBeamIdx) > 0%如果为真,则正确的指标属于K个预测指标中的一个predCorrectRandom(n,1) = 1;结束结束accNeural(k) = sum(predCorrectNeural)/testDataLen*100;accKNN(k) = sum(predCorrectKNN)/testDataLen*100;accStatistic(k) = sum(predCorrectStats)/testDataLen*100;accRandom(k) = sum(predCorrectRandom)/testDataLen*100;结束图lineWidth = 1.5;colorNeural = [0 0.4470 0.7410];colorKNN = [0.8500 0.3250 0.0980];colorStats = [0.4940 0.1840 0.5560];colorRandom = [0.4660 0.6740 0.1880];阴谋(1:K accNeural”——*’“线宽”线宽,“颜色”colorNeural)举行阴谋(1:K accKNN“- o”“线宽”线宽,“颜色”colorKNN)阴谋(1:K accStatistic——年代”“线宽”线宽,“颜色”colorStats)阴谋(1:K accRandom“- d”“线宽”线宽,“颜色”colorRandom)举行网格xticks (1: K)包含(“K美元”“翻译”“乳胶”) ylabel (“前K美元准确性”“翻译”“乳胶”)标题(不同波束对选择方案的性能比较)传说(“神经网络”“资讯”的统计信息“随机”“位置”“最佳”

图中包含一个轴对象。标题为“不同光束对选择方案的性能比较”的axis对象包含4个类型为line的对象。这些对象代表神经网络,KNN,统计信息,随机。

比较不同的方法:平均RSRP

使用不可见的测试数据,计算神经网络和三个基准所达到的平均RSRP。该图表明,使用训练过的神经网络的结果在一个平均RSRP接近最优穷尽搜索。

rng (111)%表示“随机”策略的可重复性K = prm.numBeams^2;rsrpOptimal = 0 (1,K);rsrpNeural = 0 (1,K);rsrpKNN = 0 (1,K);rsrpStatistic = 0 (1,K);rsrpRandom = 0 (1,K);k = 1: k rsrpSumOpt = 0;rsrpSumNeural = 0;rsrpSumKNN = 0;rsrpSumStatistic = 0;rsrpSumRandom = 0;knnIdx = knnsearch(trainInput,testInput,“K”、k);n = 1:testDataLen%穷尽搜索trueOptBeamIdx = testOut(n);rsrp = rsrpMatTest(:,:,valDataLen+n);rsrpSumOpt = rsrpSumOpt + rsrp(trueOptBeamIdx);神经网络[~, topKPredOptCatIdx] = maxk(predTestOutput(n,:),k);rsrpSumNeural = rsrpSumNeural + max(rsrp(topKPredOptCatIdx));%资讯neighborsIdxInTrainData = knnIdx(n,:);topKPredOptBeamIdxKNN = avgOptBeamPairIdxScalarTrain(neighborsIdxInTrainData);rsrpSumKNN = rsrpSumKNN + max(rsrp(topKPredOptBeamIdxKNN));%统计信息[~, topKPredOptCatIdxStat] = maxk(statisticCount,k);rsrpSumStatistic = rsrpSumStatistic + max(rsrp(topKPredOptCatIdxStat));%随机topKPredOptBeamIdxRand = randperm(prm.numBeams*prm.numBeams,k);rsrpSumRandom = rsrpSumRandom + max(rsrp(topKPredOptBeamIdxRand));结束rsrpOptimal(k) = rsrpSumOpt/testDataLen/prm.NRepeatSameLoc;rsrpNeural(k) = rsrpSumNeural/testDataLen/prm.NRepeatSameLoc;rsrpKNN(k) = rsrpSumKNN/testDataLen/prm.NRepeatSameLoc;rsrpStatistic(k) = rsrpSumStatistic/testDataLen/prm.NRepeatSameLoc;rsrpRandom(k) = rsrpSumRandom/testDataLen/prm.NRepeatSameLoc;结束图lineWidth = 1.5;阴谋(1:K rsrpOptimal“——h”“线宽”线宽,“颜色”,[0.6350 0.0780 0.1840]);持有阴谋(1:K rsrpNeural”——*’“线宽”线宽,“颜色”colorNeural)阴谋(1:K rsrpKNN“- o”“线宽”线宽,“颜色”colorKNN)阴谋(1:K rsrpStatistic——年代”“线宽”线宽,“颜色”colorStats)阴谋(1:K rsrpRandom“- d”“线宽”线宽,“颜色”colorRandom)举行网格xticks (1: K)包含(“K美元”“翻译”“乳胶”) ylabel (“平均RSRP”)标题(不同波束对选择方案的性能比较)传说(“穷举搜索”“神经网络”“资讯”的统计信息“随机”“位置”“最佳”

图中包含一个轴对象。标题为“不同光束对选择方案的性能比较”的axis对象包含5个类型为line的对象。这些对象代表穷举搜索,神经网络,KNN,统计信息,随机。

比较最优、神经网络和KNN方法的最终值。

[rsrpOptimal end-3:结束);rsrpNeural (end-3:结束);rsrpKNN (end-3:结束),)
ans =3×480.7363 80.7363 80.7363 80.7363 80.7363 80.7363 80.7363 80.5067 80.5068 80.5069 80.5212

KNN和最优方法之间的性能差距表明,即使考虑更大的梁对集(例如256),KNN也可能表现不佳。

情节混乱矩阵

我们观察到,具有较少元素的类受到训练网络的负面影响。为不同的类使用不同的权重可以避免这种情况。探索同样与useDiffClassWeights并为每个类指定自定义权重。

predLabels =分类(net,testInput,“ExecutionEnvironment”“cpu”);图;cm = confusionchart(testOutCat,predLabels);标题(混淆矩阵的

图包含一个confusimatrixchart类型的对象。类型为confusimatrixchart的图表标题为ConfusionMatrix。

结论及进一步探索

本例描述了神经网络在5G NR系统波束选择任务中的应用。你可以设计和训练一个神经网络,输出一组 K 好梁对。通过只对选定的对象进行详尽的搜索,可以减少头顶的波束扫描 K 梁对。

该示例允许您指定MIMO信道中的散射器。为了了解通道对波束选择的影响,可以在不同的场景中进行实验。该示例还提供了预先保存的数据集,可用于实验不同的网络结构和训练超参数。

仿真结果表明,对于预记录的16对波束MIMO散射信道,所提算法可实现最优K准确率90% K 8 .这表明,神经网络足以对所有波束对的一半执行详尽搜索,将波束扫描开销减少50%。实验改变其他系统参数,通过重新生成数据来查看网络的有效性,然后重新训练和重新测试网络。

参考文献

  1. 3GPP TR 38.802,“新型无线接入技术物理层方面的研究”。第三代伙伴计划;技术规范集团无线接入网。

  2. Klautau, A, González-Prelcic, N,和Heath, R. W.,“基于深度学习的毫米波波束选择的激光雷达数据”,IEEE无线通信通讯,第8卷,no. 1。3,页909-912,2019年6月。

  3. Heng, Y.和Andrews, J. G,“毫米波系统的机器学习辅助波束对准”,2019年IEEE全球通信会议(GLOBECOM), 2019, pp. 1-6, doi: 10.1109/GLOBECOM38437.2019.9013296。

  4. Klautau, A., Batista, P., González-Prelcic, N., Wang, Y., and Heath, R. W.,“5G MIMO数据用于机器学习:使用深度学习的波束选择应用”,2018年信息理论与应用研讨会(ITA), 2018, pp. 1-9, doi: 10.1109/ITA.2018.8503086。

  5. 马特奥,Z。< https://github.com/itu - ai - ml - - 5 g - challenge/ps - 012 - ml5g - phy -梁- selection_beamsoup>(这是在2020年国际电联人工智能/机器学习5G挑战赛中获得最高分的团队)。

  6. Sim, M. S., Lim, Y., Park, S. H., Dai, L.和Chae, C.,“基于深度学习的5G NR/6G毫米波波束选择与Sub-6 GHz信道信息:算法和原型验证”,IEEE Access,第8卷,第51634-51646页,2020。

本地函数

函数prm = validateParams(prm)验证用户指定的参数并返回更新后的参数仅对参数一致性进行交叉依赖检查。。如果strcmpi(人口、难民和移民事务局。FreqRange,“FR1”如果人口、难民和移民事务局。CenterFreq > 7.125e9 || prm。CenterFreq < 410e6 error(['指定的中心频率在FR1之外'...频率范围(410兆赫- 7.125兆赫)。]);结束如果strcmpi(人口、难民和移民事务局。SSBlockPattern,“D”) | |...strcmpi(人口、难民和移民事务局。SSBlockPattern,“E”)错误(对于所选的FR1频率无效的SSBlockPattern...的范围内。SSBlockPattern必须是“Case A”或“...' FR1的'情况B'或'情况C']);结束如果~ (((prm.SSBTransmitted)长度= = 4)| |...(长度(prm.SSBTransmitted) = = 8))错误(['SSBTransmitted必须是长度为4或8的向量'...用于FR1频率范围。]);结束如果(人口、难民和移民事务局。CenterFreq <= 3e9) && (length(prm.SSBTransmitted)~=4) error(['SSBTransmitted必须是一个长度为4的向量'...中心频率小于或等于3GHz。]);结束如果(人口、难民和移民事务局。CenterFreq > 3e9) &&(长度(prm. ssbtransmit)~=8)错误(['SSBTransmitted必须是一个长度为8的向量'...'中心频率大于3GHz且小于'...'或等于7.125GHz。']);结束其他的%的FR2如果人口、难民和移民事务局。CenterFreq > 52.6e9 || prm。CenterFreq < 24.25e9 error(['指定中心频率在FR2之外'...频率范围(24.25 GHz - 52.6 GHz)。]);结束如果~ (strcmpi(人口、难民和移民事务局。SSBlockPattern,“D”) | |...strcmpi(人口、难民和移民事务局。SSBlockPattern,“E”)错误([所选FR2频率的SSBlockPattern无效...的范围内。SSBlockPattern必须是“Case D”或“...“FR2的‘E案例’。”]);结束如果长度(prm.SSBTransmitted) ~ = 64错误(['SSBTransmitted必须是一个长度为64的向量'...“FR2频率范围。”]);结束结束发送端/接收端的波束数%人口、难民和移民事务局。numBeams = sum(prm.SSBTransmitted);人口、难民和移民事务局。NumTx = prod(prm.TxArraySize);人口、难民和移民事务局。NumRx = prod(prm.RxArraySize);如果人口、难民和移民事务局。NumTx==1 || prm。错误([NumRx = = 1发射或接收天线元件的数量必须为...'大于1。']);结束人口、难民和移民事务局。IsTxURA = (prm.TxArraySize(1)>1) && (prm.TxArraySize(2)>1);人口、难民和移民事务局。IsRxURA = (prm.RxArraySize(1)>1) && (prm.RxArraySize(2)>1);如果~ (strcmpi(人口、难民和移民事务局。RSRPMode,“SSSonly”) | |...strcmpi(人口、难民和移民事务局。RSRPMode,“SSSwDMRS”))错误([无效的RSRP测量模式。指定任意一个'...'SSSonly'或'SSSwDMRS'为模式]);结束根据SSBlockPattern选择SCS开关低(prm.SSBlockPattern)情况下的情况下SCS = 15;CBW = 10;scsCommon = 15;情况下“案例b”“案例c”} SCS = 30;CBW = 25;scsCommon = 30;情况下“d”SCS = 120;CBW = 100;scsCommon = 120;情况下“e”SCS = 240;CBW = 200;scsCommon = 120;结束人口、难民和移民事务局。SCS = SCS;人口、难民和移民事务局。ChannelBandwidth = cbw;人口、难民和移民事务局。SubcarrierSpacingCommon = scsCommon;结束

另请参阅

功能

对象

相关的话题