主要内容gydF4y2Ba

OFDM Autoencoder无线通信gydF4y2Ba

这个例子展示了如何建模一个端到端的正交分频调制(OFDM)通信系统一个autoencoder可靠地传输信息通过无线信道。gydF4y2Ba

介绍gydF4y2Ba

这个示例使用一个autoencoder一起OFDM调制器和解调器层设计和实现一个基于通信系统。gydF4y2Ba

在这个例子中,您将学习如何:gydF4y2Ba

  • 使用gydF4y2BasequenceInputLayergydF4y2Ba与多个信噪比的值函数来训练网络。gydF4y2Ba

  • 创建OFDM调制和解调层使用gydF4y2BaofdmmodgydF4y2Ba(通信工具箱)gydF4y2Ba和gydF4y2BaofdmdemodgydF4y2Ba(通信工具箱)gydF4y2Ba功能。gydF4y2Ba

  • 火车一个完全连接的神经网络与嵌入式OFDM调制和解调。gydF4y2Ba

  • 单独的神经网络进入编码器和译码器网络。gydF4y2Ba

  • 运行提单模拟比较错误率表现传统OFDM链接到一个基于ai OFDM的链接。gydF4y2Ba

对于一个equivelent单载波通信系统,看到gydF4y2BaAutoencoders无线通信gydF4y2Ba(通信工具箱)gydF4y2Ba的例子。gydF4y2Ba

OFDM-based Autoencoder系统gydF4y2Ba

这个框图显示无线autoencoder通信系统。每个编码器(发射机)第一个地图gydF4y2Ba kgydF4y2Ba 设置的信息比特序列到一个消息gydF4y2Ba 年代gydF4y2Ba 这样gydF4y2Ba 年代gydF4y2Ba ∈gydF4y2Ba {gydF4y2Ba 0gydF4y2Ba ,gydF4y2Ba …gydF4y2Ba ,gydF4y2Ba 米gydF4y2Ba - - - - - -gydF4y2Ba 1gydF4y2Ba }gydF4y2Ba ,在那里gydF4y2Ba 米gydF4y2Ba =gydF4y2Ba 2gydF4y2Ba kgydF4y2Ba 形成gydF4y2Ba TgydF4y2Ba 消息。每一个gydF4y2Ba TgydF4y2Ba 消息,gydF4y2Ba 年代gydF4y2Ba 是映射到gydF4y2Ba ngydF4y2Ba 实值通道使用,gydF4y2Ba xgydF4y2Ba =gydF4y2Ba fgydF4y2Ba (gydF4y2Ba 年代gydF4y2Ba )gydF4y2Ba ∈gydF4y2Ba RgydF4y2Ba ngydF4y2Ba ,从而导致一个有效的编码速率gydF4y2Ba RgydF4y2Ba =gydF4y2Ba kgydF4y2Ba /gydF4y2Ba ngydF4y2Ba 数据位每通道使用。然后,两个真正的信道使用映射到一个复杂的符号来创建gydF4y2Ba xgydF4y2Ba cgydF4y2Ba =gydF4y2Ba ggydF4y2Ba (gydF4y2Ba 年代gydF4y2Ba )gydF4y2Ba ∈gydF4y2Ba CgydF4y2Ba ngydF4y2Ba /gydF4y2Ba 2gydF4y2Ba 。的归一化层编码器强加限制gydF4y2Ba xgydF4y2Ba 进一步限制编码符号。为了说明的可能性,这些限制是使用归一化层实现:gydF4y2Ba

  • 能源约束:gydF4y2Ba 为gydF4y2Ba xgydF4y2Ba 我gydF4y2Ba 为gydF4y2Ba 2gydF4y2Ba 2gydF4y2Ba =gydF4y2Ba 1gydF4y2Ba ,gydF4y2Ba ∀gydF4y2Ba 我gydF4y2Ba

  • 平均功率约束:gydF4y2Ba EgydF4y2Ba (gydF4y2Ba |gydF4y2Ba xgydF4y2Ba 我gydF4y2Ba |gydF4y2Ba 2gydF4y2Ba ]gydF4y2Ba =gydF4y2Ba 1gydF4y2Ba ,gydF4y2Ba ∀gydF4y2Ba 我gydF4y2Ba

归一化符号映射到OFDM副载波,通过一个AWGN信道。gydF4y2Ba

autoencoder_ofdm.pnggydF4y2Ba

器编码gydF4y2Ba 年代gydF4y2Ba 和输出编码符号,gydF4y2Ba xgydF4y2Ba 。通道损害编码符号生成gydF4y2Ba ygydF4y2Ba ∈gydF4y2Ba RgydF4y2Ba ngydF4y2Ba /gydF4y2Ba 2gydF4y2Ba 。接收者解码gydF4y2Ba ygydF4y2Ba 和输出估计,gydF4y2Ba 年代gydF4y2Ba ˆgydF4y2Ba 传播的消息gydF4y2Ba 年代gydF4y2Ba 。gydF4y2Ba

输入消息是一个炎热的向量gydF4y2Ba 1gydF4y2Ba 年代gydF4y2Ba ∈gydF4y2Ba RgydF4y2Ba 米gydF4y2Ba 的元素都是0除了gydF4y2Ba 年代gydF4y2Ba thgydF4y2Ba 一个。AWGN信道噪声增加达到指定的信号噪声功率比,gydF4y2Ba 年代gydF4y2Ba NgydF4y2Ba RgydF4y2Ba 。gydF4y2Ba

生成和数据预处理gydF4y2Ba

发射机的输入是一个随机的序列gydF4y2Ba kgydF4y2Ba 位。gydF4y2Ba kgydF4y2Ba 位可以创建gydF4y2Ba 米gydF4y2Ba =gydF4y2Ba 2gydF4y2Ba kgydF4y2Ba 不同的信息或输入符号。输入的符号是一个分类的特性的集合gydF4y2Ba {gydF4y2Ba 0gydF4y2Ba ,gydF4y2Ba 1gydF4y2Ba ,gydF4y2Ba 。gydF4y2Ba 。gydF4y2Ba 。gydF4y2Ba ,gydF4y2Ba 米gydF4y2Ba - - - - - -gydF4y2Ba 1gydF4y2Ba }gydF4y2Ba 。随着输入符号的数量可能增加,训练符号的数量必须增加给网络一个机会体验大量可能的输入组合。验证符号的数量也是如此。输入的位元数设置为2。gydF4y2Ba

k =gydF4y2Ba2gydF4y2Ba;gydF4y2Ba%的信息比特/符号gydF4y2BaM = 2 ^ k;gydF4y2Ba%信息符号集的大小gydF4y2BanumTrainSymbols = 2560 *;numValidationSymbols = 128 *;gydF4y2Ba

autoencoder神经网络最好使用一个炎热的输入和分类每个输入符号的分类值,gydF4y2Ba {gydF4y2Ba 0gydF4y2Ba ,gydF4y2Ba 1gydF4y2Ba ,gydF4y2Ba 。gydF4y2Ba 。gydF4y2Ba 。gydF4y2Ba ,gydF4y2Ba 米gydF4y2Ba - - - - - -gydF4y2Ba 1gydF4y2Ba }gydF4y2Ba 。使用随机输入符号转换成一个炎热的数组gydF4y2BaonehotencodegydF4y2Ba功能和创建分类值标签。放置在一个炎热的第一个价值维度(行)和输入符号的第二个维度(列)。gydF4y2Ba

dTrain =兰迪([0 m - 1] 1 5)gydF4y2Ba
dTrain =gydF4y2Ba1×5gydF4y2Ba3 3 0 3 2gydF4y2Ba
trainSymbolsTemp = onehotencode (dTrain 1gydF4y2Ba“类名”gydF4y2Ba,0:m - 1)gydF4y2Ba
trainSymbolsTemp =gydF4y2Ba4×5gydF4y2Ba0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 1 0gydF4y2Ba
trainLabelsTemp =分类(dTrain)gydF4y2Ba
trainLabelsTemp =gydF4y2Ba1 x5分类gydF4y2Ba3 3 0 3 2gydF4y2Ba

训练神经网络在几个信噪比水平确保autoencoder可以处理的信噪比范围值没有再培训。设置培训信噪比之间的值作为一个数组1 dB和9 dB。生成多个批次的训练序列,每一批(细胞)经历不同的信噪比。设置随机数发生器的状态可重复的结果仅供演示目的。gydF4y2Ba

trainSNRVec = 1:2:9;gydF4y2Ba%培训信噪比(dB)gydF4y2Barng (1234) trainSymbols =细胞(1,长度(trainSNRVec));trainLabels =细胞(1、长度(trainSNRVec));validationSymbols =细胞(1、长度(trainSNRVec));validationLabels =细胞(1、长度(trainSNRVec));gydF4y2Ba为gydF4y2Bap = 1:长度(trainSNRVec) dTrain =兰迪([0 m - 1] 1 numTrainSymbols);dValid =兰迪([0 m - 1] 1 numValidationSymbols);trainSymbols {p} = onehotencode (dTrain 1gydF4y2Ba“类名”gydF4y2Ba,0:m - 1);trainLabels {p} =分类(dTrain);validationSymbols {p} = onehotencode (dValid 1gydF4y2Ba“类名”gydF4y2Ba,0:m - 1);validationLabels {p} =分类(dValid);gydF4y2Ba结束gydF4y2Ba

训练符号的大小gydF4y2Ba 米gydF4y2Ba ×gydF4y2Ba NgydF4y2Ba 年代gydF4y2Ba ygydF4y2Ba 米gydF4y2Ba 。训练标签的大小gydF4y2Ba 1gydF4y2Ba ×gydF4y2Ba NgydF4y2Ba 年代gydF4y2Ba ygydF4y2Ba 米gydF4y2Ba 。gydF4y2Ba

numBatches =长度(trainSymbols)gydF4y2Ba
numBatches = 6gydF4y2Ba
sizeTrainSymbols =大小(trainSymbols {1})gydF4y2Ba
sizeTrainSymbols =gydF4y2Ba1×2gydF4y2Ba10240年4gydF4y2Ba
sizeTrainLabels =大小(trainLabels {1})gydF4y2Ba
sizeTrainLabels =gydF4y2Ba1×2gydF4y2Ba1 10240gydF4y2Ba

定义和训练神经网络模型gydF4y2Ba

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

定义神经网络gydF4y2Ba

这个示例使用的修改版本autoencoder神经网络提出了[2]。设置副载波的数量,gydF4y2Ba NgydF4y2Ba fgydF4y2Ba fgydF4y2Ba tgydF4y2Ba N次fftgydF4y2Ba ,到256年。两个完全连接层映射gydF4y2Ba kgydF4y2Ba 位(形式的长度gydF4y2Ba 米gydF4y2Ba 在一个炎热的数组)gydF4y2Ba ngydF4y2Ba 实数,导致利率gydF4y2Ba RgydF4y2Ba =gydF4y2Ba kgydF4y2Ba /gydF4y2Ba ngydF4y2Ba 通信系统。正常化后,OFDM调制器层地图gydF4y2Ba ngydF4y2Ba 真正的数字gydF4y2Ba ngydF4y2Ba /gydF4y2Ba 2gydF4y2Ba 复杂的符号和副载波分配每个符号。以确保OFDM调制器输出层完整的OFDM符号,设置最小输入长度,gydF4y2Ba最小长度gydF4y2Ba在第三维度,序列的输入层(T)gydF4y2Ba NgydF4y2Ba fgydF4y2Ba fgydF4y2Ba tgydF4y2Ba 。因此,神经网络的输入是一个炎热的序列值的大小gydF4y2Ba 米gydF4y2Ba ×gydF4y2Ba NgydF4y2Ba fgydF4y2Ba fgydF4y2Ba tgydF4y2Ba 。这个网络使用gydF4y2BasequenceInputLayergydF4y2Ba函数与gydF4y2Ba 米gydF4y2Ba 的特点和gydF4y2Ba NgydF4y2Ba fgydF4y2Ba fgydF4y2Ba tgydF4y2Ba 序列的长度。gydF4y2Ba

通信链路的可靠性可以通过多个渠道的使用增加了相同的信息符号,它也被称为编码增益。一个autoencoder可以学会利用这个渠道使用数量的增加,gydF4y2Ba ngydF4y2Ba >gydF4y2Ba kgydF4y2Ba 。下面的火车一个OFDM-based (2) autoencoder,相当于有一个编码率,gydF4y2Ba RgydF4y2Ba 的1/3。集gydF4y2Ba ngydF4y2Ba 6。gydF4y2Ba

Nfft =gydF4y2Ba256年gydF4y2Ba;gydF4y2Ba% OFDM副载波的数量gydF4y2Ban =gydF4y2Ba6gydF4y2Ba;gydF4y2Ba% (n / 2)是复杂的信道使用的数量gydF4y2BaCPLength =gydF4y2Ba4gydF4y2Ba;gydF4y2Ba%样本gydF4y2Ba归一化=gydF4y2Ba“能量”gydF4y2Ba;gydF4y2Ba%正常化”能量”|“平均功率”gydF4y2BaofdmAELayerGraph = [sequenceInputLayer (M,名称=gydF4y2Ba“一个炎热的输入”gydF4y2Ba,最小长度= Nfft) fullyConnectedLayer (M, Name =gydF4y2Ba“fc_1”gydF4y2Ba)reluLayer (Name =gydF4y2Ba“relu_1”gydF4y2Ba)fullyConnectedLayer (n, Name =gydF4y2Ba“fc_2”gydF4y2BaBiasInitializer =gydF4y2Ba“narrow-normal”gydF4y2Ba)helperAEWOFDMNormalizationLayer(方法=正常化)helperAEWOFDMModLayer (Nfft、CPLength Name =gydF4y2Ba“OFDM国防部”gydF4y2Ba);helperAEWOFDMAWGNLayer(信噪比= trainSNRVec SignalPower = 1) helperAEWOFDMDemodLayer (Nfft、CPLength Name =gydF4y2Ba“OFDM解调”gydF4y2Ba);fullyConnectedLayer (M, Name =gydF4y2Ba“fc_3”gydF4y2Ba)reluLayer (Name =gydF4y2Ba“relu_2”gydF4y2Ba)fullyConnectedLayer (M, Name =gydF4y2Ba“fc_4”gydF4y2Ba)softmaxLayer (Name =gydF4y2Ba“softmax”gydF4y2Ba)classificationLayer (Name =gydF4y2Ba“classoutput”gydF4y2Ba));gydF4y2Ba

以下显示了每一层的输出大小autoencoder层。gydF4y2Ba

看到网络的全面分析,复选框gydF4y2Ba如果gydF4y2Ba声明。gydF4y2Ba

如果gydF4y2Ba假gydF4y2BaanalyzeNetwork (ofdmAELayerGraph)gydF4y2Ba% #好< UNRCH >gydF4y2Ba结束gydF4y2Ba

训练神经网络gydF4y2Ba

设置选项autoencoder神经网络训练和培养网络使用gydF4y2BatrainNetworkgydF4y2Ba函数。培训大约需要15秒AMD EPYC 7262 3.2 GHz 8 c / 16 t。gydF4y2Ba

%设置培训选项gydF4y2Ba选择= trainingOptions (gydF4y2Ba“亚当”gydF4y2Ba,gydF4y2Ba…gydF4y2BaInitialLearnRate = 0.02,gydF4y2Ba…gydF4y2BaMaxEpochs = 10,gydF4y2Ba…gydF4y2BaOutputNetwork =gydF4y2Ba“best-validation-loss”gydF4y2Ba,gydF4y2Ba…gydF4y2Ba洗牌=gydF4y2Ba“every-epoch”gydF4y2Ba,gydF4y2Ba…gydF4y2BaValidationData = {validationSymbols, validationLabels},gydF4y2Ba…gydF4y2BaLearnRateSchedule =gydF4y2Ba“分段”gydF4y2Ba,gydF4y2Ba…gydF4y2BaLearnRateDropPeriod = 5,gydF4y2Ba…gydF4y2BaLearnRateDropFactor = 0.1,gydF4y2Ba…gydF4y2BaExecutionEnvironment =gydF4y2Ba“cpu”gydF4y2Ba,gydF4y2Ba…gydF4y2Ba情节=gydF4y2Ba“没有”gydF4y2Ba,gydF4y2Ba…gydF4y2BaSequenceLength = Nfft);gydF4y2Ba% autoencoder网络训练gydF4y2Ba[trainedNet, trainInfo] = trainNetwork (trainSymbols、trainLabels ofdmAELayerGraph,选项);gydF4y2Ba
| = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = | | | |时代迭代时间| Mini-batch | |验证Mini-batch | |验证基地学习| | | | (hh: mm: ss) | | | | |损失损失精度精度率| | = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = | | 1 | 1 |就是13.22% | 24.67% | | 1.6775 | 1.4967 | 0.0200 | | 2 | 50 | 00:00:02 | | 74.15% 72.56% | 0.4678 | 0.4751 | 0.0200 | | 3 | 100 | 00:00:05 | | 95.18% 95.67% | 0.1513 | 0.1256 | 0.0200 | | 150 | | 00:00:08 | | 97.14% 96.65% | 0.0893 | 0.1177 | 0.0200 | | 200 | | 00:00:11 | | 96.48% 96.29% | 0.1010 | 0.1127 | 0.0200 | | 250 | | 00:00:13 | | 96.29% 96.48% | 0.0968 | 0.1106 | 0.0020 | | 300 | | 00:00:17 | | 97.53% 96.26% | 0.1039 | 0.1224 | 0.0020 | | 350 | | 00:00:20 | | 96.61% 96.39% | 0.1090 | 0.1210 | 0.0020 | | 400 | | 00:00:25 | | 96.88% 96.06% | 0.0999 | 0.1272 | 0.0020 | | = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = |培训完成:马克思时代完成。gydF4y2Ba
trainInfo。n = n;trainInfo。k = k;trainInfo。Normalization = normalization;

情节的培训进度。快速验证的准确性达到90%以上,而验证损失持续缓慢下降。这种行为表明,训练gydF4y2Ba 年代gydF4y2Ba NgydF4y2Ba RgydF4y2Ba 值是足够低导致一些错误但不太低,以避免收敛。如果gydF4y2Ba 年代gydF4y2Ba NgydF4y2Ba RgydF4y2Ba 太高了,网络不经历任何错误,那么autoencoder不学习如何正确的通道障碍。经验法则是保持验证精度在85%和95%之间。验证准确性和验证损失的定义,请参阅gydF4y2Ba监测深度学习培训的进展gydF4y2Ba部分。gydF4y2Ba

图helperAEWPlotTrainingPerformance (trainInfo)gydF4y2Ba

图包含一个坐标轴对象。坐标轴对象包含迭代,ylabel验证精度包含2线类型的对象。gydF4y2Ba

单独的网络为编码器和译码器部分。编码器的输入层开始和结束后的OFDM调制器层。由于OFDM调制器时间样本的数量变化(增加循环前置),使用gydF4y2BadlnetworkgydF4y2Ba编码器的网络。gydF4y2Ba

为gydF4y2BaidxOFDMLayer = 1:长度(trainedNet.Layers)gydF4y2Ba如果gydF4y2Baisa (trainedNet.Layers (idxOFDMLayer),gydF4y2Ba“helperAEWOFDMModLayer”gydF4y2Ba)gydF4y2Ba打破gydF4y2Ba结束gydF4y2Ba结束gydF4y2Balgraph = layerGraph (trainedNet.Layers (1: idxOFDMLayer));txNet = dlnetwork (lgraph);gydF4y2Ba

译码器与OFDM解调器层开始,最后分类层。添加一个功能的输入层开始。由于OFDM解调器变化时间样本的数量(删除循环前置)使用gydF4y2BadlnetworkgydF4y2Ba译码器的网络。gydF4y2Ba

为gydF4y2BaidxOFDMDemod = idxOFDMLayer + 1:长度(trainedNet.Layers)gydF4y2Ba如果gydF4y2Baisa (trainedNet.Layers (idxOFDMDemod),gydF4y2Ba“helperAEWOFDMDemodLayer”gydF4y2Ba)gydF4y2Ba打破gydF4y2Ba结束gydF4y2Ba结束gydF4y2BafirstLayerName = trainedNet.Layers (idxOFDMDemod) . name;lgraph = addLayers (layerGraph (sequenceInputLayer (Name =gydF4y2Ba“rxin”gydF4y2Ba最小长度= (Nfft + CPLength) * n / 2)),gydF4y2Ba…gydF4y2BatrainedNet.Layers (idxOFDMDemod:结束));lgraph = connectLayers (lgraph,gydF4y2Ba“rxin”gydF4y2Ba,firstLayerName);lgraph = removeLayers (lgraph,gydF4y2Ba“classoutput”gydF4y2Ba);rxNet = dlnetwork (lgraph);gydF4y2Ba

使用情节训练网络的目标函数对象的图层图表显示全部autoencoder,编码器网络,这是发射器,和译码器网络,接收器。gydF4y2Ba

图tiledlayout (2, 2) nexttile(1[2])情节(trainedNet)标题(gydF4y2Ba“Autoencoder”gydF4y2Ba)nexttile情节(txNet)标题(gydF4y2Ba“编码器/ Tx”gydF4y2Ba)nexttile情节(rxNet)标题(gydF4y2Ba“译码器/ Rx”gydF4y2Ba)gydF4y2Ba

图包含3轴对象。坐标轴对象1标题graphplot Autoencoder包含一个对象的类型。坐标轴对象2标题编码器/ Tx包含graphplot类型的一个对象。坐标轴对象3标题解码器/ Rx包含graphplot类型的一个对象。gydF4y2Ba

比较提单OFDM-based Autoencoder和传统OFDM在AWGN信道gydF4y2Ba

设置仿真参数。以下参数确保了仿真运行在大约一分钟,同时提供可接受的提单的结果。提高信噪比范围和最大的帧数为更广泛得到更可靠的结果。gydF4y2Ba

SNRVec = 0:2:8;symbolsPerFrame = Nfft;signalPower = 1;gydF4y2Ba

生成的随机整数(0gydF4y2Ba 米gydF4y2Ba 1)表示gydF4y2Ba kgydF4y2Ba 随机比特的信息。将这些信息比特编码到复杂的符号gydF4y2BahelperAEWOFDMEncodegydF4y2Ba函数。gydF4y2Ba的helperAEWOFDMEncodegydF4y2Ba函数运行编码器autoencoder然后地图实值的一部分gydF4y2Ba xgydF4y2Ba 向量为一个复杂的价值gydF4y2Ba xgydF4y2Ba cgydF4y2Ba 向量,这样奇怪的甚至元素映射到同相正交分量的一个复杂的符号,分别gydF4y2Ba xgydF4y2Ba cgydF4y2Ba =gydF4y2Ba xgydF4y2Ba (gydF4y2Ba 1gydF4y2Ba :gydF4y2Ba 2gydF4y2Ba :gydF4y2Ba egydF4y2Ba ngydF4y2Ba dgydF4y2Ba )gydF4y2Ba +gydF4y2Ba jgydF4y2Ba xgydF4y2Ba (gydF4y2Ba 2gydF4y2Ba :gydF4y2Ba 2gydF4y2Ba :gydF4y2Ba egydF4y2Ba ngydF4y2Ba dgydF4y2Ba )gydF4y2Ba 。换句话说,治疗gydF4y2Ba xgydF4y2Ba 数组作为交错复杂的数组。gydF4y2Ba

通过复杂的符号通过AWGN信道。解码通道受损的复杂符号gydF4y2BahelperAEWOFDMDecodegydF4y2Ba函数。下面的代码运行仿真gydF4y2Ba 年代gydF4y2Ba NgydF4y2Ba RgydF4y2Ba 点至少100块错误或最多2000帧。如果gydF4y2Ba并行计算工具箱™gydF4y2Ba安装和许可证,取消吗gydF4y2BaparforgydF4y2Ba线运行的模拟并行池。gydF4y2Ba

minNumErrors = 100;maxNumFrames = 1000;M = 2 ^ k;提单= 0(长度(SNRVec), 2);t =抽搐;gydF4y2Ba% parfor snrIdx = 1:长度(SNRVec)gydF4y2Ba为gydF4y2BasnrIdx = 1:长度(SNRVec)信噪比= SNRVec (snrIdx);disp (gydF4y2Ba“模拟信噪比= "gydF4y2Ba+信噪比)numBlockErrors = 0;numConvSymbolErrors = 0;frameCnt = 0;gydF4y2Ba而gydF4y2Ba(numBlockErrors < minNumErrors)gydF4y2Ba…gydF4y2Ba& & (frameCnt < maxNumFrames randi) d = ([0 m - 1] symbolsPerFrame 1);gydF4y2Ba%随机信息符号gydF4y2Ba% AE Tx运行gydF4y2Bax = helperAEWOFDMEncode (d, txNet);gydF4y2Ba%编码器gydF4y2Ba%编码OFDM TX运行gydF4y2Ba编码= repelem (d,圆(n / k));gydF4y2Ba%简单的重复代码gydF4y2BaxqamCoded = qammod(编码,M, UnitAveragePower = true);xConvCoded =√Nfft * ofdmmod(重塑(xqamCoded、圆(n / k)、[])”, Nfft CPLength);gydF4y2Ba%都通过相同的频道gydF4y2Bay = awgn (x,信噪比,signalPower);yConvCoded = awgn (xConvCoded、信噪比、signalPower);gydF4y2Ba%运行AE RxgydF4y2BadHat = helperAEWOFDMDecode (y, rxNet);gydF4y2Ba%译码器gydF4y2Ba%运行编码OFDM RxgydF4y2BaxqamHatCoded = ofdmdemod (yConvCoded Nfft CPLength);dConvHatCoded = qamdemod (xqamHatCoded ', M, UnitAveragePower = true);dConvDecoded =模式(dConvHatCoded, 1)”;gydF4y2Ba%计算和对比错误率gydF4y2BanumBlockErrors = numBlockErrors +总和(d ~ = dHat);numConvSymbolErrors = numConvSymbolErrors +总和(d ~ = dConvDecoded);frameCnt = frameCnt + 1;gydF4y2Ba结束gydF4y2Ba提单(snrIdx:) = (numBlockErrors numConvSymbolErrors]gydF4y2Ba…gydF4y2Ba/ (frameCnt * symbolsPerFrame);gydF4y2Ba结束gydF4y2Ba
模拟对信噪比= 0模拟信噪比= 2为信噪比= 4模拟模拟信噪比= 6模拟信噪比= 8gydF4y2Ba
等=秒(toc (t));et.Format =gydF4y2Ba“mm: ss.SSS”gydF4y2Ba;disp (gydF4y2Ba“仿真总时间:gydF4y2Ba+字符串(et))gydF4y2Ba
仿真总时间:01:03.374gydF4y2Ba

比较的结果与一个未编码的块长度正交相移编码系统gydF4y2Ba ngydF4y2Ba =gydF4y2Ba 6gydF4y2Ba 。对于这个gydF4y2Ba ngydF4y2Ba 编码增益值,autoencoder可以比一个简单的重复代码。此外,它提供了约5.5分贝增益比一个未编码的块长度6正交相移编码系统。gydF4y2Ba

图EbNoVec = convertSNR ([SNRVec 10],gydF4y2Ba“信噪比”gydF4y2Ba,gydF4y2Ba“ebno”gydF4y2Ba,BitsPerSymbol = k);semilogy (SNRVec,提单,gydF4y2Ba“o”gydF4y2Ba)举行gydF4y2Ba在gydF4y2Ba%计算未编码的块错误率gydF4y2BapskBLER = 1 - (1-berawgn (EbNoVec,gydF4y2Ba相移键控的gydF4y2Ba2 ^ k,gydF4y2Ba“nondiff”gydF4y2Ba))^ n;pskBLER semilogy ([SNRVec 10],gydF4y2Ba“x”gydF4y2Ba)举行gydF4y2Ba从gydF4y2Ba1 ylim([1]的军医)网格gydF4y2Ba在gydF4y2Ba包含(gydF4y2Ba“E_b /当(dB)”gydF4y2Ba)ylabel (gydF4y2Ba“提单”gydF4y2Ba)传说(sprintf (gydF4y2Ba“AE-OFDM (% d % d)”gydF4y2Ba,n, k), sprintf (gydF4y2Ba“Conv-OFDM (% d % d)”gydF4y2Ba,n, k), sprintf (gydF4y2Ba“QPSK (% d % d)”gydF4y2Ba,n, k))gydF4y2Ba

图包含一个坐标轴对象。坐标轴对象包含E indexOf b / N indexOf基线o基线空白(d b), ylabel提单包含3线类型的对象。这些对象代表AE-OFDM (2), Conv-OFDM(6 2),正交相移编码(6 2)。gydF4y2Ba

结论和进一步探索gydF4y2Ba

提单结果表明,通过插入专家知识的形式OFDM调制和解调的神经网络,一个OFDM-based autoencoder可以训练。通过允许多个通道使用每输入符号(gydF4y2Ba ngydF4y2Ba >gydF4y2Ba kgydF4y2Ba ),autoencoder可以获得编码增益比简单的重复代码。gydF4y2Ba

改变gydF4y2Ba ngydF4y2Ba ,gydF4y2Ba kgydF4y2Ba ,gydF4y2Ba NgydF4y2Ba fgydF4y2Ba fgydF4y2Ba tgydF4y2Ba ,gydF4y2Ba CgydF4y2Ba PgydF4y2Ba lgydF4y2Ba egydF4y2Ba ngydF4y2Ba ggydF4y2Ba tgydF4y2Ba hgydF4y2Ba ,不同autoencoders规范化培训。尝试不同的培训gydF4y2Ba 年代gydF4y2Ba NgydF4y2Ba RgydF4y2Ba 值优化训练性能。看到的帮助gydF4y2BahelperAEWTrainOFDMAutoencodergydF4y2Ba函数和gydF4y2BahelperAEWOFDMAutoencoderBLERgydF4y2Ba函数。gydF4y2Ba

获得的结果是使用以下模拟训练和提单的默认设置:gydF4y2Ba

trainParams。情节=gydF4y2Ba“没有”gydF4y2Ba;trainParams。Verbose = true;trainParams。米axEpochs = 10; trainParams.InitialLearnRate = 0.08; trainParams.LearnRateSchedule =“分段”gydF4y2Ba;trainParams。learnRateDropPeriod = 5; trainParams.LearnRateDropFactor = 0.1; trainParams.SequenceLength = Nfft; simParams.SNRVec = 0:2:12; simParams.MinNumErrors = 100; simParams.MaxNumFrames = 3000; simParams.NumSymbolsPerFrame = Nfft; simParams.SignalPower = 1;

改变这些参数训练不同autoencoders和测试他们的提单的性能。尝试不同的gydF4y2Ba ngydF4y2Ba ,gydF4y2Ba kgydF4y2Ba 归一化,gydF4y2Ba NgydF4y2Ba fgydF4y2Ba fgydF4y2Ba tgydF4y2Ba 和gydF4y2Ba 年代gydF4y2Ba NgydF4y2Ba RgydF4y2Ba 值。gydF4y2Ba

辅助函数列表gydF4y2Ba

引用gydF4y2Ba

[1]t·奥谢和j . Hoydis”介绍物理层深度学习,”在IEEE认知通信和网络、3卷,没有。4,第575 - 563页,2017年12月,doi: 10.1109 / TCCN.2017.2758370。gydF4y2Ba

[2]a . Felix s Cammerer s杜诺Hoydis和美国十边缘,“OFDM-Autoencoder端到端通信系统的学习,gydF4y2Ba2018年IEEE 19国际研讨会上信号处理无线通信的进步(SPAWC)gydF4y2Ba,2018年,页1 - 5,doi: 10.1109 / SPAWC.2018.8445920。gydF4y2Ba

另请参阅gydF4y2Ba

(通信工具箱)gydF4y2Ba|gydF4y2Ba(通信工具箱)gydF4y2Ba|gydF4y2Ba|gydF4y2Ba|gydF4y2Ba|gydF4y2Ba|gydF4y2Ba

相关的话题gydF4y2Ba