1.LDPC概述

低密度校验码(LDPC码)是一种前向纠错码,LDPC码最早在20世纪60年代由Gallager在他的博士论文中提出,但限于当时的技术条件,缺乏可行的译码算法,此后的35年间基本上被人们忽略,其间由Tanner在1981年推广了LDPC码并给出了LDPC码的图表示,即后来所称的Tanner图。1993年Berrou等人发现了Turbo码,在此基础上,1995年前后MacKay和Neal等人对LDPC码重新进行了研究,提出了可行的译码算法,从而进一步发现了LDPC码所具有的良好性能,迅速引起强烈反响和极大关注。经过十几年来的研究和发展,研究人员在各方面都取得了突破性的进展,LDPC码的相关技术也日趋成熟,甚至已经开始有了商业化的应用成果,并进入了无线通信等相关领域的标准。

LDPC码是一种分组码,其校验矩阵只含有很少量非零元素。正是校验矩阵的这种稀疏性,保证了译码复杂度和最小码距都只随码长呈现线性增加。除了校验矩阵是稀疏矩阵外,码本身与任何其它的分组码并无二致。其实如果现有的分组码可以被稀疏矩阵所表达,那么用于码的迭代译码算法也可以成功的移植到它身上。然而,一般来说,为现有的分组码找到一个稀疏矩阵并不实际。不同的是,码的设计是以构造一个校验矩阵开始的,然后才通过它确定一个生成矩阵进行后续编码。

译码方法是LDPC码与经典的分组码之间的最大区别。经典的分组码一般是用ML类的译码算法进行译码的,所以它们一般码长较小,并通过代数设计以减低译码工作的复杂度。但是LDPC码码长较长,并通过其校验矩阵H的图像表达而进行迭代译码,所以它的设计以校验矩阵的特性为核心考虑之一。

总结一下:

LDPC编码从本质上是一种线性分组码,与经典的线性分组码相比的不同之处在于:

(1)LDPC通过构造校验矩阵H实现

(2)LDPC采用迭代译码算法

(3)LDPC码没有固定的结构

LDPC校验矩阵需满足如下要求:

(1)稀疏性:即校验矩阵中含有极少数量的1

(2)行列约束(R-C):任意两行或两列同为非零元素的元素个数不超过1

2.LDPC校验矩阵的图形表示——Tanner图

Tanner图是一种二部图,其中的节点可分为两部分

(1)校验节点(约束节点)——CN

(2)变量节点(比特节点)——VN

当校验矩阵中的元素不为0时第i个校验节点与第j个比特节点相连接

每个校验节点与一个校验方程相对应

每个变量节点与一个编码比特相对应

由校验矩阵生成对应Tanner图举例如下:

3.非规则LDPC校验矩阵的引入——度分布多项式

非规则LDPC校验矩阵:列数与列重的比值不等于行数与行重的比值

由于非规则LDPC校验矩阵的上述性质,为衡量其对应Tanner图的各对应节点度的分布情况(若为规则码,各节点度满足均匀分布)引入度分布多项式。从边的角度来说:

4. 5G-NR中LDPC编码方法

(1)BG选择

根据TBS大小(记作A)及码率(记作R)确定LDPC基本图(BaseGraph,BG)选择和TB-CRC的长度。BG1适用于长码块高码率。BG2适用于短码块低码率。细节参照协议TS 38.212-7.2.1。

(2)LDPC校验矩阵获取

5. LDPC译码

LDPC独特的消息传递译码算法是其区别于一般的线性分组码的主要方面,也正是这样的译码方法,使得在即使码长很长的情况下,其译码算法的复杂度仍在可控的范围内。而且,码长越长,其译码算法的性能越好。由此,为讲清楚消息传递译码算法,首先就需要知道其传递的“消息”究竟是什么。

1)外信息传递

为了讲清外信息传递的概念,首先思考这样的问题:

在上图中所示的士兵排列网络中,每个士兵只能与其相邻的士兵互通消息。那么通过怎样的消息传递方式才能使所有士兵得知士兵的总人数?

我们很容易想到通过“报数”的方法解决,当士兵排成一排时,从士兵队列的两端同时报数,每个人将从两个方向得到的士兵数加1传到另一端。如此一来,每个士兵知道了它的两端各有多少人,也就知道了士兵的总数。

其实上图中已经使用了“外信息”的思想。因为对于每个士兵而言,其最终得到的士兵数量信息是“6”,而他向其他士兵传递消息时,传递的数值为其已知的总信息减去目标士兵向他传递的信息。由此,每个士兵相当于向其相邻的士兵传递了“外信息”。

当士兵排列的拓扑发生变化时,该方法同样适用,如下图:

在上图中,每个士兵得到的最终士兵数量信息为“8”,而任意一个士兵向其他士兵传递消息时,其数值相当于“外信息”。

但是,当网络中有“环“存在时,该消息传递方法会出现问题,如下图所示:

可以看出,当消息在右端的环中传播时,其数值会无限地增长下去,造成消息传递的错误,这也是LDPC校验矩阵设计时,尽量避免产生“环“的原因

总结起来,通过外信息传递的方法,可以使一个分布式网络中的每个节点得知整个网络中的一些信息。反过来讲,当消息传递完成时,等效于整个网络将它的信息传递给了每个节点。

2)外信息传递译码器

若将上述问题中的每个士兵换成一个个级联的译码器,将各士兵间传递的“士兵数量”消息改变为各变量节点的“LLR信息”,那么这就是消息传递译码的大体结构。下图所示为每两个级联的译码器间传递消息的示意图:

3)LDPCSPA译码器

LDPC的SPA算法是一种典型的以外信息传递为核心的译码算法

LDPC编码中,由于校验矩阵与tanner图对应关系的引入,各校验节点与变量节点可以看作级联的译码器,其中每个变量节点可以看作一个REP(重复码)的译码器(因为多个校验节点为一个变量节点提供信息),其示意图如下所示:

而对于每个校验节点,则相当于一个SPC(单奇偶校验码)码译码器,其示意图如下图所示:

总结:在SPA算法中,所有VN对其输入进行处理,并将外信息传递给它们相邻的校验节点,然后校验节点对其输入进行处理,并将外信息传递给与它们相邻的变量节点;从变量节点开始,重复这个过程,直到达到最大迭代次数或者满足某个准则进行及计算判决。

在SPA译码器的推导中,内在最优准则是基于符号的最大后验概率(MAP)准则,当图上的环较大时,估计非常精确,可达到近似最优(MAP)性能。另外,SPA的演进基于独立性假设:每个节点从它的相邻节点接收到的LLR都是独立的。显然,当迭代次数超过Tanner图中围长的一半时,这种独立性假设不成立。

5G NR LDPC编译码汇总相关推荐

  1. 通信算法之四十:5G NR LDPC编码译码性能仿真

    1.码率1/5,增益14dB 2.码率1/12,增益17.8dB [ 相应MATLAB仿真代码.咨询qq:1279682290 ]

  2. 5G NR LDPC码(2)—— 5G NR中的LDPC码标准化内容

    LDPC码由于可以达到更高的译码吞吐量和更低的译码时延,可以更好适应高数据速率业务的传输,从而替代LTE的Turbo码,被采纳为5G NR数据的编码方案. 1. 基图 (BG, Base Graph) ...

  3. LDPC编译码原理介绍

    引言        LDPC编码中文全称叫做低密度奇偶校验码,是众多信道纠错编码中的一种.在系统的信息传输速率小于信道容量时,LDPC编译码技术可以在较高传输速率下将有噪信道下的突发错误尽可能无限减小 ...

  4. ccsds ldpc matlab,CCSDS标准的LDPC编译码仿真

    文档采用MATLAB发布,仿真没有跑完. CCSDS标准的LDPC编译码仿真 本脚本完成了CCSDS标准(o1)版本中适用于深空通信任务的LDPC编译码过程的仿真, 同时给出了在信息位长度为1024, ...

  5. 基于matlab的LDPC编译码误码率仿真,调制方式为64QAM

    目录 1.算法概述 2.仿真效果 3.MATLAB仿真源码 1.算法概述 "LDPC编译码 低密度校验码(LDPC码)是一种前向纠错码,LDPC码最早在20世纪60年代由Gallager在他 ...

  6. 5G NR LDPC码(1)—— LDPC码设计原理

    5G NR中规定了控制消息和广播信道用Polar码,数据传输用LDPC码的方案. LDPC属于线性分组码,常用校验矩阵或者Tanner图来描述. 用校验矩阵来描述LDPC码,可以清晰的看到信息比特和校 ...

  7. 基于MATLAB的LDPC编译码误码率仿真,仿真调制为64QAM,对比不同译码迭代次数

    目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 LDPC码是麻省理工学院Robert Gallager于1963年在博士论文中提出的一种具有稀疏校验 ...

  8. 【分布式空时编码+LDPC】协作MIMO中分布式空时编码和LDPC编译码技术的仿真

    1.软件版本 matlab2013b 2.部分源码 clc; close all; clear all; warning off;Frame_Length = 120; %每次仿真数据个数 Error ...

  9. 基于64QAM调制解调的LDPC编译码算法误码率matlab仿真

    目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 LDPC译码从译码算法的实现角度可以将译码类型分为硬判决译码和软判决译码两种类型.其中,硬判决译码方 ...

最新文章

  1. AI换脸、声音篡改等,明确写入新版《民法典》
  2. php数组转换编码,PHP数组转换编码类
  3. Node.js: 认识流stream
  4. POJ3264(分桶法)
  5. Vue+Webpack常见问题(持续更新)
  6. max_workers解释
  7. 基于Java的敬老院管理系统
  8. 【Linux】Linux根据文件路径查找索引节点
  9. 「 软件安装 」倍福“TwinCAT 与 WHD 软件安装”教程
  10. 第二章 蜕变!上古剑修!
  11. Unity il2cpp new 内存分配过程
  12. linux读取excel文件内容,如何读取EXCEL文件到内表
  13. Android自定义人脸识别框,android自定义虹软人脸识别框/人脸抓拍框/人脸追踪框...
  14. OpenCV图像处理_2:平滑smoothing模糊blurring操作
  15. 联想拯救者Y7000P鼠标卡顿问题(已解决)
  16. STM32F103RC
  17. 我转行程序员的那一年(七)
  18. python量化交易--择时策略
  19. python基于pingouin包进行统计分析:使用partial_corr函数执行两个变量之间的偏相关性检验、covar参数指定对应的协变量(多个)、method参数指定相关性分析方法
  20. 3.Python数据结构与算法分析课后习题(第二版)__chapter3

热门文章

  1. 不正常关机引起的数据库置疑
  2. 创世神曲java下载_创世神曲-魔姬传说
  3. Vue 3.0 新特性及使用方法
  4. 利用Html,Css,javaScript简单写一个计算一天秒的倒计时
  5. ADSP-21489的图形化编程详解(1:硬件的准备和软件环境的搭建)
  6. 激活Finalshell
  7. ✔B【OPA1602 】【双运放】高性能 低噪声 极低失真度运放模块 35MHz带宽
  8. 搞笑诺贝尔颁出,中国科学家入选!阿蟑有磁性、睾丸热不对称,10大奇葩研究来了...
  9. [luogu2172] 部落战争
  10. unity3d 直接播放mp3