微波EDA网,见证研发工程师的成长!
首页 > 射频和无线通信 > 射频无线通信文库 > LDPC码数据分配通用模块设计方案

LDPC码数据分配通用模块设计方案

时间:12-02 来源:互联网 点击:

摘要:上世纪60年代初,香农的学生Gallager在他的博士毕业论文中首次提出了LDPC码的概念和完整的译码方法,但是直到上世纪末期,随着LDPC码译码理论的进步和计算机技术的发展,LDPC码才以其优良的误码性能和良好的可实现性成为人们研究的焦点。针对QC类LDPC码进行研究的时候,注意到很多码的循环子矩阵中不只有一组1,这就产生了水平运算后判断运算结果属于哪个存储模块的问题;另外,由于校验矩阵中每个循环子矩阵的列初始位置都是不同的,而且通常LDPC码的校验矩阵的循环子矩阵的数目都是非常庞大的,因此如果通过程序固化的方法,不但容易出现不易排查的错误,而且开发效率会大大下降。为解决该问题,并将解决方案通用化,文中以校验矩阵中循环子矩阵中1的排列特点为研究对象,找到引起变化的量之间的共性特征,从而实现通用化模块的设计。
关键词:LDPC;通用;准循环;数据分配

近几年,人们对可靠高效的信息传输和存储技术提出了越来越高的要求。差错控制编码作为一种纠正由信道噪声带来传输错误的有效方式,被广泛应用与数字通信和存储等领域。Low-Density Parity-Check(LDPC)码发明于上世纪60年代初期,它是一类性能接近香农极限的差错控制编码,采用置信传播的译码方式进行译码。随着VLSI和计算机技术革命性进步的到来,LDPC码的实现成为了可能,并且由于在AWGN信道下的极佳误码性能和高并行度实现引起了人们的强烈关注。目前,LDPC码的普及程度大大增加,很多标准也都将LDPC码纳入进来,这都导致了与LDPC码泽码的相关课题与日俱增,随之而来的问题是大量的重复性的开发工作,因此需要将一些共性的开发工作进行通用的模块化设计,以提高开发效率。

1 传统的译码方案在通用性方面的不足
在LDPC码的实现过程中,水平运算结果利用4维定位方法,存储了最小值、次小值、最小值位置和符号位。然而像CCSDS近地通信码这样的LDPC码的校验矩阵中的每个循环子矩阵都有两组1,它们都按照准循环的方式排列,如图1所示。

图中所示0为校验矩阵的一个列重为2的循环子矩阵,该矩阵可以拆分成两个列重为1的循环子矩阵Q1和Q2,这一结构对下文所述的数据分配策略和改进的垂直运算过程有决定性的影响。
图2中给出了一个循环子矩阵数据读取的示意图。从该图中可以看出,在实线所示的仞始状态时,读取的数据顺序是存储器1中数据在前而存储器2中的数据在后,但是到了虚线所示的时刻,读取的数据顺序变成了存储器2中的数据在前,存储器1中的数据在后。

在每个循环子矩阵中只有一组1或没有1的情况下,只需要按照存储器中数据存储的顺序读取,然后进行水平运算即可,然而若循环子矩阵中的1不止一组的时候,数据的读取就会发生混乱,有时存储器1的数据在前,而有时存储器2中的数据在前,这对判断最小值属于哪个存储器极为不利。
因此需要开发一种通用化的辨识数据先后顺序的模块,该模块附着在校验矩阵中的每一个列块上,对输出的数据自动做好标识,使得水平运算的结果能够精确的反应数据的来源。

2 文中所采用的范例码
基于EG(欧式几何)的QC(准循环)LDPC码属于QCLDPC码,该类码的构造是基于欧式几何有限域分解的。(8176,7154)LDPC码最初是为NASA设计的,它是一个规则的QC LDPC码,行重32,列重4。目前(8176,7154)LDPC码是CCSDS推荐的近地通信码,它具有很好的规则性,目前已
被应用于遥感卫星等航天器的近地通信领域。
本部分内容给出的CCSDS近地通信(8176,7154)QC-LDPC码的译码方法,同样适用于其他的每个循环子矩阵中有1组或2组1的OC-LDPC码情况。

3 文中所采用的译码算法
LDPC码的译码算法主要分为软译码算法和硬译码算法,软译码算法主要是指Gallager最早提出的LDPC码概率译码算法、BP算法以及BP算法的改进型最小和算法;硬译码算法主要是指BF算法。
采用软译码算法泽码获得的编码增益比较高,在绝大多数情况下,众多软译码算法中具备实现价值的译码方法之一仍是BP算法的改进算法之一,最小和算法。传统最小和算法的水平运算公式。

后来人们改进了最小和算法,提出了Normalized BP和Offset BP两种算法,这两种算法在本质上是等价的,都极大地改进了最小和算法的译码精度,使得最小和算法的编码增益更加接近传统的BP算法,目前这两种算法中以NormalizedBP算法应用较为广泛。文中采用了Norma lized BP算法,图3给出了Normalized BP的参数选择情况,如图所示,在参数值为1.25时得到了最小和算法的最好修正结果,但是通常在实现过程中,为了利于硬件功能的实现,会将(1/λk)的值设为0.75,这样便于硬件乘法的实现。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top