基于深度学习网络的5G通信链路信道估计算法matlab仿真

发布时间 2023-04-10 20:32:40作者: 我爱C编程

1.算法描述

        深度学习(英语:deep learning),是一个多层神经网络是一种机器学习方法。在深度学习出现之前,由于诸如局部最优解和梯度消失之类的技术问题,没有对具有四层或更多层的深度神经网络进行充分的训练,并且其性能也不佳。但是,近年来,Hinton等人通过研究多层神经网络,提高学习所需的计算机功能以及通过Web的开发促进培训数据的采购,使充分学习成为可能。结果,它显示出高性能,压倒了其他方法,解决了与语音,图像和自然语言有关的问题,并在2010年代流行。

 

        深度学习(DL, Deep Learning)是机器学习(ML, Machine Learning)领域中一个新的研究方向,它被引入机器学习使其更接近于最初的目标——人工智能(AI, Artificial Intelligence)

        深度学习是学习样本数据的内在规律和表示层次,这些学习过程中获得的信息对诸如文字,图像和声音等数据的解释有很大的帮助。它的最终目标是让机器能够像人一样具有分析学习能力,能够识别文字、图像和声音等数据。 深度学习是一个复杂的机器学习算法,在语音和图像识别方面取得的效果,远远超过先前相关技术。

        深度学习在搜索技术,数据挖掘,机器学习,机器翻译,自然语言处理,多媒体学习,语音,推荐和个性化技术,以及其他相关领域都取得了很多成果。深度学习使机器模仿视听和思考等人类的活动,解决了很多复杂的模式识别难题,使得人工智能相关技术取得了很大进步。

        深度学习是机器学习的一种,而机器学习是实现人工智能的必经路径。深度学习的概念源于人工神经网络的研究,含多个隐藏层的多层感知器就是一种深度学习结构。深度学习通过组合低层特征形成更加抽象的高层表示属性类别或特征,以发现数据的分布式特征表示。研究深度学习的动机在于建立模拟人脑进行分析学习的神经网络,它模仿人脑的机制来解释数据,例如图像,声音和文本等。

————————————————

 

       物联网网络的空前需求已使对频谱资源进行细粒度优化成为当务之急。因此,能够实时从频谱中提取知识并据此选择最佳频谱访问策略的设计技术变得比以往任何时候都更加重要。此外,超越5G的网络将需要复杂的管理方案来解决诸如自适应波束管理和速率选择等问题。尽管深度学习已成功地对复杂现象进行了建模,但市售的无线设备距离实际采用基于学习的技术来优化其频谱使用距离还很远。

 

       受到多径效应的影响,无线信道估计呈现较强的非线性特征。采用何种方法快速学习信道传输参数的非线性映射,并且各信道传输参数具有良好的适应性是信道估计的关键问题。本文采用深度学习的方法,通过对大量数据的离线学习,迭代训练得到信道参数的自回归系数,以实现传输参数的非线性映射,获得初步的信道估计模型。大规模MIMO-OFDM 系统中,发射天线个数为Nt,接收天线个数为Nr。则第n个发射天线的一个OFDM 符号表示为:

 

 

        针对5G系统中的高速率低时延的需求,传统的信道估计算法难以满足要求的问题,将通信信道的时频响应视为二维图像,提出了一种基于图像恢复技术的信道估计方法。首先,设定参数产生基于5G 新空口(New RadioNR)标准的物理下行链路共享信道(Physical Downlink Shared ChannelPDSCH)的信道数据信息数据集,将所产生的信道矩阵看作二维图像;然后,构建基于卷积神经网络的图像恢复网络,并融入残差连接来提高网络的性能;最后,利用训练好的网络模型进行信道估计。最小二乘算法(Least SquareLS)、实际信道估计(Practical Channel EstimationPCE)相比,所提出的信道估计算法性能提升明显。

 

2.仿真效果预览

matlab2022a仿真结果如下:

 

 

 

 

 

 

 

3.MATLAB核心程序

 

%生成数据 
[trainData,trainLabels] = hGenerateTrainingData(256);
%mini-batch
batchSize   = 32;
%Split real and imaginary
trainData   = cat(4,trainData(:,:,1,:),trainData(:,:,2,:));
trainLabels = cat(4,trainLabels(:,:,1,:),trainLabels(:,:,2,:));
%Split into training and test
valData     = trainData(:,:,:,1:batchSize);
valLabels   = trainLabels(:,:,:,1:batchSize);
 
trainData   = trainData(:,:,:,batchSize+1:end);
trainLabels = trainLabels(:,:,:,batchSize+1:end);
 
valFrequency= round(size(trainData,4)/batchSize/5); 
%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
];
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);