主要内容

深度学习数据合成5 g信道估计

这个例子展示了如何训练卷积神经网络(CNN)的信道估计使用深度学习工具箱™和数据生成的5 g的工具箱™。使用训练有素的CNN,您执行信道估计对于单输入(输出)模式,利用物理下行共享信道(PDSCH)解调参考信号(DM-RS)。

介绍

信道估计的一般方法是将已知的参考试点符号插入传输,然后插入其他的通道响应通过使用这些飞行员符号。

为一个例子,演示如何使用这个信道估计方法,明白了NR PDSCH吞吐量

您还可以使用深度学习技术来进行信道估计。例如,通过查看资源网格作为一个二维图像,你可以将信道估计的问题变成一个图像处理的问题,类似于去噪或超分辨率,cnn是有效的。

使用5 g的工具箱,您可以自定义和生成兼容标准波形和信道模型作为训练数据。使用深度学习工具箱,您可以使用此训练数据训练信道估计CNN。这个例子展示了如何生成这些训练数据和如何培养一个信道估计CNN。示例还展示了如何使用信道估计CNN来处理图像,包含线性插值获得飞行员的符号。可视化的例子总结神经网络信道估计的结果相比,实用和完美的估计。

神经网络训练

神经网络训练包括以下步骤:

  • 数据生成

  • 将生成的数据划分为训练集和验证集

  • 定义CNN架构

  • 指定训练选项,优化器和学习速率

  • 培训网络

由于大量的信号和可能的场景,培训可能需要几分钟。默认情况下,培训被禁用,pretrained模型。您可以启用培训通过设置trainModel为true。

trainModel = false;

如果你有并行计算工具箱™安装和支持的人NVIDIA GPU®设置,默认网络训练使用GPU加速。万博1manbetx的trainNetwork(深度学习工具箱)函数允许您覆盖这种默认行为。支持gpu的列表,请参阅万博1manbetxGPU计算的需求(并行计算工具箱)

数据生成将生产256训练例子或训练数据集。这是充分的训练功能的数据量信道估计网络CPU在合理的时间。相比之下,pretrained模型是基于16384年训练的例子。

CNN模型的训练数据有一个固定大小的维度,网络只能接受612 - 14 - 1网格,即612副载波,14个OFDM符号和1天线。因此,该模型只能作用于一个固定的带宽分配,循环前缀长度,和一个接收天线。

CNN对资源网格的二维图像,因此网格的每个元素必须是一个实数。在信道估计的情况下,资源网格有复杂的数据。因此,这些网格的实部和虚部分别输入到CNN。在这个例子中,训练数据从一个复杂的转换612 - 612 - 14矩阵为实值- 14 - 2的矩阵,在第三维表示真实的和虚构的成分。因为你必须真实和虚构的电网输入到神经网络分别进行预测时,这个示例将训练数据转换成4 - d数组的形式612 - - 14 - 1 - 2 - N,其中N是训练实例的数量。

确保CNN不overfit训练数据分为训练数据验证和训练集。验证数据用于监测定期训练神经网络的性能,所定义的valFrequency每个时代,约5。停止训练当验证损失停止改善。在这种情况下,验证数据的大小是一样的大小的一个mini-batch由于体积小的数据集。

返回的信道估计CNN训练在各种信道配置基于不同延迟传播,多普勒频移,和信噪比范围介于0和10 dB。

%设置随机种子再现性(这个如果GPU没有影响%使用)rng (42)如果trainModel%生成训练数据[trainData, trainLabels] = hGenerateTrainingData (256);%设置每mini-batch例子的数量batchSize = 32;%真实和虚构的网格分割成2图像集,然后连接trainData =猫(4,trainData (:,: 1:), trainData (:,: 2:));trainLabels =猫(4,trainLabels (:,: 1:), trainLabels (:,: 2:));%分成训练集和验证集valData = trainData (:,:,: 1: batchSize);valLabels = trainLabels (:,:,: 1: batchSize);trainData = trainData (:,:,:, batchSize + 1:结束);trainLabels = trainLabels (:,:,:, batchSize + 1:结束);% 5倍的验证每一个时代valFrequency =圆(大小(trainData 4) / batchSize / 5);%定义CNN结构层= [imageInputLayer ([612 14 1],“归一化”,“没有”64年)convolution2dLayer(9日,“填充”64年,4)reluLayer convolution2dLayer(5日,“填充”2,“NumChannels”64年,64年)reluLayer convolution2dLayer(5日,“填充”2,“NumChannels”32岁的,64)reluLayer convolution2dLayer (5“填充”2,“NumChannels”,64)reluLayer convolution2dLayer (5、1“填充”2,“NumChannels”32)regressionLayer];%建立一个培训政策选择= trainingOptions (“亚当”,“InitialLearnRate”3的军医,“MaxEpochs”5,“洗牌”,“every-epoch”,“详细”假的,“阴谋”,“训练进步”,“MiniBatchSize”batchSize,“ValidationData”{valData, valLabels},“ValidationFrequency”valFrequency,“ValidationPatience”5);%训练网络。trainingInfo包含已保存的结构%培训进展后检查。这个结构是非常有用的%比较不同优化最优收敛的速度%的方法。[channelEstimationCNN, trainingInfo] = trainNetwork (trainData,trainLabels层,选项);其他的%负载pretrained网络trainModel是否设置为false负载(“trainedChannelEstimationNetwork.mat”)结束

检查模型的组成和各个层。模型5卷积层。输入层预计矩阵的大小612 - 14,612副载波的数量和14个OFDM符号的数量。每个元素是实数,因为复杂的网格的实部和虚部分别输入。

channelEstimationCNN.Layers
ans x1 = 11层阵列层:612 x14x1 imageinput的图像输入图像64 9 x9x1 conv_1的二维卷积运算与步幅[1]和填充[4 4 4 4]3‘relu_1 ReLU ReLU 64 5 x5x64 conv_2的二维卷积运算与步幅[1]和填充[2 2 2 2]5‘relu_2 ReLU ReLU 6 conv_3二维卷积64 5 x5x64旋转步[1]和填充(2 2 2 2)7的relu_3 ReLU ReLU 8“conv_4”二维卷积32 5 x5x64旋转步[1]和填充(2 2 2 2)9 ' relu_4 ReLU ReLU 10 ' conv_5 '二维卷积1 5 x5x32旋转步[1]和填充[2 2 2 2]11“regressionoutput”回归的输出均方误差响应“响应”

为模拟创建通道模型

设置模拟噪声分贝。一个解释信噪比的定义,这个示例使用看看信噪比的定义中使用链接模拟

SNRdB = 10;

负载预定义的模拟参数,包括PDSCH参数和DM-RS配置。

simParameters = hDeepLearningChanEstSimParameters ();载体= simParameters.Carrier;pdsch = simParameters.PDSCH;

创建一个TDL通道模型和设置通道参数。比较不同信道响应的估计,你以后可以改变这些参数。

频道= nrTDLChannel;通道。种子= 0;通道。DelayProfile =“TDL-A”;通道。DelaySpread = 3 e;通道。MaximumDopplerShift = 50;%这个例子只支持输出配置万博1manbetx通道。NumTransmitAntennas = 1;通道。NumReceiveAntennas = 1;waveformInfo = nrOFDMInfo(载体);通道。SampleRate = waveformInfo.SampleRate;

得到样品推迟了一个通道的最大数量多路径组件。这个数字从通道路径计算的最大延迟和实现延迟通道过滤器。这个数字是需要冲洗通道滤波器获得接收信号的时候。

chInfo =信息(渠道);maxChDelay =装天花板(max (chInfo.PathDelays * channel.SampleRate)) + chInfo.ChannelFilterDelay;

模拟PDSCH DM-RS传输

模拟PDSCH DM-RS传输通过执行以下步骤:

  • 生成网格的资源

  • 插入DM-RS符号

  • 执行OFDM调制

  • 发送调制波形通过信道模型

  • 添加高斯白噪声

  • 执行完美的时间同步

  • 执行OFDM解调

网格中的DM-RS符号用于信道估计。这个例子不发送任何数据,因此,资源网格不包括任何PDSCH符号。

%生成DM-RS指数和符号dmrsSymbols = nrPDSCHDMRS(载体、pdsch);dmrsIndices = nrPDSCHDMRSIndices(载体、pdsch);%创建资源网格pdschGrid = nrResourceGrid(载体);%地图PDSCH DM-RS符号网格pdschGrid (dmrsIndices) = dmrsSymbols;% OFDM-modulate相关资源元素txWaveform = nrOFDMModulate(载体、pdschGrid);

刷新频道内容,添加0结束时传播波形。这些零考虑任何延迟引入的通道,如多路径和实现延迟。0的数量取决于采样率,延迟,延迟扩展。

txWaveform = [txWaveform;0 (maxChDelay、尺寸(txWaveform 2)));

发送数据通过TDL信道模型。

[rxWaveform, pathGains sampleTimes] =通道(txWaveform);

添加加性高斯白噪声(AWGN)接收到的时域波形。考虑到采样率,规范化噪声功率。信噪比是定义/资源元素(RE)对于每一个接收天线(3 gpp TS 38.101 - 4)。一个解释信噪比的定义,这个示例使用看看信噪比的定义中使用链接模拟

信噪比= 10 ^ (SNRdB / 10);%计算线性信噪比N0 = 1 /√(2.0 * simParameters.NRxAnts *双(waveformInfo.Nfft) *信噪比);噪音= N0 *复杂(randn(大小(rxWaveform)), randn(大小(rxWaveform)));rxWaveform = rxWaveform +噪声;

执行完美的同步。找到最强大的多路径组件,使用提供的信息通道。

%获得完美的信道估计的路径过滤器pathFilters = getPathFilters(渠道);(抵消,~)= nrPerfectTimingEstimate (pathGains pathFilters);rxWaveform = rxWaveform(1 +抵消:最终,);

OFDM-demodulate接收的数据重建网格资源。

rxGrid = nrOFDMDemodulate(载体、rxWaveform);%垫网格与零在一个不完整的槽被解调[K, L R] =大小(rxGrid);如果(L < carrier.SymbolsPerSlot) rxGrid =猫(2 rxGrid 0 (K, carrier.SymbolsPerSlot-L, R));结束

比较不同信道估计和可视化

您可以执行的结果和比较完美,实用,而且神经网络估计相同的信道模型。

执行完美的信道估计,使用nrPerfectChannelEstimate函数使用路径通道提供的收益的价值。

pathGains estChannelGridPerfect = nrPerfectChannelEstimate(载体,抵消,pathFilters sampleTimes);

执行实际的信道估计,使用nrChannelEstimate函数。

[estChannelGrid, ~] = nrChannelEstimate(载体、rxGrid dmrsIndices,dmrsSymbols,“CDMLengths”,pdsch.DMRS.CDMLengths);

使用神经网络来进行信道估计,必须插入收到网格。然后插值图像分割成它的实部和虚部和输入这些图像到神经网络结合成一个单一的批处理。使用预测(深度学习工具箱)函数进行预测的真实的和想象的图像。最后,连接和转换回复杂数据的结果。

%插入收到资源网格使用试点符号的位置interpChannelGrid = hPreprocessInput (rxGrid dmrsIndices dmrsSymbols);%连接真实的和虚构的网格批维度nnInput =猫(4、真实(interpChannelGrid),图像放大(interpChannelGrid));%利用神经网络估计信道estChannelGridNN =预测(channelEstimationCNN nnInput);%将结果转换为复杂estChannelGridNN =复杂(estChannelGridNN (::,:, 1), estChannelGridNN (::,:, 2));

计算均方误差(MSE)的估计方法。

neural_mse =意味着(abs (estChannelGridPerfect (:)——estChannelGridNN (:)) ^ 2);interp_mse =意味着(abs (estChannelGridPerfect (:)——interpChannelGrid (:)) ^ 2);practical_mse =意味着(abs (estChannelGridPerfect (:)——estChannelGrid (:)) ^ 2);

情节各个通道估计和实际通道实现从通道滤波器获得龙头。实际的估计量和神经网络估计优于线性插值。

plotChEstimates (interpChannelGrid estChannelGrid、estChannelGridNN estChannelGridPerfect,interp_mse、practical_mse neural_mse);

引用

  1. van de发现,Jan-Jaap林里Edfors,马格努斯Sandell,莎拉·凯特·威尔逊和每Ola Borjesson。“在OFDM系统的信道估计。“1995年IEEE 45车辆技术会议。2:815-19倒计时无线二十一世纪,1995年7月。

  2. 你们,杰弗里叶莉,Biing-Hwang Juang。“深度学习的力量对OFDM系统的信道估计和信号检测。“IEEE无线通信信7,不。1(2018年2月):114 - 17所示。

  3. Mehran Soltani,瓦希德Pourahmadi Ali Mirzaei和哈米德Sheikhzadeh。“深度上优于信道估计。“预印本,提交2018年10月13日。

本地函数

函数命令= hPreprocessInput (rxGrid dmrsIndices dmrsSymbols)%进行线性插值的网格和输入的结果%这个helper函数神经网络提取DM-RS符号% dmrsIndices位置在收到网格rxGrid并执行线性的%插值提取的飞行员。%获得飞行员符号估计dmrsRx = rxGrid (dmrsIndices);dmrsEsts = dmrsRx。*连词(dmrsSymbols);%建立空网格填充线性插值[rxDMRSGrid,训谕]=交易(0(大小(rxGrid)));rxDMRSGrid (dmrsIndices) = dmrsSymbols;%找到给定的行和列坐标dmr配置(行,关口)=找到(rxDMRSGrid ~ = 0);dmrsSubs =[行、关口的(大小(关口)));[l_hest, k_hest] = meshgrid(1:尺寸(命令,2),1:尺寸(命令,1));%进行线性插值f = scatteredInterpolant (dmrsSubs (:, 2), dmrsSubs (: 1), dmrsEsts);命令= f (l_hest k_hest);结束函数[trainData, trainLabels] = hGenerateTrainingData (dataSize)%为信道估计生成训练数据的例子。运行dataSize%的迭代次数来创建随机信道配置和通过% OFDM-modulated固定网格资源只有DM-RS符号插入。%执行完美的定时同步和OFDM解调,提取%飞行员符号,在每次迭代中进行线性插值。%使用完美的信道信息来创建标签数据。这个函数%返回2数组——训练数据和标签。流(“从数据生成…\ n”)%的列表可能的渠道配置文件delayProfiles = {“TDL-A”,“TDL-B”,“TDL-C”,“TDL-D”,“TDL-E”};simParameters = hDeepLearningChanEstSimParameters ();载体= simParameters.Carrier;pdsch = simParameters.PDSCH;%创建通道模型对象nTxAnts = simParameters.NTxAnts;nRxAnts = simParameters.NRxAnts;频道= nrTDLChannel;% TDL channel对象通道。NumTransmitAntennas = nTxAnts;通道。NumReceiveAntennas = nRxAnts;%使用返回的值从< matlab:编辑(nrOFDMInfo) nrOFDMInfo >%设置通道模型采样率waveformInfo = nrOFDMInfo(载体);通道。SampleRate = waveformInfo.SampleRate;%得到的最大数量样品推迟了一个通道多路%的组件。这个数字计算与最大的通道路径%的延迟和实现延迟通道过滤器,和是必需的%冲洗通道滤波器得到接收信号。chInfo =信息(渠道);maxChDelay =装天花板(max (chInfo.PathDelays * channel.SampleRate)) + chInfo.ChannelFilterDelay;%返回DM-RS指数和符号dmrsSymbols = nrPDSCHDMRS(载体、pdsch);dmrsIndices = nrPDSCHDMRSIndices(载体、pdsch);%创建资源网格网格= nrResourceGrid(载体、nTxAnts);% PDSCH DM-RS预编码和映射[~,dmrsAntIndices] = nrExtractResources (dmrsIndices、网格);网格(dmrsAntIndices) = dmrsSymbols;% OFDM调制相关的资源要素txWaveform_original = nrOFDMModulate(载体、网格);%获得线性神经网络预处理插入器的坐标(行,关口)=找到(网格~ = 0);dmrsSubs =[行、关口的(大小(关口)));命令= 0(大小(网格));[l_hest, k_hest] = meshgrid(1:尺寸(命令,2),1:尺寸(命令,1));% Preallocate记忆训练数据和标签numExamples = dataSize;[trainData, trainLabels] =交易(0 (14 2 numExamples [612]));%数据生成的主循环,循环遍历的例子%在函数调用中指定。在循环的每次迭代生成一个%的新通道实现随机延迟扩展,多普勒频移,%和延迟。每一个摄动版的传播%波形存储在trainData DM-RS符号,和%在trainLabels完美的通道实现。我= 1:numExamples%释放通道改变nontunable属性channel.release%选择一个随机种子创建不同的通道实现通道。种子=兰迪(2000 [1001]);%选择一个随机延迟,延迟扩展,最大的多普勒频移通道。DelayProfile =字符串(delayProfiles (randi([1元素个数(delayProfiles)))));通道。DelaySpread =兰迪([300])* 1 e-9;通道。MaximumDopplerShift =兰迪([400]);%通过信道模型发送数据。附加零结束时%传播波形冲洗频道内容。这些零%考虑任何延迟引入的通道,如%多路延迟和实现延迟。这个值取决于%的采样率、延迟概要和延迟传播txWaveform = [txWaveform_original;0 (maxChDelay、尺寸(txWaveform_original 2)));[rxWaveform, pathGains sampleTimes] =通道(txWaveform);%添加加性高斯白噪声(AWGN)收到时域%波形。考虑到采样率,规范化噪声功率。%每个接收的信噪比的定义/ RE天线(3 gpp TS 38.101 - 4)。SNRdB =兰迪([0 10]);%随机信噪比的值介于0和10 dB信噪比= 10 ^ (SNRdB / 10);%计算线性信噪比N0 = 1 /√(2.0 * nRxAnts *双(waveformInfo.Nfft) *信噪比);噪音= N0 *复杂(randn(大小(rxWaveform)), randn(大小(rxWaveform)));rxWaveform = rxWaveform +噪声;%完美同步。使用提供的信息通道%找到最强的多路径组件pathFilters = getPathFilters(渠道);%获得完美的信道估计的路径过滤器(抵消,~)= nrPerfectTimingEstimate (pathGains pathFilters);rxWaveform = rxWaveform(1 +抵消:最终,);%完成OFDM解调接收的数据重新创建%网格资源,包括填充物,以防实用%同步解调结果在一个不完整的槽rxGrid = nrOFDMDemodulate(载体、rxWaveform);[K, L R] =大小(rxGrid);如果(L < carrier.SymbolsPerSlot) rxGrid =猫(2 rxGrid 0 (K, carrier.SymbolsPerSlot-L, R));结束%完美的信道估计,使用路径的价值收益%由渠道提供。这个通道估计没有%包括发射机预编码的影响pathGains estChannelGridPerfect = nrPerfectChannelEstimate(载体,抵消,pathFilters sampleTimes);%线性插值dmrsRx = rxGrid (dmrsIndices);dmrsEsts = dmrsRx。*连词(dmrsSymbols);f = scatteredInterpolant (dmrsSubs (:, 2), dmrsSubs (: 1), dmrsEsts);命令= f (l_hest k_hest);%插值网格分割成真实和想象的成分%连接他们沿着第三维度,以及%真实信道响应rx_grid =猫(3,实际(命令),图像放大(命令));est_grid =猫(3真正的(estChannelGridPerfect)图像放大(estChannelGridPerfect));%将生成的训练例子和标签添加到各自的数组trainData (::,:, i) = rx_grid;trainLabels (::,:, i) = est_grid;%数据生成跟踪器如果国防部(我轮(numExamples / 25)) = = 0流(' % 3.2 f % % \ n的,我/ numExamples * 100);结束结束流(“数据生成完成! \ n”)结束函数simParameters = hDeepLearningChanEstSimParameters ()%设置仿真参数深度学习数据合成5 g信道估计的例子%载波配置simParameters。载体= nrCarrierConfig;simParameters.Carrier。NSizeGrid = 51;%的带宽资源块的数量(51苏格兰皇家银行30千赫SCS 20 MHz BW)simParameters.Carrier。SubcarrierSpacing = 30;% 15、30、60、120、240(赫兹)simParameters.Carrier。CyclicPrefix =“正常”;%“正常”或“扩展”(CP相关延长60 kHz SCS)simParameters.Carrier。NCellID = 2;%细胞身份%的传输和接收天线simParameters。NTxAnts = 1;% PDSCH传输天线的数量simParameters。NRxAnts = 1;%的问题接收天线% PDSCH和DM-RS配置simParameters。PDSCH = nrPDSCHConfig;simParameters.PDSCH。PRBSet = 0: simParameters.Carrier.NSizeGrid-1;% PDSCH复审委员会分配simParameters.PDSCH。SymbolAllocation = [0, simParameters.Carrier.SymbolsPerSlot];在每个槽% PDSCH符号分配simParameters.PDSCH。MappingType =“一个”;% PDSCH映射类型(“A”(slot-wise),“B”(非slot-wise))simParameters.PDSCH。NID = simParameters.Carrier.NCellID;simParameters.PDSCH。RNTI = 1;simParameters.PDSCH。VRBToPRBInterleaving = 0;%禁用交叉资源映射simParameters.PDSCH。NumLayers = 1;%的PDSCH传输层simParameters.PDSCH。调制=16 qam的;%的正交相移编码”、“16 qam’,‘64 qam’,‘256 qam’% DM-RS配置simParameters.PDSCH.DMRS。DMRSPortSet = 0: simParameters.PDSCH.NumLayers-1;% DM-RS港口使用层simParameters.PDSCH.DMRS。DMRSTypeAPosition = 2;%映射类型。第一个DM-RS符号位置(2、3)simParameters.PDSCH.DMRS。DMRSLength = 1;%的前置DM-RS符号(1(单符号),2(双符号))simParameters.PDSCH.DMRS。DMRSAdditionalPosition = 1;%额外DM-RS标志位置(最大范围0…3)simParameters.PDSCH.DMRS。DMRSConfigurationType = 2;% DM-RS配置类型(1、2)simParameters.PDSCH.DMRS。NumCDMGroupsWithoutData = 1;%的CDM组没有数据simParameters.PDSCH.DMRS。NIDNSCID = 1;%匆忙身份(0。65535)simParameters.PDSCH.DMRS。NSCID = 0;%地初始化(0,1)结束函数plotChEstimates (interpChannelGrid estChannelGrid、estChannelGridNN estChannelGridPerfect,interp_mse、practical_mse neural_mse)%绘制不同的信道估计和显示测量MSE图;cmax = max (abs ([estChannelGrid (:);estChannelGridNN (:);estChannelGridPerfect (:))));次要情节(1,4,1)显示亮度图像(abs (interpChannelGrid));包含(OFDM符号的);ylabel (副载波的);标题({线性插值的,(“MSE:”num2str (interp_mse)]});爬([0 cmax]);次要情节(1,4,2)显示亮度图像(abs (estChannelGrid));包含(OFDM符号的);ylabel (副载波的);标题({实际的估计量的,(“MSE:”num2str (practical_mse)]});爬([0 cmax]);次要情节(1,4,3)显示亮度图像(abs (estChannelGridNN));包含(OFDM符号的);ylabel (副载波的);标题({“神经网络”,(“MSE:”num2str (neural_mse)]});爬([0 cmax]);次要情节(1,4,4)显示亮度图像(abs (estChannelGridPerfect));包含(OFDM符号的);ylabel (副载波的);标题({“实际通道”});爬([0 cmax]);结束

另请参阅

功能

相关的话题