热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

基于DNN深度学习网络的OFDM信号检测算法的matlab仿真,对比LS和MMSE两个算法(包括matlab仿真录像)

目录1.源码获取方式2.算法描述3.部分程序4.部分仿真图预览1.源码获取方式使用版本matlab2022a获取方式1:点击下载链接(解压

目录

1.源码获取方式

2.算法描述

3.部分程序

4.部分仿真图预览




1.源码获取方式

使用版本matlab2022a

获取方式1:

点击下载链接(解压密码C+123456):

基于DNN深度学习网络的OFDM信号检测算法的matlab仿真,对比LS和MMSE两个算法

获取方式2:

如果下载链接失效,加博主微信联系,或私信联系。


2.算法描述

       在OFDM系统中,信道估计器的设计上要有两个问题:** 一是导频信息的选择,由于无线信道的时变特性,需要接收机不断对信道进行跟踪,因此导频信息也必须不断的传送: 二是既有较低的复杂度又有良好的导频跟踪能力的信道估计器的设计,在确定导频发送方式和信道估计准则条件下,寻找最佳的信道估计器结构。

        正交频分复用(OFDM,Orthogonal Frequency Division Multiple)技术凭借抗多径能力强、频谱利用率高、易于与其他多种接入方法相结合等特性,在第四代移动通信(The Fourth Generation,4G)系统中广泛使用并被制定在多项标准中。然而,OFDM也有着因为子载波叠加而导致的峰均比过高,和经过衰落信道后产生的非线性失真、多径衰落等问题,从而会严重影响到整个通信系统的误符号率(SER)性能[2]。

        传统的信号检测方法有最小二乘(LS)法和最小均方误差(MMSE)法,LS算法虽然实现起来比较简单、计算复杂度较低,但是其忽略了噪声的影响,因此其信噪比低时性能较差。MMSE算法考虑了噪声的影响,因此其性能比LS算法有所提升,但是这种性能优势需要事先知道信道的先验信息,因而实现起来较为困难,且这2种算法在导频数量较少时的信号检测性能较差。

        近年来,深度学习作为人工智能的基础技术,在计算机视觉和自然语言处理等学科取得巨大的成功,在图像分类、语音识别、面部识别和机器翻译风格转换等方面超越了传统机器学习方法的性能,使得无人驾驶、智能疾病诊断和个性化推荐等应用成为可能。神经网络在无线通信领域得到一些应用,例如直接采取端到端方式神经网络代替整个无线通信系统中的信道估计与均衡模块,也有用神经网络进行对信道估计的优化。将神经网络融到迭代信号重建算法,设计一种基于深度学习去噪的近似信息传递网络,利用大量数据学习信道结构,在较短时间内有效地进行信道估计,解决了由射频链路数量有限导致的信道估计难题。

       因为频谱资源十分珍贵,如果一个信道仅仅只传输一路信号,那无疑是对频谱资源的浪费, 为了能够充分利用信道带宽, 频分复用是一种很好的方法。OFDM技术是频分复用方法的一种,其基本原理如下:将串行的高速数据流转换为低速的并行数据流,然后将数据调制到相互正交的子载波上4Q。OFDM系统可以通过DFT和ID FT的方法产生相互正交的子载波,然后利用子载波之间的正交性,将原始信号从子载波中分离开来,通过这种方法可以实现OFDM无线通信系统中信号的发送与接收。

       如下图所示,经过训练的神经网络以从导频符号所估计的结果作为输入,以所有符号上的信道频率响应作为输出。

  从基于给定信道仿真模型的结果来看,由于能“学习”更准确的导频与数据符号之间的信道变化特性,相比于传统方案,该方案能获得更好的性能。然而,在训练阶段用所有符号上的理想信道信息作为目标优化数据,显然是难以实现的。 

        提供了一种基于深度学习的时变OFDM系统信号检测方法,生成信号检测网络模型输入数据集,构建一个信号检测网络模型,在网络训练前需预设好训练和测试参数,采用在线生成训练数据和测试数据的方式训练网络,测试数据喂入信号检测网络,信号检测网络模型根据喂入的特征向量,产生预测出的发送数据比特,与真实的发送数据比特进行对比,测试网络当前的性能.本发明于针对快速时变OFDM系统,结合深度学习方法,利用循环神经网络处理时间序列的优势,简化了接收机架构,成功实现信号的解调,改进了快速时变OFDM系统中的信号检测性能,本发明有效减小了系统实现复杂度,同时也提升了系统整体的误比特率性能.

        针对DNN信号检测网络对OFDM系统信号检测能力不理想的情况,本文提出了LSTM信号检测网络并介绍了框架结构以及训练过程,LSTM信号检测网络主要包含输入层、LSTM层、全连接层、softmax层以及分类层,LSTM信号检测网络能够提取输入数据之间的信息,故相比于DNN网络有更好的性能,该网络需要在已有的信道模型下生成的数据进行训练,然后再将经过训练的网络放入OFDM系统进行应用。仿真表明,LSTM信号检测网络相比于传统算法在不同导频数与有无循环前缀的情况下均有较高的性能提升,与DNN信号检测网络相比,在误符号率为10~(-2)时,有了1d B的性能提升。其次,针对之前提出的LSTM信号检测网络收敛速度慢等问题,本文提出了一种基于双向长短记忆神经网络的信号检测网络,该网络主要包含:输入层、Bi LSTM层、全连接层、softmax层以及分类层。首先需要构建Bi LSTM网络,然后利用3GPP信道模型下生成的数据对已经构建好的神经网络进行训练,最后则可将训练好的神经网络应用于OFDM系统之中,对整个系统进行信号检测。

       dnn结构如下:


3.部分程序


clc;
clear;
close all;
warning off;
addpath(genpath(pwd));load('SimParametersPilot64.mat');
load('TrainedNetPilot64.mat');%2.基于深度学习(DL)计算符号错误率(SER),
%最小二乘法(LS)和最小均方误差(MMSE)。NumPilot = length(FixedPilot);
PilotSpacing = NumSC/NumPilot;
NumOFDMsym = NumPilotSym+NumDataSym;
NumClass = length(Label);
NumPath = length(h);load('RHH.mat');%% SNR rangeEs_N0_dB = 0:1:24; % Es/N0 in dB
Es_N0 = 10.^(Es_N0_dB./10); % linear Es/N0
N0 = 1./Es_N0;
NoiseVar = N0./2;%% Testing data sizeNumPacket = 10000; % Number of packets simulated per iteration%% Simulation% Same pilot sequences used in training and testing stages
FixedPilotAll = repmat(FixedPilot,1,1,NumPacket); % Number of Monte-Carlo iterations
NumIter = 1;% Initialize error rate vectors
SER_DL = zeros(length(NoiseVar),NumIter);
SER_LS = zeros(length(NoiseVar),NumIter);
SER_MMSE = zeros(length(NoiseVar),NumIter);for i = 1:NumIterfor snr = 1:length(NoiseVar)[snr,i]%% 1. Testing data generatiOnnoiseVar= NoiseVar(snr);% OFDM pilot symbol (can be interleaved with random data symbols)PilotSym = 1/sqrt(2)*complex(sign(rand(NumPilotSym,NumSC,NumPacket)-0.5),sign(rand(NumPilotSym,NumSC,NumPacket)-0.5)); PilotSym(1:PilotSpacing:end) = FixedPilotAll;% OFDM data symbolDataSym = 1/sqrt(2)*complex(sign(rand(NumDataSym,NumSC,NumPacket)-0.5),sign(rand(NumDataSym,NumSC,NumPacket)-0.5)); % Transmitted OFDM frameTransmittedPacket = [PilotSym;DataSym];% Received OFDM frameReceivedPacket = genTransmissionReceptionOFDM(TransmittedPacket,LengthCP,h,noiseVar);% Collect the data labels for the selected subcarrierDataLabel = zeros(size(DataSym(:,idxSC,:)));for c = 1:NumClassDataLabel(logical(DataSym(:,idxSC,:) == 1/sqrt(2)*Mod_Constellation(c))) = Label(c);endDataLabel = squeeze(DataLabel); % Testing data collectiOnXTest= cell(NumPacket,1);YTest = zeros(NumPacket,1); for c = 1:NumClass[feature,label,idx] = getFeatureAndLabel(real(ReceivedPacket),imag(ReceivedPacket),DataLabel,Label(c));featureVec = mat2cell(feature,size(feature,1),ones(1,size(feature,2))); XTest(idx) = featureVec;YTest(idx) = label;endYTest = categorical(YTest);%% 2. DL detectiOnYPred= classify(Net,XTest,'MiniBatchSize',MiniBatchSize);SER_DL(snr,i) = 1-sum(YPred == YTest)/NumPacket;%% 3. LS & MMSE detection% Channel estimatiOnwrapper= @(x,y) performChanEstimation(x,y,RHH,noiseVar,NumPilot,NumSC,NumPath,idxSC);ReceivedPilot = mat2cell(ReceivedPacket(1,:,:),1,NumSC,ones(1,NumPacket));PilotSeq = mat2cell(FixedPilotAll,1,NumPilot,ones(1,NumPacket));[EstChanLS,EstChanMMSE] = cellfun(wrapper,ReceivedPilot,PilotSeq,'UniformOutput',false);EstChanLS = cell2mat(squeeze(EstChanLS));EstChanMMSE = cell2mat(squeeze(EstChanMMSE));% Symbol detectionSER_LS(snr,i) = getSymbolDetection(ReceivedPacket(2,idxSC,:),EstChanLS,Mod_Constellation,Label,DataLabel);SER_MMSE(snr,i) = getSymbolDetection(ReceivedPacket(2,idxSC,:),EstChanMMSE,Mod_Constellation,Label,DataLabel);endendSER_DL = mean(SER_DL,2).';
SER_LS = mean(SER_LS,2).';
SER_MMSE = mean(SER_MMSE,2).';figure;
semilogy(Es_N0_dB,SER_DL,'r-o');
hold on;
semilogy(Es_N0_dB,SER_LS,'b-o');
hold on;
semilogy(Es_N0_dB,SER_MMSE,'k-o');legend('Deep learning','LS','MMSE');
xlabel('Es/N0 (dB)');
ylabel('Symbol error rate (SER)');

clc;
clear;
close all;
warning off;
addpath(genpath(pwd));%% Load training and validation dataload('TrainingData.mat');
load('ValidationData.mat');%% Define training parametersMiniBatchSize = 1000;
MaxEpochs = 100;
InputSize = 2*NumOFDMsym*NumSC;
NumHiddenUnits = 16;
NumClass = length(Label);%% Form DNN layersLayers = [ ...sequenceInputLayer(InputSize)lstmLayer(NumHiddenUnits,'OutputMode','last')fullyConnectedLayer(NumClass)softmaxLayerclassificationLayer];%% Define trainig optiOnsOptions= trainingOptions('adam',...'InitialLearnRate',0.01,...'ValidationData',{XValid,YValid}, ...'ExecutionEnvironment','auto', ...'GradientThreshold',1, ...'LearnRateDropFactor',0.1,...'MaxEpochs',MaxEpochs, ...'MiniBatchSize',MiniBatchSize, ...'Shuffle','every-epoch', ...'Verbose',0,...'Plots','training-progress');%% Train DNNNet = trainNetwork(XTrain,YTrain,Layers,Options);%% Save the DNNsave('TrainedNet','Net','MiniBatchSize');

4.部分仿真图预览

 A88


推荐阅读
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ... [详细]
  • 建立分类感知器二元模型对样本数据进行分类
    本文介绍了建立分类感知器二元模型对样本数据进行分类的方法。通过建立线性模型,使用最小二乘、Logistic回归等方法进行建模,考虑到可能性的大小等因素。通过极大似然估计求得分类器的参数,使用牛顿-拉菲森迭代方法求解方程组。同时介绍了梯度上升算法和牛顿迭代的收敛速度比较。最后给出了公式法和logistic regression的实现示例。 ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • 网址:https:vue.docschina.orgv2guideforms.html表单input绑定基础用法可以通过使用v-model指令,在 ... [详细]
  • Learning to Paint with Model-based Deep Reinforcement Learning
    本文介绍了一种基于模型的深度强化学习方法,通过结合神经渲染器,教机器像人类画家一样进行绘画。该方法能够生成笔画的坐标点、半径、透明度、颜色值等,以生成类似于给定目标图像的绘画。文章还讨论了该方法面临的挑战,包括绘制纹理丰富的图像等。通过对比实验的结果,作者证明了基于模型的深度强化学习方法相对于基于模型的DDPG和模型无关的DDPG方法的优势。该研究对于深度强化学习在绘画领域的应用具有重要意义。 ... [详细]
  • 本文介绍了使用Spark实现低配版高斯朴素贝叶斯模型的原因和原理。随着数据量的增大,单机上运行高斯朴素贝叶斯模型会变得很慢,因此考虑使用Spark来加速运行。然而,Spark的MLlib并没有实现高斯朴素贝叶斯模型,因此需要自己动手实现。文章还介绍了朴素贝叶斯的原理和公式,并对具有多个特征和类别的模型进行了讨论。最后,作者总结了实现低配版高斯朴素贝叶斯模型的步骤。 ... [详细]
  • 本文介绍了利用ARMA模型对平稳非白噪声序列进行建模的步骤及代码实现。首先对观察值序列进行样本自相关系数和样本偏自相关系数的计算,然后根据这些系数的性质选择适当的ARMA模型进行拟合,并估计模型中的位置参数。接着进行模型的有效性检验,如果不通过则重新选择模型再拟合,如果通过则进行模型优化。最后利用拟合模型预测序列的未来走势。文章还介绍了绘制时序图、平稳性检验、白噪声检验、确定ARMA阶数和预测未来走势的代码实现。 ... [详细]
  • cs231n Lecture 3 线性分类笔记(一)
    内容列表线性分类器简介线性评分函数阐明线性分类器损失函数多类SVMSoftmax分类器SVM和Softmax的比较基于Web的可交互线性分类器原型小结注:中文翻译 ... [详细]
author-avatar
瘦哆哆和胖大雄
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有