用于低密度奇偶校验码的改善的解码器的制作方法

文档序号:19749578发布日期:2020-01-21 19:10阅读:193来源:国知局
用于低密度奇偶校验码的改善的解码器的制作方法

本申请是申请日为2014年8月19日、申请号为201410407562.8、发明名称为“用于低密度奇偶校验码的改善的解码器”的中国专利申请的分案申请。

本发明涉及一种解码器,尤其涉及一种用于低密度奇偶校验码的解码器。



背景技术:

对于给定的消息字,低密度奇偶校验(ldpc)码,像诸如汉明码的其他码一样使用多个位。每个奇偶校验覆盖不同组的消息位,并且奇偶校验重叠,以便任何一个消息位被多于一个的奇偶校验覆盖。这意味着当存在有限数量的错误时,可以识别错误的位置。ldpc码的特征在于表示为h的奇偶校验矩阵,其具有对于每个奇偶校验的行、以及对于总码字中每个位的列。对于ldpc码而言,这些奇偶校验矩阵非常大且稀疏(即,其包括很多0并只有几个1),结果导致非常长的码字。

奇偶校验矩阵h还可以以tanner图的形式表现,并且图1示出示例奇偶校验矩阵102和对应的tanner图104。tanner图104示出位节点106和校验节点108以及其间的连接(或者边缘)。对于码字中的每个位(并且这些对应于奇偶校验矩阵102中的列)有一个位节点,并且对于每个奇偶校验(并且这些对应于奇偶校验矩阵102中的行)有一个校验节点。

ldpc码典型地使用软输入软输出方法解码,其中前级将信息传递至解码器,其说明了对于每个位的估计值(1或0)和与该估计关联的置信度值。置信度值可以是对数似然比(llr)的形式。解码器以相同的形式(即,估计值和与该估计关联的置信度)输出信息。解码器使用基于置信传播的迭代消息传递算法来执行解码。根据该算法的示例,位节点告知连接的校验节点其当前llr估计,并且校验节点使用该信息来执行其奇偶校验,并将信息提供回关于关联的位是1的可能性的每个连接的位节点。在收到更新的信息时,位节点将其从所有连接的校验节点接收的值合并。然后重复该方法,位节点向校验节点提供更新的llr,尽管从位节点向任何校验节点传递的值可能不同,使得校验节点仅接收“新的”信息,其指示在之前的迭代中其他连接的校验节点如何修改了llr(即,校验节点接收有关由除了其自身的所有其他连接的校验节点对llr做出的改变的信息)。该方法是2通道消息传递(tpmp,two-passmessagepassing)的示例,并且通过合并2个通道可以更有效地进行解码,并且结果可以是合并计划消息收发传递(msmp,merged-schedulemessagingpassing)算法。

使用msmp,对于每个位节点的当前llr估计被用于计算并存储代表校验节点至位节点消息的值,并且一旦已计算了值,该值被用于更新临时变量,该临时变量是对于每个位节点的llr更新的运行总数。一旦已处理所有的校验节点(以及被用于更新运行总数的它们的校验节点至位节点消息),则运行总数被用于更新对于每个位的llr的存储的值(当前llr估计)。如之前的一样,然后重复该方法。

对于ldpc码有很多应用,因为ldpc码已被发现提供了可靠且有效的方法,用于在有噪声的传输通道上传输数据。示例包含在很多数字电视标准中的使用(无论是地面、卫星、有线还是移动使用),诸如dvb-t2、dvb-s2和dvb-c2、以及其他无线标准,诸如wimaxtm和一些wifitm变型。

下述实施例不限于解决了已知的ldpc解码器的任何或者所有缺点的实施方式。



技术实现要素:

提供该发明内容来以简化形式介绍概念的选择,其在具体实施方式中进一步在下面述。该发明内容不意图识别权利要求的主题的关键特征或者基本特征,也并非意图被用来协助确定权利要求的主题的范围。

描述了用于对ldpc码进行解码的方法和装置。ldpc码可以表现为tanner图,包括位节点(码字中的每位一个)和校验节点(每奇偶校验一个)和其间的连接。在实施例中,支持具有任何子矩阵尺寸的很多不同ldpc码的可配置的ldpc解码器,包括几个独立的可寻址存储器,被用于存储对于每个位节点的软判决数据。解码器还包括数量p的校验节点处理系统,其产生更新的软判决数据。更新的值然后经由混排系统传递回存储器。如果由校验节点处理系统并行处理的校验节点数量是pcnb(其中p≥pcnb),并且对于位节点的软判决数据是q位的字长,那么独立可寻址存储器的总宽度大于pcnb*q位。

第一方面提供可配置的ldpc解码器,被布置为支持具有任何子矩阵尺寸的多个不同的ldpc码构造,所述ldpc解码器包括:多个独立可寻址存储器,被布置为共同存储对于每个位节点的、用于解码ldpc码的软判决数据,并且每个存储器具有宽度,存储器的所述宽度包括在单个周期从所述存储器可访问的数据的量;多个校验节点处理系统,被布置为并行操作,并产生对所述位节点软判决数据的更新;第一混排系统,被布置为将数据从多个独立可寻址存储器传递至多个校验节点处理系统;以及第二混排系统,被布置为将对所述位节点软判决数据的更新从所述多个校验节点处理系统传递至所述多个独立可寻址存储器,其中所述多个独立可寻址存储器的总宽度大于由所述校验节点处理系统并行处理的校验节点的数量与对于位节点的所述软判决数据的宽度之积。

第二方面提供ldpc码的解码的方法,包括:在单个周期从多个独立可寻址存储器访问对于多个位节点的软判决数据,每个存储器具有宽度,并且存储器的宽度包括在单个周期从所述存储器可访问的数据的量;将访问的软判决数据提供给多个校验节点处理系统;以及在所述校验节点处理系统中并行产生对于所述多个位节点的对所述软判决数据的更新;以及在所述多个独立可寻址存储器中存储对于所述多个位节点的更新的软判决数据,其中在至少一个周期中,访问对于多个位节点的软判决数据包括:访问软判决数据的总量,其大于由所述校验节点处理系统并行处理的校验节点的数量与对于位节点的所述软判决数据的宽度之积。

另一方面提供实质上如参考附图的图5、7和9任一个描述的ldpc解码器;实质上如参考附图的图14描述的方法;其上编码有计算机可读程序代码的计算机可读存储介质,用于产生包括本文描述的ldpc解码器的处理器;以及其上编码有计算机可读程序代码的计算机可读存储介质,用于产生配置为执行本文描述的方法的处理器。

本文描述的方法可以由计算机执行,该计算机配置有以机器可读形式存储在有形存储介质上的软件,例如以计算机程序的形式,包括用于配置计算机以执行描述的方法的组成部分的计算机可读程序代码;或者以计算机程序的形式,包括适于执行本文描述的任何方法的所有步骤的计算机程序代码单元(当在计算机上运行程序,并且计算机程序可以体现在计算机可读存储介质上之时)。有形(或者非暂时性)存储介质的示例包含盘、拇指驱动器、存储卡等,并且不包含传播的信号。软件可以适于在并行处理器或者串行处理器上执行,使得方法步骤可以以任何适当的顺序、或者同时进行。

本文描述的硬件组件可以由其上编码有计算机可读程序代码的非暂时性计算机可读存储介质产生。

这承认了固件和软件可以分开使用并且是有价值的。意图包括软件,其运行或者控制“哑(dumb)”或者标准硬件来进行期望的功能。还意图包括“描述”或者定义硬件的配置的软件,诸如hdl(硬件描述语言)软件,其用于设计硅芯片、或者用于配置通用可编程芯片,来进行期望的功能。

如对本领域技术人员将是明显的,优选特征可以适当组合,并可以与本发明的任何方面组合。

附图描述

将参考下面的附图,以示例的方式描述本发明的实施例,其中:

图1示出示例奇偶校验矩阵和对应的tanner图;

图2示出2个示例奇偶校验矩阵;

图3是示出示例ldpc解码器的示意图;

图4示出奇偶校验矩阵的示例片段;

图5示出示例解码器和包括单个子矩阵的h矩阵的片段示意图;

图6示出2个示例子矩阵;

图7示出另一个示例解码器的示意图;

图8示出示例校验节点处理系统的示意图;

图9示出另一个示例解码器的示意图;

图10示出来自图9所示的解码器的选择块的示意图;

图11是示出用于特定校验节点块的数据如何对于特定码进行组装的示例的示意图;

图12示出另一个示例校验节点处理系统的示意图;

图13示出另2个示例子矩阵;以及

图14示出ldpc解码器的操作的示例方法的流程图。

贯穿附图使用共同的附图标记,以指示类似的特征。

具体实施方式

下面仅以示例的方式描述了本发明的实施例。这些示例代表目前申请人已知的将本发明付诸实践的最佳方式,尽管它们并非是实现的唯一方式。描述陈述了示例的功能、以及用于构建并操作该示例的步骤的顺序。然而,相同的或者等价的功能和顺序可以由不同示例完成。

上述ldpc解码算法涉及在临时变量(运行总数)中存储所有位节点更新,直至迭代的结束,此时所有更新被立即应用。该技术被称为泛洪(flooding),并且如果给定的位节点涉及多个校验节点计算,那么对于该位节点的相同的llr估计被用于迭代内的所有计算。然而,替代的方法允许首先处理的校验节点以立即更新其连接的位节点(并且因此,更新对于这些位节点的当前llr估计)。这意味着相同迭代内的接下来的校验节点使用更新的llr估计。该方法被称作分层解码,其与泛洪相比要求更少的存储设备,并且导致算法更快速收敛。

一些ldpc码被设计用于分层解码,并且对于这些码而言,奇偶校验(或者h)矩阵被分割为多个层,每个层由一组行(即,一组校验节点)组成,并且每个层仅使用一次特定位节点,如图2的第一示例202所示。由于层中的每行包含位的不同集合,因此层内的行可以并行处理,不会有两个以上的校验节点试图同时更新相同的位节点导致的任何冲突。

在一些示例中,除了将h矩阵水平分割为层外,矩阵被进一步垂直分割,以形成一组子矩阵,每个尺寸为s1乘以s2,如图2中的第二示例204所示。子矩阵的行构成层,并且每个子矩阵每列仅含有一个“1”以及每行仅含有一个“1”。这样组成的码称作“架构感知”,并且使得与之前的示例相比在解码器中显著的逻辑节省。

尽管下面的描述是指分层解码,但该方法还可以适用到非分层码,诸如dvb-t2码,如下参考图13所述。

图3是示出示例ldpc解码器300的示意图。其包括一个或多个存储器,该存储器形成被布置为存储对于每个位节点的估计的llr(其可以称作软判决或者“位节点值”)的λram302。这些值可以表示为qj[k],其中j指位节点,并且k是迭代数。ldpc解码器300还包括并行操作的多个校验节点处理系统(或者校验节点处理块)304。每个校验节点处理系统304与校验对位(check-to-bit)节点消息存储306接合,并且该存储可以由一个或多个存储器(例如每个校验节点处理系统304可以有一个存储器)提供。这些校验对位节点消息可以表示为rij[k],其中i指校验节点。lpdc解码器300额外包括2个混排系统308、310,其从λram302获得用于处理的适当的位节点数据,并将其传递至校验节点处理系统304,进而将更新的位节点数据返回至λram302中的适当点。

图3所示的解码器300包括p个校验节点处理系统304(其中p是整数),因此,解码器可以最大并行处理p个校验节点。并行处理的校验节点的组可以称作校验节点块(cnb),并且cnb402的示例可以在图4的h矩阵400的示例片段中看到。cnb包括pcnb个校验节点,并且在图4的示例中pcnb=3。在利用了所有校验节点处理系统304的示例实施方式中,p=pcnb(对于特定ldpc码),尽管如下所述在一些示例中,p>pcnb(由于由ldpc解码器支持的各种码的子矩阵尺寸的差异)。通过增加cnb的尺寸(即通过增加pcnb)增加了吞吐量,然而,硬件尺寸也增加了(作为额外校验节点处理系统304的结果,即随着p增加)。在示例中,层中的校验节点的数量可以是cnb尺寸的整数倍,以便整数个cnb包括层(例如在图4中,层中有9个校验节点,并且cnb中有3个校验节点)。在示例中,对于dvb-t2而言,解码器在每个层可以使用8个cnb,其中cnb尺寸为45(即pcnb=45),或者通过在提升的内部时钟频率上运行解码器,可以减小cnb尺寸。

混排系统308被布置为在校验节点处理系统304呈现正确的位节点数据。抓取用于cnb的数据(如校验节点处理系统304要求的)涉及从λram302挑选出多组软判决数据(即多组qj[k]值),长度为一个cnb(即每个时钟周期为pcnb值)。尽管h矩阵可以布置为一组子矩阵,其中每个子矩阵包括空矩阵或者一个或多个单循环移位的单位矩阵(例如图4所示的),但单位矩阵的循环移位意味着要求的来自λram302的多组数据可以在伪随机布置的开始点开始。当子矩阵尺寸等于p或者等于p*n(其中n是整数)时,那么开始点将是规律的,并且(由混排系统308)要求的混排不太复杂。然而,当子矩阵尺寸不等于p*n时,那么开始点将是不规律的,并且混排系统执行更复杂的操作。例如,当多组数据在伪随机布置的开始点开始时(并且尽管是以连续的顺序),其将绕子矩阵边界环绕。这在图4所示的h矩阵400的示例片段的右手子矩阵中的cnb2中显示。

处理校验节点要求ri个位节点值(其中ri是连接至校验节点i的位节点的数量),并且在图4所示的示例中,每个非空子矩阵向每个校验节点贡献一个位节点值。ri的值对于cnb中的所有校验节点相同,并且等于子矩阵的数量,位节点数据需要从所述子矩阵供应。

如果每个校验节点处理系统304具有单个q位输入和单个q位输出(其中q是位节点llr数据的字宽度、qj[k]),那么连接的位节点数据以串行方式传递至每个校验节点处理系统,并且当解码器300在ri时钟周期处理p个校验节点时,实现了最大吞吐量。为了在λram302的输入和输出匹配该吞吐量,λram302要求p*q位的总ram宽度(对于双端口ram而言);然而,如果总ram宽度恰好等于p*q位(对于双端口ram而言),那么在混排系统308、310内实现的重新排序系统为了以正确的顺序呈现数据(给校验节点处理系统304和λram302)是复杂的,并且这会导致显著的延迟。此外,当对角线(循环移位的单位矩阵中)没有对齐存储单元边界时,需要存储在一个周期(即对于一个cnb)拉出的数据用于接下来的cnb的处理,并且这可以参考图4描述。

在图4所示的h矩阵400的示例片段中,子矩阵尺寸s(其中s是整数)是cnb的尺寸pcnb的整数倍。在示出的示例中,pcnb=3并且s=9,即,子矩阵中有3个cnb并且存储器宽度是3个位节点(即3q,恰好等于pcnb*q)。参考回图3,对应的解码器包括3个校验节点处理系统304(p=3=pcnb)。在图4所示的示例中,每个子矩阵也仅有一个单位矩阵,尽管本文描述的方法可以适用于:每个子矩阵有多于一个单位矩阵的码,如参考图13在下面描述。

为了处理cnb0,左手子矩阵要求的所有数据可以通过访问存储器单元0获得(例如在第一周期,一个位节点值被传递给3个校验节点处理系统304中的每个);然而,为了访问用于右手子矩阵的数据(中心子矩阵是空矩阵,并被忽略对于cnb0-2),访问存储单元6和7(其占用2个周期)。在访问这两个存储单元时,获得了比处理cnb0所需更多的数据,并且该附加的数据是处理cnb1和2所要求的。由于总ram宽度等于pcnb*q(在该示例中p=pcnb),因此没有可用的ram吞吐量来再次访问相同的数据(当处理cnb1或者2时),并且因此该附加的数据需要被保留。保留该数据是有问题的,因为其导入了延迟(即,其导入了一段时间,在该此期间数据在λram外缓存,并且在此期间,在相同的位节点在下一行馈送至非空子矩阵的情况下,那么新的子矩阵行无法被处理)。这使得难以保证更新以正确的顺序处理,并且要求例如以缓存形式的、用于附加数据的额外存储。

本文描述的是可配置的改善的ldpc解码器(或者解码器架构),其支持很多不同的ldpc码,并且这些支持的ldpc码可以具有任何尺寸的子矩阵。此外,在改善的ldpc解码器中,总存储器宽度(即,在单个周期可以从整个λram302访问的数据的量)宽于p*q,这能使对于每个子矩阵完整的cnb有价值的数据在单个周期被访问(例如对存储器单个访问),不论对角线放置在子矩阵的哪里,并且不需要任何存储供以后使用的不希望的数据。λram302可以包括多个独立可寻址存储器(即m个独立可寻址存储器,其中m是整数)。在各种示例中,m个存储器可以包括与p*q宽度的基线要求相比一个或多个额外库(bank)的存储器(例如图7所示的)、和/或更宽的存储器库(例如图9所示的)。在很多示例中,m个存储器库可以都具有相同的宽度;然而,在其他示例中,存储器可以具有不同宽度(例如4个更大宽度的存储器和2个更小宽度的存储器,其中m=6)。

在可以用于dvb-t2的示例中,pcnb=45=p并且λram302可以包括多个存储器库,每个为15个软判决宽(例如每个具有15q的宽度)。在该示例中,3个存储器将匹配p(并可以表示为基线存储器要求);然而,在改善的解码器示例中,可以有4个存储器。在第二示例中,可以使用3个更宽的存储器,每个存储器具有2/3*p*q的宽度(而非作为基线要求的1/3*p*q)。

当p=pcnb时,基线存储器要求可以表示为p*q或者pcnb*q。然而,当p>pcnb时,对于特定码的基线存储器要求是pcnb*q,并且对于解码器(其可以是能对多码解码的解码器)的基线存储器要求是p*q(由于其由校验节点处理系统的数量确定,并非用于任何码的cnb的实际尺寸)。当基线要求(p*q)由mmin个存储器满足时,每个宽度为p/mmin*q,可能有多于mmin个存储器(即m>mmin)和/或每个存储器可能具有超过p/mmin*q的宽度。

图5示出示例可配置的ldpc解码器500的示意图,其支持很多不同的ldpc码(具有任何尺寸的子矩阵)以及包括单个子矩阵502的h矩阵的片段,其中子矩阵尺寸是36。在该示例中,p=pcnb=9(因此有9个校验节点处理系统304并且pcnb是子矩阵尺寸的整数约数),并且λram302包括4个存储器504(记为a-d)。每个存储器的存储器宽度是3位节点值(即3q),使得3个存储器将满足(p*q的)基线要求;然而,该系统包括额外的存储器(给出总存储器宽度为12q=4/3*p*q)。应该理解的是,包括4个存储器的该布置仅示出为示例的方式,并且在其他示例中,根据子矩阵尺寸、要求的吞吐量等,可以使用不同数量的存储器。例如,可以使用m个存储器的任何布置,其中那些m个存储器的m-1的总宽度至少可以供应pcnb-1位节点值,即对于每个具有w位节点值的宽度的m个存储器而言,(m-1)w≥(pcnb-1)。

尽管图5示出pcnb作为子矩阵尺寸的整数约数,但应该理解的是这可能并不总是可能的(例如当s是素数时)。

解码器500还包括2个混排系统508、510。第一混排系统508被布置为在校验节点处理系统304呈现正确的位节点数据,并且第二混排系统510被布置为将更新的位节点数据(例如以更新的形式或者更新值,如下文更详细描述的那样)返回至λram504。

从子矩阵502取出位节点数据的操作对于cnb0由图5中的阴影示出,并且该操作由第一混排系统508实现。如图5所示,通过访问ramc单元0、ramd单元0、rama单元1和ramb单元1获得了所有要求的位节点值,并且所有这些值可以在单个周期中被访问(因为从每个存储器仅有单个单元被访问)。然后,从自ramc访问的数据丢弃2个位节点值,并且从自ramb访问的数据丢弃1个位节点值。可以贡献给每个cnb的存储单元的数量依赖于架构设计。

图6示出类似于图5所示的第一示例子矩阵600,其对应于每个存储单元具有3个软判决的4个存储器布置(m=4);然而,该在示例子矩阵600中,每个子矩阵仅有3个cnb,因此子矩阵尺寸是27(与图5中的s=36相比,每个子矩阵有4个cnb)。这意味着在子矩阵600中,有9个存储单元贡献给子矩阵:这是行的第一子矩阵,使得这些包括来自每个存储器的单元0和1,以及额外地来自rama的单元2。

在该示例中可见,处理子矩阵600中的cnb0将要求从存储器a的2个单元(a0和a2)拉取数据,而存储器b保持未使用,因此这是不可能的。

相反,在图6中的第二示例子矩阵602中,当跨所有ram(例如从每个ram1至m的单元x)应用任何ram单元(或者ram地址)时,仅从一个子矩阵访问数据,并且这避免了有关子矩阵600的上述的问题。在第二示例中,有3个ram(m=3)并且每个存储单元是5个软判决的宽度。每个ram对每个子矩阵供应2个单元,并且6个单元提供30位节点的存储器宽度。这导致3个浪费的位节点(在该示例中的存储单元c1),然而,当绕子矩阵边界环绕时,这启动了存储器的循环选择(即为了不必对于单个的cnb从相同的存储器中的2个单元读出)。在像这样的示例中,当有未使用的ram数据通路时,可以使用缺口封闭(gapclosing)硬件,参考图9在以下对其进行描述。

gb20600码(用于数字地面电视的ldpc码的示例)使用127的子矩阵尺寸,其是素数。如果实现了能够并行处理45个校验节点(p=45,因为这是对于另一个码的最佳布置)的硬件,那么对于gb20600码有效分裂为cnb将是每个子矩阵有3个cnb,尺寸为42、42和43,因为这会有效使用可用的校验节点处理系统。如上所述,具有4个存储器布置,并且这可能对于其他码(例如dvb-t2)是最佳的;以及15个软判决的存储单元宽度,这在每个子矩阵给出9个ram单元(9个存储器宽度给出135个软判决)。然而,在该布置中,当跨所有ram(例如每个ram1至m中的单元x)应用任何ram单元时,将不会仅从一个子矩阵访问数据(如以上描述),反而,将有一些当跨所有ram应用时从多于一个的子矩阵访问数据的ram单元。这意味着循环选择将跨子矩阵边界打破,因此是不可能的。为了使用4个存储器(m=4)布置来处理该码,每个子矩阵可以使用12个ram单元(m的倍数)。换言之,这样设计的系统对每个子矩阵将使用4个cnb,尺寸为32或者31(3*32+31=127)。每个cnb从3个存储单元获取数据,并有71%的硬件利用率效率(因为使用了45个校验节点处理系统中的32个)。

在该4个存储器(m=4)的布置下,不同的子矩阵尺寸可能导致非常不同的硬件利用率。例如,在该子矩阵尺寸下,每个子矩阵可以使用s=60的4个ram单元,因此,完全利用15个ram数据路径。每个子矩阵有2个cnb时,有使用的30个校验节点处理系统(来自总数为45个的校验节点处理系统),效率为67%。然而,对于s=61,每个子矩阵需要使用8个ram单元,因此,7个或者8个ram单元实际上被用于每个ram。这意味着使用20或者21的cnb尺寸,(每个子矩阵3个cnb),效率降至45%。所以,根据子矩阵尺寸,4个存储器布置可能不是最佳的,参考图9在下面描述了替代的布置。

如上所述,为了避免与必须从相同的ram、任何ram单元(或者ram地址)访问2个存储单元关联的问题,当跨所有ram应用时,仅从一个子矩阵访问数据,即从每个ram1至m的单元x访问相同的子矩阵。因此,子矩阵中的存储单元的数量是在一起形成λram的利用的独立可寻址存储器(m)的数量的倍数。

图7是支持很多ldpc不同码(具有任何尺寸的子矩阵)的另一个示例可配置的ldpc解码器700的示意图,其中总存储器宽度超过p*q的基线值。正如图5的示例,图7中的示例包括4个存储器701-704,并且具有4/3*p*q的总存储器宽度。

如图5的示例那样,解码器700包括2个混排系统706、708。在λram701-704的输出的混排系统708包括读出桶式移位器(readbarrelshifter)710、以及多个互相连接的复用器712。来自ram701-704的读出数据应用到读出桶式移位器710,其处理h矩阵内的每个对角线的开始可能没有对齐存储器宽度的事实。因此桶式移位器710从ram701-704得到4p/3个软判决,并输出要求的p软判决,将位节点与其必要的校验节点对齐,并且丢弃处理中不希望的p/3个软判决。在桶式移位器710的输入的所述多组复用器712对ram输出重新排序,以处理含有更高校验节点的存储器将根据对角线的位置而改变的事实,并以一致的顺序(例如在示出的示例中,左侧为最高校验节点,右侧为最低校验节点)向桶式移位器710提供位节点。

单个cnb的处理包括依次从每个非空子矩阵(从λram701-704)读出位节点数据,并将其通过桶式移位器710流至校验节点处理系统714。然后,对于位数据的更新以相同的顺序从校验节点处理系统(或者系统)714流出,进入(作为第二混排系统706的部分的)写入桶式移位器716(writebarrelshifter)。该桶式移位器716执行与读出桶式移位器710相反的功能,将数据与ram701-704中要求的位置重新对齐。复用器组718然后将正确的值指引至每个ram。由于ram701-704得到4p/3个输入值,而仅p个值从校验节点处理系统714到达,因此一些值将是无效的,并且其被遮蔽以防止由一组写入启动控制720写入。

应该理解的是,本文指代的读出和写入桶式移位器的操作(例如读出桶式移位器710和写入桶式移位器716)不同于可以被用于常规ldpc解码器的常规桶式移位器。常规桶式移位器被配置用于特定尺寸的码子矩阵,并只是执行输入元件的循环旋转,进而将这些循环旋转的输入元件(即,相同数量的元件输出作为输入)输出。然而,如上所述,在本文描述的可配置的ldpc解码器中实现的桶式移位器输入并输出不同数量的元件(例如,根据精确的ram布置、ldpc码构造等)。

图8示出示例校验节点处理系统800的示意图。每个校验节点处理系统接收一条位节点数据,每个时钟周期为qj[l-1],(其中l是对于分层解码的层指数),因此其占用ri个时钟周期来积累充分的数据以继续计算。因此,在校验节点处理系统800的输入位置的qj寄存器801-802是双缓冲的:当对于一个校验节点的数据进入时,对于之前的校验节点的数据被处理。

校验节点处理的第一级是从上次迭代减去存储的校验对位节点消息:从qj[l-1]值减去rij[k-1](块803)。在一些示例中,rij[k-1]值可以以“压缩的”形式(例如最小、最小指数、符号位的组和最小但是一个值)存储在存储804中。该数据以双缓冲方式“解压缩”(在块806-807中),使得解压缩的rij[k-1]值看起来与对应的qj[l-1]值一致(在块803)。

新的校验对位节点消息的组rij[k]然后(在块808中)可以使用如下计算:

其中δij是由符号的xor函数确定的符号校正因子(参见下方的公式(4)),并且表达式j'∈r[i]\{j}代表指数j'跨连接的位节点的组运行,但是跳过当前指数j。新的校验对位节点消息以压缩的形式(压缩在块810中执行)被重新存储(在存储804中),为下一次迭代准备好。

下面的公式然后可以被用于更新位节点值:

qj[l]=qj[l-1]-rij[k-1]+rij[k](2)

然而,在图8所示的示例中,从校验节点处理块800出现的值只是-rij[k-1]+rij[k]部分(如块812中产生的那样),并且与qj[l-1]的相加是由位于存储回ram701-704之前的加法器722完成的(如图7所示)。

下面更详细地描述上面的公式(1)和(2)。

图9是支持很多不同ldpc码(具有任何子矩阵尺寸)的其他示例可配置的ldpc解码器900的示意图,其中,总存储器宽度超过p*q的基线值。在该示例中,有3个λram901-903(m=3),其中每个具有2/3*p*q的存储器宽度,给出2p*q的总宽度。图9所示的架构是非常灵活的,并可以容纳很多不同子矩阵尺寸(例如从对于一些无线标准的小的子矩阵尺寸、到对于数字电视标准的显著更大的子矩阵尺寸),并且因此很多不同码。

在该示例中,混排系统904、906的实施方式略不同于图7所示和上面描述的,尽管应该理解的是任一解码器700、900都可以使用任何适当的架构来实现混排系统。在图9的示例中,读出预移位器908-909和写入后移位器910-911进行操作,以封闭由ram中未使用的数据路径导致的任何缺口。通过将该缺口填充硬件导入至架构,可以从每个存储单元出现的软判决的数量(即位节点值)是变量,其可以针对特定应用选择。

在ram中的所有数据路径被使用的标准(即,对于ram中的所有数据路径被使用的子矩阵尺寸,p=pcnb)中,预移位器和后移位器值保持在0,并且这些级没有效果。这例如是具有pcnb=36的dvb-t2中的情况。对于该码,可以使用360的子矩阵尺寸,其可以被分割为10个cnb,为了100%利用可以设置在示例解码器中的36个校验节点处理系统(其中s=360,p=36)。每个ram单元具有24个软判决(因为存储器宽度为2/3*p*q并且2/3*36=24),每个子矩阵有15个ram单元,其是3-ram系统要求的3的倍数(由于参考图6的上述原因)。

对于运行在相同硬件上的gb20600的情况(不同的数字电视标准),s=127并且仅有6个ram单元组成子矩阵(6是用于每个ram单元的结果导致≤24个软判决的3的最小倍数);所以仅有21或者22个软判决实际上来自每个ram单元,给出子矩阵尺寸为127。当有36个数据路径可用(p=36)时,可以使用的最大cnb尺寸是36并且每个子矩阵可以使用4个cnb,因此实际的cnb尺寸——pcnb是31或者32;导致88%的利用图(由pcnb/p给出)。

如该示例展示的那样,为了改善效率,pcnb(cnb尺寸)应该接近p,因为这意味着校验节点处理硬件没有未充分利用,受到如下约束:组成子矩阵的ram单元的数量是独立可寻址存储器的数量的倍数,并且每个单元的软判决的数量不超过单独存储器的宽度。

读出预移位器908-909将数据从“边远的”存储单元向内朝向中心移位,这能创建有未使用的数据路径的“重叠”。这些预移位器908-909接下来的选择块912然后包括2对1复用器,来选择已创建重叠的适当的行,即,在来自一个存储器的不希望的数据与来自第二存储器的希望的数据之间的重叠的区域,选择块将选择第二存储器。图10示出选择块912的示意图,简化为p=12的情况;以及图11示出对于特定cnb的数据如何对于gb20600的情况进行组装的示例。

在图11中,希望的数据1102示出为对角阴影,并且这对应于在(在h矩阵片段1105中)cnb0内示出的粗对角线1104。不希望的数据1106示出为没有任何阴影,并且来自未使用的ram数据路径1108的数据示出为点状图案。应该理解的是,cnb尺寸和使用的ram数据路径的数量两者可以根据h矩阵中的位置而变化。

在该示例中,未使用的数据位于“右手”存储器数据路径(即,具有最高位节点指数的数据路径)。这在移位/选择设计中会引起不对称(例如图9或者10中)。来自存储器b的输出向右移位,以将未使用路径丢失,然而,该区域中的数据总是来自存储器b(即其移位至之前也由来自存储器b的数据占据的位置),因此不需要选择器。来自存储器a的输出向左移位,以与存储器c的未使用的区域重叠,并且选择块选择该区域中的存储器a。因此,封闭了不希望的缺口。

图9-11中示出并在上面所描述的缺口封闭硬件,能使系统有效改变ram的宽度,以应对不同的子矩阵尺寸(通过允许系统保证该数据分割为子矩阵尺寸)。当有多于一个被封闭的缺口时,不同缺口的尺寸不需要相同。

图9所示的示例解码器不包括任何加法器(例如,对应于图7的加法器722)。在这种情况下将-rij[k-1]+rij[k]相加至qj[l-1]是在校验节点处理系统914内执行的,并且图12示出这样的校验节点处理系统1200的示例的示意图。

在图12所示的示例校验节点处理系统1200中,在之前的迭代上来自该校验节点的rij消息事先从rijram1202取回;这些然后随着它们进入校验节点处理系统1200被解压缩(在块1204中),并且从qj值中减去(在块1206中),形成qji位对校验节点消息。随着这些进入,系统记录它们的符号,并保持最小以及下个最小幅度的运行估计。qji消息也存储在fifo1208中。一旦对于特定cnb的上次位节点值已进入,每个校验节点处理系统然后可以形成rij消息的新的压缩组(在块1210中)用于存储。这些消息存储在小缓冲1212中;以及当从该缓冲输出时,它们可以被解压(在块1214中),并相加至从fifo1208出现的qji消息(在块1216中),形成新的qj值用于输出回λram。

在图9-12中示出的ldpc解码器900的变化中,对于读出和写入两者示出的2个级别的移位(即移位器和预移位器)可以合并为对于每个读出和写入的单个移位级。在示例中,移位级可以借助适当的遮蔽向每个左、中和右组的llr适用单个移位,进而将其在一起逻辑或。这在功能上等同于图9-12中示出的2级方法,并应该理解的是在移位策略上也可以有在功能上等价的其他变化。

在图9-12中示出的架构被设计为与多个不同码操作,并作为结果,校验节点处理系统1200的架构略不同于图8所示和以上描述的架构。如果对于特定码的每个校验节点具有相同数量的连接的位节点,那么qj缓冲可以构造为双缓冲系统(如图8中的示例):一个缓冲被用于积累对于当前校验节点的消息,而另一个缓冲读出用于之前的校验的消息,形成修改的qj输出。然而,在每个校验节点可能没有恒定数量的连接的位节点(例如对于一些dvb-t2码,该数量从一个层到下个层会变化)的实施方式中,使用这样的双缓冲布置将使得操作停顿并丢失处理周期(例如,如果要读出的位节点的数量多于读入数量,那么校验节点处理系统的操作停顿以等待读出结束)。

为了避免通过这样停顿,图12的实施方式中的压缩的rij缓冲1212是具有3个位置的非常小的fifo。如果rmax是该码中每个校验节点的最大数量的位节点,那么在“天的开始”(开始迭代),读出校验节点被延迟了rmax周期。这意味着当系统首先开始读出时,qjififo1208保持rmax个条目;并且系统写入至rij缓冲1212中的第二或者第三位置(根据第一个cnb是否具有少于或者等于rmax个连接)。这然后给予充分的缓冲,以保证读出或者处理操作都不需要从那里开始停顿。

尽管图9所示的示例ldpc解码器900包括3个λram(m=3),但在另一个示例中可能仅有2个λram(m=2)。在这样的示例中,移位逻辑与3λram示例中相同,除了相同的llr(来自一个λram的)被用于左和右llr数据路径(例如,块910-911),使得移位逻辑作为桶式移位器。

在上述示例码中,每个子矩阵有一个单位矩阵,尽管本文描述的方法可以应用到每个子矩阵有多于一个单位矩阵的码。这样的码的示例是dvb-t2或者dvb-s2,并且这些码不是架构感知的。然而,这些码确实具有可以重新布置的构造和h矩阵,以采用以下形式:含有循环移位的单位矩阵(除了不与模式拟合的一个奇偶性位)的尺寸为360x360节点的子矩阵。

因为这些码不是“架构感知的”,因此每个子矩阵要么可以是空矩阵,要么可以含有一个或多个移位的单位矩阵。多于一个单位矩阵存在时,这可以称作“多对角线”,并且在一些示例中,高达4个单位矩阵可以存在于单个子矩阵中。

这些多对角线使得不可能将h矩阵拆分为真正层。在多对角线子矩阵中,将多次使用相同组的位节点,其连接至不同的校验节点。在很多情形下,子矩阵内的多个校验节点将尝试更新相同的位节点。这具有2个含义:首先,这些校验节点对于每个位节点将都使用相同的输入值(这意味着从分层解码的想法出发,每次使用已由之前的校验节点更新的位节点)。其次,不用修改上述架构,这将意味着对位节点的两个更新中的一个将覆盖另一个,使得更新中的一个将丢失。

这些含义的第一个具有的效果是:解码器性能下降至纯泛洪解码器(所有校验节点从相同组的位节点馈送)与真正分层解码器(位节点在每次使用之间更新)之间。

这些含义的第二个具有更严重的后果:如果校验节点更新持续丢失,那么这将降低码的性能。仿真示出了如果这被允许发生,那么一些位节点将卡住,并没能朝向改善的llr值迁移。冲突的数量通过使用cnb(如上所述)减小,并且可以通过去除在每个cnb内冲突的那些边缘(即连接)来处理任何剩余冲突,如参考图13所示的示例子矩阵1300、1301解释的。

在第一示例子矩阵1300中,以多于cnb的尺寸隔开了2个对角线1302、1304,因此在用于任何cnb的位节点之间没有冲突。如果对角线之间的间距减小到少于cnb尺寸,那么冲突将开始出现,如第二示例子矩阵1301所示,仅当2个对角线相邻放置时发生最大冲突。假定在实际码中在对角线之间一般有合理的间距,并且本文描述的方法对cnb而非子矩阵进行操作,需要在任何迭代中排除的边缘的数量实际上非常小。在第二示例子矩阵1301中,需要排除的边缘被圈出1306,并且可见这些仅是涉及相同的cnb内的2个奇偶校验的位节点的这些点。

当处理具有多对角线的子矩阵时,抓取cnb输入数据(由混排系统)将涉及访问相同的子矩阵两次(每个情况下对于对角线为不同的开始位置)。这可以潜在地将相同的位节点数据放入处理管道两次。当数据回到ram(再次从混排系统)时,将会有使得更新被覆盖的重复的写入地址。将被保留、即不覆盖的该值与上次出现的地址关联;并且这依赖于当起初读出数据时对子矩阵索引的顺序。通过循环旋转顺序(对角线以该顺序被参考),当从λram拉出数据时(通过混排系统),不同的更新在不同迭代上对于给定层保留。参考回图13中的第二示例子矩阵1301,有2个对角线1308、1310。在第一迭代中,首先参考对角线1308,在该情况下,从圈边缘1306导致的更新将被覆盖(并且因此那些边缘将从系统被有效排除)。在第二迭代中,首先参考另一个对角线1310,并因此从圈边缘1306导致的更新将实际上覆盖从冲突边缘导致的更新,并且因此这些圈边缘1306将被保留。

在示例实施方式中,顺序的循环旋转(其中对角线以该顺序被参考)可以使用二维表来记录对于每行的h矩阵信息,如下所示:

此处,有对于每个唯一子矩阵(sm)指数的列,并且在垂直方向列出对那个sm的对角线。系统从左到右运行通过sm指数,并且对于每个sm指数系统以循环方式运行通过不同的对角线(如上所述,在子矩阵中可能有高达4个对角线)。对于运行通过这些对角线的开始点(在垂直维度)通过迭代指数、以sm中出现的对角线的数量为模进行给出。例如,如果有2个对角线(diag0和diag1),那么在第一迭代中,1÷2=0余1,所以diag1将被首先参考,并且在第二迭代中,2÷2=1余0,所以另一个对角线diag0将被首先参考等。这意味着在每个迭代中,不同的对角线变成最后被处理;并且因此,如果在两个对角线中有冲突位节点,那么这些位节点将循环得到参与不同校验节点的机会。

表中示出的格式可以包含未使用的位置,因为并非每个sm都具有最大数的对角线,然而,存储该表要求的空间可以减小,如果表的尺寸是根据码可配置的。如果没有多对角线,那么不需要“对角线数”行,并且表减小至2行。如果码中的对角线的最大数少于4,那么用于记录对角线的行的数量可以相应地减小。这对存储器进行了相当有效的使用,因为低速率码具有大量的sm行,但是其还趋向于在每行具有更少的非空sm和更少的多对角线。

在上述示例中,已假定了cnb尺寸pcnb被选择为子矩阵尺寸s的整数约数。对于诸如gb20600的一些码而言,其使用的子矩阵尺寸是素数(s=127),这是不可能的。在这样的实例中,子矩阵内的cnb的数量保持整数;然而,cnb尺寸根据其在h矩阵内的位置而变化。在很多示例中,除了最后一个的所有cnb将具有恒定尺寸,进而,最后的cnb将具有略微不同的尺寸(例如更小的尺寸)。这比具有不同尺寸的很多cnb更有效,并且减小控制系统的复杂性。此外,为了将效率最大化,cnb尺寸也尽可能接近匹配解码器内可用的处理路径的数量(即,校验节点处理系统的数量p)。

如果含有共同的一个或多个位节点的两个cnb被顺序处理,那么其可能变得需要停顿,以保证在处理第二cnb之前,来自第一cnb的位节点已返回λram。一般而言,处理cnb的顺序不对码的性能产生影响,并且因此为了将该停顿最小化,cnb处理的顺序可以对于每个代码进行选择,以避免在顺序处理的cnb中共享的位节点。

上文给出2个公式用于计算校验对位节点消息(公式(1))、以及位节点值的更新(公式(2))。公式(1)使用被称为“最小和近似”的近似,并且这大大简化了用于校验对位节点消息的下面的公式,其包括从连接的位节点接收的所有消息的总和(在该迭代中,在校验节点i),排除了该消息被发送到的位节点j:

其中,和r[i]是连接至校验节点i的位节点的指数组。

用于sign(rij[k])的表达式是在qj'i[k]消息的符号位(即,2个同样的符号=+、2个不同的符号=-)上的xor函数的有效类型。第二,tanh函数的总和可以被更换为简单最小,这得出:

上述公式(1)中的符号校正因子δij基于公式(4)所示的符号的xor函数确定。

该公式减小了校验对位消息要求的存储,因此所有该消息具有等于最小接收的位对校验消息量级的量级,除了回到供应该最小量级的位节点的消息。对该位节点的消息的量级是下个最小接收的量级。因此,对于校验节点的校验对位消息数据可以用以下形式存储:最小量级、下个最小量级、供应最小量级的位节点的指数、以及符号位的组。

假定llr被公式化,使得+ve值代表0并且–ve值代表1,因此对一堆llr执行奇偶校验,被预测的位的符号可以通过执行上述xor符号函数而获得。该奇偶校验的置信度大致等于在被合并的llr中发现的最低置信度;因为这是“链条中最弱的一环”。

然而,公式(4)给出的平均的量级稍微有些高。虽然公式(3)给出了更精确的答案,但是计算量非常大。为了改善使用最小和近似(和公式(4))的给出结果,作为结果的公式可以修改一个变量偏移,其依赖于被考虑的最小值(即公式(4)中的min值)与其他位对校验节点消息中下个最小量级之间的差异。使用2个固定参数测量该差异值以产生偏移:maxoffset和diffscaling。差异越大,要减去的偏移越小。diffscaling设定差异值,在其上没有偏移将被减去;并且maxoffset设定最大的偏移(当差异是0时将被减去)。因此,减去的偏移可以如下给出:

max{0,maxoffset-(d×diffscaling)}(5)

其中d是差异值。

考虑该偏移,上述公式(1)可以修改为:

其中:

jmin和jnextmin是位节点指数,其分别引起量级m′i[k]和m″i[k](m′i[k]是最小位对

校验消息量级,并且m″i[k]是下个最小量级)

η′和η″是分别对于最小和下个最小值指明的maxdiff常数值

φ′和φ″是分别对于最小和下个最小值指明的diffscaling常数值

尽管本文如上所述参考用于ldpc解码器描述了对最小和近似的修改(如公式(6)所示),但应该理解的是该修改的算法可以被用于很多不同应用和情况,例如,每当公式(1)可能使用时。如上所述,通过使用该修改,而非标准最小和算法,计算的作为结果的llr更精确。

图14示出如上所述ldpc解码器的操作的示例方法的流程图(例如如图5、7和9所示)。如上所述,方法包括从λram访问对于校验节点块的软判决数据(框1402),其中,λram包括多个独立可寻址存储器,并且存储器的总宽度大于p*q。该数据可以使用混排系统(如上所述的)进行访问,并且然后被提供(由混排系统)至并行操作的多个校验节点处理系统(框1404)。这些校验节点处理系统并行产生对软判决数据的更新(框1406),并且更新的软判决数据然后存储回λram(框1408)。

如上所述,在在单个周期中访问比校验节点处理系统要求的更多的数据时,由混排系统丢弃不希望的数据(框1410)。混排系统对访问的数据重新排序(框1412),并且该重新排序保证了数据以一致顺序输送给校验节点处理系统,并且还可以包括封闭通过丢弃数据而在数据中创建的任何缺口(在框1410中)。

如上所述,修改的最小和算法(例如公式(6))可以被用于产生对软判决数据的更新(在框1406中),并且这涉及使用标准最小和算法(框1414),进而从最小和算法的输出减去变量偏移(框1416)。如上所述,变量偏移可以使用上述公式(5)计算。作为结果的校验对位节点消息然后被用于计算更新的软判决数据(框1418)。

本领域的技术人员将认识到,被利用来存储程序指令的存储设备可以跨网络分布。例如,远程计算机可以存储描述为软件的处理的示例。本地或者终端计算机可以访问远程计算机,并下载软件的部分或者全部来运行程序。替代地,本地计算机可以根据需要下载软件的多个片段,或者在本地终端执行一些软件指令,并在远程计算机(或者计算机网络)执行一些。本领域的技术人员还将认识到,通过利用本领域的技术人员已知的常规技术,全部或者一部分软件指令可以由专用的电路进行,诸如dsp、可编程逻辑阵列等。

存储用于实现公开的各方面的机器可执行数据的存储器可以是非暂时性介质。非暂时性介质可以是易失性或者非易失性的。易失性非暂时性介质的示例包含基于半导体的存储器,诸如sram或者dram。技术的示例可以被用于实现非易失性存储器,包含光学和磁存储器技术、闪存存储器、相变存储器、电阻式ram。

对“逻辑”的特定参考是指执行一个或者多个功能的构造。逻辑的示例包含被布置为执行这些功能的电路。例如,该电路可以包含晶体管和/或在制造处理中可用的其他硬件元件。该晶体管和/或其他元件可以被用于形成实现和/或含有存储器的电路或者构造,以示例的方式,诸如有寄存器、触发器、或者锁存器、诸如布尔运算的逻辑运算符、诸如加法器、乘法器的数学运算符、或者移位器、以及互连。该元件可以被提供为定制电路或者标准单元库、宏、或者其他级别的抽象。在具体布置中,这些元件可以互连。逻辑可以包含固定功能的电路、以及可以被编程以执行一个或者多个功能的电路;该编程可以从固件或者软件更新或控制机制提供。识别为执行一个功能的逻辑还可以包含实现组成功能或者子处理的逻辑。在示例中,硬件逻辑具有实现固定的功能操作、或多个操作、状态机或者处理的电路。

本文给出的任何范围或者设备值可以延伸或更改,而不会丧失追求的影响,如本领域技术人员可知的那样。

将要理解的是,上述好处和优点可以涉及一个实施例,或者可以涉及若干实施例。实施例不限于解决任何或者所有描述的问题的实施例、或者具有任何或者所有描述的好处和优点的实施例。

任何对“一个”项目的参考是指这些项目的一个或多个。本文使用的术语“包括”意味着包含提到的方法块或者元件,但是该块或者元件不包括排外的清单,并且装置可以含有额外的块或者元件,并且方法可以含有额外的操作或者元件。

本文描述的方法的步骤可以以任何适当的顺序进行,或者在适当时同时进行。图中的框间的箭头示出方法步骤的一个示例顺序,但是不意图排除其他顺序,或者并行执行多个步骤。另外,可以从任何方法删除单独块,而没有脱离本文描述的主题的精神和范围。上述任何示例的各方面可以与描述的任何其他示例的各方面合并,以形成其他示例,而不会影响追求的效果。图的元件被示出为由箭头连接,但应该理解的是这些箭头只是示出在元件之间的通信流的一个示例(包含数据和控制消息)。元件之间的流可以是任何方向或者双向。

将要理解的是,上述描述的优选的实施例仅以示例的方式给出,并且本领域的技术人员可以做出各种修改。尽管在上面以某种程度的特定性或者参考一个或多个单独实施例描述了各种实施例,但本领域的技术人员可以对公开的实施例做出大量变化,而不脱离本发明的精神或者范围。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1