用于LDPC码的改进的最小和解码的制作方法

文档序号:17298161发布日期:2019-04-03 04:38阅读:151来源:国知局
用于LDPC码的改进的最小和解码的制作方法

本申请要求于2017年9月25日提交的申请号为62/562,901,名称为“用于ldpc码的最小和解码”的临时申请的优先权,该临时申请被转让给本申请的受让人,并且该临时申请的全部内容通过引用而明确地并入本文。



背景技术:

数据完整性是任何数据存储装置和数据传输的重要特征。为包括nand闪速存储器装置的各种类型的数据存储装置推荐使用强大的错误校正码(ecc)。ecc也经常用于数据传输进程中。

错误校正码(ecc)是指将冗余数据或奇偶校验数据添加到消息的代码,使得即使在传输进程期间或存储期间引入多个错误时,接收器也能够恢复该消息。通常,ecc能够校正多达正被使用的代码的容量的错误。

低密度奇偶校验(ldpc)码是ecc的示例。通常,ldpc解码器使用迭代解码进程来对信息位进行解码。迭代解码消耗时间并且承担(levy)处理负担。在迭代和积算法(spa)情况下的ldpc码显示出色的错误校正性能(例如,位错误率、代码失败率等)。然而,spa的实施成本(例如,电路面积、功耗、处理周期、等待时间等)可能令人望而却步。对于低成本实施,使用迭代最小和(ms)解码器对ldpc码进行解码。虽然ms解码器具有较低的实施成本(例如,电路面积、功耗、处理周期、等待时间等),但与spa相比,其导致性能退化(例如,位错误率、代码失败率等)。



技术实现要素:

本发明描述了用于改进与最小和解码有关的ldpc解码的性能(例如,位错误率、代码失败率等),同时降低与和积算法(spa)解码有关的实施成本(例如,电路面积、功耗、处理周期、等待时间等)的技术。更具体地,描述了用于在降低实施成本的同时提高性能的系统和方法。在示例中,系统执行涉及基于ms的解码方法并在ldpc解码器上实施的低密度奇偶校验(ldpc)方法。ldpc方法包括ldpc解码器的校验节点从ldpc解码器的第一变量节点接收第一值,其中第一值表示ldpc码字的第一位的位值的可靠性。第一变量节点对应于第一位,并且被连接到校验节点。该方法还包括由校验节点确定第一值等于由校验节点针对ldpc解码器的第二变量节点存储的最小值。第二变量节点对应于ldpc码字的第二位,并且连接到校验节点。该方法还包括:由校验节点响应于确定第一值等于最小值而通过根据调整值至少更新最小值来生成调整后的最小值。该方法还包括由校验节点向ldpc解码器的第三变量节点发送调整后的最小值。第三变量节点对应于ldpc码字的第三位,并且连接到校验节点。第三位基于调整后的最小值进行解码。

在示例中,ldpc解码器为软输入解码器。调整值从0.6至0.9的范围内进行选择。例如,将调整值设置为0.75。在另一示例中,ldpc解码器为硬输入解码器。将调整值设置为整数。例如,将整数设置为一。在又一示例中,ldpc解码器使用迭代ldpc解码。调整值基于迭代ldpc解码的迭代次数而改变。例如,调整值随着迭代次数的增加而增加。

附图说明

通过参考以下附图可理解各个实施例的本质和优点。在附图中,相似的部件或特征可具有相同的参考标记。进一步地,可通过在参考标记后面加上短划线和区分相似部件的第二标记来区分相同类型的各个部件。如果在说明书中仅使用了第一参考标记,则不管第二参考标记如何,描述适于具有相同第一参考标记的任何一个相似部件。

图1示出了根据本公开的特定实施例的错误校正系统的示例性高级框图。

图2a和图2b示出了根据本公开的特定实施例的示例性奇偶校验矩阵和表示奇偶校验矩阵的示例图。

图3示出了现有技术中可用的最小和(ms)与和积算法(spa)解码中的示例性校验节点更新(cnu)。

图4示出了根据本公开的特定实施例的修改的最小和(ms)解码中的示例性校验节点更新(cnu)。

图5示出了根据本公开的特定实施例的用于使用修改的最小和(ms)解码作为用于对ldpc码字进行解码的校验节点更新(cnu)的一部分的示例性流程。

图6示出了根据本公开的特定实施例的基于对使用最小和解码的校验节点更新和使用和积算法解码的校验节点更新进行模拟,来定义调整值的示例性流程600。

图7示出了根据本公开的特定实施例的使用最小和解码与和积算法(spa)解码的示例性校验节点更新的模拟。

图8示出了根据本公开的特定实施例的使用典型最小和解码的cnu与使用修改的最小和解码的cnu之间的性能比较的示例。

图9描述了根据本公开的特定实施例的可使用的系统的一个可能的实施。

具体实施方式

本公开的实施例涉及改进与最小和(ms)解码有关的ldpc解码的性能(例如,位错误率、代码失败率等),同时描述了降低与和积算法(spa)解码有关的实施成本(例如,电路面积、功耗、处理周期、等待时间等)。换言之,鉴于现有方案实施ms解码或spa解码时在性能和实施成本之间进行折衷,本文的实施例避免了这种折衷。相反地,两种解码方法中最好的方法成为可能:以低成本实施改进性能。这转换成ldpc解码系统,其在实现类似于spa解码器的位错误率和代码失败率的同时,具有类似于ms解码器的较小的电路面积、较低的功耗、更少的处理周期、较短的等待时间等。

在示例中,ldpc解码系统实施修改的ms解码方法。特别地,典型的ms解码被用作迭代ldpc解码的一部分。然而,当校验节点检测到从两个变量节点传递的两个传入值相等并且是从其它连接节点传递的值之中的最小值时,校验节点对其发送给这些其它连接节点的值进行调整。这些值表示码字中位的位值的可靠性(例如,根据符号,值越高,位为“0”或“1”的可能性更大)。例如,这些值对应于位对数似然比(llr)的大小。校验节点通过调整值来调整该最小值以生成调整后的最小值并将该调整后的最小值发送出去,而非发送最小值。例如,最小值减少“0.75”或其它调整值。然后基于该调整后的最小值进行解码。

使用修改的ms解码方法(例如,调整后的最小值而非最小值)具有许多技术优点。具体而言,ms解码倾向于高估节点之间交换的值,这使与spa解码有关的性能降低。在校验节点接收两个相等且最小的值的情况下,对ms解码的过高估计相对于spa解码是最大的。因此,通过调整检测到事件时的最小值,可以减少或甚至消除这种较大的过高估计,以接近spa解码的性能。在示例中,调整值将(ms解码被高估的)最小值减小到spa解码可能会计算的可能的最小值。因此,ms解码的性能得到显着提高,并且变得类似于spa解码的性能,而不会对spa解码的实施成本产生影响。

出于说明的目的,并且返回参考调整值“0.75”的示例,对软输出迭代ldpc解码的模拟表示当检测到上述事件时,ms解码性能与spa解码性能之间出现最大差距。图7示出了这种模拟和差距的示例。调整值“0.75”对应于差距的最大大小。因此,ms解码被高估的最小值减小“0.75”以变得等于spa解码被更准确估计的最小值。此后,在解码中使用这一更精确的调整后的最小值,从而提高ms解码的性能。在下面的附图中进一步说明修改的ms解码方法的这些和其它特征。

图1示出了根据本公开的特定实施例的错误校正系统100的示例性高级框图。在示例中,描述关于数据存储的ldpc码。然而,本公开的实施例不限于此。相反,实施例同样适于包括例如数据传输的ldpc码的其它用途。

ldpc码是通过由0和1组成的稀疏奇偶校验矩阵h定义的线性块码。本文使用的术语“稀疏矩阵”指其中每列和每行中的非零值的数量远小于其维度的矩阵。本文使用的术语“列权重”指在奇偶校验矩阵h的特定列中的非零值的数量。本文使用的术语“行权重”指在奇偶校验矩阵h的特定行中的非零值的数量。通常,如果对应于ldpc码的奇偶校验矩阵中所有列的列权重相似,则该码被称为“规则”ldpc码。另一方面,如果至少一个列权重与其它列权重不同,则ldpc码被称为“不规则”ldpc码。通常,不规则ldpc码比规则ldpc码提供更好的错误校正能力。

还根据ldpc码的构建方式来描述ldpc码。随机计算机搜索结构或代数结构是可能的。随机计算机搜索结构描述具有通过基于随机计算机程序设计的奇偶校验矩阵的ldpc码。代数结构意味着奇偶校验矩阵已经基于组合方法构建。准循环ldpc(qc-ldpc)码属于后一种构建方法。qc-ldpc码的一个优势在于其在编码过程方面实施起来相对简单。qc-ldpc码的主要特征在于奇偶校验矩阵由循环子矩阵组成,其可以基于单位矩阵或更小的随机矩阵。置换向量也可以用来创建循环子矩阵。

如图所示,ldpc编码器110接收包括期望被存储在存储系统120中的数据的信息位。经ldpc编码的数据通过ldpc编码器110被输出并写入到存储系统120。

在各个实施例中,存储系统120可包括各种存储类型或介质,诸如(例如,磁性)磁盘驱动储存器、闪存等。在一些实施例中,这些技术被用在收发器中,并且数据通过有线和/或无线信道发送和接收,而非写入存储器或从存储器读取。在这种情况下,在码字的传输期间可能引入所接收到的码字中的错误。

当所存储的数据被请求或以其它方式期望时(例如,通过存储数据的应用或用户),检测器130从存储系统120接收数据。接收到的数据可能包括一些噪声或错误。检测器130对接收到的数据执行检测,并输出判决和/或可靠性信息。例如,软输出检测器对每一个所检测的位输出可靠性信息和判决。另一方面,硬输出检测器输出关于每一个位的判决而不提供对应的可靠性信息。作为示例,硬输出检测器可输出特定位为“1”或“0”的判决,而不指示检测器对该判决的确信程度或确定程度。相反,软输出检测器输出判决和关于该判决的可靠性信息。通常,可靠性值指示检测器对给出的判决的确定程度。在一个示例中,软输出检测器输出对数似然比(llr),其中符号指示判决(例如,正值对应于“1”判决,负值对应于“0”判决),并且大小(magnitude)指示检测器对该决定的确信程度或确定程度(例如,较大的大小指示较高可靠性或确定性)。

判决和/或可靠性信息被传递到使用判决和可靠性信息来执行ldpc解码的ldpc解码器140。软输入解码器利用判决和可靠性信息两者来对码字进行解码。硬解码器仅利用解码器中的判决值来对码字进行解码。由ldpc解码器140生成的经解码的位被传递给适当的实体(例如,请求它的用户或应用)。通过适当的编码和解码,信息位与经解码的位匹配。

在各个实施例中,可使用包括如下的各种技术来实施所示出的系统:专用集成电路(asic)、现场可编程门阵列(fpga)和/或通用处理器(例如,先进的risc机器(arm)内核)。

ldpc码通常由二分图表示。一组节点中,变量节点或位节点对应于码字的元素,而例如校验节点的另一组节点对应于码字所满足的奇偶校验约束。通常随机选择边缘连接。如果在图中避免了较短长度的循环,则ldpc码的错误校正能力被提高。在(r,c)规则码中,n个变量节点(v1、v2、……、vn)中的每一个具有到r个校验节点的连接,并且m个校验节点(c1、c2、……、cm)中的每一个具有到c个位节点的连接。在不规则ldpc码中,校验节点度不一致。类似的,变量节点度也不一致。在qc-ldpc码中,奇偶校验矩阵h被构建成p×p矩阵的块,使得块中的位仅参与块中的一个校验方程,并且块中的每一个校验方程仅涉及来自该块的一个位。在qc-ldpc码中,码字循环移位p导致另一个码字。此处p为方阵的大小,该方阵为零矩阵或循环矩阵。这是对循环码的概括,其中码字循环移位1结果是另一个码字。p×p矩阵的块可以是零矩阵或循环地进行移位的大小为p×p的单位矩阵。

根据本公开的特定实施例,图2a示出了示例性奇偶校验矩阵h200,图2b示出了与奇偶校验矩阵200对应的示例性二分图。在该示例中,奇偶校验矩阵200具有六个列向量和四个行向量。网络202示出了对应于奇偶校验矩阵200的网络并表示二分图。包括例如tanner图的各种类型的二分图是可能的。

通常,网络202中的变量节点对应于奇偶校验矩阵200中的列向量。网络202中的校验节点对应于奇偶校验矩阵200的行向量。节点之间的互连由奇偶校验矩阵200的值确定。具体地,“1”指示对应的校验节点和变量节点具有连接。“0”指示没有连接。例如,奇偶校验矩阵200中最左边的列向量和自顶部开始第二行向量中的“1”对应于变量节点204与校验节点210之间的连接。

消息传递算法通常用于对ldpc码进行解码。现有技术中存在消息传递算法的多种变化,诸如最小和(ms)算法、和积算法(spa)等。如图2b所示,消息传递使用变量节点和校验节点的网络。如图2a所示,变量节点和校验节点之间的连接通过奇偶校验矩阵200的值进行描述并对应于该值。

可执行硬判决消息传递算法。在第一步骤中,变量节点的每一个将消息发送到一个或多个与其连接的校验节点。在这种情况下,消息是每一个变量节点认为是其正确值的值。

在第二步骤中,每一个校验节点使用其先前从变量节点接收到的信息来计算待发送到与其连接的变量节点的响应。这一步骤可被称为校验节点更新(cnu)。响应消息对应于校验节点基于从连接到该校验节点的其它变量节点接收到的信息而认为变量节点应该具有的值。该响应使用奇偶校验方程来计算,该方程使连接到特定校验节点的所有变量节点的值的总和为零(模2)。

此时,如果在所有校验节点处满足所有方程,则解码算法声明找到了正确的码字并终止。如果未找到正确的码字,则利用来自变量节点的另一更新使用它们从校验节点接收到的消息继续进行迭代,以通过多数原则来判决在其位置处的位是否应该为0或1。然后,变量节点将该硬判决消息发送给与其连接的校验节点。继续迭代直到找到正确的码字,根据码字的(例如,解码码字的)校验子来执行一定数量的迭代,或者在没有找到正确的码字的情况下执行最大数量的迭代。应该注意的是,软判决解码器进行类似的操作,但是在校验节点和变量节点中传递的每一个消息还包括每一个位的可靠性。

可执行示例性消息传递算法。在该示例中,l(qij)表示由变量节点vi发送到校验节点cj的消息;l(rji)表示由校验节点cj发送到变量节点vi的消息;并且l(ci)表示每一个变量节点vi的初始llr值。对每一个l(qij)的变量节点处理可以通过以下步骤完成:

(1)从存储器中读取l(ci)和l(rji)。

(2)计算

(3)计算每一个l(qi-sum)–l(rij)。

(4)输出l(qi-sum)并回写到存储器。

(5)如果这不是存储器的最后一列,则转到步骤1并将i递增1。

(6)计算奇偶校验和(例如,校验子),如果它们都等于零,迭代的次数达到阈值并且奇偶校验和大于另一阈值,或者迭代的次数等于最大极限,则停止;否则,执行校验节点处理。

针对每一个l(rji)的校验节点处理可以执行如下:

(1)从存储器中读取一行qij。

(2)按如下计算l(rj-sum):

αij=sign(l(qij)),βij=|l(qij)|,

(3)针对校验节点计算各自的

(4)将l(rji)回写到存储器。

(5)如果这不是存储器的最后一行,则转到第一步骤并将j递增1。

图3示出了现有技术中可用的最小和(ms)与和积算法(spa)解码中的示例性校验节点更新(cnu)。示例示出了在软判决解码器的情况下的cnu。如上所述,类似的cnu可用于硬判决解码器。

如图所示,图3示出了图2b的校验节点(由元素310示出)和变量节点(由元素320示出)的子集。校验节点c0与三个变量节点v0、v2和v5连接,其中这些连接取决于奇偶校验矩阵。校验节点c0从连接到其的变量节点接收消息322。在图3的说明中,校验节点c0分别从变量节点v0、v2和v5接收消息m0、m2和m5。当然,消息的数量和来源取决于变量节点和校验节点之间的连接。

通常,校验节点ci从与其连接的k个变量节点v接收k个消息m。每一消息包括符号和值(例如,来自变量节点vj的mj={符号,值})。mj的值表示对应于变量节点vj的位“j”的位值的可靠性。符号对应于值的符号。例如,值的符号提供与位相关的llr。因此,消息mj={-,5}表示位“j”的llr为“-5”。换言之,消息中的值为llr的大小,消息中的符号为llr的符号。对于每一个码字位,llr表示对零“0”或一“1”的置信度。对于给定的码字位,正llr值可以表示对于该位“0”具有更高的置信度,负llr值可以表示对于该位“1”具有更高的置信度,并且llr值为零可以表示对于该位“0”或“1”具有相等可能性。

返回参照图3,校验节点c0至少通过执行cnu330来响应消息m0、m2和m5。执行cnu只使用ms算法或spa算法两者中的一种。在任一情况下,校验节点c0分别将响应消息r0、r2和r5发送回到变量节点v0、v2和v5。图3使用元素312来共同地指代响应消息r0、r2和r5。与传入消息m类似,传出响应消息包括符号和值(例如,到变量节点vj的rj={符号,值})。rj的值表示对应于变量节点vj的位“j”的位值的可靠性。该符号对应于该值的符号。

为了响应例如来自变量节点v5的消息m5,校验节点c0使用来自与其连接的其它变量节点(例如,m0、m2)的消息来执行cnu。基于至少对来自消息m0和m2的符号应用xor操作来设置响应消息r5中的符号。通过对来自消息m0和m2的值应用如下函数来计算响应消息r5中的值:如果使用ms算法,则应用最小和函数或者如果使用spa算法,则应用spa函数

针对spa算法,针对响应消息r5使用的spa函数该函数在硬件中实施较为复杂,因此相对于最小和函数的硬件实施而言,其需要更大的电路面积并消耗更多的电力。如果以软件在通用处理器上实施,则相对于最小和函数在通用处理器上的软件实施而言,spa函数使用更多的处理周期并具有更多的等待时间。

针对ms算法,针对响应消息r5使用的ms函数在通用计算机上以硬件或软件实施要简单得多。总体策略是校验节点c0不能比最低置信度的变量节点具有更高的置信度值。因此,校验节点通过发送其从其它变量节点v0和v2接收到的最小的值来对消息m5作出响应。特别地,校验节点c0在ldpc解码器可访问的存储空间中存储来自与其连接的变量节点的消息中接收到的最小的两个值以及这两个变量节点的索引(index)。当针对变量节点v5执行cnu时,校验节点c0将消息m5中的值与存储在存储空间中的其它两个最小值进行比较。如果消息m5中的值大于这两个值,则校验节点c0在响应消息r5中将两个最小的值中的最小值返回给变量节点v5。如果消息m5中的值大于两个最小的值中的一个但小于另一个,则校验节点c0仍在响应消息r5中将两个最小的值中的最小值返回给变量节点v5,并且利用消息m5中的值和变量节点v5的索引替换存储空间中第二最小的值及其索引。如果消息m5中的值小于两个最小的值,则校验节点c0仍在响应消息r5中将两个最小的值中的最小值返回给变量节点v5。然后,去除两个最小的值中的最大值,先前最小的最小值成为第二最小的值,消息m5中的值成为新的最小的最小值。索引也在存储空间中进行更新。

此处也一般地,从与其连接的k个变量节点v接收k个消息m的校验节点ci向k个变量节点响应回k个响应消息r,其中每一个响应消息对应于这些变量节点中的一个。校验节点ci执行cnu以响应来自变量节点vj的消息mj。该cnu涉及确定位“j”的符号和可靠性值,然后符号和可靠值将被包括在响应rj中。通过至少对来自与校验节点ci连接的其它变量节点的其它接收到消息mh≠j中的符号应用xor运算来确定符号。通过将spa函数的ms函数应用于其它接收到的消息mh≠j(例如,rj:(mh≠j)或(mh≠j))中的值来确定该值。

针对spa算法,用于响应消息rj的spa函数被表示为其中“h”进行变化以对应于除校验节点正响应的变量vj以外的、与校验节点ci连接的变量节点vh。相比之下,用于响应消息rj的ms函数将从存储空间中可获得的并基于其它接收到的消息mh≠j中的值确定的最小值返回给变量节点vj。可以看出,对于以硬件或软件在通用计算机上实施和执行,返回从存储空间中可获得的最小值比spa函数更容易。

为了说明ms解码的使用,考虑分别包括值“1”、“4”和“3”的消息m0、m2和m5的示例。为了清楚起见,假设另一变量节点v7连接到校验节点c0。来自m0和m5的两个最小的值为1和2。校验节点c0将这两个值存储为“min1=1”和“min2=3”并且存储相应的索引(例如,对于变量节点v0,“idx1=0”,对于变量节点v5,“idx2=5”)。当从变量节点v7接收到包括值“10”的消息m7时,校验节点c0确定最小值为“min1=1”,并且在响应消息r7中将该最小值返回给变量节点v7。因为消息m7中的值“10”大于两个最小的值“min1”和“min2”,所以不需对这些存储的值或存储的索引进行另外的更新。

为了说明的目的,本文接下来提供使用ms算法的cnu的示例性伪代码:

图4示出了根据本公开的特定实施例的修改的最小和(ms)解码中的示例性校验节点更新(cnu)。示例示出了在软判决解码器的情况下的cnu。类似的cnu可用于如上所述的硬判决解码器。

如图所示,图4示出了图2b的校验节点(由元素410示出)和变量节点(由元素420示出)的子集。与图3一样,校验节点c0与三个变量节点v0、v2和v5连接,其中这些连接取决于奇偶校验矩阵。校验节点c0从与其连接的变量节点接收消息422。同样如图3所示,校验节点c0分别从变量节点v0、v2和v5接收消息m0、m2和m5,并且利用响应消息r0、r2和r5对这些消息中的每一个作出响应(与元素412共同示出)。当然,消息的数量和来源取决于变量节点和校验节点之间的连接。

为了响应来自与其连接的变量节点的消息,校验节点ci通过使用来自与其连接的其余变量节点的消息来执行cnu430。对响应消息中的符号的cnu操作与上文所述类似。相比之下,对响应消息中的值的cnu操作存在变化。

在示例中,对于在两个存储的最小的值彼此不同(例如,“min1≠min2”)时的所有事件,cnu430使用如上所述的ms函数然而,在检测到两个最小的值相等并因此两者都是最小值(例如,“min1=min2”)的事件时,cnu430使用修改的ms函数来近似spa函数将输出的最小值。

特别地,校验节点ci通过利用调整值来调整最小值(例如,“min1”或“min2”)而生成调整后的最小值(例如,“调整后的最小值=min1-调整值”),并在响应消息中返回调整后的最小值,而非返回最小值。

出于说明的目的,考虑当消息m0和m2中的值相等并且是最小值(例如,“min1=min2=1”)时的示例。在那种情况下,校验节点c0可能会将这两个值和对应变量节点的索引存储在存储空间中(例如,“idx1=0和idx2=2”)。当从变量节点v5接收消息m5时,校验节点c0从消息m0和m2返回调整后的最小值而非最小值。为了清楚起见,考虑“0.75”作为调整值的示例。因此,调整后的最小值为“min1-0.75=1-0.25=0.25”。响应消息r5包括该值“0.25”而非“min1”。

继续该示例,如果消息m5中的值大于最小值(例如,m5中的值比min1=min2大),则不需要进行另外的更新。然而,如果该值小于先前存储的最小值(例如,m5中的值比min1=min2小),则消息m5中的值成为新的最小的值,并且先前存储的最小值成为第二最小的值。变量节点v5的索引替换在存储空间中针对最小值存储的两个索引中的一个(例如,“idx1=5”和“idx2=0或2”)。

下面的伪代码示出了对“getmsgctov”操作进行改变,以在软件中实现修改的ms解码:

可以基于各种参数来定义调整值,使得调整后的最小值与spa解码会根据cnu计算出的值相同或相似。一个参数涉及解码器的类型。如果使用软输入解码器,则调整值从一定范围的值中选择,并且可以是十进制值。如在下一附图中进一步示出的,该范围可以基于对使用ms解码的cnu和使用spa解码(具有软解码)的cnu的模拟来定义。在示例中,值的范围处于0.6和0.9之间。在特定的示例中,将调整值设置为0.75。如果使用硬输入解码器,则调整值从一定范围的整数中选择,并且可以仅为整数。该范围也可以基于模拟,但利用硬解码来限定。在示例中,整数的范围处于一至五之间。在特定4的示例中,将调整值设置为一。

另一参数涉及迭代ldpc解码中的迭代次数。在示例中,定义规则并将其存储在存储空间中。该规则指定调整值随着迭代次数的增加而增大。例如,调整值从0.6开始,并且当迭代次数达到二十时,该调整值逐渐增加到0.9。当然,使用该参数假设调整值是动态的。尽管如此,调整值可以是静态的(例如,设置为0.75,并且不随迭代次数而改变)或者是混合的(例如,设置为0.75并且不改变,但直到迭代次数超过阈值次数时才被使用,诸如五次迭代)。

图5示出了根据本公开的特定实施例的使用修改的最小和(ms)解码作为用于对ldpc码字进行解码的校验节点更新(cnu)的一部分的示例性流程500。ldpc解码系统被描述为执行示例性流程500的操作。特别地,该系统可以被实施为包括解码器的错误校正系统,诸如图1的错误校正系统100,的一部分。ldpc解码系统可具有特定的硬件配置以执行错误校正系统的一些操作,包括解码器(例如,诸如图1的ldpc解码器140的迭代解码器)的操作。可选地或额外地,ldpc解码系统可包括配置有特定指令的通用硬件。在示例中,系统包括一个或多个处理器以及一个或多个存储器。存储器存储计算机可读指令以实现针对ldpc解码系统的功能。指令在由系统的处理器执行时导致系统执行功能性。存储在存储器中的指令与下层处理器结合在一起表示用于执行功能性的装置。虽然以特定的顺序示出操作,但是操作的其它布置是可能的,并且可以跳过一些操作,这对于本领域技术人员来说是显而易见的。为了解释清楚,示例性流程500使用与三个变量节点连接的校验节点来示出。然而,示例性流程500类似地应用于较大且不同数量的校验节点和变量节点。

如图所示,示例性流程500在操作502处开始,其中ldpc解码系统接收ldpc码字。例如,ldpc解码系统访问存储在存储空间中的ldpc码字。ldpc解码系统包括以专用硬件实施或以软件在通用硬件上实施的ldpc解码器。ldpc解码器使用变量节点和校验节点来对ldpc码字进行解码。解码是迭代的,并依赖于变量节点和校验节点之间的消息传递。响应于从变量节点接收到的消息,校验节点执行依赖于修改的最小和函数的cnu操作。

在操作504中,ldpc解码器的校验节点从ldpc解码器的第一变量节点接收第一值,第一值表示ldpc码字的第一位的位值的可靠性。例如,对应于第一位的第一变量节点连接到校验节点。作为迭代解码及其消息传递的一部分,校验节点从第一变量接收第一消息。第一消息包括第一位的第一符号和第一值。第一符号和第一值表示第一位的llr。换言之,第一值是llr的大小。该位值表示该位为“0”或“1”。

在操作506中,校验节点确定第一值等于校验节点针对ldpc解码器的第二变量节点存储的最小值。例如,第二变量节点对应于ldpc码字的第二位,并且被连接到校验节点。该第二值先前基于校验节点从第二变量节点接收到的第二消息进行存储,并且当时与校验节点在其它消息中接收到的值进行比较并被确定为最小的值。第二消息还可以包括第二位的第二符号。第二值从ldpc解码器可访问的存储空间中可获得。该存储空间还存储第二变量节点的索引。

在操作508中,校验节点响应于确定第一值等于最小值而通过根据调整值至少更新最小值来生成调整后的最小值。在示例中,只有当值等于最小值时才执行该操作。如果两个值不相等,则典型的ms解码在不使用调整值的情况下用于cnu。

调整值可以是静态的,也可以是动态的。如果是动态的,则可以基于ldpc解码迭代的次数来设置调整值。不管怎样,都可以从存储空间获得调整值(例如,如果是静态的,则作为一个值,或者如果是动态的,则作为将特定值与迭代次数相关联的表)。通过从最小值减去调整值来对最小值进行调整。

在操作510中,校验节点向ldpc解码器的第三变量节点发送调整后的最小值。例如,第三变量节点对应于ldpc码字的第三位,并且连接到校验节点。响应于从第三变量节点接收第三消息,可以在响应消息中将调整后的最小值发送给第三变量节点。该第三消息可包括第三位的第三符号和表示第三位的可靠性的第三值。调整后的最小值可在接收该第三消息之前生成,或者可响应于接收到第三消息而生成。

在操作512中,ldpc解码系统对ldpc码字进行解码。例如,ldpc解码器使用由第三变量节点接收的调整后的最小值来对第三位进行解码。该解码还可以使用第三位的符号,其中该符号由第三变量在来自校验节点的响应消息中被接收。类似地,每一个位(例如,ldpc码字的第一位和第二位)根据对应变量节点在来自校验节点的各个响应消息中接收的值和符号来进行解码。解码可以是迭代的,其中变量节点和校验节点之间的消息在多次迭代中交换,直到ldpc码字解码成功或达到解码迭代的最大次数。

为了进一步说明对第一位和第二位的解码,示例性流程500另外的操作(图5中未示出)包括由校验节点将未经调整的最小值发送给第一变量节点和第二变量节点。最小值而非调整后的最小值被用于对第一位和第二位进行解码。

图6示出了根据本公开的特定实施例的用于基于对使用最小和解码的校验节点更新和使用和积算法解码的校验节点更新进行模拟来定义调整值的示例性流程600。系统被描述为执行示例性流程600的特定操作。特别地,该系统可以被实施为用于设计错误校正系统的测试或设计平台的一部分。该系统可具有特定的硬件配置以执行示例性流程600的一些操作。可选地或另外地,系统可包括配置有特定指令的通用硬件。在示例中,系统包括一个或多个处理器以及一个或多个存储器。存储器存储计算机可读指令以实现针对ldpc解码系统的功能。指令在被系统的处理器执行时导致系统执行功能性。存储在存储器中的指令与下层处理器结合在一起表示用于执行功能性的装置。虽然以特定的顺序示出操作,但是操作的其它布置是可能的,并且可以跳过一些操作,这对于本领域技术人员来说是显而易见的。

如图所示,示例性流程600从操作602开始,在操作602中系统改变第一最小值同时保持第二最小值。例如,第一最小值和第二最小值表示位值的可靠性。特别地,这些值中的每一个都可以是从变量节点发送到校验节点的消息中的值。通过与由校验节点接收的其它值进行比较,可以确定第一值和第二值是校验节点接收的两个最小值。这样,这两个值表示校验节点针对使用ms解码执行cnu会存储的值“min1”和“min2”。第二最小值可以被设置为常数(例如,八),而第一最小值可以在包括该常数的范围内(例如,零至十五)变化。

在操作604中,当改变第一最小值并保持第二最小值时,系统测量第一cnu的第一输出和第二cnu的第二输出。例如,第一cnu使用ms解码。第二cnu使用spa解码。对于给定第一最小值和恒定第二最小值,第一输出是来自于执行第一cnu的校验节点的响应消息中包括的值。类似地,对于相同的给定第一最小值和恒定第二最小值,第二输出是来自于执行第二cnu的校验节点的响应消息中包括的值。换言之,第一输出表示在使用ms解码时校验节点将作出响应的值,第二输出表示在使用spa解码时校验节点将作出响应的值。两个输出之间的差表示由于针对cnu使用ms解码而导致的过高估计。

在操作606中,系统生成示出作为可变第一最小值的函数的测量值的曲线。例如,曲线图轴对应于第一最小值,而曲线图的纵轴对应于第一输出和第二输出。图7进一步示出了这种曲线图的示例。这样,cnu输出被绘制为第一最小值的函数。

在操作608中,系统基于测量值确定第一输出和第二输出之间的差距。例如,差距是第一输出(对应于ms解码)与第二输出(对应于spa解码)之间的差。如图7所示,可以将差绘制为第一最小值的函数。

在操作610中,系统基于差距设置调整值。例如,将调整值设置为差距的最大大小或者从差距中导出范围(例如,诸如在差距的峰值附近加/减百分之二十)。

图7示出了根据本公开的特定实施例的使用最小和解码与和积算法(spa)解码的示例性校验节点更新的模拟。示出了四个曲线图。顶部的两个曲线图示出了通过在零与十五之间改变第一最小值702并保持第二最小值704恒定来模拟cnu输出。左上角的曲线图将此常数设置为8,同时右上角的曲线图将此常数设置为12。

在这两个顶部的曲线图中,第一输出针对第一最小值绘制,并且对应于使用ms解码的cnu。该绘图使用曲线710示出。类似地,第二输出针对第一最小值绘制,并且对应于使用spa解码的cnu。该绘图使用曲线720示出。

底部的两个曲线图对应于顶部的两个曲线图,并且示出两个输出之间的差。特别地,当第二最小值704被设置为八时,左下角的曲线图将第一输出与第二输出之间的差绘制为第一最小值702的函数。相比之下,当第二最小值704被设置为十二时,右下角的曲线图将第一输出与第二输出之间的差绘制为第一最小值702的函数。底部曲线图中的曲线720表示差。曲线720的峰值722表示两个输出之间的差距或差的最大大小。

如四个曲线图所示,无论第一最小值和第二最小值的实际大小如何,当这两个最小值相同时(例如,当第一最小值=第二最小值=8(左侧曲线图)和12(右侧曲线图))两个输出之间出现最大差距。如底部曲线图所示,该最大差距大约为“0.75”。因此,可以将调整值设置为“0.75”,并且在校验节点确定从变量节点接收到的消息中的两个最小值相等时使用。以这种方式,ms解码生成的最小值减小“0.75”以近似spa解码可能会生成的最小值(例如,通过最小化或闭合两个输出之间的差距)。

图8示出了根据本公开的特定实施例的使用典型最小和解码的cnu与使用修改的最小和解码的cnu之间的性能比较的示例。横轴对应于码字中的错误的数量。纵轴对应于代码失败率。曲线810示出了使用典型的ms解码的cnu的性能(例如,根据作为错误数量函数的代码失败率)。曲线820示出了使用修改的ms解码的cnu的性能。如图所示,使用修改的ms解码的cnu的性能相当出众(例如,对于所有数量的错误,具有较低的代码失败率)。

图9描述了根据本公开的特定实施例的可使用的系统的一个可能的实施。图9仅仅是对本公开的实施例的说明,并不限制如所附权利要求所述的本公开的范围。在一个实施例中,系统为通常包括监视器910、计算机920、用户输出装置930、用户输入装置940、通信接口950等的计算机系统900。

如图9所示,计算机920可以包括经由总线子系统990与多个外围装置通信的处理器960。这些外围装置可包括用户输出装置930、用户输入装置940、通信接口950以及诸如随机存取存储器(ram)970和磁盘驱动器980的存储子系统。

用户输入装置930包括用于将信息输入到计算机920的所有可能类型的装置和机构。这些可包括键盘、小键盘、结合到显示器中的触摸屏、诸如语音识别系统和麦克风的音频输入装置以及其它类型的输入装置。在各个实施例中,用户输入装置930通常被实施为计算机鼠标、轨迹球、跟踪板、操纵杆、无线遥控器、绘图板、语音命令系统、眼睛跟踪系统等。用户输入装置930通常允许用户经由诸如点击按钮等命令来选择出现在监视器910上的对象、图标、文本等。

用户输出装置940包括用于从计算机920输出信息的所有可能类型的装置和机制。这些可包括显示器(例如,监视器910)、诸如音频输出装置的非视觉显示器等。

通信接口950提供到其它通信网络和装置的接口。通信接口950可用作从其它系统接收数据和向其它系统传输数据的接口。通信接口950的实施例通常包括以太网卡、调制解调器(电话、卫星、电缆、isdn)、(异步)数字用户线(dsl)单元、火线接口、usb接口等。例如,通信接口950可联接到计算机网络,联接到火线总线等。在其它实施例中,通信接口950可被物理地集成在计算机920的主板上,并且可以是诸如软dsl的软件程序等。

在各个实施例中,计算机系统900还可包括能够通过诸如http、tcp/ip、rtp/rtsp协议等的网络实现通信的软件。在本公开的可选实施例中,也可使用其它通信软件和传输协议,例如ipx、udp等。在一些实施例中,计算机920包括来自英特尔的一个或多个xeon微处理器作为处理器960。进一步地,一个实施例中,计算机920包括基于unix的操作系统。

ram970和磁盘驱动器980是被配置成存储诸如本公开的实施例的包括可执行计算机代码、人类可读代码等的数据的有形介质的示例。其它类型的有形介质包括软盘,可移动硬盘,诸如cd-rom、dvd和条形码的光学存储介质,半导体存储器,诸如闪速存储器、非瞬态只读存储器(rom)、电池支持的易失性存储器、网络存储装置等。ram970和磁盘驱动器980可被配置成存储提供本公开的功能的基本编程和数据结构。

提供本公开的功能的软件代码模块和指令可被存储在ram970和磁盘驱动器980中。这些软件模块可由处理器960执行。ram970和磁盘驱动器980还可提供用于存储根据本公开使用的数据的存储库。

ram970和磁盘驱动器980可包括多个存储器,其包括用于在程序执行期间存储指令和数据的主随机存取存储器(ram)和其中存储固定的非暂时性指令的只读存储器(rom)。ram970和磁盘驱动器980可包括为程序和数据文件提供持久(非易失性)存储的文件存储子系统。ram970和磁盘驱动器980还可包括诸如可移除闪速存储器的可移除存储系统。

总线子系统990提供用于使计算机920的各个部件和子系统按预期彼此通信的机制。虽然总线子系统990被示意性地示出为单个总线,但总线子系统的可选实施例可利用多个总线。

图9是能够实现本公开的计算机系统的代表。对于本领域普通技术人员将显而易见的是,许多其它硬件和软件配置适用于本公开。例如,计算机可以是台式、便携式、机架安装或平板配置。另外,计算机可以是一系列联网的计算机。进一步地,可考虑使用其它微处理器,诸如奔腾tm或安腾tm微处理器、amd公司的皓龙tm或速龙xptm微处理器等。进一步地,可考虑其它类型的操作系统,诸如微软公司的等,太阳微系统公司的solaris、linux、unix等。在其它实施例中,上述技术可在芯片或辅助处理板上实施。

本公开的各个实施例可以软件或硬件中的逻辑或两者的组合的形式来实施。逻辑可作为一组指令存储在计算机可读存储介质或机器可读的非暂时性存储介质中,该组指令适于引导计算机系统的处理器执行在本公开的实施例中公开的一组步骤。逻辑可形成适于引导信息处理装置执行在本公开的实施例中公开的一组步骤的计算机程序产品的一部分。基于本文提供的公开内容和教导,本领域普通技术人员将理解实施本公开的其它方式和/或方法。

本文描述的数据结构和代码可被部分地或完全地存储在计算机可读存储介质和/或硬件模块和/或硬件设备上。计算机可读存储介质包括但不限于易失性存储器,非易失性存储器,诸如磁盘驱动器、磁带、cd(光盘)、dvd(数字通用光盘或数字视频光盘)的磁性和光学存储装置或现在已知或以后开发的能够存储代码和/或数据的其它介质。本文描述的硬件模块或设备包括但不限于专用集成电路(asic)、现场可编程门阵列(fpga)、专用或共享处理器和/或现在已知或以后开发的其它硬件模块或设备。

本文描述的方法和过程可被部分地或完全地实施为存储在计算机可读存储介质或装置中的代码和/或数据,使得当计算机系统读取和执行代码和/或数据时,计算机系统执行相关的方法和过程。方法和过程也可被部分地或完全地实施在硬件模块或设备中,使得当硬件模块或设备被激活时,它们执行相关的方法和过程。本文公开的方法和过程可使用代码、数据和硬件模块或设备的组合来实施。

虽然为了清楚理解的目的已经详细描述了前述的实施例,但是本公开不限于所提供的细节。存在许多可选方法来实施本公开。所公开的实施例是说明性的而非限制性的。

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