当前位置: 首页 > news >正文

低密度奇偶校验码LDPC(七)——SPA和积译码算法的简化

 往期博文

低密度奇偶校验码LDPC(一)——概述_什么是gallager构造-CSDN博客

低密度奇偶校验码LDPC(二)——LDPC编码方法-CSDN博客

低密度奇偶校验码LDPC(三)——QC-LDPC码概述-CSDN博客

低密度奇偶校验码LDPC(四)——双对角线结构的QC-LDPC编码-CSDN博客

低密度奇偶校验码LDPC(五)——译码算法概述-CSDN博客

低密度奇偶校验码LDPC(六)——SPA和积译码算法-CSDN博客

QC-LDPC的FPGA实现

基于QC-LDPC编码的循环移位网络的FPGA实现_5g ldpc编码 桶形移位寄存器-CSDN博客

一、SPA译码算法的实际应用

查找表与拟合

 盒加SPA译码器

二、SPA译码算法的简化算法

最小和算法(MSA)

 归一化最小和算法(Normalized MSA, NMSA)

偏移最小和算法(Offset MSA, OMSA) 

 常见软判决译码算法对比

若对译码算法感兴趣,请参见文献[4] .

三、NMSA算法的Matlab实现

function [x_hat, iter_this_time] = Layered_NMSA_BP_decoder(llr, H_row_one_absolute_index, H_comlumn_one_relative_index, N, M, vn_degree, cn_degree, max_iter,alfa)
VN_array = zeros(max(vn_degree), N);
CN_tanh_tmp = zeros(max(cn_degree), 1);%CN temporary memory.
iter_this_time = max_iter;
for t = 1 : max_iterfor c = 1 : Mproduct = 1;for c_neighbor = 1 : cn_degree(c)%read data from VNs, and then store in CNs memory.Lji = sum(VN_array(:, H_row_one_absolute_index(c, c_neighbor))) + llr(H_row_one_absolute_index(c, c_neighbor)) - VN_array(H_comlumn_one_relative_index(c, c_neighbor), H_row_one_absolute_index(c, c_neighbor));%VN update. However, this simple MATLAB sentence consumes a lot of time.%CN_tanh_tmp(c_neighbor) = 1 - 2/(1 + exp(Lji));%Exact decoding. Equivalent to tanh(x/2), usually faster.if Lji==0Lji=1e-15;endCN_tanh_tmp(c_neighbor) =Lji;product = product * sign(Lji);%Avoid repeated calculations.endfor c_neighbor = 1 : cn_degree(c)Lij = product/sign(CN_tanh_tmp(c_neighbor));%Extract Extrinsic information, i.e., divide itself.minsort=sort(abs(CN_tanh_tmp(1:cn_degree(c))));if abs(CN_tanh_tmp(c_neighbor))==minsort(1)VN_array(H_comlumn_one_relative_index(c, c_neighbor), H_row_one_absolute_index(c, c_neighbor)) = alfa*Lij*max(minsort(2),1e-15);elseVN_array(H_comlumn_one_relative_index(c, c_neighbor), H_row_one_absolute_index(c, c_neighbor)) = alfa*Lij*max(minsort(1),1e-15);endendendx_hat = (sum(VN_array)' + llr) < 0;%Belief propagation Decision.parity_check = zeros(M, 1);for m = 1 : Mfor k = 1 : 1 : cn_degree(m)parity_check(m) = parity_check(m) + x_hat(H_row_one_absolute_index(m, k));endendif ~sum(mod(parity_check, 2))%early stop, to see whether Hx = 0.iter_this_time = t;break;end
end

 注:以上代码并不是最优的,最优算法参见上一篇博文。

四、写在最后

        写者学习QC-LDPC硬件实现的总结笔记。主要参考了白老师的书籍,自己在其中做了一些理解和总结,如有错误,请多指教。如果有相关问题,欢迎与我交流。

参考文献

[1] 白宝明 孙韶辉 王加庆. 5G 移动通信中的信道编码[M]. 北京: 电子工业出版社, 2018.

[2] William E. Ryan, Shu Lin. Channel Codes - Classical and Modern[M]. Cambridge University Press, 2009.

[3] Gallager R. Low-density parity-check codes[J]. IRE Transactions on information theory, 1962, 8(1): 21-28.

[4] Roberts M K, Anguraj P. A Comparative Review of Recent Advances in Decoding Algorithms for Low‑Density Parity‑Check (LDPC) Codes and Their Applications. 2021

相关文章:

  • week06day01 mysql
  • Spring: spring中SSE的实现方式有哪些
  • 学习java第一天(下载并配置环境+写第一个java程序)
  • (Pytorch框架)神经网络输出维度调试,做出我们自己的网络来!!(详细教程~)
  • Vue2:用node+express写一个轻量级的后端服务
  • 大唐杯学习笔记:Day5
  • Swing程序设计(11)动作事件监听器,焦点事件监听器
  • Docker Compose实战指南:让容器管理变得简单而强大
  • 集成2.5G/5G/10G高速率网络变压器的RJ45网口连接器产品特点介绍
  • 从零开始在kitti数据集上训练yolov5
  • AWS虚拟机迁移到Azure上的实战操作
  • Doris实战——银联商务实时数仓构建
  • HTML简介:想成为前端开发者?先从掌握HTML开始!
  • Linux进程详细介绍
  • C# 属性设置为“get; private set;”好处
  • C++入门教程(10):for 语句
  • ES6 ...操作符
  • js
  • Js基础知识(四) - js运行原理与机制
  • mysql常用命令汇总
  • MYSQL如何对数据进行自动化升级--以如果某数据表存在并且某字段不存在时则执行更新操作为例...
  • Python语法速览与机器学习开发环境搭建
  • ViewService——一种保证客户端与服务端同步的方法
  • 分享几个不错的工具
  • 服务器从安装到部署全过程(二)
  • 给初学者:JavaScript 中数组操作注意点
  • 坑!为什么View.startAnimation不起作用?
  • 力扣(LeetCode)357
  • 聊聊redis的数据结构的应用
  • 免费小说阅读小程序
  • 你真的知道 == 和 equals 的区别吗?
  • 区块链分支循环
  • 使用权重正则化较少模型过拟合
  • 树莓派 - 使用须知
  • 我从编程教室毕业
  • Hibernate主键生成策略及选择
  • raise 与 raise ... from 的区别
  • ​LeetCode解法汇总307. 区域和检索 - 数组可修改
  • ​Linux·i2c驱动架构​
  • #Linux(make工具和makefile文件以及makefile语法)
  • #NOIP 2014# day.1 T3 飞扬的小鸟 bird
  • #QT(智能家居界面-界面切换)
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • (51单片机)第五章-A/D和D/A工作原理-A/D
  • (LeetCode) T14. Longest Common Prefix
  • (附源码)springboot课程在线考试系统 毕业设计 655127
  • (企业 / 公司项目)前端使用pingyin-pro将汉字转成拼音
  • (强烈推荐)移动端音视频从零到上手(上)
  • (亲测有效)解决windows11无法使用1500000波特率的问题
  • (十三)Maven插件解析运行机制
  • (转载)(官方)UE4--图像编程----着色器开发
  • *++p:p先自+,然后*p,最终为3 ++*p:先*p,即arr[0]=1,然后再++,最终为2 *p++:值为arr[0],即1,该语句执行完毕后,p指向arr[1]
  • .L0CK3D来袭:如何保护您的数据免受致命攻击
  • .net mvc 获取url中controller和action
  • .NET MVC 验证码