主要内容

CSI与Autoencoders反馈

这个例子展示了如何使用一个autoencoder神经网络压缩下行信道状态信息(CSI)集群延迟线(CDL)通道。CSI的形式反馈信道估计原始数组中。

介绍

在常规5 g无线网络,CSI参数数量相关通道的状态,从信道估计中提取数组。CSI反馈包括几个参数,如信道质量指示医院药学部(),预编码矩阵指数(PMI)与不同的码书集,和排名指标(RI)。问题使用CSI参考信号(CSI-RS)测量和计算沪深参数。用户设备(UE)报告CSI参数来访问网络节点(gNB)作为反馈。接到CSI参数,gNB时间表下行数据传输属性,如调制方案,编码速率,传输层,和米姆预编码。这个图显示了一个CSI-RS传输的概述,CSI反馈和下行数据的传输,将基于沪深参数。

问题处理信道估计减少CSI反馈数据。作为替代方法,问题压缩数组和反馈信道估计。收到后,gNB解压缩和处理信道估计来确定下行数据链路参数。压缩和解压缩可以通过使用一个autoencoder神经网络(1,2]。这种方法消除了使用现有的量化码书和可以提高总体系统性能。

这个例子使用一个5 g与这些系统参数下行通道。

txAntennaSize = (2 2 2 1 1);%的行、列、偏振、面板rxAntennaSize = (2 1 1 1 1);%的行、列、偏振、面板rmsDelaySpread = 300 e-9;% smaxDoppler = 5;%赫兹nSizeGrid = 52个;%数字资源块(RB)%每RB 12副载波subcarrierSpacing = 15;% 15、30、60、120千赫numTrainingChEst = 15000;%承运人的定义载体= nrCarrierConfig;母舰。N年代我zeGrid = nSizeGrid; carrier.SubcarrierSpacing = subcarrierSpacing
载体= nrCarrierConfig属性:NCellID: 1 SubcarrierSpacing: 15 CyclicPrefix:“正常”NSizeGrid: 52 NStartGrid: 0 NSlot: 0 NFrame: 0只读属性:SymbolsPerSlot: 14 SlotsPerSubframe: 1 SlotsPerFrame: 10
autoEncOpt。NumSubcarriers = carrier.NSizeGrid*12; autoEncOpt.NumSymbols = carrier.SymbolsPerSlot; autoEncOpt.NumTxAntennas = prod(txAntennaSize); autoEncOpt.NumRxAntennas = prod(rxAntennaSize);

生成和数据预处理

设计一个基于ai系统的第一步是准备训练和测试数据。对于这个示例,生成模拟信道估计和预处理数据。使用5 g工具箱™功能配置CDL-C通道。

waveInfo = nrOFDMInfo(载体);samplesPerSlot =sum (waveInfo.SymbolLengths (1: waveInfo.SymbolsPerSlot));频道= nrCDLChannel;通道。DelayProfile =“CDL-C”;通道。DelaySpread = rmsDelaySpread;% s通道。米一个ximumDopplerShift = maxDoppler;%赫兹通道。R一个ndomStream =“全球流”;channel.TransmitAntennaArray。大小= txAntennaSize;channel.ReceiveAntennaArray。大小= rxAntennaSize;通道。ChannelFiltering = false;%没有过滤%完美的估计通道。NumTimeSamples = samplesPerSlot;% 1槽的样本通道。年代一个mpleRate = waveInfo.SampleRate;

模拟通道

运行通道,得到完美的通道估计,命令

[pathGains, sampleTimes] =频道();pathFilters = getPathFilters(渠道);抵消= nrPerfectTimingEstimate (pathGains pathFilters);命令= nrPerfectChannelEstimate(载体,pathGains pathFilters,抵消,sampleTimes);

信道估计矩阵是一个 ( N 副载波 N 符号 N 处方 N tx ] 为每个槽阵列。

[nSub, nSym nRx nTx] =大小(命令)
nSub = 624
nSym = 14
nRx = 2
nTx = 8

情节信道响应。左上角图显示了通道频率响应作为时间的函数(符号)接收天线1和发送天线1。左下图显示传输的信道频率响应函数符号1和接收天线的天线。右上角图显示了所有接收天线的信道频率响应标志1和传输天线1。右下角图显示通道大小的变化响应的函数传输天线的接收天线400副载波和符号1。

plotChannelResponse(命令)

信道估计进行预处理

预处理的通道估计减少尺寸和将其转换为一个实值数组。这个图显示了减少信道估计进行预处理。

信道估计预处理

假定信道相干时间远远大于槽。平均信道估计槽和获得 ( N 副载波 1 N 处方 N tx ] 数组中。

Hmean =意味着(命令,2);

副载波上,使操作和Tx天线,移动Tx和Rx天线尺寸第二和第三维度,分别。

Hmean =排列(Hmean [1 4 3 2]);

获得通道的延迟角表示,应用二维离散傅里叶变换(DFT)在副载波和Tx每个Rx天线和缝隙天线。展示工作流和减少运行时,本节流程Rx通道1只。

Hdft2 = fft2 (Hmean (:,: 1));

以来的多路延迟通道有限,截断延迟维度将不携带信息的值。延迟维度上的采样周期 T d e l 一个 y = 1 / ( N 年代 u b c 一个 r r e r 年代 * F 年代 年代 ) T延迟是eqaul乘法的副载波和副载波间距。 ,在那里 F 年代 年代 副载波间距。预期的RMS延迟传播延迟样品 τ R 年代 / T d e l 一个 y τRMS除以T延迟 ,在那里 τ R 年代 τRMS RMS时延扩展的通道在几秒钟内。

Tdelay = 1 / (e3 autoEncOpt.NumSubcarriers * carrier.SubcarrierSpacing * 1);rmsTauSamples =通道。DelaySpread / Tdelay;maxTruncationFactor =地板(autoEncOpt。NumSubcarriers / rmsTauSamples);

截断通道估计偶数个样品预计RMS时延扩展的10倍。增加了truncationFactor由于预处理值可以减少性能损失。但是,这样做提高了神经网络的复杂性,所需的训练数据点的数量和培训时间。神经网络有可学的参数可能不收敛到一个更好的解决方案。

truncationFactor =10;maxDelay =圆((channel.DelaySpread / Tdelay) * truncationFactor / 2) * 2
maxDelay = 28
autoEncOpt。米一个xDelay = maxDelay;

计算截断指数和截断通道估计。

中点=地板(nSub / 2);lowerEdge =中点- (nSub-maxDelay) / 2 + 1;upperEdge =中点+ (nSub-maxDelay) / 2;Htemp = Hdft2 ([1: lowerEdge-1 upperEdge + 1:结束),:);

回到subcarriers-Tx天线领域,应用二维逆离散傅里叶变换(IDFT)截断array [2]。这个过程实际上会毁坏副载波信道估计的轴。

Htrunc = ifft2 (Htemp);

单独的实部和虚部的通道估计获得 ( N 延迟 N tx 2 ] 数组中。

HtruncReal = 0 (maxDelay nTx 2);真正HtruncReal (:: 1) = (Htrunc);HtruncReal(:: 2) =图像放大(Htrunc);% #好< NASGU >

画出信道估计信号的预处理步骤。图像缩放帮助可视化。

plotPreprocessingSteps (Hmean (:,: 1), Hdft2, Htemp, Htrunc, nSub, nTx,maxDelay)

散装准备数据

helperCSINetTrainingDatahelper函数生成numTrainingChEst的预处理 ( N 延迟 N tx 2 ] 信道估计通过使用在这一节中描述的过程。节省每一个功能 ( N 延迟 N tx 2 ] 在信道估计作为个人文件dataDir的前缀trainingDataFilePrefix。如果并行计算工具箱™是可用的,helperCSINetTrainingData函数使用parfor并行处理数据的一代。数据生成需要不到三分钟在PC与英特尔®CPU @ 3.60 ghz Xeon®w - 2133和并行运行6个工人。

dataDir = fullfile (exRoot (),“数据”);trainingDataFilePrefix =“nr_channel_est”;如果validateTrainingFiles (dataDir trainingDataFilePrefix,numTrainingChEst autoEncOpt,渠道,运营商)= = false disp (“从训练数据的一代”tic autoEncOpt。归一化=假;%不正常数据helperCSINetTrainingData (dataDir trainingDataFilePrefix,numTrainingChEst、载体、渠道、autoEncOpt);t =秒(toc);t。F或mat =“hh: mm: ss”;disp (string (t) +”——完成了训练数据的一代”)结束
开始训练数据生成
6个工人运行00:00:12完成00:00:35 00:00:23 - 16% - 24% - 8%完成完成00:00:46完成00:01:09 00:00:58 - 40% - 48% - 32%完成完成00:01:21完成00:01:44 00:01:32 - 64% - 72% - 56%完成完成00:01:56完成00:02:19 00:02:07 - 88% - 96% - 80%完成完成
00:02:26——完成了训练数据生成

创建一个signalDatastore(信号处理工具箱)对象来访问数据。信号数据存储为每个数据点使用单个文件。

sds = signalDatastore (fullfile (dataDir“加工”trainingDataFilePrefix +“_ *”));

数据加载到内存,计算均值和标准差,然后使用平均值和标准偏差值规范化数据。

HtruncRealCell = readall (sds);HtruncReal =猫(4,HtruncRealCell {:});meanVal =意味着(HtruncReal,“所有”)
meanVal =-0.0236
stdVal =性病(HtruncReal [],“所有”)
stdVal =16.0657

单独的数据训练、验证和测试集。同时,规范化的数据实现零均值和标准差为0.0212,目标限制大部分的数据的范围(-0.5 - 0.5)。

N =大小(HtruncReal 4);numTrain =地板(N * 10/15)
numTrain = 10000
numVal =地板(N * 3/15)
numVal = 3000
numTest =地板(N * 2/15)
numTest = 2000
targetStd = 0.0212;HTReal = (HtruncReal (::,:, 1: numTrain) -meanVal)/ stdVal * targetStd + 0.5;HVReal = (HtruncReal (::,:, numTrain + (1: numVal)) -meanVal)/ stdVal * targetStd + 0.5;HTestReal = (HtruncReal (::,:, numTrain + numVal + (1: numTest)) -meanVal)/ stdVal * targetStd + 0.5;autoEncOpt。米e一个nVal = meanVal; autoEncOpt.StdValue = stdVal; autoEncOpt.TargetSTDValue = targetStd;% #好< STRNU >

定义和训练神经网络模型

设计一个基于ai系统的第二步是定义和训练神经网络模型。

定义神经网络

这个示例使用的修改版本autoencoder神经网络提出了(1]。

inputSize = [maxDelay nTx 2];%三维实部和虚部nLinear = prod (inputSize);nEncoded = 64;autoencoderLGraph = layerGraph ([%编码器imageInputLayer (inputSize“名称”,“Htrunc”,“归一化”,“没有”,“名称”,“Enc_Input”3)convolution2dLayer ([3], 2,“填充”,“相同”,“名称”,“Enc_Conv”)batchNormalizationLayer (“ε”,0.001,“MeanDecay”,0.99,“VarianceDecay”,0.99,“名称”,“Enc_BN”)leakyReluLayer (0.3,“名称”,“Enc_leakyRelu”)flattenLayer (“名称”,“Enc_flatten”)fullyConnectedLayer (nEncoded“名称”,“Enc_FC”)sigmoidLayer (“名称”,“Enc_Sigmoid”)%译码器fullyConnectedLayer (nLinear“名称”,“Dec_FC”)functionLayer (@ (x) dlarray(重塑(x, maxDelay nTx 2 []),“SSCB”),“Formattable”,真的,“Acceleratable”,真的,“名称”,“Dec_Reshape”)));autoencoderLGraph =helperCSINetAddResidualLayers (autoencoderLGraph“Dec_Reshape”);autoencoderLGraph = addLayers (autoencoderLGraph,[convolution2dLayer ([3 3] 2“填充”,“相同”,“名称”,“Dec_Conv”)sigmoidLayer (“名称”,“Dec_Sigmoid”)regressionLayer (“名称”,“Dec_Output”)));autoencoderLGraph =connectLayers (autoencoderLGraph“leakyRelu_2_3”,“Dec_Conv”);图绘制(autoencoderLGraph)标题(“CSI压缩Autoencoder”)

训练神经网络

设置选项autoencoder神经网络训练和培养网络使用trainNetwork函数。培训需要不到15分钟的AMD EPYC 7262 3.2 GHz 8 c / 16 t和8英伟达RTX A5000 gpuExecutionEnvironment设置为“multi-gpu”。集trainNow加载pretrained网络。注意保存网络适用于以下设置。如果你更改这些设置,设置trainNow真正的

txAntennaSize = (2 2 2 1 1);%的行、列、偏振、面板rxAntennaSize = (2 1 1 1 1);%的行、列、偏振、面板rmsDelaySpread = 300 e-9;% smaxDoppler = 5;%赫兹nSizeGrid = 52个;%数字资源块(RB)%每RB 12副载波subcarrierSpacing = 15;
trainNow =;miniBatchSize = 1000;选择= trainingOptions (“亚当”,InitialLearnRate = 0.0074,LearnRateSchedule =“分段”,LearnRateDropPeriod = 112,LearnRateDropFactor = 0.6085,ε= 1 e -,MaxEpochs = 1000,MiniBatchSize = MiniBatchSize,洗牌=“every-epoch”,ValidationData = {HVReal, HVReal},ValidationFrequency = 20,Verbose = false,ValidationPatience = 20,OutputNetwork =“best-validation-loss”,ExecutionEnvironment =“汽车”,情节=“训练进步”)% #好< NASGU >
选择= TrainingOptionsADAM属性:GradientDecayFactor: 0.9000 SquaredGradientDecayFactor: 0.9990ε:1.0000 e-07 InitialLearnRate: 0.0074 LearnRateSchedule:“分段”LearnRateDropFactor: 0.6085 LearnRateDropPeriod: 112 L2Regularization: 1.0000 e-04 GradientThresholdMethod:“l2norm”GradientThreshold:正MaxEpochs: 1000 MiniBatchSize: 1000详细:0 VerboseFrequency: 50 ValidationData:{[28×8×2×3000单][28×8×2×3000单]}ValidationFrequency: 20 ValidationPatience: 20洗牌:every-epoch CheckpointPath:”CheckpointFrequency: 1 CheckpointFrequencyUnit:“时代”ExecutionEnvironment:“汽车”WorkerLoad: [] OutputFcn:[]阴谋:“训练进步”SequenceLength:“最长”SequencePaddingValue: 0 SequencePaddingDirection:“对”DispatchInBackground: 0 ResetInputNormalization: 1 BatchNormalizationStatistics:“人口”OutputNetwork:“best-validation-loss”
如果trainNow[净,trainInfo] =trainNetwork (HTReal HTReal、autoencoderLGraph选项);% #好< UNRCH >保存(“csiTrainedNetwork_”+字符串(datetime (“现在”,“格式”,“dd_MM_HH_mm”)),“净”,“trainInfo”,“选项”,“autoEncOpt”)其他的helperCSINetDownloadData () autoEncOptCached = autoEncOpt;负载(“csiTrainedNetwork”,“净”,“trainInfo”,“选项”,“autoEncOpt”)如果autoEncOpt。NumSubcarriers ~= autoEncOptCached.NumSubcarriers| | autoEncOpt。NumSymbols ~= autoEncOptCached.NumSymbols| | autoEncOpt。NumTxAntennas ~= autoEncOptCached.NumTxAntennas| | autoEncOpt。NumRxAntennas ~= autoEncOptCached.NumRxAntennas| | autoEncOpt。米一个xDelay ~= autoEncOptCached.MaxDelay error(“CSIExample: Missmatch”,“保存网络不匹配设置。trainNow设置为正确的。”)结束结束
文件已经存在。不下载和提取。

测试训练网络

使用预测函数来处理测试数据。

HTestRealHat =预测(净,HTestReal);

计算相关性和归一化均方误差(NMSE) autoencoder网络的输入和输出之间的关系。相关性的定义是

ρ = E { 1 N n = 1 N | h ˆ n H h n | h ˆ n 2 h n 2 }

在哪里 h n 信道估计的输入autoencoder和 h ˆ n 信道估计是autoencoder的输出。NMSE被定义为

N 年代 E = E { H - - - - - - H ˆ 2 2 H 2 2 } 归一化均方误差的平方等于第二个autoencoder输入和输出之间的区别,规范/ y的平方的场规范autoencoder输入。

在哪里 H 信道估计的输入autoencoder和 H ˆ 信道估计是autoencoder的输出。

ρ= 0 (numTest, 1);nmse = 0 (numTest, 1);在= n = 1: numTest HTestReal (:,:, 1, n) + 1我* (HTestReal (:,:, 2 n));= HTestRealHat (:: 1, n) + 1我* (HTestRealHat (:,:, 2 n));%计算相关n1 =√和连接词(在)。*,“所有”));n2 =√和连词(出来)。*,“所有”));aa = abs(总和(连接词(在)。*,“所有”));ρ(n) = aa / (n1 * n2);%计算NMSEmse =意味着(abs (in - out)。^ 2,“所有”);nmse (n) = 10 * log10 (mse /意味着(abs ()。^ 2,“所有”));结束图tiledlayout (2, 1) nexttile直方图(ρ,“归一化”,“概率”网格)标题(sprintf (“Autoencoder相关性(平均\ \ρ= % 1.5 f)”,意思是(ρ)))包含(" \ρ");ylabel (“PDF”)nexttile直方图(nmse“归一化”,“概率”网格)标题(sprintf (“Autoencoder NMSE(平均NMSE = % 1.2 f dB)”,意味着(nmse)))包含(“NMSE (dB)”);ylabel (“PDF”)

端到端CSI反馈系统

这个图显示了CSI的端到端信道估计的处理反馈。问题使用CSI-RS信号来估计信道响应一槽, H e 年代 t 。预处理信道估计, H t r ,通过使用编码器编码autoencoder产生1×——的一部分 N e n c 压缩数组。压缩数组由译码器解压autoencoder获得的一部分 H t r ˆ 。后处理 H t r ˆ 生产 H e 年代 t ˆ

端到端CSI压缩

获取编码阵列,将autoencoder分成两个部分:网络编码器和译码器网络。

[encNet, dec网络]= helperCSINetSplitEncoderDecoder(网络,“Enc_Sigmoid”);plotNetwork(净、encNet数据)

生成信道估计。

nSlots = 100;命令= helperCSINetChannelEstimate (nSlots、载体、渠道);

编码和解码的信道估计归一化设置为真正的

autoEncOpt。N或malization = true; codeword = helperCSINetEncode(encNet, Hest, autoEncOpt); Hhat = helperCSINetDecode(decNet, codeword, autoEncOpt);

计算端到端CSI的相关性和NMSE反馈系统。

H =挤压(意味着(命令,2));rhoE2E = 0 (nRx nSlots);nmseE2E = 0 (nRx nSlots);rx = 1: nRxn = 1: nSlots = Hhat (rx,::, n);在= H (rx,::, n);rhoE2E (rx, n) = helperCSINetCorrelation (,);nmseE2E (rx, n) = helperNMSE (,);结束结束图tiledlayout (2, 1) nexttile直方图(rhoE2E,“归一化”,“概率”网格)标题(sprintf (“端到端相关性(平均\ \ρ= % 1.5 f)”,意思是(rhoE2E“所有”)))包含(" \ρ");ylabel (“PDF”)nexttile直方图(nmseE2E“归一化”,“概率”网格)标题(sprintf (“端到端NMSE(平均NMSE = % 1.2 f dB)”,意思是(nmseE2E“所有”)))包含(“NMSE (dB)”);ylabel (“PDF”)

量化码字的效果

实际系统需要量化编码码字通过使用少量的碎片。模拟效果的量化范围2、10位。结果表明,六位元足够密切近似单精度性能。

CSI压缩autoencoder和量化

maxVal = 1;minVal = 1;idxBits = 1;nBitsVec = 2:10;rhoQ = 0 (nRx nSlots、长度(nBitsVec));nmseQ = 0 (nRx nSlots、长度(nBitsVec));numBits = nBitsVec disp (“运行”+ numBits +“量化”)%之间的数字转换0:2 ^ n - 1位qCodeword = uencode(双(码字* 2 - 1),numBits);%返回浮点,量子化的数字codewordRx =(单(udecode (qCodeword numBits)) + 1) / 2;Hhat = helperCSINetDecode(数据、codewordRx autoEncOpt);H =挤压(意味着(命令,2));rx = 1: nRxn = 1: nSlots = Hhat (rx,::, n);在= H (rx,::, n);rhoQ (rx, n, idxBits) = helperCSINetCorrelation (,);nmseQ (rx, n, idxBits) = helperNMSE (,);结束结束idxBits = idxBits + 1;结束
运行2位量化运行3位量化竞选4位量化运行5位量化运行连续6位量化竞选7位量化8比特量化竞选9位量化运行10位量化
图tiledlayout (2, 1) nexttile情节(nBitsVec,挤压(平均(rhoQ [1 - 2])),“* - - - - - -”)标题(“相关性”(码字-(码字,3)+ +大小“)”)包含(“量化比特数”);ylabel (" \ρ"网格)nexttile情节(nBitsVec挤压(平均(nmseQ [1 - 2])),“* - - - - - -”)标题(“NMSE(代号——“(码字,3)+ +大小“)”)包含(“量化比特数”);ylabel (“NMSE (dB)”网格)

进一步的探索

autoencoder能够压缩(624 8)单精确复杂的信道估计数组的数组(64 1)单精度平均相关系数0.99,NMSE -16 dB。使用6-bit量子化只需要384位的CSI反馈数据,相当于大约对比度的压缩比。

显示器(“压缩比+ (624 * 8 * 32 * 2)/ (64 * 6)+”:“+ 1)
“压缩比是832:1”

调查的影响truncationFactor系统上的性能。改变5 g系统参数、通道参数的数量和编码符号,然后找到最优值定义的通道。

NR PDSCH吞吐量利用信道状态信息反馈(5 g工具箱)示例展示了如何使用信道状态信息(CSI)反馈调整物理下行共享信道(PDSCH)参数和测量吞吐量。取代CSI的CSI反馈算法压缩autoencoder并比较性能。

辅助函数

研究辅助函数的详细系统的实现。

训练数据生成

helperCSINetChannelEstimate

helperCSINetTrainingData

网络的定义和操纵

helperCSINetLayerGraph

helperCSINetAddResidualLayers

helperCSINetSplitEncoderDecoder

CSI处理

helperCSINetPreprocessChannelEstimate

helperCSINetPostprocessChannelEstimate

helperCSINetEncode

helperCSINetDecode

性能测量

helperCSINetCorrelation

helperNMSE

附录:优化Hyperparameters与实验管理器

使用实验管理器应用程序找到最优参数。CSITrainingProject.mlproj是一个预配置项目。提取项目。

如果~ (“CSITrainingProject”,“dir”)projRoot = helperCSINetExtractProject ();其他的projRoot = fullfile (exRoot (),“CSITrainingProject”);结束

打开项目,启动实验管理器应用程序,打开以下文件。

disp (fullfile (“。”,“CSITrainingProject”,“CSITrainingProject.prj”))
\ CSITrainingProject \ CSITrainingProject.prj

优化Hyperparameters实验使用贝叶斯优化与hyperparameter搜索范围指定为如下图所示。实验设置函数CSIAutoEncNN_setup。自定义度量函数NMSE

0.0074最优参数初始学习速率,112次迭代学习速率下降段,0.6085,学习速率下降的因素。寻找最优hyperparameters后,列车网络多次使用相同的参数来找到最好的训练网络。增加的最大迭代的两倍。

最好的NMSE产生的第六次试验。这个示例使用这种训练网络保存网络。

批处理模式配置

当执行模式被设置为批处理顺序批处理同时训练数据必须是可访问的,工人们在一个定义的位置dataDir变量在散装准备数据部分。集dataDir网络位置访问的工人。有关更多信息,请参见卸载实验作为集群的批处理作业

本地函数

函数plotChannelResponse(命令)% plotChannelResponse情节通道响应图tiledlayout (2, 2) nexttile瀑布(abs(命令(:,:,1,1))”)包含(“副载波”);ylabel (“符号”);zlabel (“通道”级30)视图(15日)colormap (“酷”)标题(“Rx = 1, Tx = 1”)nexttile情节(挤压(abs(命令(:1:,1))))网格包含(“副载波”);ylabel (“通道”级)传说(“处方1”,“处方2”)标题(“符号= 1,Tx = 1”)nexttile瀑布(挤压(abs(命令(:,1,1,:))))网格视图(-45、75)包含(“副载波”);ylabel (“Tx”);zlabel (“通道”级)标题(“符号= 1,Rx = 1”)nexttile nSubCarriers =大小(命令,1);副载波=兰迪(nSubCarriers);情节(挤压(abs(命令(副载波,1::))))网格包含(“Tx”);ylabel (“通道”级)传说(“处方1”,“处方2”)标题("副载波= "+副载波+”,象征= 1”)结束函数expN有效= validateTrainingFiles (dataDir filePrefix,选择,渠道,运营商)% validateTrainingFiles验证训练数据文件% V = validateTrainingFiles (DIR, PRE, N,选择,CH, CR)检查DIR目录%为训练数据文件前的前缀。它检查是否存在% N *选择。NumRxAntennas files, channel configuration is same as CH, and% CR载波配置一样。有效= true;文件= dir (fullfile (dataDir filePrefix +“*”));如果isempty(文件)有效= false;返回结束如果存在(fullfile (dataDir“info.mat”),“文件”)infoStr =负载(fullfile (dataDir“info.mat”));如果~ isequal(得到(infoStr.channel)得到(频道))| | ~ isequal (infoStr.carrier载体)有效= false;结束其他的有效= false;结束如果有效有效= (expN = =(长度(文件)* opt.NumRxAntennas));%检查大小的命令文件(1).folder负载(fullfile(文件,文件(1). name),“H”)如果~ isequal(大小(H),[选择。NumSubcarriers opt.NumSymbolsopt.NumRxAntennas opt.NumTxAntennas])有效= false;结束结束如果~有效disp (“删除无效数据目录:“(1).folder) +文件删除文件夹(文件(1).folder,“年代”)结束结束函数plotNetwork(净、encNet数据)% plotNetwork情节autoencoder网络% plotNetwork(净,ENC, DEC)情节完整autoencoder网络在一起%的编码器和译码器网络。无花果=图;t1 = tiledlayout (1、2、“TileSpacing”,“紧凑”);t2 = tiledlayout (t1, 1, 1,“TileSpacing”,“紧”);t3 = tiledlayout (t1、2、1,“TileSpacing”,“紧”);t3.Layout。瓦= 2;nexttile (t2)情节(净)标题(“Autoencoder”)nexttile (t3)情节(encNet)标题(“编码器”)nexttile (t3)情节(数据)标题(“解码”)pos = fig.Position;pos (3) = pos (3) + 200;pos (4) = pos (4) + 300;pos pos (2) = (2) - 300;fig.Position = pos;结束函数plotPreprocessingSteps (Hmean Hdft2、Htemp Htrunc,nSub、nTx maxDelay)% plotPreprocessingSteps情节预处理工作流hfig =图;hfig.Position (3) = hfig.Position (3) * 2;次要情节(2、5、6 [1])himg =显示亮度图像(abs (Hmean));himg.Parent。YDir =“正常”;himg.Parent.Position (3) = 0.05;himg.Parent.XTick =;himg.Parent.YTick =;包含(sprintf (“Tx \ nAntennas \ n (% d)”nTx));ylabel (sprintf (“副载波\ n (% d)”,nSub '));标题(“测量”)次要情节(2、5、7 [2])himg =图像(abs (Hdft2));himg.Parent。YDir =“正常”;himg.Parent.Position (3) = 0.05;himg.Parent.XTick =;himg.Parent.YTick =;标题(“二维DFT”)包含(sprintf (“Tx \ n \ nAngle (% d)”nTx));ylabel (sprintf (“延迟样品\ n (% d)”,nSub '));次要情节(2、5、8 [3])himg =图像(abs (Htemp));himg.Parent。YDir =“正常”;himg.Parent.Position (3) = 0.05;himg.Parent.Position (4) = himg.Parent.Position (4) * 10 * maxDelay / nSub;himg.Parent.Position (2) = (1 - himg.Parent.Position (4)) / 2;himg.Parent.XTick =;himg.Parent.YTick =;包含(sprintf (“Tx \ n \ nAngle (% d)”nTx));ylabel (sprintf (“延迟样品\ n (% d)”,maxDelay '));标题(“截断”)次要情节(2、5、9 [4])himg =显示亮度图像(abs (Htrunc));himg.Parent。YDir =“正常”;himg.Parent.Position (3) = 0.05;himg.Parent.Position (4) = himg.Parent.Position (4) * 10 * maxDelay / nSub;himg.Parent.Position (2) = (1 - himg.Parent.Position (4)) / 2;himg.Parent.XTick =;himg.Parent.YTick =;包含(sprintf (“Tx \ nAntennas \ n (% d)”nTx));ylabel (sprintf (“副载波\ n (% d)”,maxDelay '));标题(“二维IDFT”)次要情节(2、5、5)himg =显示亮度图像(真正的(Htrunc));himg.Parent。YDir =“正常”;himg.Parent.Position (3) = 0.05;himg.Parent.Position (4) = himg.Parent.Position (4) * 10 * maxDelay / nSub;himg.Parent.Position (2) = himg.Parent.Position (2) + 0.18;himg.Parent.XTick =;himg.Parent.YTick =;包含(sprintf (“Tx \ nAntennas \ n (% d)”nTx));ylabel (sprintf (“副载波\ n (% d)”,maxDelay '));标题(“真正的”次要情节(2、5、10)himg =显示亮度图像(图像放大(Htrunc));himg.Parent。YDir =“正常”;himg.Parent.Position (3) = 0.05;himg.Parent.Position (4) = himg.Parent.Position (4) * 10 * maxDelay / nSub;himg.Parent.Position (2) = himg.Parent.Position (2) + 0.18;himg.Parent.XTick =;himg.Parent.YTick =;包含(sprintf (“Tx \ nAntennas \ n (% d)”nTx));ylabel (sprintf (“副载波\ n (% d)”,maxDelay '));标题(“虚”)结束函数rootDir = exRoot ()% exRoot根目录的例子rootDir = fileparts ((“helperCSINetLayerGraph”));结束

引用

[1],Chao-Kai,施施蜿蜓,金。“深度学习了大量CSI的反馈。“IEEE无线通信信7,不。5(2018年10月):748 - 51。https://doi.org/10.1109/LWC.2018.2818160。

[2]Zimaglia、Elisa、丹尼尔·g·里维耶洛罗伯托·Garello和罗伯托·Fantini。“小说深层学习方式CSI NR 5 g蜂窝系统的反馈报告。“2020年IEEE微波理论和技术在无线通信(MTTW) 47-52。里加(拉脱维亚:IEEE 2020。https://doi.org/10.1109/MTTW51045.2020.9245055。

相关的话题