主要内容

用于光束选择的神经网络

这个例子展示了如何使用神经网络来减少波束选择任务中的开销。在这个例子中,你只使用接收器的位置而不是通信通道的知识。不用对所有波束对进行详尽的波束搜索,你可以通过在选中的波束之间进行搜索来减少波束扫过 K 梁对。考虑一个总共有16个光束对的系统,本例中的仿真结果表明,设计的机器学习算法仅对一半的光束对执行穷尽搜索,就可以达到90%的精度。

介绍

为了实现毫米波(mmWave)通信,必须使用波束管理技术,因为在高频下会经历高路径损耗和阻塞。波束管理是一组第1层(物理层)和第2层(介质访问控制)程序,以建立和保留一个最佳的波束对(发射波束和相应的接收波束),以获得良好的连通性[1]。有关5G新无线电(NR)波束管理程序的模拟,请参见NR SSB Beam sweep(5 g工具箱)NR下行传输端波束改进使用CSI-RS(5 g工具箱)的例子。

本例考虑用户设备(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个RF链组成)。在设置了MIMO散射信道后,该示例考虑训练集中200个不同的接收器位置和测试集中100个不同的接收器位置。预先录制的数据使用二维位置坐标。具体来说,每个样本的第三个GPS坐标始终为零。就像在NR SSB Beam sweep例如,对于每个位置,执行基于ssb的波束扫描,对所有16对波束进行详尽搜索。由于在穷尽搜索过程中添加了AWGN,对于每个位置,示例运行4个不同的试验,并通过选择平均RSRP最高的光束对来确定真正的最佳光束对。

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

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

配置频率和光束扫描角度

人口、难民和移民事务局。NCellID = 1;%细胞ID人口、难民和移民事务局。FreqRange =“FR1”%频率范围:'FR1'或'FR2'人口、难民和移民事务局。CenterFreq = 2.5 e9;%赫兹人口、难民和移民事务局。SSBlockPattern =“案例B”%例A / B / C / D / E人口、难民和移民事务局。ssbtransmit = [ones(1,4) zero (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}人口、难民和移民事务局= validateParams(人口、难民和移民事务局);

同步信号突发配置

txBurst = nrWavegenSSBurstConfig;txBurst。BlockPattern = prm.SSBlockPattern;txBurst。TransmittedBlocks = prm.SSBTransmitted;txBurst。时间= 20;txBurst。SubcarrierSpacingCommon = prm.SubcarrierSpacingCommon;

散射体配置

c = physconst (“光速”);%传播速度人口、难民和移民事务局。λ= c / prm.CenterFreq;%的波长人口、难民和移民事务局。rightCoorMax = 10;%最大坐标人口、难民和移民事务局。topCoorMax = 10;%最大坐标人口、难民和移民事务局。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(大小(azAngInSph));r = 2;%半径[x, y, z] = sph2cart(函数(azAngInSph),函数(elAngInSph), r);人口、难民和移民事务局。ScatPos = [x;y;z] + [prm.rightCoorMax/2;prm.topCoorMax/2;0];

天线阵列的配置

%传输数组如果人口、难民和移民事务局。IsTxURA%均匀矩形阵列arrayTx = phased.URA (0.5 * prm.lambda prm.TxArraySize,“元素”,分阶段。IsotropicAntennaElement (“BackBaffled”,真的));其他的%均匀线性数组arrayTx = phased.ULA (prm.NumTx,“ElementSpacing”0.5 * prm.lambda“元素”,分阶段。IsotropicAntennaElement (“BackBaffled”,真的));结束%接收数组如果人口、难民和移民事务局。IsRxURA%均匀矩形阵列arrayRx = phased.URA (0.5 * prm.lambda prm.RxArraySize,“元素”, phased.IsotropicAntennaElement);其他的%均匀线性数组arrayRx = phased.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。NRepeatSameLoc, 1);%测试数据:矩形周围有Y个点:每边有Y/4个随机点%与test不同的数据,但数字更小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 ^”,“填充”);持有;:散射(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 locations的axes对象包含2个类型为scatter的对象。这些对象表示发射器,散射者。

数据处理与可视化

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

过程的训练数据

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

处理测试数据

%通过选择平均RSRP最高的光束对来决定最好的光束对avgOptBeamPairIdxCellTest = cell(size(optBeamPairIdxMatTest, 1)/prm。NRepeatSameLoc, 1);avgOptBeamPairIdxScalarTest =零(size(optBeamPairIdxMatTest, 1)/prm.;NRepeatSameLoc, 1);locIdx = 1:size(optBeamPairIdxMatTest, 1)/prm。NRepeatSameLoc avgRsrp =挤压(rsrpMatTest(:,:,locIdx));[~, targetBeamIdx] = max(avgRsrp(:));avgOptBeamPairIdxScalarTest (locIdx) = targetBeamIdx;avgOptBeamPairIdxCellTest {locIdx} = num2str (targetBeamIdx);结束%增加类别,使数据总共有16个类avgOptBeamPairIdxCellTest = categorical(avgOptBeamPairIdxCellTest, allBeamPairIdxCell);NBeamPairInTestData =元素个数(类别(avgOptBeamPairIdxCellTest));%应该是16

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

trainDataLen = size(locationMatTrain, 1)/prm.NRepeatSameLoc;trainOut = avgOptBeamPairIdxCellTrain;sampledLocMatTrain = locationMatTrain(1:人口、难民和移民事务局。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:人口、难民和移民事务局。NRepeatSameLoc:最终,);sampledLocMatTest = sampledLocMatTest(shuffledIdx,:);valInput = sampledLocMatTest(1:valDataLen,:);testInput = sampledLocMatTest(valDataLen+1:end,:);

绘制训练数据的最佳波束对分布

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

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

图中包含一个轴对象。标题为Optimal Beam Pair indexes (Training Data)的axis对象包含18个散点类型的对象。

图直方图(trainOut)标题('最优光束对指数直方图(训练数据)')包含(“梁双指数”) ylabel (出现的数量)

图中包含一个轴对象。标题为Histogram of Optimal Beam Pair indexes (Training Data)的axis对象包含一个类型为categoricalhistogram的对象。

绘制验证数据的最优光束对分布

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

图中包含一个轴对象。标题为Optimal Beam Pair indexes (Validation Data)的axis对象包含9个散点类型的对象。

图直方图(valOut)标题(“最优光束对指数直方图(验证数据)”)包含(“梁双指数”) ylabel (出现的数量)

图中包含一个轴对象。标题为Histogram of Optimal Beam Pair indexes (Validation Data)的axis对象包含一个类型为categoricalhistogram的对象。

绘制测试数据的最优光束对分布

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

图中包含一个轴对象。标题为Optimal Beam Pair indexes (Test Data)的axis对象包含16个散点类型的对象。

图直方图(testOutCat)标题('最优光束对指数直方图(测试数据)')包含(“梁双指数”) ylabel (出现的数量)

图中包含一个轴对象。标题为Histogram of Optimal Beam Pair indexes (Test Data)的axis对象包含一个类型为categoricalhistogram的对象。

设计和训练神经网络

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

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

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

doTraining = false;useDiffClassWeights = false;saveNet = false;如果doTraining如果useDiffClassWeights catCount = countcats(trainOut);catFreq = catCount /长度(trainOut);nnzIdx = (catFreq ~= 0);medianCount =值(catFreq (nnzIdx));classWeights = 10 *的(大小(catFreq));classWeights (nnzIdx) = medianCount. / catFreq (nnzIdx);文件名=“nnBS_trainedNetwWeighting.mat”其他的NBeamPairInTestData classWeights = 1 (1);文件名=“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);%训练网络网= trainNetwork (trainInput、trainOut层,选择);如果saveNet保存(文件名,“净”);结束其他的如果useDiffClassWeights负载“nnBS_trainedNetwWeighting.mat”其他的负载“nnBS_trainedNet.mat”结束结束

比较不同的方法:Top-K精度

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

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

三个基准进行比较。每个方案产生 K 推荐梁对。

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

  2. 统计信息(5] -这种方法首先根据训练集中所有光束对的相对频率对其进行排序,然后总是选择第一个 K 梁对。

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

图中显示了for 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);testInput predTestOutput =预测(净,“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 =零(testDataLen,1);predCorrectKNN = 0 (testDataLen, 1);predCorrectStats = 0 (testDataLen, 1);predCorrectRandom = 0 (testDataLen, 1);knnIdx = knnsearch (trainInput testInput,“K”、k);n = 1:testDataLen trueOptBeamIdx = 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) = (predCorrectNeural) / testDataLen总和* 100;accKNN (k) = (predCorrectKNN) / testDataLen总和* 100;accStatistic (k) = (predCorrectStats) / testDataLen总和* 100;accRandom (k) = (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个类型为直线的对象。这些对象分别代表神经网络(Neural Network)、KNN、统计信息(Statistical Info)、随机(Random)。

比较不同的方法:平均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个类型为直线的对象。这些对象分别代表穷举搜索、神经网络、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.7363 80.7363 80.7363 80.7363 80.5067 80.5068 80.5069 80.5212

KNN和最优方法之间的性能差距表明,即使考虑更大的束对集,比如256,KNN也可能表现不好。

情节混淆矩阵

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

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

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

结论与进一步探索

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

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

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

参考文献

  1. 3GPP TR 38.802,“新型无线电接入技术物理层方面的研究”。第三代合作伙伴项目;技术规范组无线电接入网。

  2. Klautau, A., González-Prelcic, N.,和Heath, R. W.,“用于基于深度学习的mmWave波束选择的LIDAR数据”,《IEEE无线通信通讯》,第8卷,第8期。第3页,909-912页,2019年6月。

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

  4. Klautau, A., Batista, P., González-Prelcic, N., Wang, Y.,和Heath, R. W.,“用于机器学习的5G MIMO数据:使用深度学习应用于波源选择”,2018年信息理论与应用研讨会(ITA), 2018年,第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年在ITU人工智能/机器学习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年。

本地函数

函数人口、难民和移民事务局= validateParams(人口、难民和移民事务局)验证用户指定的参数并返回更新的参数%%只进行参数一致性的交叉依赖检查。如果strcmpi(人口、难民和移民事务局。FreqRange,“FR1”)如果人口、难民和移民事务局。CenterFreq > 7.125e9 || prm。CenterFreq < 410e6 error([“指定的中心频率在FR1之外”,'频率范围(410 MHz - 7.125 GHz)。']);结束如果strcmpi(人口、难民和移民事务局。SSBlockPattern,“D”) | |strcmpi(人口、难民和移民事务局。SSBlockPattern,“E”)错误('所选FR1频率的SSBlockPattern无效'的范围内。SSBlockPattern必须是“Case A”或““FR1的‘Case B’或‘Case C’。”]);结束如果~ (((prm.SSBTransmitted)长度= = 4)| |(长度(prm.SSBTransmitted) = = 8))错误([' ssbtransmit必须是长度为4或8的向量',为FR1频率范围。]);结束如果(人口、难民和移民事务局。CenterFreq <= 3e9) && (length(prm. ssbtransmit)~=4) error([' ssbtransmit必须是长度为4的向量''中心频率小于或等于3GHz。']);结束如果(人口、难民和移民事务局。CenterFreq > 3e9) && (length(prm. ssbtransmit)~=8) error([' ssbtransmit必须是一个长度为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的‘Case E’。”]);结束如果长度(prm.SSBTransmitted) ~ = 64错误([' ssbtransmit必须是一个长度为64的向量',FR2频率范围。]);结束结束%发射/接收端光束数人口、难民和移民事务局。numBeams =总和(prm.SSBTransmitted);人口、难民和移民事务局。NumTx = prod (prm.TxArraySize);人口、难民和移民事务局。NumRx = prod (prm.RxArraySize);如果人口、难民和移民事务局。NumTx = = 1 | |人口、难民和移民事务局。错误([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;生化武器= 10;scsCommon = 15;情况下{“案例b”,“案例c”} SCS = 30;生化武器= 25;scsCommon = 30;情况下“d”scs = 120;生化武器= 100;scsCommon = 120;情况下“e”scs = 240;生化武器= 200;scsCommon = 120;结束人口、难民和移民事务局。SCS = SCS;人口、难民和移民事务局。ChannelBandwidth =生化武器;人口、难民和移民事务局。SubcarrierSpacingCommon = scsCommon;结束
Baidu
map