目录
1.算法仿真效果
2.算法涉及理论知识概要
1.自编码器(AutoEncoder)
2.自编码器训练
3.自编码器+LDPC编译码整体算法流程
3.MATLAB核心程序
4.完整算法代码文件获得
1.算法仿真效果
matlab2022a仿真结果如下(完整代码运行后无水印):
仿真操作步骤可参考程序配套的操作视频。
2.算法涉及理论知识概要
1.自编码器(AutoEncoder)
自编码器是一种无监督学习的神经网络,其主要目的是学习输入数据的低维表示。它由编码器和解码器两部分组成。编码器将输入数据 x 映射到低维的潜在空间 z,解码器则将潜在空间的表示 z 重构为输出数据 x^。自编码器的目标是使重构误差最小化,即最小化 ∣∣x−x^∣∣2。
2.自编码器训练
初始化自编码器参数:随机初始化自编码器编码器和解码器的参数,如权重和偏置。
前向传播:将输入信息位向量 x 输入到自编码器编码器中,得到潜在表示 z;再将 z 输入到自编码器译码器中,得到重构输出 x^。
计算重构误差:计算重构误差 L=∣∣x−x^∣∣2。
反向传播:根据重构误差,使用反向传播算法计算梯度,并更新自编码器的参数,以最小化重构误差。
重复步骤 2 - 4:直到重构误差收敛或达到最大训练次数。
3.自编码器+LDPC编译码整体算法流程
初始化 LDPC 译码器参数:对于 LDPC 译码器,初始化迭代次数等参数。
前向传播:将信息位向量 x 输入到自编码器编码器中,得到潜在表示 z;将 z 输入到 LDPC 编码器中,得到码字 c;将 c 通过信道传输,得到受干扰码字 y;将 y 输入到 LDPC 译码器中,得到潜在表示的估计值 z^;将 z^ 输入到自编码器译码器中,得到原始信息位的估计值 x^。
计算系统误差:计算系统误差,如误比特率(BER)或误块率(BLER)。
反向传播:根据系统误差,同时更新自编码器和 LDPC 译码器的参数,以最小化系统误差。
重复步骤 2 - 4:直到系统误差收敛或达到最大训练次数。
3.MATLAB核心程序
.................................................................
%编码过程
AE_Tnet = func_AE_encode(trainedNet);
%解码过程
AE_Rnet = func_AE_decode(trainedNet);%误码率输出
nums = Ms;
BLER = zeros(size(SNRs));
for ij = 1:length(SNRs)Nerror = 0;cnts = 0;sigma = sqrt(1./(10^(SNRs(ij)/10))); while (Nerror < Times(ij))[ij,Nerror,cnts] temps = randi([0 1],1,nums); %LDPCldpc_code = mod(temps*G,2);%转回十进制temps2 = func_bin2dec(ldpc_code);%编码din_AE = func_AEin(temps2',AE_Tnet,M);%信道din_AE_channel = awgn(din_AE,SNRs(ij),'measured');%解码dout_AE = func_AEout(din_AE_channel,AE_Rnet,n);%转换为二进制dout_AE2 = func_dec2bin(dout_AE);%LDPCz_hat = func_Dec(2*dout_AE2-1,sigma,H,max_iter);x_hat = z_hat(size(G,2)+1-size(G,1):size(G,2));Nerror = Nerror + sum(temps' ~= x_hat);cnts = cnts + 1;endBLER(ij) = Nerror / (cnts*nums);
endfigure
semilogy(SNRs,BLER,'b-o')
grid on
xlabel('SNR(dB)')
ylabel('ber')save R2.mat SNRs BLER
0X_082m
4.完整算法代码文件获得
V