目录
[3.1 系统模型](#3.1 系统模型)
[3.2 基于CNN增强的译码](#3.2 基于CNN增强的译码)
[3.2.1 带权重的消息初始化](#3.2.1 带权重的消息初始化)
[3.2.2 带可训练权重的校验节点更新](#3.2.2 带可训练权重的校验节点更新)
[3.2.3 CNN特征提取模块](#3.2.3 CNN特征提取模块)
[3.2.4 带可训练权重的变量节点更新](#3.2.4 带可训练权重的变量节点更新)
[3.2.5 后验LLR与输出](#3.2.5 后验LLR与输出)
[3.3 损失函数与训练](#3.3 损失函数与训练)
1.引言
基于CNN的LDPC译码核心思想是:将LDPC码的Tanner图上的迭代消息传递过程展开为一个类似深度神经网络的多层结构,然后在每一层的边上引入可训练的权重参数。CNN模块被嵌入到迭代译码的各个阶段,用于对传递的消息进行非线性变换和特征提取,替代或增强传统译码中的固定数学运算。通过端到端的训练,网络能够自适应地学习最优的消息更新策略。
2.算法测试效果


3.算法涉及理论知识概要
3.1 系统模型
考虑一个(𝑁,𝐾)的LDPC码,其中𝑁为码长,𝐾为信息位长度,校验矩阵为𝐻,大小为𝑀×𝑁,其中𝑀=𝑁−𝐾。发送端将信息比特𝑢编码为码字𝑐∈{0,1}𝑁,经过BPSK调制映射为𝑥∈{+1,−1}𝑁,其中映射规则为𝑥𝑖=1−2𝑐𝑖。信号经过加性高斯白噪声(AWGN)信道后,接收信号为:

3.2 基于CNN增强的译码
基于CNN的译码算法将上述迭代过程展开为𝑇层的深度网络结构,并在关键位置嵌入CNN模块。具体而言,每次迭代被视为网络的一层,层与层之间的消息传递由可训练参数控制。
3.2.1 带权重的消息初始化
对信道LLR值通过一维卷积层进行特征变换:

其中𝑊0为卷积核权重,∗表示卷积运算,𝑏0为偏置向量,ReLU(𝑥)=max(0,𝑥)为激活函数。该步骤让网络学习对信道信息进行初步的降噪和特征增强。
3.2.2 带可训练权重的校验节点更新

权重通过训练学习得到,它能够自适应地调整不同边上消息的可靠度,对不可靠的消息进行抑制,对可靠的消息进行增强。
3.2.3 CNN特征提取模块
将当前所有边上的校验节点到变量节点的消息重新组织为二维矩阵形式𝐹(𝑡) ,送入CNN模块进行非线性特征提取:

其中输入𝑍0=𝐹(𝑡),𝑊𝑙(𝑡)和𝑏𝑙(𝑡)分别为第𝑡次迭代中第𝑙层卷积的权重和偏置。最后一层卷积不使用激活函数,以保持消息的正负符号信息。CNN模块通过局部感受野捕获消息之间的空间相关性,利用相邻边消息的联合信息来提升单条边消息的准确性。
3.2.4 带可训练权重的变量节点更新

3.2.5 后验LLR与输出
在最后一次迭代𝑇之后,计算最终的后验LLR:

3.3 损失函数与训练
网络的训练采用多任务损失函数,结合每一层迭代输出的交叉熵:

其中𝜆𝑡为各层的损失权重,通常后面层的权重更大,𝑝𝑖(𝑡)为第𝑡次迭代后第𝑖个比特为1的概率估计。使用Adam优化器进行梯度下降训练,学习率通常设为10^−3并逐步衰减。训练数据通过随机生成码字并经过AWGN信道仿真获得。
4.MATLAB核心程序
for e = edges_to_update
% 更新alpha
alpha(e, t_to_update) = alpha(e, t_to_update) + delta;
loss_plus = compute_loss_fast(Lch, alpha, gamma, beta, w_cnn, b_cnn, ...
row_idx, col_idx, edge_map_cn, edge_map_vn, N, M, num_edges, max_iter, batch_size);
alpha(e, t_to_update) = alpha(e, t_to_update) - 2*delta;
loss_minus = compute_loss_fast(Lch, alpha, gamma, beta, w_cnn, b_cnn, ...
row_idx, col_idx, edge_map_cn, edge_map_vn, N, M, num_edges, max_iter, batch_size);
alpha(e, t_to_update) = alpha(e, t_to_update) + delta;
grad = (loss_plus - loss_minus) / (2*delta);
alpha(e, t_to_update) = alpha(e, t_to_update) - lr * grad;
% 更新w_cnn
w_cnn(e, t_to_update) = w_cnn(e, t_to_update) + delta;
loss_plus = compute_loss_fast(Lch, alpha, gamma, beta, w_cnn, b_cnn, ...
row_idx, col_idx, edge_map_cn, edge_map_vn, N, M, num_edges, max_iter, batch_size);
w_cnn(e, t_to_update) = w_cnn(e, t_to_update) - 2*delta;
loss_minus = compute_loss_fast(Lch, alpha, gamma, beta, w_cnn, b_cnn, ...
row_idx, col_idx, edge_map_cn, edge_map_vn, N, M, num_edges, max_iter, batch_size);
w_cnn(e, t_to_update) = w_cnn(e, t_to_update) + delta;
grad = (loss_plus - loss_minus) / (2*delta);
w_cnn(e, t_to_update) = w_cnn(e, t_to_update) - lr * grad;
end
14_059m
5.完整算法代码文件获得
完整程序见博客首页左侧或者打开本文底部GZH名片
(V关注后回复码:X129)
V