利用校正子解码分量代码的用于G-LDPC码的位翻转解码器的制作方法

文档序号:17047797发布日期:2019-03-05 19:44阅读:204来源:国知局
利用校正子解码分量代码的用于G-LDPC码的位翻转解码器的制作方法

本申请要求于2017年8月31日提交的申请号为62/553,008,发明名称为“利用校正子解码分量代码的用于g-ldpc码的位翻转解码器”的临时申请的优先权,该临时申请被转让给本申请的受让人,并且该临时申请的全部内容通过引用而明确地并入本文。

本申请涉及一种通用低密度奇偶校验(g-ldpc)解码方法。



背景技术:

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

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

固态硬盘(ssd)使用多层nand闪存装置进行持久性存储。然而,多层nand闪存装置本质上并不可靠,并且通常需要使用ecc以用于ecc奇偶校验位的额外存储空间为代价,来显著提高数据可靠性。需要越来越高效的ecc,其为最低的奇偶校验需求提供最多的数据保护。通用低密度奇偶校验码(g-ldpc)非常适于在如nand闪速存储器装置的二进制输出信道上使用。然而,如果g-ldpc解码器被设计成针对最差情况校正能力进行校正,则该解码器可能不够快速并且在处理周期和功耗方面可能具有高硬件复杂度,尤其是在大量的待校正错误不落入这种最差情况下。因此,需要用于g-ldpc码的低复杂性解码方案,其使得对具有少量错误的大多数nand读取进行快速解码,而没有被设计用于在最差情况下进行校正的解码器的硬件复杂度。



技术实现要素:

描述了一种与现有g-ldpc解码系统相比,降低实施成本(例如,功耗、处理周期等)的同时提高g-ldpc解码的性能(例如,减少延时)的技术。更具体地,描述了用于在降低实施成本的同时提高性能的系统和方法。在示例中,解码系统接收包括多个分量码字的g-ldpc码字。解码系统通过执行解码操作来对g-ldpc码字进行解码。解码操作包括识别保护g-ldpc码字的位的分量码字。解码操作还包括基于来自第一校正子表的预定义校正子来更新分量码字的当前校正子。基于位在分量码字或g-ldpc码字中的至少一个中的位置而从第一校正子表中确定预定义校正子。解码操作还包括基于来自第二校正子表的错误位置对分量码字中的位执行位翻转操作。基于分量码字的当前校正子从第二校正子表中确定错误位置。基于确定错误位置对应于位的位置来执行位翻转操作。

附图说明

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

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

图2示出了根据本公开的某些实施例的用于g-ldpc码的示例性奇偶校验矩阵。

图3示出了根据本公开的某些实施例的在g-ldpc码字的解码中使用的示例性校正子表。

图4示出了根据本公开的某些实施例的基于校正子表对ldpc码字进行解码的示例性流程。

图5示出了根据本公开的某些实施例的基于校正子表对ldpc码字进行解码的更详细的示例性流程。

图6示出了根据本公开的某些实施例的基于校正子表对ldpc码字进行解码的示例性虚拟码。

图7示出了根据本公开的某些实施例的用于定义第一校正子表的示例性流程。

图8示出了根据本公开的某些实施例的用于定义第二校正子表的示例性流程。

图9描述了可使用的、根据本公开的某些实施例的系统的一个潜在实施方式。

具体实施方式

描述了本公开的实施例,其相对于现有g-ldpc解码系统,降低了实施成本(例如,功耗、处理周期等),同时提高了g-ldpc解码的性能(例如,减少延时)。鉴于现有解决方案采用相对慢、复杂的解码器(例如,针对最坏情况校正能力设计的解码器)以对任何g-ldpc码字进行解码而不考虑错误数量,但是本文的实施例涉及使用较快、较简单的解码器来对g-ldpc码字进行解码。仅当解码失败时(例如,错误数量超出较简单解码器的错误校正能力)才使用较慢、较复杂的解码器(例如,具有较高错误校正能力的解码器)。这转变成用于校正大多数错误的快速且低复杂性的解码方案。因此,因为与较慢、较复杂的解码器相比,较快、较简单的解码器被显著地更频繁地使用,所以g-ldpc解码系统在解码延时、功耗、处理周期等方面的整体性能得到提高。

在示例中,较快、较简单的解码器使用两个校正子表来对g-ldpc码字进行解码。第一校正子表根据位的位置识别g-ldpc码字的分量码字的预定义校正子。在本文中该校正子表被称为s-表。第二校正子表根据分量码字的校正子识别位错误位置。在本文中该校正子表被称为l-表。

在接收g-ldpc码字时,从g-ldpc码字中选择位并且从g-ldpc码字中识别保护该位的分量码字。对于当前解码迭代中的这些分量码字中的每一个分量码字,位在分量码字中的位置用于从s-表中查找针对该位置的预定义校正子,并且基于预定义校正子来更新分量码字的当前校正子。接下来,基于更新的当前校正子并基于l-表来对位的可靠性进行更新。具体地,对于位具有值“1”的、分量码字中的每一个,分量码字的当前校正子用于在l-表中查找位错误位置,并且如果位错误位置与位在分量码字中的位置相同,则该位的可靠性增加一个值。如果可靠性超过阈值,则该位被翻转。因为位翻转,所以通过使用s-表,保护该位的分量码字的当前校正子被进一步更新。如果当前校正子等于零,则输出该位的解码值。否则,针对该位的解码不成功并且针对其它位重复解码至当前迭代。在下一迭代中重复对当前迭代中未被成功解码的位的解码,直到达到最大解码迭代次数。此时,如果任何位未被成功解码,则该位的解码失败。较慢、较复杂的解码器可以用于对这种失败位进行解码。

使用较快、较简单的解码器存在许多技术优势。例如,其位翻转方案依赖于基于s-表和l-表来对位的可靠性进行更新。与较慢、较复杂解码器的典型位翻转方案相比,该方案执行得更快速且更简单。因此,采用两个解码器的g-ldpc解码系统将以较高的频率使用较快、较简单的位翻转方案,并且仅在需要时才使用较慢、较复杂的位翻转方案。因此,相对于仅使用较慢、较复杂的位翻转方案的现有g-ldpc解码系统,该解码系统的整体延时、处理周期和功耗得到了提高。此外,在两个解码系统之间,整体错误校正能力(例如,在位错误率或代码失败率方面)非常相似。换言之,相对于现有解码系统,在位错误率和代码失败率方面不存在明显的性能劣化,但是在延时、处理周期和功耗方面存在显著的性能提高。

图1示出了根据本公开的某些实施例的错误校正系统100的示例性高级框图。在示例中,结合数据存储来描述g-ldpc码。然而,本公开的实施例不限于此。相反,实施例同样适于包括例如数据传输的g-ldpc码的其它用途。在本文中使用的术语“错误校正码(ecc)”是指由将冗余数据或奇偶校验数据添加到消息的过程而生成的码字,使得在传输过程期间或存储期间,即使被引入多个错误时,接收器也能够恢复该消息。错误校正码经常用于通信,以及用于在诸如cd、dvd、硬盘和随机存取存储器(ram)、闪速存储器等的存储系统中的可靠存储。错误校正码可以包括通用低密度奇偶校验码(g-ldpc)。结合图2进一步描述g-ldpc码字的示例。

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

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

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

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

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

图2示出了根据本公开的某些实施例的用于g-ldpc码的示例性奇偶校验矩阵200。g-ldpc是通用ldpc码。ldpc码是由稀疏奇偶校验矩阵h定义的线性分组码,其由0和1组成。本文使用的术语“稀疏矩阵”是指每列和每行中的非零值的数量远小于其维度的矩阵。本文使用的术语“列权重”是指奇偶校验矩阵h的具体列中的非零值的数量。本文使用的术语“行权重”是指奇偶校验矩阵h的具体行中的非零值的数量。通常,如果对应于ldpc码的奇偶校验矩阵中的所有列的列权重相似,则该码被称为“规则”ldpc码。另一方面,如果列权重中的至少一个与其它列权重不同,则ldpc码被称为“非规则”ldpc码。通常,非规则ldpc码的错误校正能力比规则ldpc码的错误校正能力更好。

通常,g-ldpc码放宽施加在ldpc码上的限制。例如,ldpc奇偶校验矩阵的行中的位(包括信息位和奇偶校验位)应当满足奇偶校验方程。对于g-ldpc码,这些位受到形成g-ldpc码字的分量码字保护。属于分量码字的位应当满足该类型分量码字的奇偶校验方程。g-ldpc码字的每一个位受到一个或多个分量码字保护,并且这些分量码字可以,但不必需为不同的类型。例如,g-ldpc码字可以由每一个具有特定错误校正能力“t”的博斯-查德胡里-霍昆格姆(bose-chaudhuri-hocquenghem,bch)码字、汉明(hamming)码字、里德所罗门(rs)码字、ldpc码字形成(例如,全部由t=5的bch码字形成),或者由这些码字的组合形成(例如,t=5的bch码字、t=7的bch码字、汉明码字等的组合)。

如图2所示,g-ldpc码字的奇偶校验矩阵h200包括“n”个列和“m”个行。“n”个列对应于g-ldpc码字的“n”个位(例如,对应于9000个信息位和1000个奇偶校验位)。“m”个行中的每一行对应于多个短分量码字(例如,包括128位bch分量码字)。奇偶校验矩阵h200中的列“k”和行“j”(其中“k”和“j”分别是小于或等于“n”和“m”的正整数)的交点处的值“1”表示g-ldpc码的第k位受到第j行中的分量码字的保护。根据保护第k位的分量码字的奇偶校验方程,第k位可以取值“0”或“1”。

例如,如图2所示,g-ldpc码字由80%的具有第一错误校正能力的bch分量码字210、10%的具有第二错误校正能力的bch分量码字220和10%的汉明分量码字230构成。g-ldpc码的位“x0”(例如,第一位)在第一行j=0中与值“1”相关联、在第二行j=1中与值“0”相关联以及在最后一行j=m-1中与值“1”相关联。因此,该位“x0”受到与第一行相关联的第一bch分量码字210保护,受到与最后一行相关联的汉明分量码字230保护,但不受到与第二行相关联的第二bch分量码字220保护。针对g-ldpc码字的位“x0”,“x0,0”对应于第一bch分量码字210中的位值。根据第一bch分量码字210的奇偶校验方程,“x0,0”可以是“0”或“1”。类似地,针对g-ldpc码字的位“x0”,“xm-1,0”对应于汉明分量码字230中的位值。根据汉明分量码字230的奇偶校验方程,“xm-1,0”可以是“0”或“1”。

进一步地,g-ldpc码字的第k位在g-ldpc码字中具有位置“k”。在本文中该位置是指位在g-ldpc码字中的全局位置。分量码字的每一个比g-ldpc码字短很多(例如,128位长或更短)。第k位在保护第k位的分量码字中也具有特定位置。在本文中该特定位置是指位在分量码字中的本地位置。例如,对于k=2,345,其在g-ldpc码字中的全局位置为2,345,而在分量码字中的本地位置可以是26。

全局位置可从奇偶校验矩阵h200中获得。例如,全局位置对应于列序号。基于受分量码字保护的位来跟踪本地位置。例如,如果分量码字保护第3、24、36列(以及其它列)中的位,则具有全局位置3的位具有本地位置1,具有全局位置24的位具有本地位置2,具有全局位置36的位具有本地位置3,等等。根据分量码字的奇偶校验方程,位于本地位置1、2和3的位的值可以是“0”或“1”。

图3示出了根据本公开的某些实施例的在g-ldpc码字的解码中使用的示例性校正子表。特别地,图3示出了s-表310和l-表350。结合图6和图7进一步描述生成这两个校正子表的示例性流程。

s-表310将预定义校正子与位的位置相关联。该关联可以与位的本地位置和/或全局位置相关。在示例中,s-表310包括条目。一个列列出了可能的预定义校正子的条目。一个列列出了可能的本地位置的条目。一个列列出了可能的全局位置的条目。s-表310中的行包括三个条目,并且示出三个条目中的一个条目中的特定预定义校正子、三个条目中的另一个条目中的特定本地位置以及三个条目中剩余的一个条目中的相应全局位置之间的关联。

l-表350将预定义校正子与一个或多个位的一个或多个错误位置相关联。该关联可以与错误的位的本地位置和/或错误的位的全局位置相关。在示例中,l-表350包括条目。一个列列出了可能的预定义校正子的条目。一个列列出了可能的本地位错误位置的条目。一个列列出了可能的全局位错误位置的条目。l-表350中的行包括三个条目,并且示出三个条目中的一个条目中的特定预定义校正子、三个条目中的另一个条目中的一个或多个特定本地位错误位置以及三个条目中剩余的一个条目中的一个或多个相应全局位错误位置之间的关联。

虽然图3示出了每个校正子表包括三个不同的列,但其它的表配置也是可能的。例如,两个表中的每一个表可将预定义校正子与本地位置或本地位错误位置相关联(如果适用的话)。可与两个校正子表分开存储本地位置和全局位置之间的映射以及本地位错误位置和全局位错误位置之间的映射。此外,两个校正子表可被存储为单个校正子表(例如,具有三个列的单个校正子表:示出预定义校正子的列、本地位置的列和本地位错误位置的列)。

在示例中,可以由解码系统即时(onthefly)生成一个或两个校正子表。例如,在接收g-ldpc码字时,作为解码的一部分,解码系统可生成校正子表。在另一示例中,可以由计算机系统离线生成一个或两个校正子表并且存储在解码系统的存储空间中。例如,一旦定义了g-ldpc编码结构(例如,奇偶校验矩阵、分量码字的类型等),计算机系统就生成校正子表。然后将校正子表导入解码系统的存储空间(例如,解码系统的本地存储器)。此后,一旦接收到用于解码的g-ldpc码字,解码系统就从其存储空间中访问校正子表以支持解码。

虽然图3仅描述了两个校正子表,但可以定义更多的表。例如,针对每一种类型的分量码字定义s-表和l-表。重新参照图2的示例,其中的g-ldpc码字包括三种类型的分量码字。因此,可以生成六个校正子表(三个s-表和三个l-表,其中每一种类型的分量码字与三个s-表中的一个以及三个l-表中的一个相关联)。

图4和图5示出了用于g-ldpc码字的快速、低复杂性位翻转解码方案的示例性流程,其中该方案针对包括在g-ldpc码字中的每一种类型的分量码字使用s-表和l-表。g-ldpc解码系统被描述为执行示例性流程的具体操作。特别地,该系统可以被实施为包括解码器的错误校正系统,诸如图1的错误校正系统100的一部分。g-ldpc解码系统可具有特定硬件配置以执行错误校正系统的一些操作,其包括解码器(例如,实施快速、低复杂性位翻转解码方案的解码器)的操作。可选地或另外地,g-ldpc解码系统可包括配置有特定指令的通用硬件。在示例中,g-ldpc解码系统包括一个或多个处理器以及一个或多个存储器。存储器存储计算机可读指令以实现针对快速、低复杂性位翻转解码方案的功能。在由系统的处理器执行指令时,指令引起系统执行功能。存储在存储器中的指令与底层处理器结合在一起表示用于执行功能的装置。虽然以特定的顺序示出了操作,但是操作的其他布置也是可能的,并且可以跳过一些操作,这对于本领域技术人员来说是显而易见的。为了解释清楚,结合对单个g-ldpc码字进行解码并且关注于对该码字的位的解码来说明示例性流程。然而,示例性流程类似地应用于对g-ldpc码字的所有位进行解码以及应用于对多个g-ldpc码字进行解码。此外,如果解码失败,则解码可以改为较慢、较复杂的位翻转解码方案(例如,针对更高错误校正能力设计的解码方案)。

图4示出了根据本公开的某些实施例的基于校正子表对ldpc码字进行解码的示例性流程400。示例性流程400在操作402中开始,其中解码系统接收g-ldpc码字。例如,解码系统从存储系统(例如,图1的存储系统120)访问g-ldpc码字以开始解码。g-ldpc码字包括多个分量码字。分量码字可以,但不必需为相同类型(例如,不同类型的bch码字、汉明码字、rs码字、ldpc码字等)。

在操作404中,解码系统识别保护g-ldpc码字的位的分量码字。例如,多个分量码字的子集可以基于g-ldpc码字的奇偶校验矩阵来保护位。解码系统基于奇偶校验矩阵从子集中识别分量码字。例如,该位为g-ldpc码字中的第k位,并且分量码字位于奇偶校验矩阵的第j行中。如果第k列与第j行的交点为1并且属于分量码字,则解码系统识别出分量码字保护该位。

在操作406中,解码系统基于来自第一校正子表(例如,与分量码字的类型相关联的s-表)的预定义校正子来更新分量码字的当前校正子。例如,基于位在分量码字或g-ldpc码字中的至少一个中的位置,解码系统从第一校正子表中确定预定义校正子。具体地,解码系统可根据表的位置列识别位在g-ldpc码字中的全局位置(例如,位置“k”)和/或位在分量码字中的本地位置(例如,如果表使用本地位置而非全局位置,则识别本地位置。相反地,如果表使用全局位置而非本地位置,则识别全局位置)。解码系统通过查找与位的位置相对应的条目并从校正子列中的相应条目读取预定义校正子,来从第一校正子表中检索预定义校正子。更新校正子包括将校正子与位的接收值(例如,“0”或“1”)相乘,并且对当前校正子和预定义校正子执行xor运算(例如,对两个校正子进行xor运算)。

在操作408中,解码系统基于来自第二校正子表(例如,l-表)的错误位置,对分量码字中的位执行位翻转操作。例如,解码系统基于分量码字的当前校正子来从第二校正子表中确定错误位置。基于确定错误位置与位的位置相对应来执行位翻转操作(例如,将位的接收值从“0”翻转到“1”或从“1”翻转到“0”)。具体地,解码系统通过查找与分量码字的当前校正子相对应的条目并从位错误位置列中的相应条目中读取错误位置,来从第二校正子表中检索错误位置(例如,根据l-表的列,检索全局位错误位置或本地位错误位置)。解码系统将该错误位置与位的位置进行比较(例如,将全局位错误位置与位的全局位置进行比较,或将本地位错误位置与位的本地位置进行比较)。如果在位置之间存在匹配,则解码系统可以确定位应当被翻转。基于位的可靠性(如结合图5进一步描述的),将位进行翻转,随后更新分量码字的当前校正子。

在操作410中,基于被翻转的位,解码系统输出解码的g-ldpc码字。例如,解码系统迭代地重复对位的解码,并且类似地,对g-ldpc码字的其它位进行解码。换言之,解码系统重复对g-ldpc码字解码的操作404至408。如果解码成功(例如,根据校正子值),则输出解码的位。如果一些位的解码不成功并且达到最大解码迭代次数,则解码系统使用较慢、较复杂的位翻转解码方案来对这些位进行解码。

图5示出了根据本公开的某些实施例的基于校正子表对ldpc码字进行解码的更详细的示例性流程500。流程500的一些操作被实施为图4的示例性流程400的子操作。因此,两个流程400和500之间存在相似之处。为了简洁,本文不再重复相似之处。

示例性流程500在操作502中开始,其中解码系统将判决位初始化为来自g-ldpc码字的位的接收值。在示例中,在完成g-ldpc码字的解码时,判决位是解码系统输出的解码的位。在该操作中,每一个判决位对应于g-ldpc码字的位。接收值是基于对来自存储位的存储系统的位的读取。因此,每一个判决位被初始化为对相应位读取的值。

在操作504中,解码系统将g-ldpc码字的多个分量码字的当前校正子初始化为零。例如,每一个当前校正子都是向量(或一些阵列)要素(element)并且对应于分量码字中的一个。解码系统在每一个向量中将要素设置成零。

在操作506中,解码系统基于来自第一校正子表的预定义校正子来更新当前校正子。例如,每一个当前校正子都与分量码字相关联,进而分量码字又与s-表相关联。来自s-表的预定义校正子被用于初始化中。具体地,对于g-ldpc码字的位,解码系统识别多个分量码字中的一组分量码字,其中该组分量码字保护g-ldpc码字的该位。根据保护该位的g-ldpc码字的分量码字的数量,该组可以包括多个分量码字(例如,第一分量码字和第二分量码字)。对于这些分量码字中的每一个(例如,对于第一分量码字和第二分量码字中的每一个),解码系统识别g-ldpc码字的该位在分量码字中的位置(例如,该位在第一分量码字中的第一本地位置和位在第二分量码字中的第二本地位置),并且根据该位在分量码字中的位置而从第一校正子表中确定预定义校正子,基于预定义校正子来更新分量码字的当前校正子给出。例如,对于第一分量码字,该位在分量码字中的本地位置用于从相关s-表中检索预定义校正子。该预定义校正子与本地位置中的位的值(例如,根据读取第一分量码字的值“0”或值“1”)相乘。对乘法结果和第一分量码字的当前校正子进行xor运算。换言之,如果该位的当前值为“1”,则对当前校正子和预定义校正子进行xor运算。否则,当前校正子保持不变。重复该进程以更新第二分量码字的当前校正子,以此类推以更新保护该位的所有分量码字的当前校正子。同时对g-ldpc码字的所有其它位重复相同的操作。

在操作508中,解码系统使解码迭代的计数器递增。例如,g-ldpc码字的位翻转解码被迭代至最大迭代次数。因此,解码系统从第一次迭代开始并且重复解码直到成功或直到达到最大次数。计数器用于跟踪解码迭代的当前次数。这样,如果这是第l次迭代,则计数器从先前的值“l-1”增加1,使得计数器由于该解码迭代而变为“l”。

在操作510中,解码系统选择g-ldpc码字的位。在示例中,选择是按顺序的(例如,解码系统从对g-ldpc码字的第一位进行解码开始,然后对第二位进行解码,以此类推至对g-ldpc码字中的最后一位进行解码)。

在操作512中,解码系统基于第二校正子表(例如,l-表)中的错误位置以及该位和相应判决位来更新该位的当前可靠性。例如,在迭代解码开始之前,将当前可靠性初始化为零。在每一次解码迭代中,当前可靠性都被更新。具体地,对于保护位的特定分量码字,更新包括基于确定了根据分量码字的当前校正子的错误位置对应于该位在分量码字中的位置,将值(例如,1)增加至当前可靠性。另外,更新包括将该位与对应于其的判决位进行xor运算,并将结果(例如,如果两个位具有相同值,则为值“0”,否则为值“1”)增加至当前可靠性。因为对保护该位的所有分量码字重复该进程,因此,通过增加判决位和该位的xor运算结果,并且通过在l-表表示根据这些分量码字中的一个分量码字的当前校正子的错误位置对应于该位在该分量码字中的位置的任何时候,增加值“1”,来更新当前可靠性。

例如,对于保护该位的第二分量码字,解码系统识别第二分量码字,基于第二分量码字的当前校正子来从第二校正子表中确定第二错误位置,确定第二错误位置对应于该位在第二分量码字中的位置,并且基于确定第二错误位置对应于该位在第二分量码字中的位置,来将值(例如,1)增加至当前可靠性。

相反地,解码系统识别保护g-ldpc码字的位的第三分量码字,基于第三分量码字的当前校正子来从第二校正子表中确定第三错误位置,确定第三错误位置不同于该位在第三分量码字中的位置,并且基于确定第三错误位置不同于该位在第三分量码字中的位置,来避免将值(例如,1)增加至当前可靠性(例如,解码系统不更新当前校正子或者增加零值)。

在操作514中,解码系统将当前可靠性值与阈值进行比较。如果比较结果表示当前可靠性大于阈值,则执行操作516以翻转该位。否则,解码系统循环回到操作510,并在当前解码迭代中选择用于解码的下一位。

可以使用不同的技术来定义阈值。在示例中,阈值基于解码迭代的计数而改变。例如,阈值随着解码迭代的计数的增加而减小。在每一次解码迭代中,阈值被定义为分量码字的错误校正能力的函数(function)(例如,错误校正能力的百分比)。例如,对于具有错误校正能力5的bch分量码字,对于前10次解码迭代,阈值可以被设置成百分之八十(例如,4),然后对于接下来的5次解码迭代,阈值可以被设置成百分之六十(例如,3),以此类推。可以基于解码系统的性能模拟(例如,通过改变阈值并选择导致期望的延时和错误校正失败表现的阈值,来模拟延时和错误校正失败)来启发式地定义具体的百分比。

在操作516中,在解码迭代中,解码系统基于位的当前可靠性大于阈值,来对位执行位翻转操作。例如,解码系统对与具有值“1”的位相对应的判决位进行xor运算。这样,如果判决位为“0”,则将其翻转为“1”,反之亦然。

在操作518中,基于被翻转的和被分量码字保护的位,解码系统基于第一校正子表来更新保护该位的分量码字的当前校正子。例如,因为位被翻转,所以所有这些分量码字的当前校正子可能需要更新。为此,解码系统识别保护该位的各种分量码字。对于这些分量码字中的每一个,解码系统识别该位在分量码字中的位置(例如,本地位置),基于该位的位置从相应s-表中识别出分量码字的预定义校正子,并且将分量码字的当前校正子与该预定义校正子进行xor运算。xor运算的结果是分量码字的、被更新的当前校正子。对保护该位的所有分量码字重复该进程。

例如,解码系统识别保护该位的第二分量码字,确定该位在第二分量码字中的位置,基于该位在第二分量码字中的位置,从第一校正子表(例如,s-表)确定第二分量码字的第二预定义校正子,并且通过对第二当前校正子和从第一校正子表确定的、第二分量码字的第二预定义校正子执行xor运算来更新第二分量码字的第二当前校正子。

在操作520中,解码系统确定在当前解码迭代中,保护该位的分量码字的所有当前校正子是否为零。如果是,则执行操作520。否则,在当前迭代处,该位的解码不成功,并且解码系统循环回到操作510以选择下一位来进行g-ldpc码字的解码。

在操作522中,解码系统基于确定当前校正子为零,来输出判决位(例如,在操作516中翻转的)。在这种情况下,该位的解码成功并且g-ldpc码字的解码移动到下一位。因此,解码系统循环回到操作510以用于下一位。

当然,对于在当前解码迭代中未被成功解码的位,解码系统通过递增计数而循环回到操作508。如果计数没有超过最大解码迭代次数,则重复操作510至522以对在先前的解码迭代中未被成功解码的位进行解码。如果计数超过阈值,则表示这些位的解码失败。

图6示出了根据本公开的某些实施例的基于校正子表对ldpc码字进行解码的示例性虚拟码600。虚拟码600对应于结合图5的示例性流程500所描述的操作。在虚拟码600中使用以下符号:

(1)m为g-ldpc码字中的分量码字的数量;

(2)n为g-ldpc码字中的码-位的总数量;

(3)m[k]表示第k码-位所属的分量码字组;

(4)表示对应于第j校验节点的校正子-向量;

(5)lj表示第j校正子-解码表,例如,根据第j分量码字的校正子-向量,为必须被翻转以对分量码字进行解码的码-位组;

(6)sj表示第j校正子-编码表,例如,根据码-位k,分量码字的相应校正子向量为sj[k];

(7)lmax∈in为最大迭代次数;

(8)为信道输出(二进制向量);

(9)为所有码位(二进制向量)的当前判决;

(10)[t]表示任何t∈in的组{1;2;3;:::;t};并且

(11)θl∈in为第l次迭代的阈值。

图7和图8示出了用于定义s-表和l-表的示例性流程。计算机系统被描述为执行示例性流程的特定操作。具体地,该系统可以是离线系统(例如,在实验室模拟环境内),使得校正子表被离线开发,然后存储在解码系统中。可选地,计算机系统可以是解码系统本身,使得校正子表被即时生成。在这两种情况下,计算机系统可具有特定硬件配置来执行示例性流程的操作。可选地或另外地,计算机系统可包括配置有特定指令的通用硬件。在示例中,计算机系统包括一个或多个处理器以及一个或多个存储器。存储器存储计算机可读指令以实现针对示例性流程的操作的功能。当由计算机系统的处理器执行指令时,指令引起系统执行功能。存储在存储器中的指令与底层处理器结合在一起表示用于执行功能的装置。虽然以特定的顺序示出操作,但是操作的其它布置是可能的,并且可以跳过一些操作,这对于本领域技术人员来说是显而易见的。为了解释清楚,结合单个s-表和单个l-表来说明示例性流程。然而,示例性流程类似地适用于生成不同数量的校正子表,其中通常针对每种类型的分量码字生成s-表和l-表。

图7示出了根据本公开的某些实施例的用于定义第一校正子表(例如,s-表)的示例性流程700。示例性流程700从操作702开始,其中计算机系统将模拟分量码字初始化为“0”。例如,应当生成s-表以用于对包括特定类型的分量码字(例如,128位bch分量码字)的g-ldpc码字进行解码。因此,计算机系统根据分量码字的类型(例如,128位bch分量码字)生成模拟分量码字,并且将该模拟分量码字的所有位设置成零。

在操作704中,计算机系统将模拟码字的单个位设置成“1”。例如,计算机系统选择其中一个位,并将该位设置成“1”,而所有其它位均保持为“0”。选择可以是按顺序的(例如,从第一位开始,然后第二位,以此类推)。换言之,所选择的位在模拟分量码字中具有特定的位置,使得基于不同的选择,所选择的位的位置跨越整个模拟分量码字。

在操作706中,计算机系统对单个位被设置成“1”的模拟分量码字的校正子进行计算。例如,模拟分量码字具有奇偶校验矩阵。通过将奇偶校验矩阵的转置矩阵与单个位被设置成“1”的模拟分量码字相乘来计算校正子。

在操作708中,计算机系统将校正子添加到第一校正子表的条目。该条目与单个位在模拟分量码字中的位置相关联。例如,s-表包括位置列和校正子列。位置列具有关于位的位置的条目。然后计算出的校正子被存储在校正子列中的相应条目中。

在操作710中,计算机系统将下一单个位设置成“1”,并将当前单个位重置成“0”。以这种方式,模拟分量码字中一次只能有一位为“1”。然后,计算机系统循环回到操作704,迭代地执行操作704至708,使得通过将具有值“1”的单个位改变在模拟分量码字的不同位位置处来计算校正子,并且更新s-表以包括与这些位位置相关联的、计算出的校正子。

在操作712中,在完成校正子计算和针对模拟分量码字中的不同位位置的表更新时,计算机系统输出第一校正子表。在示例中,该表被发送到解码系统的存储空间。

图8示出了根据本公开的某些实施例的用于定义第二校正子表(例如,l-表)的示例性流程800。示例性流程800在操作802开始,其中计算机系统针对模拟分量码字,生成模拟分量码字的位的值的可能组合。如上文结合图7的示例性流程700所描述,模拟分量码字对应于g-ldpc码字中期望的分量码字的类型(例如,128位bch分量码字)。在示例中,模拟分量码字具有特定长度(例如,多个位)。可能组合对应于模拟分量码字的位可以采用的可能值。

在操作804中,计算机系统将可能组合输入到位翻转解码器(例如,实施结合图5和图6描述的位翻转解码方案的解码器)。在操作806中,计算机系统从位翻转解码器接收可能组合的一个或多个错误位置和校正子。

在操作808中,计算机系统将一个或多个错误位置添加到l-表的第一条目。例如,该条目处于l-表的位错误位置列中。在操作810中,计算机系统将接收到的可能组合的校正子添加到第二校正子表的第二条目。例如,该条目处于l-表的校正子列中。在l-表中,第一条目和第二条目关联在一起(例如,在相同行中)。然后,计算机系统循环回到操作804,以迭代地执行操作804至810,使得各种可能组合被输入到位翻转解码器,并且利用与位错误位置和相关联的校正子相对应的条目更新l-表。

在操作812中,在针对不同可能组合,完成确定位错误位置和校正子时,计算机系统输出第二校正子表(例如,l-表)。在示例中,该表被发送到解码系统的存储空间。

图9描述了可使用的、根据本公开的某些实施例的系统的一个潜在实施方式。图9仅仅说明了本公开的实施例并且不限制如权利要求所述的本公开的范围。在一个实施例中,系统为计算机系统900,其通常包括显示屏910、计算机920、用户输出装置930、用户输入装置940、通信接口950等。

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

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

用户输出装置930包括用于从计算机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公司(advancedmicrodevices,inc)的皓龙tm或速龙xptm微处理器等。进一步地,可考虑其它类型的操作系统,诸如微软公司的等,太阳微系统公司的solaris、linux、unix等。在其它实施例中,上述技术可在芯片或辅助处理板上实施。

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

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

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

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

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