马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
目录
1.算法仿真效果
2.算法涉及理论知识概要
3.MATLAB核心程序
4.完整算法代码文件得到
1.算法仿真效果
matlab2022a仿真结果如下(完整代码运行后无水印):
仿真操作步骤可参考程序配套的操作视频。
2.算法涉及理论知识概要
自编码器是一种特别的神经网络结构,主要由编码器(Encoder)息争码器(Decoder)两部分组成。
自编码器的目标是最小化重构毛病,常用的重构毛病函数是均方毛病(MSE),定义为:
自编码器通常接纳基于梯度下降的算法进行训练,如随机梯度下降(SGD)或其变种 Adagrad、Adadelta、Adam 等。
基于 AutoEncode 的端到端无线通讯体系的一个重要特点是可以进行端到端的训练。整个体系从发射端的原始信源数据到接收端的信源数据规复被视为一个整体,通过最小化接收端规复的信源数据 与原始信源数据 之间的毛病来训练体系的参数(包括发射端自编码器的参数 、接收端自编码器的参数 以及信道编码、均衡等模块的参数,假如它们是可训练的)。在训练过程中,通过反向流传算法计算毛病函数关于各个参数的梯度,并使用优化算法(如 Adam 等)更新参数,以逐步减小毛病,提高体系的性能。
基于 AutoEncode 自编码器的端到端无线通讯体系通过将自编码器技术与无线通讯的各个环节深度融合,利用端到端训练和多种优化策略,可以大概在复杂的无线通讯环境中实现高效、可靠的通讯,为将来无线通讯技术的发展提供了一种创新的办理方案。
3.MATLAB核心程序
- .............................................................................
- %自编码运行参数
- opts = trainingOptions('adam', ...
- 'InitialLearnRate',0.0015, ...
- 'MaxEpochs',epochs, ...
- 'MiniBatchSize',100*2^k, ...
- 'Shuffle','every-epoch', ...
- 'ValidationData',{dat_valid,Lab_valid}, ...
- 'LearnRateSchedule', 'piecewise', ...
- 'LearnRateDropPeriod', 10, ...
- 'LearnRateDropFactor', 0.08, ...
- 'Plots', 'training-progress', ...
- 'Verbose',false);
- %训练
- [trainedNet,info] = trainNetwork(dat_train,Lab_train,AE_layers,opts);
- figure
- subplot(211);
- validAcc = info.ValidationAccuracy;
- idx = find(~isnan(validAcc));
- semilogy(idx, validAcc(idx), 'b-o')
- ylabel('Accuracy')
- grid on
- xlabel('Iteration')
- subplot(212);
- validLoss = info.ValidationLoss;
- idx = find(~isnan(validLoss));
- semilogy(idx, validLoss(idx), 'b-o')
- ylabel('Loss')
- grid on
- %编码过程
- AE_Tnet = func_AE_encode(trainedNet);
- %解码过程
- AE_Rnet = func_AE_decode(trainedNet);
- %误码率输出
- nums = 100;
- BLER = zeros(size(SNRs));
- for ij = 1:length(SNRs)
-
- Nerror = 0;
- cnts = 0;
- while (Nerror < 200)
- [ij,Nerror,cnts]
- temps = randi([0 M-1],nums,1);
- %编码
- din_AE = func_AEin(temps,AE_Tnet,M);
- %信道
- din_AE_channel = awgn(din_AE,SNRs(ij),'measured');
- %解码
- dout_AE = func_AEout(din_AE_channel,AE_Rnet,n);
- Nerror = Nerror + sum(temps ~= dout_AE);
- cnts = cnts + 1;
- end
- BLER(ij) = Nerror / (cnts*nums);
- end
- figure
- semilogy(SNRs,BLER,'b-o')
- grid on
- xlabel('SNR(dB)')
- ylabel('ber')
-
- if epochs==1
- save R2_1.mat SNRs BLER
- end
- if epochs==2
- save R2_2.mat SNRs BLER
- end
- if epochs==3
- save R2_3.mat SNRs BLER
- end
- if epochs==4
- save R2_4.mat SNRs BLER
- end
- if epochs==5
- save R2_5.mat SNRs BLER
- end
- 0X_074m
复制代码 4.完整算法代码文件得到
V
|