1.完整项目描述和程序获取
>面包多安全交易平台:https://mbd.pub/o/bread/ZZiclphy
>如果链接失效,可以直接打开本站店铺搜索相关店铺:
>如果链接失效,程序调试报错或者项目合作也可以加微信或者QQ联系。
2.部分仿真图预览
3.算法概述
为了实现码率兼容,引入打孔操作。打孔操作是指在码字中删除一些校验位,使得总码率在一定范围内可调。具体实现时,可以按照一定规则随机删除一些校验位,或者根据码率要求计算需要删除的校验位数。打孔操作后,可以得到一个新的校验矩阵H',其中每一行仍是一个奇偶校验位,但每一列可能不再是完整的码字。
4.部分源码
..................................................................
for i = 1:Iters
% 更新校验节点消息
for m = 1:M
% 获取与当前校验节点相连的变量节点索引
tmp2 = H_row(m,2:(H_row(m,1)+1));
% 移除超出范围的索引
tmp2(tmp2>N) = [];
for n = tmp2
% 再次获取与当前校验节点相连的变量节点索引
array_n1 = H_row(m,2:(H_row(m,1)+1));
% 移除当前节点自身
array_n1(array_n1==n) = [];
% 移除超出范围的索引
array_n1(array_n1>N) = [];
% 更新校验节点消息
Message_check(m,n) = min(abs(Message_variable(m,array_n1)))*prod(sign(Message_variable(m,array_n1)));
end
end
% 更新变量节点消息
for n = 1:N
% 获取与当前变量节点相连的校验节点索引
tmp1 = H_col(n,2:(H_col(n,1)+1));
% 移除超出范围的索引
tmp1(tmp1>M) = [];
for m = tmp1
% 再次获取与当前变量节点相连的校验节点索引
array_m1 = H_col(n,2:(H_col(n,1)+1));
% 移除当前节点自身
array_m1(array_m1==m) = [];
% 移除超出范围的索引
array_m1(array_m1>M) = [];
% 更新变量节点消息
Message_variable(m,n) = vi(n) + sum(Message_check(array_m1,n));
end
end
% 进行硬判决,生成解码序列w
for n =1:N
% 获取与当前变量节点相连的校验节点索引
tmp1 = H_col(n,2:(H_col(n,1)+1));
% 移除超出范围的索引
tmp1(tmp1>M) = [];
% 判断硬判决结果
if vi(n)+sum(Message_check(tmp1,n))>=0
w(n) = 0;
else
w(n) = 1;
end
end
%校验判决校验判决,检查是否满足所有校验方程,若满足则提前结束迭代
if sum(mod(w*H(1:M,1:N)',2))==0% 计算校验和,若为零则说明满足所有校验方程
break;
end
end
0X_035
---