低密度奇偶校验码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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/721394.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

神经网络推理优化方法总结

&#x1f380;个人主页&#xff1a; https://zhangxiaoshu.blog.csdn.net &#x1f4e2;欢迎大家&#xff1a;关注&#x1f50d;点赞&#x1f44d;评论&#x1f4dd;收藏⭐️&#xff0c;如有错误敬请指正! &#x1f495;未来很长&#xff0c;值得我们全力奔赴更美好的生活&…

Jenkins 的安装(详细教程)

文章目录 一、简介二、安装前准备三、windows 安装与启动1. 方式一2. 方式二3. 方式三 四、创建管理员用户五、常用设置1. 配置镜像地址2. 更改工作目录3. 开启可注册用户4. 全局变量配置 一、简介 官网&#xff1a;https://www.jenkins.io 中文文档&#xff1a;https://www.j…

【MGR】MySQL Group Replication快速开始

目录 17.2 Getting Started 17.2.1 Deploying Group Replication in Single-Primary Mode 17.2.1.1 Deploying Instances for Group Replication 17.2.1.2 Configuring an Instance for Group Replication Storage Engines Replication Framework Group Replication Sett…

分享一个AI工程师从入门到精通学习路径

学习AI工程师的路径可以分为以下几个阶段&#xff1a; 学习基础知识&#xff1a;首先&#xff0c;你需要掌握数学、统计学和线性代数的基本概念。这些基础知识是理解AI算法和模型的基础。 学习编程&#xff1a;你需要掌握至少一门编程语言&#xff0c;如Python、Java或C。这些…

Java基础概念 1-6注释关键字字面量变量-基本用法变量-使用方式和注意事项变量练习-计算公交车的人数

Java基础概念 1-注释 单行注释 // 多行注释 /* */ 文档注释 /** */ --暂时不用 例: public class HelloWorld{ //main方法,表示程序的主入口.public static void main (String[] args){/*输出语句(打印语句)会把小括号内的内容进行输出打印.*/System.out.…

如何理解MySQL的计算层做的很差,但innodb则非常优秀

在MySQL中&#xff0c;计算层通常指的是查询优化器和执行引擎&#xff0c;负责解析查询语句、生成执行计划&#xff0c;并执行实际的查询操作。而InnoDB则是MySQL的存储引擎之一&#xff0c;负责管理数据的存储和检索。 理解MySQL计算层较差但InnoDB优秀的情况可能涉及到以下几…

Ethersacn的交易数据是什么样的(2)

分析 Raw Transanction RLP&#xff08;Recursive Length Prefix&#xff09;是一种以太坊中用于序列化数据的编码方式。它被用于将各种数据结构转换为二进制格式&#xff0c;以便在以太坊中传输和存储。RLP 是一种递归的编码方式&#xff0c;允许对复杂的数据结构进行编码。所…

鸿蒙实战应用开发:【拨打电话】功能

概述 本示例通过输入电话&#xff0c;进行电话拨打&#xff0c;及电话相关信息的显示。 样例展示 涉及OpenHarmony技术特性 网络通信 基础信息 拨打电话 介绍 本示例使用call相关接口实现了拨打电话并显示电话相关信息的功能 效果预览 使用说明 1.输入电话号码后&#…

EIP-1559

EIP EIP是以太坊改进提案&#xff08;Ethereum Improvement Proposal&#xff09;的缩写。它是一种标准化的提案制度&#xff0c;用于描述和讨论对以太坊区块链网络的改进和升级。EIP的目的是提供一个开放的、透明的过程&#xff0c;让社区成员、开发者和其他利益相关者能够共同…

paypal绑卡教程

绑定信用卡到PayPal账户的流程可能会有轻微变化&#xff0c;具体步骤可能根据您所在的地区和PayPal的最新政策而有所不同。以下是一般的流程&#xff1a; 登录PayPal账户&#xff1a; 打开PayPal的官方网站或应用程序&#xff0c;使用您的账户登录凭据登录。 导航至钱包&#…

简单的进制数的转换

简单的进制数的转换 二进制转十进制 1000001 0 ( 2 ) ⇒ 13 0 ( 10 ) 10000010_{(2)}\rArr130_{(10)} 10000010(2)​⇒130(10)​ 二进制转八进制 010 ‾ 000 ‾ 010 ‾ ( 2 ) ⇒ 20 2 ( 8 ) \underline{010}\underline{000}\underline{010}_{(2)}\rArr202_{(8)} 010​000​010…

Kafka面经

1.Kafka如何保证消息不丢失 生产者&#xff1a; 1.Producer 默认是异步发送消息&#xff0c;这种情况下要确保消息发送成功&#xff0c;有两个方法 a. 把异步发送改成同步发送&#xff0c;这样 producer 就能实时知道消息发送的结果。 b. 添加异步回调函数来监听消息发送的结…

redis02 安装

官网下载 传送门https://redis.io/download/#redis-downloads 安装Redis mac m1安装 下载你需要版本的软件包放到指定的目录下进行解压 cd 到解压好的redis目录 运行下面的命令进行编译测试 sudo make test 中途可能会提示你安装make工具&#xff0c;按提示安装即可&…

数据结构:广义表

定义&#xff1a;有序数列  表示&#xff27;&#xff2c;&#xff1d;&#xff08;&#xff41;&#xff08;&#xff42;&#xff0c;&#xff43;&#xff09;&#xff09;长度 &#xff12;&#xff0c; 表头&#xff1a;&#xff41; 表尾&#xff1a;&#xff08;&am…

大数据驱动决策:电商平台如何通过API挖掘消费者洞察

电商平台可以通过API收集和分析大量的商品性能数据&#xff0c;以此来洞察市场趋势、优化库存、提升顾客满意度&#xff0c;并最终增加销售额。以下是电商平台如何利用API挖掘消费者洞察的一些关键步骤&#xff1a; 确定分析目标与规划数据收集&#xff1a;首先&#xff0c;电…

gofly接口自定义搜索条件

Go快速开发框架自定义数据库搜索条件&#xff0c;当你前端传多个搜索条件时候&#xff0c;需要接口对条件做判断&#xff0c;拼接查找的sql语句实现查询。下面我们对自定义搜索条件使用说明。 1.创建存储条件的数组 whereMap : gmap.New() 2.根据接口传参组装sql查询条件 //…

GPT的历史

GPT&#xff08;Generative Pre-trained Transformer&#xff09;是一种基于Transformer架构的预训练语言模型。它由OpenAI开发&#xff0c;并于2018年首次发布。GPT的目标是通过大规模的无监督学习来学习语言的统计规律和语义表示&#xff0c;从而能够生成自然流畅的文本。 G…

JWT身份验证

在实际项目中一般会使用jwt鉴权方式。 JWT知识点 jwt&#xff0c;全称json web token &#xff0c;JSON Web令牌是一种开放的行业标准RFC 7519方法&#xff0c;用于在两方安全地表示声明。具体网上有许多文章介绍&#xff0c;这里做简单的使用。 1.数据结构 JSON Web Token…

uniapp中导入css和scss的区别

在项目中编写了一个基础的公共样式 common.scss文件 想要将其 导入到app.vue文件中 第一次使用的是import url(static/common.scss); 编译直接报错&#xff0c;无法识别这个文件 原因是 使用import url()是CSS中用于导入外部样式表的语法&#xff0c;但它不适用于导入SCS…

Unity 动态加载音频和音效

想要加载音效和音频需要两个组件&#xff1a; 听&#xff1a; 播&#xff1a; 一收一发 在层级中&#xff0c;右键创建 音频源 &#xff0c;放入物体的子物体中。 播放 方式一 拖动需要播放的音频文件到&#xff0c;音频源组件中。 using System.Collections; using Syst…