用于解码纠错码的系统和方法
技术领域
本申请涉及用奇偶校验数据编码的码字的解码方法,尤其涉及使用基于解码结果的 校验运算未成功的节点信息来解码码字。
背景技术
许多数据通信或存储系统常见的一个问题是数据的损坏,例如,由于通信信道中的 噪声或存储系统中的写/读过程。解决数据损坏的一种技术是使用纠错码(ECC)或前向纠错 (FEC)码。ECC和FEC将冗余数据或奇偶校验数据添加到用户数据中,即使,例如在传输过程中或由于存储的损坏,一些错误(在所用代码的能力之内)被引入,接收器或读取器也可以恢复用户数据。
多年来已经开发了许多不同的编码方案,例如,汉明码,里德-所罗门码,Turbo码等。最近,低密度奇偶校验(Low Density Parity Check,LDPC)码已经被广泛使用。然而,所有这些代码在运算中都是相当复杂的,仍然需要改进。
发明内容
本申请在这里公开的方法包括:对码字执行硬式判决解码,在硬式判决解码后确定 哪些校验节点校验运算成功以及哪些校验节点校验运算未成功,通过将要处理的至少一个校 验运算未成功的校验节点移动到至少一个校验运算成功的校验节点之前,来调度校验节点处 理顺序;以及根据校验节点处理顺序对码字执行软式判决解码。
根据一个实施例,其中,所述软式判决解码以批量方式处理校验节点,并且通过将包含至少一个校验运算未成功的校验节点的校验节点任意批次排列到仅包含校验运算成功的 校验节点的所有批次之前,来调度所述校验节点处理顺序。
根据一个实施例,所述方法还包括在利用更新的校验节点校验运算信息进行软式判 决解码的每次迭代之后更新所述校验节点处理顺序。
根据一个实施例,所述方法还包括针对所述硬式判决解码的解码结果,为所述码字的 每一个符号位元确定与该符号位元相对应的校验节点中校验运算成功的校验节点数量和校验 运算未成功的校验节点数量;根据所述校验运算成功的校验节点数量和所述校验运算未成功 的校验节点数量,生成所述码字中每一个符号位元相对应的软对数似然比(LLR);以及, 使用软LLR作为输入对码字执行软判决解码。
根据一个实施例,基于所述校验运算成功的校验节点数量与校验运算未成功的校验 节点数量之间的差异来生成所述符号位元相对应的软LLR。
根据一个实施例,所述符号位元的软LLR根据公式P=((#S-#U)*Q+1)*D*X生成,其中 #S是所述校验运算成功的校验节点的数量,#U是所述校验运算未成功的校验节点的数量, Q是缩放因子,D是符号位元的符号值,X是分配给所述符号位元的初始LLR幅度大小,“*”是乘号,选择缩放因子Q和原始LLR幅度X以满足硬件约束。
根据一个实施例,所述硬式判决解码是迭代解码,并且在所述硬式判决解码的每次 迭代之后生成所述软LLR,并且用作所述软式判决解码的输入的所述软LLR是在任意迭代之 后生成的软LLR。
根据一个实施例,所述方法还包括:在第一阵列中记录校验处理未成功的校验节点 和在第二阵列中记录校验处理成功的校验节点,其中通过将要处理的所述第一阵列中记录的 校验节点排列到所述第二阵列中记录的校验节点之前,来调度所述校验节点处理顺序。
本申请在这里公开了另一种方法,包括:对码字执行硬式判决解码;在所述硬式判决解码后确定哪些校验节点校验运算成功以及哪些校验节点校验运算未成功;以及根据所述 校验节点处理顺序对所述码字执行所述软式判决解码。所述软式判决解码以批量方式处理校 验节点,并且通过将包含至少一个校验处理未成功校验节点的至少一个校验节点批次移动到 未包含校验处理未成功校验节点的至少一个校验节点批次之前,来调度所述校验节点处理顺 序;以及
根据一个实施例,所述方法还包括在利用更新的校验节点校验运算信息进行软式判 决解码的每次迭代之后更新所述校验节点处理顺序。
根据一个实施例,所述方法还包括针对所述硬式判决解码的解码结果,为所述码字的 每一个符号位元确定与该符号位元相对应的校验节点中,校验运算成功的校验节点数量和校 验运算未成功的校验节点数量;根据所述校验运算成功的校验节点数量和所述校验运算未成 功的校验节点数量,生成所述码字中每一个符号位元相对应的软对数似然比(LLR);以及, 使用软LLR作为输入对码字执行软判决解码。
根据一个实施例,基于所述校验运算成功的校验节点数量与校验运算未成功的校验 节点数量之间的差异来生成所述符号位元相对应的软LLR。
根据一个实施例,所述符号位元的软LLR根据公式P=((#S-#U)*Q+1)*D*X生成,其中 #S是所述校验运算成功的校验节点的数量,#U是所述校验运算未成功的校验节点的数量, Q是缩放因子,D是符号位元的符号值,X是分配给所述符号位元的初始LLR幅度大小,
“*”是乘号,选择缩放因子Q和原始LLR幅度X以满足硬件约束。
根据一个实施例,所述硬式判决解码是迭代解码,并且在所述硬式判决解码的每次 迭代之后生成所述软LLR,并且用作所述软式判决解码的输入的所述软LLR是在任意迭代之 后生成的软LLR。
根据一个实施例,所述方法还包括:在第一阵列中记录包含校验处理未成功的校验 节点的批次和在第二阵列中记录包含校验处理成功的校验节点的批次,其中通过将要处理的 所述第一阵列中记录的校验节点的批次排列到所述第二阵列中记录的校验节点的批次之前, 来调度所述校验节点处理顺序。
本申请公开了一种系统,包括:硬式判决解码器,包括用于对码字执行硬式判决解码的位翻转控制;以及软式判决解码器,包括:解码顺序调度器,用于:在所述硬式判决解码后确定哪些校验节点校验运算成功以及哪些校验节点校验运算未成功;以及,通过将要处 理的至少一个校验运算未成功的校验节点移动到至少一个校验运算成功的校验节点之前,来 调度校验节点处理顺序;以及,比特节点处理器和校验节点处理器,用于根据所述校验节点 处理顺序对所述码字执行软式判决解码。
根据一个实施例,所述所述解码顺序调度器被配置为以批量方式处理校验节点,并 且通过将包含至少一个校验运算未成功的校验节点的校验节点任意批次排列到仅包含校验运 算成功的校验节点的所有批次之前,来调度所述校验节点处理顺序。
根据一个实施例,所述解码顺序调度器被配置为在利用更新的校验节点校验运算信 息进行软式判决解码的每次迭代之后更新所述校验节点处理顺序。
根据一个实施例,所述系统还包括软对数似然比(LLR)生成器,包括被配置为以下功能的电路:针对所述硬式判决解码的解码结果,为所述码字的每一个符号位元确定与该符 号位元相对应的校验节点中,校验运算成功的校验节点数量和校验运算未成功的校验节点数 量;以及基于校验处理成功的校验节点的数量和校验处理未成功的校验节点的数量,生成符 号值的软对数似然比(LLR),其中,所述软式判决解码器还包括使用软LLR作为输入对所 述码字执行所述软式判决解码。
如权根据一个实施例,所述软LLR生成器被配置为根据公式P=((#S-#U)*Q+1)*D*X生 成软LLR,其中#S是所述校验运算成功的校验节点的数量,#U是所述校验运算未成功的校 验节点的数量,Q是缩放因子,D是符号位元的符号值,X是分配给所述符号位元的初始LLR幅度大小,“*”是乘号,其中,选择缩放因子Q和原始LLR幅度X以满足硬件约束。
本申请在这里公开的另一种方法,包括:对码字执行硬式判决解码的第一迭代;确定哪个(哪些)比特节点没有校验处理未成功的校验节点,哪个(哪些)比特节点有一个或多个校验处理未成功的校验节点,通过将要处理的具有至少一个校验运算未成功的校验节点 的至少一个比特节点移动到不具有校验运算未成功的校验节点的至少一个比特节点之前,来 调度比特节点处理顺序,并且根据所述比特节点处理顺序对所述码字执行硬式判决解码的下 一次迭代。
根据一个实施例,所述硬式判决解码以批量方式处理比特节点,并且通过将包含至 少一个校验运算未成功的校验节点的比特节点任意批次排列到未包含校验运算未成功的校验 节点的每一个批次之前,来调度所述比特节点处理顺序。
根据一个实施例,所述方法还包括:在第一阵列中记录具有一个或多个校验处理未 成功的校验节点的比特节点和在第二阵列中记录不具有校验处理未成功的校验节点的比特节 点,其中通过将要处理的所述第一阵列中记录的比特节点排列到所述第二阵列中记录的比特 节点之前,来调度所述比特节点处理顺序。
根据一个实施例,比特节点处理顺序在每一次迭代之后被更新。
根据一个实施例,所述方法还包括在最终迭代之后将解码结果发送到软判决解码器,其中,软判决解码器被配置为在解码结果中使用检查约束满足信息来调度校验节点处理 顺序,其中未满足的校验节点在满足的校验节点之前处理。
附图说明
图1示意性地示出了根据本申请一个实施例的线性块解码器。
图2A是根据本申请一个实施例的用于码字的Tanner图的图示。
图2B和2C是根据本申请一个实施例的在码字的Tanner图中信息传递的图示。
图3示意性地示出了根据本申请一个实施例的图1的线性块解码器的第一解码器。
图4示意性地示出了根据本申请一个实施例的图1的线性块解码器的第二解码器。
图5示意性地示出了根据本申请一个实施例的LLR的生成。
图6是根据本申请一个实施例的使用所生成的软LLR解码码字的处理的流程图。
图7示意性地示出了根据本申请一个实施例的LDPC码的奇偶校验矩阵。
图8是根据本申请一个实施例的使用校验节点校验运算信息对码字进行解码的流程 的流程图。
图9示意性地示出了根据本申请一个实施例的带有错误纠正的存储系统。
图10示意性地示出了根据本申请一个实施例的带有错误纠正的通信系统。
具体实施方式
现在将参考附图详细描述基于本申请的具体实施例。各个图中的相同元件由相同的 附图标记表示以保持一致性。
本申请提供了用于解码线性分组码的系统和方法,例如但不限于矩形奇偶校验、汉 明码和低密度奇偶校验(LDPC)码。线性分组码可以由m×n矩阵H指定,其中n是码字中的比特数,m是冗余比特的数量(例如,奇偶校验比特)。对于LDPC码,矩阵H可以是具 有低密度非零元素的稀疏矩阵。当满足矩阵方程HcT=0时,n位码字c=[c1,c2, c3,...,cn]是有效码字,其中cT是c的转置,矢量可以被称为c的校验子 (syndrome)。线性分组码也可以通过Tanner图以图形形式表示。对应于m×n矩阵H 的Tanner图可以包括两组顶点:用于码字比特(比特节点)的n个顶点,以及用于奇偶校 验方程(校验节点)的m个顶点。本申请的一个或多个实施例提供了一种线性分组解码方 法,包括对码字执行第一解码,确定比特节点的校验运算成功和未成功的校验节点数量,基 于校验运算成功和未成功的校验节点数量生成用于比特节点的软对数似然比(LLR),并使 用软LLR作为第二解码器的输入执行第二解码。
图1示意性地示出了根据一个实施例的线性分组解码器100。线性分组解码器100可以是复合或级联解码器,其包括第一解码器104和第二解码器106。另外,线性分组解码器100还可以包括码字缓冲器102,软LLR生成器108,仲裁器110和交换缓冲器112。码 字缓冲器102可以是用于码字的临时存储器。可以从,例如通信信道或存储器(诸如内存或 硬盘驱动器),接收码字。码字可以包括有效码字,每个有效码字是具有零的校验子。也就 是说,它们满足矩阵方程HcT=0.然而,码字缓冲器102中的许多码字可能是无效的。也就 是说,这些码字不满足的矩阵方程HcT=0,需要解码成有效的码字。在一个实施例中,线 性分组解码器100可以是LDPC解码器。
第一解码器104可以是要应用于存储在码字缓冲器102中的码字的第一解码器。第一解码器104可以从码字缓冲器102接收码字并确定该码字的校验子是否为零。如果该码字的校验子为零,则该码字不需要被解码并且可以被发送到仲裁器110。仲裁器110可以从线性分组解码器100输出码字。如果码字的校验子不为零,则需要对码字进行解码。第一解码器104可以执行第一解码操作。第一解码操作可以是硬式判决解码操作,其可以是例如迭代解码操作,例如但不限于业内已知的比特翻转算法,或者还有待开发的任何其他技术。如果第一解码操作成功解码码字,则可以将解码的码字发送到仲裁器110,并且仲裁器110可以从线性分组解码器100输出解码的码字。然而,如果第一解码器104不能成功解码码字,则可以将在解码流程期间生成的数据发送到软LLR生成器108。
在一个实施例中,第一解码器104可以设置有预先配置的最大迭代次数,并且第一解码器104可以在确定它不能成功解码码字之前按预先配置的最大迭代次数执行解码操作。 在另一实施例中,第一解码器104可具有收敛确定机制。例如,在每次迭代完成之后,第一 解码器104可以确定码字中是否存在任何改进,例如,更多的校验节点变得满足。如果在一 次迭代或可配置次数的迭代完成之后没有改进,则第一解码器104可以确定它不能成功地解 码码字,并把码字留给第二解码器106解码。
软LLR生成器108可以被配置为基于第一解码器104的解码操作生成软对数似然比(soft log-likelihood ratio,简称LLR)。在一个实施例中,例如,在每次解码操作的迭代完成 之后,对于一个比特节点,码字的一些校验节点的校验运算成功,而该码字的另一些校验节 点的校验运算未成功。软LLR生成器108可以基于校验运算成功的校验节点和校验运算未成 功的校验节点的数量来为比特节点生成软LLR。生成的LLR信息可以被发送到交换缓冲器 112,交换缓冲器112还可以从码字缓冲器102接收码字,并且将LLR信息和对应的码字都 提供给第二解码器106。
在一个实施例中,交换缓冲器112可以从第一解码器104接收经处理的码字。例如,尽管第一解码器104不能成功解码码字,但是在执行每次迭代完成之后可以翻转码字的一个或多个符号位元值。在第一次迭代完成之后被翻转了一个或多个符号位元值的码字可以 在第一次迭代完成之后临时存储为经处理的码字,在第二次迭代完成之后被翻转了一个或多 个符号位元值的码字可以在第二次迭代完成之后临时存储为经处理的码字,等等。尽管软 LLR生成器108可以在图1中示为与第一解码器104分离的组件,但是在一个实施例中,软 LLR生成器108可以实现为第一解码器104的一部分。
如果第一解码器104未能成功解码码字,则第二解码器106可以是要被应用于该码字的第二个解码器。第二解码器106可以执行第二解码操作,该第二解码操作可以将所生成的LLR信息用于码字的比特节点。第二解码操作可以是基于业界已知或尚待开发的任何软式 判决算法的软式判决解码的实现。例如,在一个实施例中,第二解码操作可以是业界已知的 或尚待开发的消息传递算法(message passing algorithm,MPA),例如但不限于,和积算法 (sum-product algorithm,SPA),min-sum算法,随机解码算法或它们的变体。当第二解码 器106成功解码码字时,第二解码器106可以将解码的码字发送到仲裁器110,并且仲裁器 110可以从线性分组解码器100输出解码的码字。
在一个实施例中,第一解码器104可以被称为主解码器(“MDEC”)或硬式判决解 码器,第二解码器106可以被称为强力解码器(powerful decoder,“PDEC”)或软式判决 解码器。此外,在一个实施例中,线性分组解码器100可包括多个第一解码器104(例如, 2个,3个,4个,8个,16个等)。作为一个例子,第二个第一解码器104以虚线示出。 多个第一解码器104可以在来自码字缓冲器102的不同码字上并行地执行第一解码。另外, 在一个实施例中,线性分组解码器100可包括多个第二解码器106(例如,2个,3个,4 个,8个,16个等)。作为一个例子,第二个第二解码器106以虚线示出。多个第二解码器 106可以在未被第一解码器104成功解码的不同码字上并行地执行第二解码。
在一些实施例中,第一解码器104,第二解码器106或两者可基于检查约束满足信息来安排其解码顺序。例如,在没有调度相应解码顺序的情况下,第一解码器104可以根据比特节点的顺序次序(例如,从码字中的第一码符号到最后码符号)执行其解码,并且第二解码器106可以根据校验节点的顺序次序执行其解码(例如,从奇偶校验矩阵的顶部校验方程式到底部校验方程式)。在第一解码器104实现调度解码顺序的实施例中,第一解码器104可以使用码字的哪个码符号满足其所有奇偶校验方程以及哪个码符号不满足其所有奇偶 校验方程的信息,通过将要处理的至少一个具有至少一个未满足的奇偶校验约束的代码符号 移动到满足所有奇偶校验约束的至少一个代码符号之前,来安排解码顺序。在第二解码器 106实现调度解码顺序的实施例中,第二解码器106可基于检查约束满足信息来安排解码顺 序。第二解码器106可以更新校验运算未成功的校验节点,因为解码器可以立即校正它们。 因此,它可以提高收敛速度。例如,第一解码器104可以生成检查约束满足信息并将这样的 信息发送到第二解码器106。第二解码器106可以确定在第一次解码之后哪些校验节点校验 运算成功以及哪些校验节点校验运算未成功,通过将要处理的至少一个校验运算未成功的校 验节点移动到至少一个校验运算成功的校验节点之前来调度校验节点处理顺序,并且根据校 验节点处理顺序对码字进行第二次解码。
此外,在至少一个实施例中,第二解码器106可以使用由第一解码器104生成的检查约束满足信息来排列其解码顺序,而不管第一解码器104是否基于检查约束满足信息执行 解码。
另外,在一些实施例中,软LLR生成器108可以是可选的。例如,在一个实施例 中,第二解码器106可以使用由第一解码器104生成的检查约束满足信息来排列其解码顺 序,并且可以同时将所生成的LLR信息用于码字的比特节点。在另一个实施例中,第二解码 器106可以使用由第一解码器104生成的检查约束满足信息来排列其解码顺序而无需任何生成的LLR信息。在第二解码器106不使用所生成的LLR信息的实施例中,可以不需要软LLR 生成器108,并且第一解码器104可以生成检查约束满足信息并且在第一解码器104的解码 流程结束时将检查约束满足信息直接发送到第二解码器106。
图2A是根据本申请一个实施例的用于码字的Tanner图200的图示。Tanner图200可以是二分图,其示出了诸如汉明码或LDPC码的块码的奇偶校验约束。可以在奇偶校验矩阵HE中指定奇偶校验约束。对于LDPC码,奇偶校验矩阵HE可以是低密度,稀疏的m×n 矩阵,其中n可以是码字中的符号位元的数量,m是校验节点的数量。奇偶校验矩阵HE不 一定是唯一的,并且可以通过任何已知技术或将来开发的任何技术来选择。
奇偶校验矩阵HE的每一行可以对应于一个校验节点,并且每列可以对应于一个比特 节点。在二进制代码中,奇偶校验矩阵的元素是0或1,但是对于非二进制LDPC码,奇偶校验矩阵的元素可以具有非二进制值。奇偶校验矩阵的每一行可以形成奇偶校验方程的系数。例如,对于图2A中描绘的节点,奇偶校验矩阵HE可以如下:
Tanner图中示出了两种类型的节点。如图2A所示,校验节点202,204,206,208,210,212,214,216和218可以用方块表示,并且可以表示有效码字或成功解码的码字必须满足的奇偶校验方程。比特节点220,222,224,226,228,230,232,234,236,238,240和242可以表示为圆圈,并且可以表示码字中的符号位元(即,二进制码的比特),例如比特节点220,222,224,226,228,230,232,234,236,238,240和242可以分别表示代码字c=[c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12]中的c1,c2,c3,c4,c5,c6,c7,c8,c9, c10,c11和c12。
校验节点和比特节点之间的连接可以表示奇偶校验约束。例如,校验节点202可以表示在上面示出的奇偶校验矩阵HE中指定的第一行奇偶校验方程,其在列3,6,7和8中具有非零值。码字中的符号位元c3,c6,c7和c8可以对应于奇偶校验矩阵HE的第一行中的 这些非零位置,并且第一行奇偶校验方程可以由数学方程表示:c3⊕c6⊕c7⊕c8=0,其中⊕是二进制码字的模2加法。因为比特节点224,230,232和234对应于符号位元c3,c6,c7和c8,所以校验节点202可以连接到这些比特节点。也就是说,可以认为校验节点202“校 验”比特节点⊕224,230,232和234。类似地,校验节点204可以表示在上面示出的奇偶校 验矩阵HE中指定的第二行奇偶校验方程,其在列1,2,5和12中具有非零值,并且第二行奇 偶校验方程可以由数学方程表示:c1⊕c2⊕c5⊕c12=0,其中⊕是二进制码字的模2加法。因 为比特节点220,222,228和242可以对应于符号位元c1,c2,c5和c12,所以校验节点204可 以连接到这些比特节点。可以认为校验节点204“校验”比特节点220,222,228和242。其 他校验节点可以根据相应的奇偶校验约束连接到比特节点。应当注意,因为每行具有四个非 零位置,所以每个校验节点可以连接到四个比特节点。
从比特节点的角度来看,上面示出的奇偶校验矩阵HE中的每列可以在三行中非零。 也就是说,码字中的每个符号位元可以由三个奇偶校验方程“校验”。相应地,每个比特节 点可以连接到三个校验节点。例如,可以在第二,第五和第七奇偶校验方程(矩阵HE的第二,第五和第七行)中校验码字中的第一符号位元。可以表示码字中的第一符号位元的比特节点220可以被连接到校验节点204,210和214。可以表示码字中的第二符号位元的比特节点222可以被连接到校验节点204,208和218。其他的比特节点可以根据相应的奇偶校验约束连接到校验节点。从比特节点的角度的全部连接和从校验节点的角度的全部连接是相同的。
图2B和2C是根据本申请一个实施例的在码字的Tanner图200中信息传递的图示。Tanner图200可以用于码字的迭代解码。如图2A所示,校验节点208可以连接到比特节点222,230,232和238。也就是说,校验节点208可以“校验”比特节点222,230,232和 238。图2B中的箭头指示,信息可以从比特节点222,230,232和238流到校验节点208。校 验节点208可以根据从这些比特节点传递来的信息执行“校验”比特节点222,230,232和 238的操作。这可以被称为迭代解码操作中的“符号位元到校验”步骤。校验节点可以根据 由解码器(例如,硬式判决算法或软式判决解码算法)实现的解码算法来执行“校验”操 作。
在一个实施例中,从比特节点传递到校验节点的信息可以包括每个比特节点的符号 位元值。对于二进制符号位元值,例如,可以执行输入符号位元值的模2和,并且可以确定 模2和是否为零。如果模2和为零,则可以将校验节点标记为校验运算成功的校验节点。如 果模2和不为零,则可以将校验节点标记为未被满足的校验节点。在另一实施例中,除了比 特节点的符号位元值之外,每个符号位元值的可靠性信息(例如LLR)可以从比特节点传递 到校验节点。在该实施例中,除了确定校验节点被满足或未被满足之外,解码器还可以确定 该校验节点被满足或未被满足的可信度(或置信度如何)。
此外,图2A中的Tanner图200示出了比特节点226可以连接到校验节点206,212 和214。也就是说,比特节点226可以由校验节点206,212和214“校验”。图2C中的箭头 指示,信息可以从校验节点206,212和214流到比特节点226。比特节点226可以基于来自 校验节点206,212和214的信息执行更新其信息(例如,符号位元值,符号位元值的可靠 性)的操作。这可以被称为迭代解码操作中的“校验到符号位元”步骤。
在一个实施例中,从校验节点传递到比特节点的信息可以包括该比特节点的被满足 的校验节点和未被满足的校验节点的数量。比特节点可以使用该信息来确定是否需要改变它 们各自的符号位元值。例如,如果符号位元值是二进制的,并且被满足的校验节点比未被满 足的校验节点更多地连接到比特节点,则该比特节点可以翻转其符号位元值。在另一个实施 例中,除了比特节点的被满足的校验节点和未被满足的校验节点的数量之外,还可以将校验 节点如何被满足或未被满足的可信度信息从校验节点传递给比特节点。在该实施例中,解码 器确定是否更新比特节点的符号位元值时,可以不仅基于被满足和未被满足的校验节点的数 量,而且基于每个校验节点的被满足或未被满足有多可靠。
应注意,二进制代码可用作本文的示例。但是非二进制代码,例如,基于伽罗瓦域(2f)的线性分组码,其中f是大于1的整数,可以在本申请的一个或多个实施例中使用。
图3示意性地示出了根据一个实施例的第一解码器104的组件图。第一解码器104可以包括比特节点存储器302,校验子计算器304,码字收敛检测器306和比特翻转控制308。比特节点存储器302可以是用于码字的符号位元值的存储器。在解码操作的第一次迭代之前,比特节点存储器302中的码字的符号位元值可以是来自码字缓冲器102的初始符号位元值。在每次迭代完成之后,如果码字不满足任何奇偶校验约束,则可以改变被解码的码字的一个或多个符号位元值,并且可以更新存储在比特节点存储器302中的码字的符号位元 值以反映这些改变。
校验子计算器304可以被配置为计算正被解码的码字的校验子。例如,校验子计算可以包括计算码字的每个奇偶校验方程。码字收敛检测器306可以被配置为基于校验子计算 确定被解码的码字是否为一个有效码字。如果针对码字计算的校验子为零,则该码字是一个 有效码字,并且可以由第一解码器104发送到仲裁器110。如果计算出的码字校验子不为 零,则该码字无效。无效码字可以由第一解码器104在另一次迭代中继续解码,或者如果已 经达到最大迭代次数,则第一解码器104可以将校验节点校验运算信息传递给LLR生成器 108并且将该码字留给第二解码器106解码。
比特翻转控制308可以包括比特翻转阈值,并且可以被配置为确定是否需要更新正 被解码的码字中的符号位元值。在一个实施例中,比特翻转阈值可以以简单多数规则实现。 例如,比特节点可以连接到总数为T的校验节点,并且T=#U+#S,其中#U可以表示未被满足的校验节点的数量,#S可以表示被满足的校验节点的数量。根据简单多数规则,只要未被满足的校验节点的数量大于被满足的校验节点的数量(例如,#U>#S),比特节点的 符号位元值可以根据接收到的#U和#S信息而被翻转。在另一个实施例中,比特翻转阈值可 以被配置为比简单多数规则更加复杂一点。例如,比特翻转阈值可以是未被满足的校验节点的数量大于被满足校验的数量和数字M的总和,由不等式#U>#S+M表示。数字M可以是 正整数(例如,1,2,3,5,10等),总数T的百分比(例如,T的10%,T的15%,T的 30%)),未被满足的校验节点数量的百分比(例如,#U的10%,#U的15%,#U的 30%)或被满足的校验节点总数的百分比(例如,10%的#S,15%的#S,30%的#S)。
在一个或多个实施例中,比特翻转阈值可以是可配置的。例如,可以将其设置为一个阈值以解码一组码字,并设置为另一阈值以解码另一组码字。此外,在解码操作期间可以实时调整比特翻转阈值。例如,可以针对解码操作的某一次迭代的将其设置为一个阈值,并且针对解码操作的另一次迭代将其调整为另一阈值。
在一些实施例中,第一解码器104可以包括解码顺序调度器310。解码顺序调度器310可以基于检查约束满足信息来调度解码顺序,并且根据解码顺序执行解码操作。例如,在第一次迭代之前,第一解码器104可以不具有检查约束满足信息,并且第一解码器104可以被配置为对码字执行解码的第一次迭代。在第一次迭代之后,一些比特节点可以满足它们 各自的奇偶校验方程(例如,所有检验成功的相应校验节点),但是一些比特节点可以具有 一个或多个未满足的奇偶校验方程(例如,校验运算未成功的校验节点)。解码顺序调度器310可以包括一个电路,该电路被配置为基于在第一次迭代中生成的检查约束满足信息来确 定哪些比特节点的各校验节点校验运算全部成功以及哪些比特节点具有一个或多个校验运算 未成功的校验节点,该电路还被配置为将具有至少一个校验运算未成功的校验节点的比特节 点移动到至少一个不具有校验运算未成功的校验节点的比特节点之前,来调度比特节点处理 顺序。第一解码器104可以被配置为根据比特节点处理顺序对码字执行下一次解码迭代。在 一个实施例中,解码顺序调度器310可以被配置为基于在先前迭代中生成的检查约束满足信 息来更新比特节点处理顺序,并根据更新的比特节点处理顺序执行下一次迭代。
在一些实施例中,第一解码器104可以通过以批量方式处理比特节点来执行解码迭 代。每个批次可包含整数个比特节点。该整数可以是码字长度的因子。例如,对于长度为5184的码字,一个批次的大小可以是8,16,32,48或可以整除5184的任何整数。在另一个例子中,对于长度为288的码字,批量大小可以是8,16,32,48或可以整除288的任何整数。在第一解码器104通过批处理比特节点来执行解码迭代的实施例中,解码顺序调度器310可以包括一个电路,该电路被配置为,基于第一次迭代中生成的检查约束满足信息,确定哪个批次可以包含各校验节点校验运算全部成功的比特节点,以及哪个批次可以包含具有一个或多 个校验运算未成功的校验节点的一个或多个比特节点,该电路还被配置为通过移动包含至少 一个具有一个或多个校验运算未成功的校验节点的比特节点的至少一个批次来调度比特节点 处理顺序,其中所述一个或多个校验运算未成功的校验节点在至少一个批次之前处理,该批 次仅包含没有校验运算未成功的校验节点的比特节点。第一解码器104可以被配置为根据比 特节点处理顺序对码字执行下一次解码迭代。在这些实施例中,还可以在第二次迭代和具有 更新的检查约束满足信息的任何后续迭代之后更新比特节点处理顺序,并且第一解码器104 可以被配置为根据更新后的解码顺序执行后续的解码迭代。在一个实施例中,第一解码器 104可以通过将包含至少一个校验运算未成功的校验节点的任何一个批次的校验节点安排到 仅包含校验运算成功的校验节点的所有批次之前,来调度校验节点处理顺序。
在一些实施例中,解码顺序调度器310可包括两个阵列(或队列)以记录检查约束满足信息。例如,在迭代期间或之后,具有一个或多个校验运算未成功的校验节点的比特节点可以记录在第一阵列或队列中,并且不具有校验运算未成功的校验节点的比特节点可以记 录在第二阵列或队列中。可以通过将要处理的记录在第一阵列(或队列)中的所有比特节点 排列到记录在第二阵列(或队列)中的比特节点之前,来调度比特节点处理顺序。在第一解 码器104批处理位代码的实施例中,在每次迭代期间或之后,具有一个或多个具有一个或多 个校验运算未成功的校验节点的比特节点的批次可以被记录在第一阵列(或队列)中,并 且,没有包含校验运算未成功的比特节点的批次可以记录在第二阵列(或队列)中。可以通 过将需要处理的记录在第一阵列或队列中的批次排列到记录在第二阵列或队列中的批次之 前,来调度比特节点处理顺序。
应注意,解码顺序调度对于第一解码器104可以是可选的。在第一解码器104未实现解码顺序调度的实施例中,不需要解码顺序调度器310,并且第一解码器104可以顺序地或者以其他已知或尚未研发的方式,对比特节点(或比特节点的批次)执行解码。
图4示意性地示出了根据一个实施例的第二解码器106的组件图。第二解码器106可以包括LLR存储器402,比特节点处理器404,校验节点处理器406,校验子计算器408, 校验比特(check-to-bit,C2B)存储器410和LLR计算器412。LLR存储器402可以是用于LLR 信息的存储。最初,LLR存储器402可以存储从LLR生成器108接收的LLR信息。在第二解 码器106的每次解码迭代完成之后,LLR存储器402可以存储由LLR计算器412生成的更新 过的LLR信息。
比特节点处理器404可以被配置为基于由第二解码器106实现的解码算法来执行操 作。在一个实施例中,第二解码器106可以实现最小和(min-sum)解码算法,并且比特节点处理器404可以被配置为执行要在最小和解码算法中执行的比特节点操作。在另一实施例 中,第二解码器106可以实现随机解码算法,并且比特节点处理器404可以被配置为执行要 在随机解码算法中执行的比特节点操作。
校验节点处理器406也可以被配置为基于由第二解码器106实现的解码算法来执行 操作。在第二解码器106实现最小和解码算法的实施例中,校验节点处理器406可以被配置 为执行要在最小和解码算法中执行的校验节点操作。在第二解码器106实现随机解码算法的 另一实施例中,校验节点处理器406可以被配置为执行要在随机解码算法中执行的校验节点 操作。
校验比特(check-to-bit,C2B)存储器410可以是用于需要从校验节点处理器406传 递到比特节点处理器404的信息的存储器。例如,基于由第二解码器106实现的解码算法, 存储在C2B存储器410中的信息可以是最不可靠的LLR及其位置(例如,对应于哪个比特节 点),第二最不可靠的LLR及其位置(例如,对应于哪个比特节点),以及连接到相应校验节点的比特节点的累积符号位元值。
校验子计算器408可以被配置为计算正被解码的码字的校验子。例如,校验子计算可以是计算码字的每个奇偶校验方程。如果正被解码的码字的计算结果校验子为零,则该码 字已成功解码,并且可由第二解码器106发送到仲裁器110。如果正被解码的码字的计算结 果校验子非零,则该码字尚未被成功解码,并且第二解码器106可以执行另一次迭代。
LLR计算器412可以被配置为基于第二解码器106的解码操作来计算软对数似然比(LLR)。在一个实施例中,例如,第二解码器106可以实现最小和解码算法,并且LLR计 算器412可以被配置为根据最小和解码算法执行LLR计算。在另一实施例中,第二解码器 106可以实现随机解码算法,并且LLR计算器412可以被配置为根据随机解码算法执行LLR 计算。在一个或多个实施例中,可以将计算出的LLR信息传递到LLR存储器402以进行解码 操作的下一次迭代。
在一些实施例中,第二解码器106可基于检查约束满足信息来安排解码顺序。第二解码器106可以更新校验运算未成功的校验节点,因为解码器可以立即校正它们。因此,它可以提高收敛速度。例如,第一解码器104可以生成检查约束满足信息并将这样的信息发送到第二解码器106。第二解码器106可以包括解码顺序调度器414,其可以包括用于接收从第一解码器104发送的检查约束满足信息的电路,可以确定在第一次解码之后哪些校验节点 校验运算成功以及哪些校验节点校验运算未成功,通过将要处理的至少一个校验运算未成功 的校验节点移动到至少一个校验运算成功的校验节点之前,来调度校验节点处理顺序,并且 根据校验节点处理顺序对码字进行第二次解码。在一个实施例中,解码顺序调度器414可以 包括电路,该电路用于接收在先前迭代中生成的检查约束满足信息,基于在先前迭代中生成 的检查约束满足信息来更新校验节点处理顺序,并且第二解码器106可以根据更新的校验节 点处理顺序执行下一个迭代。
在一些实施例中,第二解码器106可以通过以批量方式处理校验节点来执行解码迭 代。每个批次可包含整数个校验节点。该整数可以是码字长度的因子。例如,对于长度为5184的码字,一个批次的大小可以是8,16,32,48或可以整除5184的任何整数。在另一个例子中,对于长度为288的码字,批量大小可以是8,16,32,48或可以整除288的任何整数。在第二解码器106通过批量处理校验节点来执行解码迭代的实施例中,解码顺序调度器414可以包括一个电路,该电路被配置为根据检查约束满足信息(例如,来自第一解码器104,或者来自在先的解码迭代)确定哪个批次可能不包含校验运算未成功的检查节点,以及哪个批 次可能包含一个或多个校验运算未成功的检查节点,该电路还被配置为通过将至少一个包含 至少一个校验运算未成功的校验节点的批次移动到至少一个不包含校验运算未成功的校验节 点的批次之前,来调度校验节点处理顺序。第二解码器106可以被配置为根据校验节点处理 顺序对码字执行下一次解码迭代。在这些实施例中,解码顺序调度器414可以基于在先前迭 代中生成的检查约束满足信息来更新校验节点处理顺序,并且第二解码器106可以根据更新 的校验节点处理顺序来执行下一次迭代。在一个实施例中,解码顺序调度器414可以被配置 为通过将包含至少一个校验运算未成功的校验节点的任何一个批次的校验节点排列到仅包含 校验运算成功的校验节点的各个批次之前,来调度校验节点处理顺序。
在一些实施例中,解码顺序调度器414可包括两个阵列(或队列)以记录检查约束满足信息。解码顺序调度器414可以包括一个电路,该电路接收从第一解码器104发送的检查约束满足信息的电路,记录包含第一阵列(或队列)中一个或多个校验运算未成功校验节点的校验节点和在第二阵列(或队列)中不包含校验运算未成功校验节点的校验节点,通过将要处理的第一阵列(或队列)中记录的校验节点安排在第二阵列(或队列)记录的校验节点之前,来调度校验节点处理顺序。在迭代期间或之后,解码顺序调度器414可以被配置为记录在第一阵列(或队列)中校验运算未成功的校验节点和在第二阵列(或队列)中校验运算成功的校验节点,通过将要处理的记录在第一阵列(或队列)中的校验节点安排在记录在第二阵列(或队列)中的校验节点之前,来调度校验节点处理顺序。第二解码器106可以被配置为根据校验节点处理顺序执行下一次解码迭代。在第二解码器106批处理校验码的实施 例中,解码顺序调度器414可以被配置为在第一阵列(或队列)中记录包含一个或多个校验 运算未成功的校验节点的任何批次,和在第二阵列(或队列)中记录仅包含校验运算成功的 校验节点的批次,并且通过将要处理的第一阵列(或队列)中记录的校验节点的批次安排在 第二阵列(或队列)中记录的校验节点的批次之前,调度校验节点处理顺序。
图5示意性地示出了根据本申请一个实施例的LLR的生成。图5中的Tanner图可以是用于奇偶校验矩阵的部分Tanner图,其中每个比特节点可以被六个校验节点“校验”。 例如,如图5所示,比特节点514可以连接到六个校验节点502,504,506,508,510和512。 在一次解码迭代中的“符号位元到校验”步骤之后,校验节点502,504,508和510可能校验 运算成功,而校验节点506和512可能校验运算未成功,可以基于关于校验运算成功的校验 节点的数量(例如,#S)和校验运算未成功的校验节点的数量(例如,#U)生成软LLR。
在一个实施例中,可以将初始LLR幅度分配给一个值X,可以将比例因子分配给一个 值Q,将比特节点的符号位元值表示为D,然后根据P=#S*Q*D*X-#U*Q*D*X+D*X=(#S*Q-#U*Q+1)*D*X=((#S-#U)*Q+1)*D*X生成软LLR,其中“*”是乘号。例如,如图5所示,四个 校验节点502,504,508和510可以是校验运算成功的,并且校验节点506和512可以是校验 运算未成功的。因此,#S是4,#U是2。如果初始LLR幅度X=8,缩放因子Q=0.5,并 且比特节点514的符号位元值D=+1,则软LLR P可以被生成为P=((4-2)*0.5+1)*1*8=16。在 另一示例中,在一次解码迭代中的“符号位元到校验”步骤之后,#S可以是1,并且#U可 以是5。如果初始LLR幅度X=8,缩放因子Q=0.5,并且比特节点514的符号位元值
D=+1,则软LLR P可以被生成为P=((1-5)*0.5+1)*1*8=-8。
在一些实施例中,软LLR和任何后续计算生成的LLR可具有硬件约束。例如,软LLR和任何后续计算的LLR可以具有有限比特位宽,例如但不限于4比特,5比特,6比特,7 比特或8比特,并且其中一个比特可以是符号比特(例如,最高比特(most significant bit,
MSB))。初始的LLR幅度X和缩放因子Q需要合适的选择以满足硬件约束。例如,X和Q 的值可以是任意值,该任意值可以使得生成的软LLR值和任何后续计算生成的LLR值落入由有限比特位宽限制的值范围内。另外,在一些实施例中,可以选择X和Q的值,使得生成 的软LLR值和任何后续计算生成的LLR值不仅落入由有限比特位宽限制的值范围内,而且还 覆盖尽可能大的范围。在一个实施例中,例如,具有误码率(BER)的二进制系统可以具有 基于BER计算的LLR,并且可以将计算的LLR缩放为整数并选择为初始LLR幅度X。缩放因 子可以通过模拟仿真计算确定。
在一个实施例中,对于二进制码字,比特节点的符号位元值D可以是+1或-1,其可以是来自码字缓冲器102的初始符号位元值,或者在上一次解码迭代中由第一解码器104翻转。
在一个或多个实施例中,图5中所示的软LLR生成可以在软LLR生成器108中实 现。在一个实施例中,可以在第一解码器104进行可配置数量的解码迭代完成之后生成软 LLR。例如,可配置数量可以是一次,两次,三次或为第一解码器104配置的最大迭代次 数,并且线性分组解码器100可以被配置为使用所生成的软LLR作为第二解码器106的输 入,无论最终由第一解码器104执行了多少次迭代解码操作。在另一实施例中,可以在第一 解码器104每次解码迭代完成之后生成软LLR,并且线性分组解码器100可以被配置为选择 所生成的软LLR中的任何一个作为第二解码器106的输入,而不管最终由第一解码器104执 行了多少次迭代解码操作。在又一个实施例中,软LLR生成器108可以被配置为针对若干所 选迭代生成软LLR,例如,在第一次迭代,第三次迭代,第五次迭代等之后,要选择哪些迭 代可以是可配置的。
图6示出了根据一个实施例的用于解码线性分组码字的流程600的流程图。在框602中,可以对码字执行第一解码。例如,第一解码器104可以从码字缓冲器102获取码字 并且对码字执行第一解码操作。在框604中,可以为比特节点确定校验运算成功的校验节点和校验运算未成功的校验节点的数量。例如,在第一解码操作的一次迭代(可以是第一次迭代,第二次迭代,或任何次数的迭代)之后,可以为比特节点确定被满足的校验节点的数量和未被满足的校验节点的数量。在框606中,可以基于被满足和未被满足的校验节点的数量来生成用于比特节点的软LLR。如图5中所示并且在此描述的,可以基于校验运算成功和校验运算未成功的校验节点的数量来生成用于比特节点的软LLR。在框608中,可以使用软LLR作为输入来执行第二解码。例如,第二解码器106可以使用用于比特节点的软LLR信息对码字执行第二解码操作。
适合于由线性块解码器100使用的一些LDPC码可以包括准循环(quasi-cyclic,简称 QC)LDPC码,其中奇偶校验矩阵包括多个矩形子矩阵,其是零、一、或循环移位的单位矩阵,尽管本发明的范围不限于此。图7示意性地示出了根据本申请一个实施例的用于QCLDPC码的奇偶校验矩阵700。奇偶校验矩阵700可以包括具有9列和30行方形子矩阵的9 ×30矩形。出于说明的目的,可以仅标记30行方形子矩阵的行702.1,702.2和702.30以及 方形子矩阵的列704.1,704.2,704.3,704.4,704.5,704.6,704.7,704.8和704.9。每个 方形子矩阵可以是Z×Z方形子矩阵,其中Z是整数。在线性块解码器100可以实现批量调 度比特节点处理顺序的实施例中,数字Z可以是在安排比特节点处理顺序时比特节点的批次 大小。在线性块解码器100可以实现批量调度校验节点处理顺序的实施例中,数字Z可以是 在安排校验节点处理顺序时校验节点的批次大小。在图7所示的实施例中,奇偶校验矩阵 700的每个方形子矩阵可以包括32行和32列元素,但是数字Z可以是另一个数字,其是与 比特节点或校验节点的批量大小相关的在此描述的码字长度的因子。
方形子矩阵可以是零方块,即方形子矩阵中的所有元素都是零,并且这样的方形子 矩阵可以被示为空方形子矩阵。例如,从行702.1的左侧数起的第二,第三,第四,第五,第七和第九方形子矩阵可以是零方形子矩阵。
或者方块可以是非零方块,其可以被称为循环矩阵。循环矩阵可以是单位方形子矩 阵或循环移位方形子矩阵。单位方形子矩阵可以是一个方形矩阵,其中从左上角到右下角的 每个对角元素可以是一,并且所有其他元素可以是零。在一个实施例中,单位方形子矩阵可 以用数字零(“0”)表示。循环移位的单位方形子矩阵可以是单位方形矩阵,其中每个元 素循环移位固定次数。循环移位可以意味着一行中的每个元素在移位方向上移动到相邻元素 的位置,其中行的末端元素被移动到开始元素的位置。在一个实施例中,可以通过将单位正 方形子矩阵的所有元素向右循环移位固定次数来获得循环移位的单位方形子矩阵,该单位方 形子矩阵可以用向右循环位移的固定次数来表示。例如,位于列704.1和行702.1的方形子 矩阵可以用数字20表示,因为它可以是向右循环移位20次的单位方形子矩阵。
应当注意,对应于图2A中的Tanner图的奇偶校验矩阵HE可以对应于规则LDPC 码,其中每个码位可以包含在相同数量的等式中,并且每个等式可以包含相同数量的代码符号。例如,奇偶校验矩阵HE的每一行(其可以对应于奇偶校验等式)可以包含由1标记的 四个码符号,并且每个码符号可以包含在三个奇偶校验等式中。相反,奇偶校验矩阵700可 以对应于非规则LDPC码,其可以在行和列中具有可变数量的1。例如,行702.1可以包含三 个非零方形子矩阵,即在行702.1中的每个奇偶校验方程中可以包含三个代码符号。在图7 所示的示例中,在行702.1的每个方形子矩阵中可以有32行元素,因此702.1可以对应于 32个奇偶校验方程,每个可以“检查”三个代码符号。行702.2可以包含四个非零平方子矩 阵,并且对应于32个奇偶校验方程,每个可以“检查”四个代码符号。这些示例示出了可 以在根据本申请的实施例中实现规则和不规则LDPC码。
在线性块解码器100实现批处理调度校验节点处理顺序的实施例中,解码结果可以 包括检查约束满足信息,其可以指示奇偶校验矩阵的方形子矩阵的哪个(哪些)行包含一个 或多个校验运算未成功的校验节点,以及奇偶校验矩阵的方形子矩阵的哪个(哪些)行仅包 含校验运算成功的校验节点。并且可以通过将要处理的包含一个或多个校验运算未成功的校 验节点的奇偶校验矩阵的方形子矩阵的行安排到仅包含校验运算成功的校验节点的奇偶校验 矩阵的每一行方形子矩阵之前处理,来调度校验节点处理顺序。解码结果可以来自第一解码 器104,或第二解码器106的解码迭代。作为示例,图7的30行方形子矩阵可以对应于30 批用于解码操作的校验节点。在一个示例性解码结果中,批次2,3,5,9,10和25可以各自包含 一个或多个校验运算未成功的检查节点,批次1,4,6-8,11-24和26-30可以各自仅包含校验运 算成功检查节点。如图7所示,行702.1可以对应于批次1并且可以由右边的“S”表示, 以指示批次1仅包含校验运算成功的校验节点,行702.2可以对应于批次2并且可以由右边 的“U”表示,以指示批次2包含一个或多个校验运算未成功的检查节点,并且行702.30可 以对应于批次30并且可以由右边的“S”表示,以指示批次30仅包含校验运算成功检查节 点。可以通过将要处理的校验节点批次2,3,5,9,10和25中的至少一个移动到校验节点批次 1,4,6-8,11-24和26-30中的至少一个之前来调度校验节点处理顺序,例如,将校验节点批次25移动到校验节点批次1之前。在一个实施例中,可以通过在校验节点批次1,4,6-8,11-24 和26-30之前安排要处理的校验节点批次2,3,5,9,10和25来调度校验节点处理顺序。
图8是根据一个实施例的使用校验节点校验运算信息对线性分组码字进行解码的流 程800的流程图。在框802中,可以对码字执行硬式判决解码。例如,第一解码器104可以从码字缓冲器102获取码字并且对码字执行硬式判决解码操作。在框804中,可以确定哪个(哪些)检查节点可能校验运算成功以及哪个(哪些)检查节点可能校验运算未成功。例 如,在硬式判决解码操作结束时,包括检查约束满足信息的解码结果可以被传递到第二解码器106,第二解码器106可以被配置为确定哪些校验节点校验运算成功以及哪些校验节点校验运算未成功。在框806中,可以通过将要处理的至少一个校验运算未成功的校验节点移动到至少一个校验运算成功的校验节点之前,来调度校验节点处理顺序。如图5所示,并如这里的描述,可以为校验节点(或校验节点的批次)调度校验节点处理顺序。在框808中,可 以根据校验节点处理顺序执行软式判决解码。例如,第二解码器106可以是软式判决解码 器,并且被配置为根据校验节点处理顺序对码字执行第二解码操作。
本文公开的流程的实施例(包括流程600和800)可以使用软件实现(例如,软件 测执行者可以是,计算机处理器(例如,中央处理单元(central processing unit,简称CPU)、图形处理单元(graphics processing unit,简称GPU)或此二者),硬件(例如,现 场可编程门阵列(field-programmable gate array,简称FPGA)或专用IC(application-specific IC,简称ASIC)),固件或此三者的任何合适组合。在一个实施例中,例如,线性分组解 码器100的组件可以以硬件电路实现,并且各流程可以在硬件中实现。
在另一实施例中,例如,线性块解码器100的组件以及任何所公开的方法和操作可以在包括存储在一个或多个计算机可读存储介质上的计算机可执行指令的软件中实现。一个 或多个计算机可读存储介质可以包括非暂时性计算机可读介质(诸如可移动或不可移动磁 盘,磁带或磁带,固态驱动器(SSD),混合硬盘驱动器,CD-ROM,CD-RW,DVD或任何其 他有形存储介质),易失性存储器组件(例如DRAM或SRAM)或非易失性存储器组件(例 如硬盘驱动器))。计算机可执行指令可以由计算机处理器(例如,CPU,GPU或两者)在 计算机(例如,任何商用计算机,包括智能电话或包括计算硬件的其他移动设备)上执行。 用于实现所公开的技术的任何计算机可执行指令以及在所公开的实施例的实现期间创建和使 用的任何数据可以存储在一个或多个计算机可读介质(例如,非暂时性计算机可读介质) 上。这样的软件可以例如在单个本地计算设备(例如,任何合适的商用计算机或移动设备) 上或在网络环境中使用一个或多个网络计算机执行,网络环境可以是例如通过因特网、广域 网、局域网、客户端-服务器网络(例如云计算网络)、或其他此类网络。
图9示意性地示出了包括本文所述的线性分组解码器100的系统900。系统900可以是存储系统,例如但不限于内存或硬盘驱动器系统。系统900可以包括数据存储器902和解码器904。数据存储器902可以是,例如,内存或硬盘驱动器。解码器904可以是图1中 所示的线性分组解码器100的实施例。从数据存储器902读取的数据可能已损坏,并且解码 器904可解码损坏的数据并恢复正确的数据信息。
图10示意性地示出了包括本文所述的线性分组解码器100的系统1000。系统1000可以是通信系统,例如但不限于有线或无线通信系统。系统1000可以包括接收器1002,解调器1004和解码器1006。接收器1002可以是例如用于无线通信的天线或用于有线通信的接收器。解调器1004可以被配置为解调由接收器1002接收的信号并生成数字信号。解码器1006可以是图1中所示的线性分组解码器100的实施例。由接收器1002接收的数据可能已损坏,解码器1006可解码损坏的数据并恢复正确的数据信息。
本文描述的示例性组件,操作和技术可以独立地或组合地在各种实施例中实现。例 如,一个实施例可以实现软LLR生成的特征(例如,软LLR生成器108)并且使用软LLR作为第二解码器的输入,而没有由第一解码器或第二解码器调度解码顺序的特征。另一个实施 例可以实现在第二解码器中调度解码顺序的特征,而不具有第一解码器的软LLR生成或调度 解码顺序的特征。例如,在一个实施例中,线性分组解码器100可以用于汉明码作为汉明码 解码器,并且第一解码器104和第二解码器106可以实现汉明码的解码操作。并且其他实施 例可以实现这些特征中的一些或全部的组合。
应当注意,在若干示例和实施例中,LDPC可以用作线性分组码的示例。然而,本申请的实施例也可以以其他类型的线性分组码实现,例如但不限于矩形奇偶校验和汉明码。例 如,在一个实施例中,线性分组解码器100可以作为汉明码解码器而用于汉明码,并且第一 解码器104和第二解码器106可以实现汉明码的解码操作。此外,诸如在“线性分组码”,“LDPC码”或“汉明码”中使用的词“码”可以一般性地指码的类型。并且“码字”一词 可以指用线性分组码编码的单位数据块。
虽然本文已经公开了各种方面和实施例,但是其他方面和实施例对于本领域技术人 员而言将是显而易见的。这里公开的各个方面和实施例是出于说明的目的而不是限制性的, 真正的范围和精神由所附权利要求指示。