背景技术
在现代信息时代,二进制值,例如一和零,用来表示并传送各类信息,例如视频,音频,统计信息等。遗憾的是,在二进制数据的存储,传送,和/或处理期间,可能有差错无意地引入,例如一可能变为零或相反。
一般来说,在数据传送的情形下,接收器观察噪声或失真的存在中每一接收的位,并只获得位值的指示。在这些情形下,解释观察值为“软”位源。软位与该估计的可靠性的某种指示一同指示位值即一或零的最好的估计。虽然差错数可能相对低,但即使小数目的差错或失真电平也能够造成数据不能使用,或在传送差错的情形下,可能必须进行数据的重新传送。
为了提供一种机制以便校验差错,并在某些情形下,为校正差错,二进制数据能够被编码以便引入仔细设计的冗余性。数据单元的编码产生通常称为代码字的概念。因为这一冗余性,代码字将常常包含比代码字从其产生的的数据输入单元多的位。
当接收或处理来自传送代码字引起的信号时,在信号中观察到的包含在代码字中的冗余信息可用来识别和/或校正在接收的信号中的差错或从其去除失真,以便恢复原来的信号单元。这种差错校验和/或校正能够作为解码过程的一部分实现。在没有差错时,或在可校正差错或失真的情形下,解码可用来从被处理的源数据恢复已被编码的原来数据单元。在不能恢复的差错的情形下,解码过程可产生某种指示原来的数据不能完全恢复。这种解码失败的指示可用来启动数据的重新传送。
虽然数据冗余能够增加被存储或传送的数据的可靠性,但这是以存储空间和/或使用宝贵的通信带宽为代价的。因而,希望以一种有效的方式增加冗余性,使对数据引入的给定的冗余量赢得的差错校正/检测容量最大化。
随着对于数据通信光纤线路增加的使用及数据能够从存储装置例如磁盘、磁带等读取和向其存储的速率的增加,不仅对有效使用数据存储和传送量,而且对以高速率编码和解码数据的能力增加了需要。
虽然编码效率和高数据速率对于在范围广泛的装置,例如消费者装置,编码和/或解码***是重要的,但重要的是编码器和/或解码器要能够以合理的成本实现。于是,例如就硬件的成本来说,有效实现用于差错校正和/或检测目的的编码/解码方案的可能性,可能是重要的。
多年来为了差错校正的目的已使用各种类型的编码方案。最近发明了一般称为“涡轮代码”的一类代码(1993)。涡轮代码比较老的技术诸如卷积码提供了明显的好处,并发现了许多应用。
与涡轮代码的出现相结合,对另一类相关的明显更简单一般称为低密度奇偶校验(LDPC)码的代码增加了兴趣。LDPC代码实际上由Gallager在大约40年前(1961)发明,但只是现在才引起注意。涡轮代码和LDPC代码是在所谓迭代编码***的场合使用的编码方案,就是说它们使用迭代解码器被解码。近来,已经证明LDPC代码能够提供非常好的差错检测和校正性能,涡轮代码对于大代码字例如大小超过大约1000位是优越的和匹配的,给出了LDPC编码参数的适当选择。此外,LDPC代码能够潜在地以比涡轮代码更高的速度解码。
在许多编码方案中,由于编码在较大数目位上的交互作用,较大的代码字常常对差错的检测和校正更有弹性。这样,使用长代码字就增加检测和校正差错能力来说是有益的。这对于涡轮代码和LDPC代码是特别实际的。这样,在许多应用中,希望使用长代码字,例如长度超过一千位的代码字。
在长代码字的场合,其中这种代码的使用提供了最大的希望,采用LDPC编码和涡轮编码中所遇到的主要困难,是实现这些编码***的复杂性。在实际的情形下,复杂性直接转换为实现的成本。这两种编码***都比传统使用的编码***,诸如传统的代码和Reed-Solomon代码更复杂。
信号处理算法的复杂性分析通常集中在操作计数。当试图在迭代代码***中采用硬件并行性,特别是在LDPC代码的情形下时,明显的复杂性不仅从计算需要引起,而且更从路由需要引起。问题的根源在于代码本身的结构。
LDPC代码和涡轮代码依赖于迭代过程内的交错消息。为了使代码性能良好,交错必须有良好的混合性质。这必须实现复杂的交错过程。
LDPC代码由通常称为Tanner图的二部图很好表示,其中一组结点,即可变结点对应于代码字的位,而另一组结点,即约束结点有时称为校验结点,对应于定义该代码的奇偶校验约束组。图中的边缘把可变结点连接到约束结点。可变结点和约束结点被称为邻近,如果它们由图中的一边连接。为了简化,我们一般假设一对结点由至多一条边连接。与每一可变结点相关的是代码字的一位。在某些情形下,某些这些位困难是被穿孔的已知的,如以下进一步讨论。
当且仅当对每一约束结点相邻约束(通过它们与可变结点相关)和为模二为零即将它们包括偶数个位时,与可变结点顺序一对一相关的位顺序才是代码的代码字。
用来对LDPC代码字解码的解码器和解码算法,通过在图内沿边交换消息,并基于输入的消息通过在结点处进行计算而操作。这种算法将一般称为消息传递算法。图中的每一可变结点起初使用软位提供,称为接收值,其指示通过从例如通信通路观察所确定的相关位值的估计。理想上,对分开的位的估计在是统计独立的。这一理想困难并常常在实际上是违背的。接收的值的收集构成接收的字。为了这一应用的目的,我们可能例如通过通信***中的接收器使用接收的字识别观察的信号。
附加到一结点,即可变结点或约束结点的边的数目被称为该结点的度。正则图或代码是这样的图,对其所有可变结点有相同度例如j,并且所有约束结点有相同度例如k。这种情形下,我们说代码是(j,k)正则代码。这些是最初由Gallager(1961)所考虑的代码。与“正则”代码相对照,非正则代码具有约束代码和/或不同度的可变结点。例如,某些可变结点可能为度4,其它为度3并另外其它度为2。
虽然发正则代码为了表示和/或实现更为复杂,但已经证明,当与正则LDPC代码比较时,非正则LDPC代码能够提供极佳的差错校正/检测性能。
为了更精确地描述解码过程,我们在描述LDPC图中引入套接字的概念。套接字可看作为图中的一边与图中的一结点的相关联。每一结点对附加到它的每一边有一个套接字,且边“塞入”套接字。这样,度d的结点有附加到它的d个套接字。如果图有L个边,则在图的可变结点侧有L个称为可变套接字的套接字,并在图的约束结点侧有L个称为约束套接字的套接字。为了标识和排序的目的,可变套接字可被计数1,...,L,使得附加到一可变结点的所有可变套接字连续出现。这种情形下,如果头三个可变结点的度分别为d1,d2,d3,则可变套接1,...,d1,附加到第一可变结点,可变套接字d1+1,...,d1+d2附加到第二可变结点,且可变套接字d1+d2+1,...,d1+d2+d3附加到第三可变结点。约束结点可类似地被计数1,...,L,所有约束套接字附加到连续出现的一个约束结点。一个边可被看作是套接字的配对,其每一对的一个来自图的每一边。这样,图的边表示套接字从图的一边例如可变结点边,向另一边例如约束结点边的交错或置换(permutation)。与这些***相关的置换常常是复杂的,反映了如上所述交错的复杂性,为它们的实现需要消息传递复杂的路由。
在图上实现的消息传递算法的概念比LDPC解码更为一般。一般的观点是,带有结点的图沿图中的边交换消息,并基于输入的消息进行通信,以便传送输出消息。
一个示例性的二部图100确定长度十的一(a,6)正则LDPC,且速率一半示于图1中。长度十指示有十个可变结点V1-V10,每一以代码字X1-X10的一般来说由标号102标识的一位标识(且这种情形下没有穿孔)。速率一半指示有检验结点的一半作为可变结点,即有由标号106标识的五个检验结点C1-C5。速率一半还指示五个约束是如以下讨论的线性独立的。每一条线104表示一条边,例如该线连接的检验结点与可变结点之间的通信通路或连接。每一边标识两个套接字,一个可变套接字与一个约束套接字。可根据它们的可变套接字或它们的约束套接字对边计数。可变套接字的计数对应于在它们连接到可变结点的点处可变结点上出现边排序(上到下)。约束套接字的计数对应于在它们连接到约束结点的点处约束结点上出现边排序(上到下)。在解码期间,消息沿边的两个方向传递。这样,作为解码过程的一部分消息沿一边从约束结点向可变结点并反之传递。
虽然图1示出与长度10的代码相关的图,但可看到,表示对于长度1000的代码字的图将为100倍复杂性。
示于图表示代码的另一方式是使用诸如图2所示的矩阵表示法。在代码的矩阵表示法中,一般称为奇偶校验矩阵的矩阵H 202包括相关的边连接,可变结点和约束结点信息。在矩阵H中,每一列对应于可变结点之一,而每一行对应于列结点之一。由于在示例代码中有10个可变结点和5个约束结点,矩阵H包括10列和5行。对应于具体可变结点和具体约束结点的矩阵的项设置为1,如果边出现在图中,即如果两个结点为邻接,否则设置为0。例如,由于可变结点V1由一条边连接到约束结点C1,一位于矩阵202的左上角。然而,可变角度V不连接到约束角度C1,于是0位于矩阵202的第一行的第四位置,指示对应的的可变和约束结点不被连接。我们说,如果H的行在GF[2](2阶Galois场)上是线性独立的向量,则约束是线性独立的。通过套接字计数的可变或约束的边对应于在H中计数1。可变套接字计数对应于列内顶到底计数并从左到右从列到列进行,如矩阵208中所示。约束的套接字计数对应于在行上左到右计数以及顶到底从行到行进行,如矩阵210中所示。
在矩阵表示的情形下,被传送的代码字X能够表示为向量206,其包括被处理的位X1-Xn。位序列X1-Xn是代码字,当且仅当矩阵206与202的乘积等于零,即:Hx=0时。
在讨论与LDPC图相关的代码字的场合,应当看到,在某些情形下,代码字可能被穿孔。穿孔是从代码字去除位以实际上产生较短代码字的行动。在LDPC图的情形下,这意味着图中某些可变结点对应于实际上不被传送的位。这些可变结点及与它们相关的位常常称为状态变量。当使用穿孔时,能够使用解码器重构代码字没有通过通信通路物理上通信的部分。在穿孔的代码字被传送的情形,接收装置起初可以例如以任意方式指定的一或零填充失去的接收字值(位),随同指示(软位)这些值是完全不可靠的,即这些值可被删除。为了解释本发明的目的,我们将假设,当使用时,这些接收器-填充的值是要被处理的接收的字的部分。
考虑图3所示的***350,***350包括编码器352,解码器357及通信通路356。编码器352包括处理输入数据A以产生代码字X的一编码电路353。代码字X为差错检测和/或校正的目的包含某些冗余性。代码字X可通过通信通路传送。另外,代码字X能够通过数据选择装置354按某种数据选择技术分别被划分为第一和第二部分X’,X”。代码字部分之一,例如第一部分X’,这时可通过通信通路传送到包括接收器357的接收器,而第二部分X”被穿孔。作为由通信通路356产生的失真的结果,被传送的代码字部分可能丢失或被破坏。从解码器来看,被穿孔的位可被解释为丢失。
在接收器处软位被***接收的字,以代替丢失或穿孔的位。被***的指示X”删除的软位指示和/或位在传送中丢失。
解码器357将试图重构来自接收的字Y及任何***的软位的全代码字X,并然后进行数据解码操,以便以从重构的代码字X产生A。
解码器357包括一通路解码器358,用于从接收的字Y重构完全的代码字X。此外它还包括数据解码器359,用于去除包含在代码字中的冗余信息,以便从重构的代码字X产生原来的输入数据A。
应当看到,与LDPC编码配合产生的接收的字能够通过对其进行LDPC解码操作被处理,例如差错校正和检测操作,以产生原来代码字的重构的版本。然后重构的代码字能够受到数据解码以恢复曾被编码的原来的数据。数据解码处理例如可以是简单地从重构代码字选择位的特定的子集。
LDPC解码操作一般包括消息传递算法。有许多潜在的有用的消息传递算法,且这些算法的使用不限于LDPC解码器。本发明能够用于实际上任何这种消息传递算法的场合,因而能够用于各种消息传递***,而LDPC解码器只不过是其一例。
为了完整性,我们将给出称为置信传播的最好的已知消息传递算法之一的一种实现的简要的数学描述。
对于(二进制)LDPC的置信传播可表达如下。对于与可变结点相关的位沿图的边传送的消息可解释为log-似然log(p0/p1)。这里,(p0,p1)表示在相关位上的条件概率分布。由接收器提供给解码器的软位也以log-似然形式给出。这样,接收的值即接收的字的元素是取决于由通信通路提供的位的观察相关的位的log-似然。一般来说,消息m表示log-似然m而接收值y表示log-似然y。对于穿孔位接收的值y被设置为0,指示p0=p1=1/2。
让我们考虑置信传播消息传递规则。对于从校验结点到可变结点的消息消息由mC2V标记,而对于从可变结点到校验结点由mV2C标记。对于每一边j=1,...,d设mC2V(i)标记在边i上输入的消息。在解码观察的最初我们对于每一边设置mC2V=0。然后,输出消息由以下给出
在校验结点更便于使用它们的‘符号’和量值表示消息。这样,对于消息mp∈GF[2]表示消息的‘奇偶性’,即如果m≥0则mp=0,并如果m<0则mp=1。此外设mr∈[0,∞]表示m的量值。这样,我们有m=-1mpmr。在校验结点对mp和mr的更新是分开的。对于度为d的校验结点,我们有,
其中所有加法是对GF[2]进行的,并且
其中我们定义F(x):=log coth(x/2)。(在以上两个方程式中,上标V2C都表示在校验结点处的输入消息)。我们注意到F是其自己,即F-1(x)=F(x)。
许多消息传递算法可看作是置信传播的近似。应当看到,在任何实际的数字实现中,消息将由有限数目的位及适当的消息更新规则构成。
明显的是,对于大代码字与表示LDPC代码相关的复杂性,至少对于试图采用并行机制的硬件实现,是令人沮丧的。此外,以能够以高速支持处理的方式实现消息传递可能是困难的。
为了更实际地使用LDPC代码,需要以有效和紧凑的方式表示对应于大代码字LDPC代码的方法,从而降低表示代码即描述相关图所需的信息量。此外,需要这样的技术,其允许与多个结点和多个边例如四个或更多结点或边相关的信息传递,以易于控制的方式并行进行,从而允许更大的代码字以合理的时间量被有效地解码。还需要一种解码器结构,其足够灵活而能够对几种不同的LDPC代码解码。这是因为许多应用需要不同长度和速率的代码。更希望的是允许特定LDPC代码的规范可编程的结构。
发明内容
本发明旨在使用消息传递解码技术对字进行解码操作的方法和设备。本发明的技术特别适用于大LDPC代码,例如长度大于750位的代码字,但它们也能够用于较短长度。本发明的技术和设备也能够用于使用其它类型的消息传递算法的图设计和解码。然而为了解释本发明,将描述示例性的LDPC解码器和解码技术。
本发明的技术允许拥有一定层次结构的LDPC图的解码,其中全LDPC图大部分显示为由多个Z次较小的图的拷贝例如Z构成。Z图拷贝可以是恒等的。为了精确,我们将称较小的图为投影图。提供首先考虑对Z恒等小LDPC图同步且平行地解码的解码器能够最好地理解该技术。考虑对于单个小LDPC图的消息传递解码器。该解码器实现对应于消息传递算法的一系列操作。现在考虑扩充同一解码器使得它同步且并行地解码Z恒等这种LDPC图。消息传递算法中的每一操作被重复Z次。注意,解码过程的效率得到证明,因为解码总共进行Z次比较快,并因为控制消息传递过程所要求的控制机构不需要对Z个拷贝重复,而是能够由Z个拷贝共享。我们还能够把以上Z-并行解码器看作是向量解码器。我们可形成较小图的Z个拷贝的过程看作是向量化较小(投影)图:较小图的每一结点变为包括Z结点的向量结点,较小图的每一边变为由Z个边构成的向量边,解码较小的图中交换的每一消息变为包括Z个消息的向量消息。
本发明获得上述向量化的效率,同时多其进行了修改使得向量解码器实际上解码一种比投影图大Z倍的大图。这是通过被控制的方式互连投影图的Z个拷贝而实现的。具体来说,我们允许向量边中Z个边例如在它们从可变结点边向以上结点边行进时投影图的拷贝之间受到置换,或交换。在对应于Z个并行投影图的向量化的消息传递过程中,这一交换是通过在向量消息内在其从向量化的图的一侧向另一侧传递时置换消息实现的。
考虑通过1,j,...,Z索引投影LDPC图。在严格并行的解码器中图j中可变结点只连接到图j的约束结点。根据本发明,我们取一个向量边,包括一对应的边每一来自每一图的拷贝,并允许在Z个边内置换,例如我们允许对应于向量边内的边的约束套接字被置换,例如重新排序。此后,我们将常常称在向量边内的置换,例如重新排序,为旋转。
这样,根据本发明,可使用相对小的存储器表示相对大的图,例如描述。例如,一个图可通过存储描述投影图的信息及描述旋转的信息表示。另外,图的描述可作为实现描述图的连接性的功能的电路设施。
于是,本发明的图的表示技术便于并行的例如向量化的图的实现。此外,本发明的图表示技术能够用来支持带有或没有状态变量的正则的或非正则图的解码。描述投影图中结点度的信息可被存储,或提供给向量结点处理元件。注意,所有属于向量结点的结点有相同的度,于是只对一个投影图需要度信息。
在各实施例中,使解码器可编程,因而允许其以多个图描述被编程,例如以存储的投影图及存储的旋转信息或借助于实现的功能表达。因而,本发明的解码器能够被编程,以便对大数目的不同例如正则的和非正则的代码解码。在某些具体的实施例中,解码器用于固定图或用于固定度及这一信息。在这些实施例中,图描述信息可被预编程或隐含。这种情形下,解码器困难比可编程实施例有较少的灵活性,但节省了支持可编程性所需的资源。
根据本发明的一实施例,提供了一种消息存储器,其包括存储单元行,每一行对应于与投影图的一个拷贝相关联的消息。对应于Z多个投影图的消息被堆叠以形成每列的Z个消息列,这种列对应于一个向量消息。这一存储器排布允许在一个操作中,对应于向量边的向量消息,例如Z个消息集合,例如使用SIMD指令访问一列中所有Z个消息,从存储器作为单元读出或向其写入。这样,存储器支持向量消息作为单元的读和写。于是,本发明避免了需要对Z个消息集合中每一个别的消息提供不同的读/写地址。
在消息传递处理中一个或多个点处,在从存储器读出之后,Z个消息受到置换操作,例如重新排序操作。重新排序的操作对应于与互连投影图的Z个拷贝的向量边相关的旋转,以形成单一的大图。这一旋转例如可在消息被提供给对应的向量(约束的或可变的)结点处理器之前施加。另外,旋转可在由向量结点处理器处理之后施加。
可使用连接例如消息存储器与向量结点处理单元的简单的开关装置实现旋转,并在它们从存储器向向量结点处理单元传递时重新排序那些消息。在这种示例性实施例中,在向量结点处理器内,从存储器读取的每一向量消息中的消息之一提供给由开关装置施加到向量消息的旋转取得的Z个并行结点处理单元对应的之一。由开关装置实现的旋转操作,还可在其写入存储器之前及结点处理之后或另外施加到向量消息。
投影图的存储或计算的描述例如可包括关于序的信息,其中对应于投影图的行中的消息在约束和/或可变结点处理期间被读出和/或写入存储器。整体的大图的消息存储在单个行,每一行对应于小图的不同的拷贝,行的排布以形成消息列。每一消息列表示向量消息,能够作为单个的单元被访问。这样,根据本发明,关于如何访问投影图的行中的消息的信息,能够用来确定对应于投影图的多个拷贝的向量消息被访问的序。
根据读/写操作是对应于可变结点边还是约束结点边处理,向量消息被读出和/或写入存储器的序的变化,可作为对消息进行的第一置换描述。这一置换对应于与投影图相关的交错器(interleaver)。为了表示来自投影解码器图的大解码器图,除了向量消息(例如列)访问序信息之外,存储置换信息的第二集合,例如旋转信息。例如当读出和或写入存储器时,表示开关控制信息的第二置换信息(例如旋转信息)指示,在每一向量例如消息列中的消息应如何被重新排序。这两个阶段的置换把描述完全LDPC图的大置换化为通过不同机制实现的两个部分。
在一特定实施例中,使用循环置换作为二级置换,因为这种置换容易实现且其描述简洁。这种情形推动了使用旋转这一术语描述这二级供说明之用。然而,应当理解,二级置换无需限制为旋转,并能够使用其它重新排序方案实现。
在本发明的各实施例中,在所有差错已被校正或没有差错出现在接收的字中的情形下,解码器产生对应于解码器的硬决策输出例如原始代码字的多位软输出,带有一位例如每一软输出的符号或奇偶位。然后解码器输出,例如恢复的代码字,可进而被处理,以便恢复在编码时曾用来产生被传送的代码字的原始数据。
根据本发明的一个特征,考察了在可变结点处理的每一完全迭代之后产生的软和/或硬输出,以确定指示代码字的奇偶校验约束是否被当前硬决策满足。这一校验过程还有图的两阶段被分解的置换结构的好处。一旦以这一方式检测到代码字的恢复,迭代解码过程(消息传递)可被暂停。于是,在相对无差错的信号的情形下,例如在消息传递解码过程的两个或三个迭代之后,解码可完成并迅速被检测。然而,在接收的字包含多个差错的情形下,由于超时的约束,解码过程的大量迭代可能在解码成功或过程被暂停之前发生。
根据本发明,与向每一接收的字分配固定数目的解码迭代的***相比,成功解码的迅速的检测允许更有效使用资源。
由于本发明的解码技术允许大数目的解码操作,例如约束和/或可变结点解码器处理操作并行进行,故本发明的解码器能够用来对接收的字以高速解码。此外,由于给出了本发明的新型技术,用来对与这种图相关的解码操作表示大图和/或控制消息传递,降低和/或克服了存储描述大图和控制它们的消息路由的困难。
本发明LDPC代码和解码技术一定的推广包括对较大字母不简化位的编码/解码,它们具有两个可能的值,但某种较大可能性数。也可使用本发明的方法和设备对约束结点表示非奇偶校验约束的约束的代码进行解码。本发明可适用的其它相关推广包括,消息传递算法可对图实现并具有设计该图的选项的情形。对于业内专业人员明显的是,就本发明的应用来看,如何把本发明的技术用于这些更一般的情形。
根据本发明的另一实施例,提供一种用于执行奇偶校验消息传递解码操作的设备,该设备包括:消息源,用于从任意的Z个K-位消息的至少L个集合中提供至少一个Z个K-位消息的集合,其中Z是大于1的正整数,K和L是非零正整数;结点处理器,包括多个结点处理单元,每个结点处理单元用于执行奇偶校验约束结点处理操作以及奇偶校验变量结点处理操作中至少一个,以及开关装置,连接到所述消息源和所述结点处理单元,所述开关装置用于在所述消息源和所述结点处理器之间传递Z个K-位消息的集合,并响应于开关控制信息对所传递的消息集合中至少一个集合中的消息进行重新排序。
相应的,本发明还提供一种用于执行奇偶校验消息传递解码处理的方法,包括以下步骤:在消息存储装置中存储K-位消息的L个集合,每一K-位消息的集合包含第1到第Z个消息,其中L和Z是大于1的正整数,并且K是非零正整数;从消息存储装置中输出所述K-位消息的集合中的一个集合;对所述读取的K-位消息集合进行消息重新排序操作,以产生重新排序的Z个K-位消息的集合;并行地向向量处理器提供重新排序的消息集合中的Z个消息;以及操作向量处理器,以便使用所提供的Z个消息作为输入来执行奇偶校验消息传递解码器操作。
此外,本发明还提供一种执行奇偶校验消息传递解码处理的方法,该方法包括以下步骤:操作可变结点向量处理器以生成Z个K-位消息的一个集合,其中Z是大于1的正整数,并且K是非零正整数;以及对生成的Z个K-位消息的集合进行消息重新排序操作,以产生重新排序的Z个K-位消息的集合。
另外,本发明还一种执行奇偶校验解码器操作的方法,所述方法包括:执行消息输出操作,以输出一个消息集合;对所输出的消息集合执行消息重新排序操作,来产生重新排序的消息集合;将重新排序的消息集合提供给包括多个并行排布的变量结点处理单元的结点处理器;以及操作所述多个变量结点处理单元,来生成作为所提供的重新排序的消息集合的函数的一个更新的消息集合。
从以下详细的说明,本发明的解码技术和解码器许多附加的优点、特性和方式将是明显的。
具体实施方式
如上所讨论,将为示例的目的以LDPC解码器实施例的场合说明本发明的解码方法和设备。将首先参照图4和5描述LDPC代码的解码中涉及的步骤,然后是更加细致讨论本发明的各种特性。
图4使用二部图400示出示例的非正则LDPC代码。该图包含m个校验结点402,n个可变结点406,及多个边404。校验结点和可变结点之间的消息通过边404交换。对应于接收的字Y的软输入位y1到yn,和软(或硬)输出x1到xn由标号408指示。使用标号402’标识第mth校验结点,使用标号406’标识第nth可变结点,同时分别使用标号410,409标识第nth软输入yn和第nth软输出xn。
可变结点406处理来自约束结点的消息连同来自接收的字y1,...,yn的输入软值,以更新对应于可变结点的输出变量x1,...,xn的值并产生到约束结点的消息。通过一可变结点对每一连接到可变结点的边产生一消息。产生的消息沿边从附加在该边的可变结点向约束结点传送。为了示例的目的,从可变结点向约束结点的消息,在本申请中将不时使用缩写V2C指示,同时从可变结点到约束结点的消息将使用缩写C2V指示。可以向这一缩写的V和C成分添加下标,以指示用作为具体的消息的源/目标可变结点和约束结点具体的一个。每一约束结点402负责通过附加到该具体约束结点的边传递从可变结点接收的消息。从可变结点接收的V2C消息由约束结点402处理,以产生C2V消息,然后其沿附加在每一约束结点的边被向回传送。然后可变结点406处理C2V消息连同软输入值,以产生并传送新的V2C消息,并产生软输出xi。在可变结点406处进行处理的序列,包括:向校验结点402传送产生的消息,在可变结点产生软输出xi,并从校验结点接收消息,可重复即迭代地进行,直到来自可变结点406的输出xi指示代码字已经成功被解码或某种其它停止准则已被满足为止,例如消息传递迭代的固定数完成。应当看到,上述的操作顺序不需要按所述的顺序严格出现。结点处理可异步进行,且约束结点处理可同步发生。然而,迭代过程的逻辑正如所述。
消息V2C和C2V可以是一个或多个位,例如每一K位,其中K是正的非零整数值。类似地软输出xi可以是一个或多个位。多位的消息和输出提供了对信息或输出的中继置信度或可靠性信息的机会。在多位的情形下,(软)输出,软输出值的符号可用来提供解对应于可变结点的码过程的单个位的硬输出,例如解码的代码字位。输出软值可对应于解码的软值,或另外对应于所谓外在的信息(排除对应的输入信息),其可用于LDPC解码器是其中唯一模块的另一较大迭代过程。
现在将对于图5a到5d进一步讨论与解码LDPC代码相关的该迭代信息传递过程。
当解码一LDPC代码时,在每一约束和可变结点的处理可独立进行。于是,可变和/或约束结点处理可偶尔对一个结点进行,例如按顺序,直到某些或所有可变与约束结点处理已经对解码过程的特定迭代完成为止。这允许处理硬件的单个单元如果需要被提供和重新使用,以进行与每一可变和/或约束结点相关的处理。LDPC解码的另一重要的特征在于,在特定处理迭代期间所使用的V2C和C2V消息不需要同时、例如在相同处理迭代期间产生。这允许实现约束和可变结点处理能够并行进行,而无需考虑所使用的消息上次何时被更新。随后足够数目的消息更新并迭代,其中所有可变和约束结点处理接收的消息并产生更新的消息,假设图是正确设计的并在接收的被处理的字中没有剩余的未被校正的差错,则可变结点的(硬)输出将收敛。
假设在每一校验结点和可变结点的处理能够被看作是独立的操作,现在将参照图5a-5d更详细讨论在单个的示例性校验结点Cn502’和可变结点Vn506’处所进行的迭代处理。为了进行说明,我们将认为消息值和软输入与输出值是数。正数对应于0的硬位决策,而负数对应于1的硬位决策。较大的量值指示较大的可靠性。这样,数零指示完全不可靠,而符号(正或负)是不相关的。这一约定符合标准的惯例,软值(消息,接收的和输出的值)表示相关位的log-似然,即软值取以下的形式
log(概率位为0/概率位为1)
其中概率是以某种随机变量为条件的,例如在接收的值的情形下来自通信通路的物理观察。
图5a示出LDPC解码过程中的初始步骤。最初,对可变结点Vn506’提供软输入,例如来自被处理的接收字的接收的值(1个或更多的位)yn。在解码操作开始处的C2V消息及软输出Xn509初始设置为零。基于接收的输入,例如零值C2V消息和输入)yn,可变结点Vn506’对它所连接到的每一校验结点产生一V2C消息。典型地,在初始步骤中,这些消息的每一个将等于yn。
图5b中示出产生的V2C消息沿连接到可变结点Vn506’的每一边被传送。这样,更新的V2C消息被传送到与可变结点Vn506’连接的包括校验结点Cm502’的每一校验结点502。
除了产生V2C消息之外,可变结点处理结果在于更新对应于进行处理的可变结点的软输出09’。图5c中示出软输出Xn被更新。虽然是作为不同的步骤示出的,但软输出可与V2C输出的同时被输出。
如以下进一步所讨论,根据本发明某些实施例,软输出(或它们相关的硬决策)可用来确定代码字何时已经从接收的字恢复,即何时奇偶约束已经由输出值满足。这指示成功的解码(虽然找到的代码字可能并正确,即不是被传送的代码字),从而允许迭代解码过程以及时的方式暂停,例如在某固定的最大允许的消息数通过迭代完成之前。
一旦校验结点,例如校验结点Cm502’,沿其连接的边接收V2C消息,就能够进行校验结点处理。接收的V2C消息在校验结点中处理以产生更新的C2V消息,连接到特定校验结点每一边一个。作为校验结点处理的结果,沿一个边向可变结点传回的C2V消息将与连接到该校验结点其它边接收的每一V2C消息的值相关,但(通常并最好是但不是必须)与从C2V消息向其传送的该特定可变结点所接收的V2C消息无关。这样,C2V用来传送从可变结点接收的消息产生的信息,这些可变结点不是该消息向其传送的那个结点。
图5d示出更新的C2V消息向包括结点506’的可变结点的传递。具体来说,图5d中,示出约束结点Cm502’输出两个更新的C2V消息,更新的Cm2Vn消息提供给可变结点Vn506’。Vn506’还从与其连接的另一约束结点(多)接收附加的更新C2Vn消息(多)。
随着更新的C2V消息的接收,能够重复可变结点处理以产生更新的V2C消息和软输出。然后能够重复C2V消息的更新并继续进行直到满足解码器停止准则。
这样,在第一迭代之后,使用与初始值相反的更新的消息值,将重复图5a-5d中所示的处理,直到解码过程停止。
LDPC解码过程的迭代性质,及各结点处处理能够独立于在其它结点的处理进行这一事实,提供了实现LDPC解码器时灵活性的很好的处理。然而,如上所讨论,边和结点之间的关系全部的复杂性能够使边的关系信息的存储,例如图的描述变得困难。更重要的是,图的复杂性能够使消息的传递难以以多个消息被同时传递的并行的实现方式实现。
实际的LDPC解码器实现常常包括边存储器,用于存储沿约束和/或可变结点之间的边传递的消息。此外它们包括有时称为置换映象的图描述符,其包括规定边连接,或套接字配对的信息,从而定义解码图。这种置换映象可作为存储的数据或作为计算或蕴含置换的电路实现。除了边存储器之外,需要一个或多个结点处理单元进行与一结点相关的实际的处理。
能够进行软LDPC解码器的实现,其中使用软件控制CPU作为序列处理单元操作,并使用连接到CPU存储器控制消息的传递。在软件实现中,也可使用单个的存储器存储解码器图描述,边消息,以及用来控制CPU的解码器程序。
如以下所讨论,在本发明的各实施例中,使用一个或多个边存储器。在一个示例性的多边存储器实施例中,一个第一边存储器用于存储和传递C2V消息,且一个第二边存储器用于存储并传递V2C消息。在这种实施例中,困难并常常采用多个结点处理单元,例如一个进行约束结点处理且另一个进行可变结点处理。如以下所讨论的,这些实施例允许可变和约束处理操作并行进行,结果的消息被写入两个消息存储器的每一个,供解码过程的下一个迭代期间使用。
我们现在将展示一个小型LDPC图及其表示法一简单的例子,该例子将在后继解释本发明中使用。LDPC图的讨论之后将是LDPC解码器的描述,该解码器能够用于对小型图解码。
图6以图600的形式示出一简单的非正则LDPC代码。代码的长度是五,如由5个可变结点V1到V5602所指示。通过消息可通过其传递的总共12个边604,四个校验结点C1到C4606连接到可变结点602。
图7使用矩阵702,704以奇偶校验矩阵的形式示出图6中所示的LDPC代码。如以上所讨论,边以使用1的置换矩阵H 702表示。位xi与可变结点Vi相关。矩阵706和708表示H中对应于图中的边的1,下标分别根据可变套接字的顺序和约束套接字的顺序。
为了示例的目的,12个边将从可变结点侧,即根据它们的可变套接字被计数。在图6中能够看见由可变结点602与校验结点606之间的边建立的连接。为了讨论的目的,对附加到可变的将其连接到校验结点C1、C2和C3的V1的边,指定对应于可变套接字计数的标号1,2,3。可变结点V2分别由边4,5和6连接到校验结点C1、C3和C4。可变结点V3分别由边7和8连接到校验结点C1和C4。此外,可变结点V4分别由边9和10连接到校验结点C2和C4,同时可变结点V5分别由边11和12连接到校验结点C2和C3。这一下标对应于图7的矩阵706,即可变套接字顺序。
图8以对它们连接的可变和校验结点的关系,示出从可变结点侧计数的图6的12个边之间的关系。行802示出5个可变结点V1到V5。在变量802之下示出对应于连接到特定可变结点的相关套接字的边1到12804。注意,由于边从可变结点侧被排序,在行804它们按从1-12的顺序出现。让我们假设,消息按行804中指示的顺序存储在存储器中。
在可变结点处理期间,按顺序即按804中所示的顺序访问存储器中的12个边消息。这样,在可变结点处理期间,消息可简单地按顺序被读取并提供给处理单元。
行806示出出现在图6和7的代码中的四个约束结点C1到C4。注意,边在行804被重新排序以反映它们连接到约束结点的顺序,但指示的下标是从可变结点侧引导的。于是,假设边消息按从可变结点侧的顺序存储,当进行约束结点处理时消息将按行804所示的顺序被读出。就是说,在约束结点处理期间,消息将按顺序1,4,7,2,9,11,3,5,12,6,8,10从存储器读出。能够使用消息排序模块输出边消息访问信息的正确序列,例如存储器单元,用于在可变和校验结点处理操作期间,从存储器读取数据或向存储器写入数据。
现在将参照图9讨论每次一个边顺序地进行消息处理操作的串行LDPC解码器900,并将讨论使用图6所示示例性代码的解码。LDPC解码器900包括解码器控制模块902,消息排序模块(套接字置换存储器)904,结点度存储器910,边消息存储器906,结点处理器908,输出缓冲器x916,硬决策存储器912及奇偶校验验证器914。
边存储器906包括L个K位存储器单元,每一K位单元对应于一个边,且其中L是所使用的LDPC图中的边的总数,而K是沿一个边交换的每消息的位数。为了具体说明,我们假设消息按由可变套接字引导的边排序的顺序存储。这样,对于例图600,对应于边1,2,...,12的消息按指示的顺序存储。硬决策存储器912包括L个1位存储器单元,每一个1位单元对应于一个边。这一存储器存储由可变结点沿它们每一边传送的硬决策,使得奇偶校验约束可被验证。在校验结点处理器接收消息时,奇偶校验验证器914接收硬位决策。在奇偶校验验证器中验证奇偶校验,并在满足所有校验的情形下,向解码器控制模块902传送一收敛信号。
消息排序模块904可作为置换映象或速查表实现,其包含描述从可变结点侧观察或从约束结点侧观察的消息在边存储器中的排序的信息。这样,对于我们的例图600,规定了从约束侧所观察的边顺序序列1,4,7,2,9,11,3,5,12,6,8,10,将有效存储在消息排序模块中。这一序列用来对约束结点处理的消息排序,并用来对从硬决策存储器912的读出的硬决策序,供奇偶验证器914处理。
图9中解码器,对应于一个边的消息在它们由结点处理器处理之后被重写。这样,边存储器将在存储V2C消息与存储C2V消息之间交替。硬决策验证发生在约束结点处理期间,例如在V2C消息从边消息存储器906读出时。
解码器控制单元902负责在操作的可变和校验结点处理结点之间切换解码器操作,用于确定何时迭代解码过程应当停止,例如因为收到收敛信号或达到最大允许达到计数,用于向结点处理单元及奇偶校验验证器提供或控制度信息的提供,并用于控制对消息排序模块904的边下标的提供。在操作期间,解码器控制模块902向消息排序模块904传送边下标。值,边下标随时间对通过图中所有边的序列增量。对被实现的图中每一边使用不同的,例如唯一的边下标。响应每一接收的边下标,消息排序模块将输出一边标识符,例如边存储器地址信息,这样选择将被访问的边存储器单元,例如在任何给定的时间读出或写入。假设可变套接字排序,在可变结点处理期间消息排序模块904将引起消息按相继的顺序读出或写回,并在约束结点处理期间引起消息按对应于约束套接字的排序的顺序读出和写回。这样,在我们以上的例子中,在可变结点处理期间消息将按顺序1,2,3,...,12读出和写回,并同时硬决策将按顺序1,2,3,...,12写入硬决策存储器912。在约束结点处理期间,消息将按顺序1,4,7,2,9,11,3,5,12,6,8,10读出和写回,并同时消息排序模块904将引起硬决策位按顺序1,4,7,2,9,11,3,5,12,6,8,10读出和写回硬决策存储器912。
在响应从解码器控制模块902收到的标识符从边存储器读取消息时,它们提供给结点处理器908。取决于操作模式,结点处理器908进行适当的约束或可变结点处理操作,从而使用收到的消息产生对应于在任何给定时间实现的特定结点的更新消息。然后结果的更新消息写回刚刚从存储器读取的边存储器重写消息。发送给特定结点的消息到达作为相连块即一个接一个的结点处理器。解码器控制模块902向结点处理器传信结点描绘,例如通过指示对应于一结点的最后的消息,从而提供结点度信息。在图600的例子的情形下,可变结点度例如将被规定为序列(3,3,2,2,2),而约束结点的度例如将被规定为序列(3,3,3,3)。这一信息可存储在结点度存储器910,然后将由解码器控制模块902在其对边下标迭代时读取。另外,度信息可被编程到每一结点处理单元。这能够最好例如当事先知道结点度将是一致的时,即图将是正则时进行。
奇偶校验验证器914大体按校验结点处理器的方式操作,所不同在于输入消息是单个的位,不计算输出消息,因而内部计算更简单。
在可变结点模式操作期间,将由结点处理单元每次一个结点进行可变结点计算,直到处理例如与每一可变结点相关的消息更新和软输出值产生操作已经完成为止。消息按可变结点侧顺序被传送给结点处理器908,使得所有对应于一个结点的消息按序列到达结点处理器908。随着可变结点处理迭代的完成,解码器控制模块902引起解码器900切换到处理操作的约束结点模式。响应C/V控制信号的变化,结点处理单元908从可变结点处理模式切换到约束结点处理模式。此外,消息排序模块904切换到一种模式,其中消息标识符将按约束套接字顺序提供给边存储器。通过C/V控制线发送的一个或多个控制信号,能够用来控制操作的约束和可变结点处理模式之间的切换。
在解码器控制电路902按约束结点序列控制解码器进行约束结点处理时,每次一个结点,存储在边存储器中的消息将再次被更新,这时是通过约束结点处理产生的C2V消息。当与约束结点的全部集合相关的处理已完成时,解码器控制电路902将切换回处理操作的可变结点模式。这样,解码器900在可变结点与约束结点处理之间切换。如所述,处理顺序进行,每次一个结点,直到解码器控制电路902确定解码操作已完成。
图9中示出的分级或顺序LDPC解码***能够使用相对小的硬件实现。此外,其适于软件实现。但遗憾的是,处理的实现性质趋向结果相对慢的解码器实现。因而,虽然图9所示的分级结构有某些值得注意的属性,但其趋向不适于高带宽应用,诸如需要高解码速度并使用大代码字的光通信或数据存储。
在展示用于解码大线路化LDPC图的解码器之前,我们将讨论与本发明图的向量化特性相关的一般的概念和技术。向量化讨论之后将展示实施本发明的示例性向量化LDPC解码器。
为了获得对向量化LDPC图的理解,考虑有奇偶校验矩阵H的小型LDPC代码。在较大向量化图的场合中的小型图将称为投影图。设Ψ标记Z×Z置换矩阵的子集。我们假设Ψ中的置换的逆也在Ψ中。给定小型的投影图,通过以Z×Z矩阵代替H的每一元素我们能够形成Z-倍较大的LDPC图。H的0元素以零矩阵代替,标记为0。H的1元素每一个以来自Ψ的矩阵代替。这样,我们把LDPC图‘提升’到一个Z倍更大的图。表示的复杂性大体包括规定置换矩阵所需位数,|EH|log|Ψ|加表示H所需的复杂性,其中|EH|标记H中的数1,且|Ψ|标记Ψ中不同的置换数目。例如,如果Ψ是循环置换空间,则|Ψ|=Z。实际上我们困难有,例如对于n≈1000,则Z=16。
例子:提升小型奇偶校验矩阵,σi,i=1,...,16是这里所示按投影可变套接字顺序索引的Ψ的元素。
一般能够使用各种准则选择子集Ψ。以上结构主要动机之一是要简化解码器的硬件实现。因而,能够有益于限制Ψ为能够有效以硬件实现的置换,例如以开关网络。
并行开关网络拓扑结构,是与多处理器结构和高速通信开关相联系的被很好研究的题目。适用于置换子集Ψ结构的一个实际的例子是一类多层次开关网络,例如包括欧米伽(均全解调)/德尔塔网络,log移位器网络等。这些网络对子集Ψ提供了合理实现的复杂性和足够的裕度。此外,多层次开关网络可很好地标度,例如它们的复杂性随N logN而上升,其中N是向网络的输入数,这使它们特别适用于大规模并行LDPC解码器。另外,在本发明相对低并行性和小Z的解码器中,置换的子集Ψ能够在单层中实现。
LDPC图称为具有“多边”的,如果有任何结点对连接到一个以上的边。多边是连接由一个以上的边连接的结点对的边的集合。虽然一般不希望LDPC图有多边,但在很多情形下在构成向量化图中投影图可能必须拥有多边。能够把奇偶校验矩阵的概念,扩展到允许矩阵项表示连接相关结点对的边的数目。代码字定义仍然是相同的:代码是满足Hx=0模2的0,1向量x的集合。当以多边向量化一投影图时,根据本发明,多边内的每一边使用来自Ψ的置换替代,且这些矩阵被添加以产生扩展的全代码奇偶校验矩阵。这样,在投影图的奇偶校验矩阵H中j>1将被“提升”到来自Ψ的置换矩阵的和σk+σk+1+...+σk+j-1。通常,将选择和的元素使得σk+σk+1+...+σk+j-1的每一个项或为0或为1,即完全图没有多边。
上述的提升显然有一限制。在以上结构中代码长度与被编码数据单元的长度必须是Z的倍数。然而这一明显的限制易于克服。假设被编码的数据单元长度AZ+B,其中A是正整数而B在1与Z(含)之间,且所需的代码长度为CZ+D,其中C是正整数,而D在1与Z(含)之间。设E是使得EZ>=CZ+D+(Z-B)最小的正整数。能够设计一提升的图,其编码(A+1)Z长度数据单元以产生长度EZ的代码字,使得数据单元作为代码字的一部分出现,并使用其产生所需的如下的代码参数。给定长度AZ+B的数据单元,连接Z-B个零以产生长度(A+1)Z的数据单元。该数据单元被编码而产生长度EZ的代码字。Z-B个零不被传送。在代码字中除了其它EZ-(Z-B)位之外选择EZ-CZ-D-(Z-B)位并对它们穿孔,注意穿孔位数在0和Z-1(含)之间。这些位将不被传送,于是实际传送位的数目是EZ-(Z-B)-(EZ-CZ-D-(Z-B))=CZ+D,这就是所希望的代码长度。接收器,事先已知关于附加的零和穿孔位,以软位代替指示删除的穿孔位,并以软位代替已知的指示零值的零位,而有最大可能的可靠性。长度为EZ的扩展的收到的字现在可被解码以恢复原来的数据单元。实际上,通常通过只来自一个向量结点穿孔位并说明已知位只来自一个向量结点进行这些调整。
现在将研究使用以上讨论的向量化LDPC图的技术的各种解码器的含意。
如上所讨论,LDPC代码的息传递解码涉及沿表示代码的图的边传递消息,并进行基于图的结点例如可变和约束结点处那些消息的计算。
给定向量化LDPC图,能够如下使解码过程向量化。解码器如同在它同步且并行地解码投影LDPC代码的Z个拷贝那样操作。解码过程的控制对应于LDPC图并可在Z个拷贝中共享。这样,我们把解码器描述为对遍历向量边并由向量结点接收的向量消息的操作,每一向量有Z个元素。套接字也变为向量化。具体来说,向量结点处理器可能包括Z个并行结点处理器,并当消息的向量(m1,...,mZ)传递到向量结点处理器时,消息mi传递给第ith个处理器。这样,在向量结点处理器内不出现消息的路由和重新排序,即向量消息与处理器的向量以固定方式配准。
从Z个投影图的纯不相交的并行执行的一个偏离在于,在消息传递过程期间消息在向量消息内被重新排序。我们称这一重新排序操作为旋转。旋转实现了由Ψ定义的置换操作。因为旋转,投影图的Z个拷贝的处理通路从而混合链接它们而形成单个的大图。除了投影图所需的控制信息之外,需要规定旋转的控制信息。幸运的是,旋转控制能够使用相对小的存储器规定。
虽然对旋转根据本发明能够使用各种置换,但因为这种置换能够被实现的情形使用循环置换是特别关心的。网络简略,我们现在假设Ψ包括循环置换群。这种情形下,我们的大LDPC图限制为具有准循环结构。网络这一例子的目的,设N是图中可变结点的数目,并设M是图中约束结点的数目。首先,我们假设N和M都是Z的倍数,N=nZ,M=mZ,其中Z将标记循环的阶。
让我们考虑结点被加双下标。这样,可变结点vi,j为来自投影图的第ith个拷贝的第jth个可变结点。由于Ψ是循环置换群,可变结点vi,j连接到约束结点ca,b,当且仅当对于k=1,...,Z可变结点vi+k modZ,j连接到约束结点ca+k modZ,b。
现在将参照涉及图600的向量化的附图10到16,进一步说明本发明使用小得多的图表示和旋转信息表示大图的技术。参照这些附图描述的技术能够用于更大的LDPC图。
根据本发明,能够通过复制即实现图6中所示小图的多个拷贝产生较大的图,并然后进行旋转操作,以便相互连接被复制的图的各个拷贝。我们称较大图结构内的小图为投影图。
图10是图1000,表示形成图6中所示的小图的3个并行拷贝的结果。拷贝结点602’,602”与602分别对应于第一到第三图,是形成图6的三个拷贝的结果。此外,校验结点606’,606”与606分别对应于第一到第三图,是形成三个拷贝的结果。注意没有连接该三个图之一的结点到此三个图的另一结点的边。于是,通过因子3“提升”基本图的这一拷贝过程结果是三个不相交的等同的图。
图11示出以上使用矩阵1102和1194讨论的拷贝过程的结果。注意,为了形成原来的图的三个拷贝,矩阵702中每一非零元素以3×3恒等矩阵代替。这样,矩阵702中每一个以沿其对角线有1及其余部分为0的3×3矩阵代替,以产生矩阵1102。注意,矩阵1102有矩阵702具有的3倍数目的边,图6所示的基本图的3个拷贝每一个12个边。这里,可变xij对应于可变结点Vij。
图12示出构成图1000的(3×12)36个边,(3×5)15个可变结点,及(3×4)12约束结点之间的关系。如图8的情形,边从可变结侧计数。
为了注释的目的,用来标识一个结点,约束或边的第一数码指示边所属的的图的拷贝,例如第一,第二或第三图拷贝。第二个数码用来标识特别规定的基本图的拷贝内元素数。
例如,在行1202’值(1,2)用来指示图的第一拷贝的边2,而在行1202”(2,2)用来指示图的第二拷贝的边2。
注意,边的行1202’,1202”,1202就是行804的拷贝,表示图8中所示边804的行的三个拷贝,它们与可变结点相关。类似地,边的行1204’,1204”,1204表示图8中所示边804’的行的三个拷贝,它们与约束结点相关。
让我们简单讨论如何修改图9解码器900,以便解码现在定义的Z=3并行图。结点处理器908将形成向量结点处理器,能够同时并行处理3个等同的结点。所有从结点处理器908的输出将被向量化,从而带有以前所带有的3倍数据。硬决策存储器912和边消息存储器906将形成3倍宽,每一个能够在单个SIMD指令方向并行使用写或读3个单元。奇偶校验验证器914与输出缓冲器x916还将适于使用所有适当并行化的处理被向量化。
现在我们考虑旋转引入我们的例子。这能够以如图13所示的3×3循环置换矩阵代替图11中所示的3×3恒等矩阵表示。注意,对于图13中使用的循环置换矩阵有三种可能性。能够通过指示置换矩阵是否具有“1”位于置换矩阵的第一行中的第一,第二和第三个位置,指出特定的置换矩阵代替恒等矩阵。例如,在矩阵1302的情形下,在左上开始并进到右下角(向量约束套接字顺序),旋转可由序列(2,2,3,3,1,1,1,3,2,1,2,3)规定。
图14示出对约束结点侧进行循环置换(旋转)的效果。由于置换从约束结点侧进行,边之间的关系,例如从可变结点侧的排序,保持如行1402’,1402”,1402中所示不变。然而从约束侧,置换的结果为列内的边,例如特定向量边内的边,被重新排序为如行1404’,1404”,1404中所示。这产生对应于投影图的不同拷贝结点之间的相互连接。
例如就图11的行1104的列1的关系考虑行1404的列1。注意,作为向量边置换、操作的结果,现在约束结点C1,1连接到与边(1,1)相对的边(2,1),约束结点C2,1连接到与边(2,1)相对的边(3,1),且约束结点C3,1连接到与边(3,1)相对的边(1,1)。
我们以上讨论如何向量化解码器900,以便对投影图的Z并行拷贝解码。通过向消息通路引入开关进行旋转,我们对图13中定义的LDPC代码解码。
图15示出配有本发明各种特性的解码器。解码器1500使用旋转完全向量化解码器600。注意,附图指示Z=4,然而我们的例子有Z=3,一般来说我们可以有任何Z>1,但实际上Z值常常最好是形式为2k,对于整数k。对于解码器600类似的情形是明显的。具体来说,解码器控制模块1502与结点度存储器1510,作为它们在解码器900中各自的对应物902和910,以相同或类似的方式发挥功能。例如,为了解码在图13和14中定义的LDPC代码,这些元件的操作将完全与它们在解码器900中当解码例图600时的对应物相同。边消息存储器1506与硬决策存储器1512,是它们在解码器900中的对应物906和912的向量化版本。而在解码器900中,存储器存储单个单元(K位消息或位),解码器1500中对应的存储器存储集合,即向量,消息,结果例如存储的是Z×K位消息。使用SIMD指令这些向量作为单个单元被写和读。这样,从消息排序模块1504发送到这些模块的消息标识符等价于或类似于解码器900中的那些标识符。消息排序模块1504有附加的角色,超过其在解码器900中的对应物904具有的角色,即存储和提供置换,例如旋转,信息。回忆起在解码例子600中,解码器900在其消息排序模块904中存储边序列(1,4,7,2,9,11,3,5,12,6,8,10)。考虑使用解码器1500,解码图13和14的代码。消息排序模块1504将存储以上相同的序列,供在约束结点处理期间访问消息向量,并还存储序列(2,2,3,3,1,1,1,3,2,1,2,3),其描述与向量消息相同的序列相关的旋转。这一序列的作用是作为产生旋转信号的基础,其由消息排序模块1504用来引起开关1520和1522旋转向量消息和向量硬决策位。(注意,硬决策位只在拷贝结点处理模式期间提供。)向量奇偶校验验证器1514是其在解码器900中的对应物914的向量版本。注意,输出收敛信号如前是标量。输出缓冲器xi 1516与输出缓冲器x916服务于相同的目的,但输出数据是作为向量写入。向量结点处理器1508例如是Z个结点处理器,每一个如在908中是并行的。这些结点将共享来自解码器控制模块1502的deg信号和C/V控制信号。
为了能够便于输出软或硬解码器决策,由拷贝处理单元产生的软决策提供给输出缓冲器xi 1516的软决策输入。这样,在完成解码之前任何时间,可从输出缓冲器xi 1516的输出获得软决策。
进一步考虑解码器1500将如何起到对图13和14例子解码的作用。起初,边消息存储器1506以0填充。解码器控制模块1502首先切换到拷贝结点处理模式。按顺序读出边消息存储器1506向量(在这点都是0),并提供给向量结点处理器1508,用于可变结点处理。然后向量结点处理器1508仅沿每一边输出从可变结点收到的值,我们将使用y标记这些第一消息以指示这一点。这样,输出的向量将是(y1,i,y2,i,y3,i),对于i=1,...,12按增序。旋转的信号用来控制由开关电路1520,1522进行的消息重新排序。来自消息排序模块1504的旋转的信号将引起向量中的消息旋转,以产生如下处理的向量:(y2,1,y3,1,y1,1),(y3,2,y1,2,y2,2),(y1,3,y2,3,y3,3),(y2,4,y3,4,y1,4),(y3,5,y1,5,y2,5),(y1,6,y2,6,y3,6),(y3,7,y1,7,y2,7),(y2,8,y3,8,y1,8),(y1,9,y2,9,y3,9),(y3,10,y1,10,y2,10),(y1,11,y2,11,y3,11),(y2,12,y3,12,y1,12)。被处理的向量一旦按指示的顺序写入边消息存储器1506,解码器控制模块1502将切换到约束模式。然后存储的向量消息按顺序(1,4,7,2,9,11,3,5,12,6,8,10)读出。这样,它们将按顺序(y2,1,y3,1,y1,1),(y2,4,y3,4,y1,4),(y3,7,y1,7,y2,7),(y3,2,y1,2,y2,2),(y1,9,y2,9,y3,9),(y1,11,y2,11,y3,11),(y1,3,y2,3,y3,3),(y3,5,y1,5,y2,5),(y2,12,y3,12,y1,12),(y1,6,y2,6,y3,6),(y2,8,y3,8,y1,8),(y3,10,y1,10,y2,10)呈现给向量结点处理器1508。向量结点处理器1508作为三(Z=3)个结点处理器并行实现。分别是每一消息向量(消息集合)的第1元素(消息)传递给第1个结点处理器;第2消息传递给第2个处理器;第3消息传递给第3个处理器。指示当前被处理的结点度的度(deg)信号,由度存储器1510提供给向量结点处理器1508的三个并行处理器。在这点度信号指示约束(都)为度3,于是第1处理器将对于其第一约束结点传递y2,1,y2,4和y3,7,且对于其第二约束结点传递y3,2,y1,9,y1,11。类似地,第2处理器将对其第一约束结点处理y3,1,y3,4,y1,7,以及对于其第二约束结点传递y1,2,y2,9,y2,11。
设mi,j标记对应于输入yi,j的输出消息。在向量从向量结点处理器1508出现时,到开关1520的旋转信号将引起向量被重新排序,使得先前的旋转反向,因而它们作为(m1,j,m2,j,m3,j)以顺序j=1,4,7,2,9,11,3,5,12,6,8,10到达边存储器。根据它们被读出消息指示符的顺序,消息被回写到存储器,于是在写之后它们作为(m1,j,m2,j,m3,j)以顺序j=1,...,12出现在存储器中。消息排序模块1504现在响应由解码器控制模块1502提供的C/V信号切换到可变结点处理模式。然后消息向量以顺序j=1,...,12被读出并传递给向量结点处理器1508,供可变结点处理。这完成了一个迭代。
在可变结点处理期间向量结点处理器1508还输出软解码的向量,其存储在输出缓冲器xi1516中。它还输出提供给开关电路1522的硬决策。一位的硬决策向量受到如消息向量在对应的时间相同的旋转操作。然后由开关电路1522产生的旋转的硬决策向量排列在它们被存储的硬决策存储器1512中。作为向消息向量施加同一旋转的结果,硬决策可以在约束结点处理期间向量消息被读出的相同的顺序被读出。在约束结点处理期间,硬决策传递到并行进行Z个奇偶校验的向量奇偶校验验证器1514。如果所有奇偶校验被满足,则产生收敛信号CON并被发出。响应接收指示成功解码的收敛信号,解码器控制模块1502停止解码过程。
明显的是,对解码器1500有许多每一都可实施当前发明的变形。例如,开关1520能够另外沿边消息存储器1506和向量结点处理器1508之间的数据通路放置。类似地,开关1522能够另外沿硬决策存储器1512和向量奇偶校验验证器1514之间的数据通路放置。这种替换方式还将涉及旋转信号定时的适当调整。对于进行固定数迭代的实施例,不需要使用硬决策存储器1512,向量奇偶校验验证器1514和附属的数据通路并被删除,因而不需要收敛检测。就本发明观点而言,对于业内专业人员许多进一步的变形是明显的。
图16示出解码器1600,其根据本发明的另一实施例实现。解码器1600包括许多与解码器1500的元件相同或类似的元件。于是,为了简略,将使用与图15中使用的相同的标号标识这些元件,并不再详细讨论。同时,解码器1600能够例如同时和独立地进行可变结点与约束结点两者处理操作,例如消息更新操作。图15解码器,因为其在可变结点和约束结点处理迭代之间切换的方式,可描述为一侧到另一侧的解码器,与该解码器的实现相比,解码器1600,由于其可变结点和约束结点处理操作能够独立例如同时进行,其可描述为异步迭代解码器。
解码器电路1600包括一解码器控制模块1602,一消息排序模块1604,一个第一开关电路1621,V2C边消息存储器1606,一个约束结点向量处理器(例如并行的Z-约束结点处理器)1609,一个第二开关电路1620,C2V边消息存储器1607,可变结点向量处理器1608(例如并行Z-可变结点处理器),一个硬决策存储器1612,及一个第三开关1622,如图16所示连接在一起。
各约束结点处理器和各可变结点处理器的各种实施例,其Z个可并行用于分别实现约束结点向量处理器1609和可变结点向量处理器1608,在以下文献中有详细说明美国临时申请60/328,469,标题“NodeProcessors For Use in Parity Check Decoders”,其在October 10,2001提交,并据此特地结合以资对比。本专利申请的发明人也命名为该结合的临时专利申请的发明人。
为了支持图16中约束和可变消息的独立和/或并行的更新,分开的边存储器1606,1607及开关电路1620,1621分别用来支持约束结点和可变结点处理操作。如同图15的实施例,每一消息存储器1606,1607能够存储L(Z×K-位)向量消息。存储器1606,1607中每一向量消息,例如Z×K-位消息的列,能够以单个的读出或写操作读出或写入。
V2C边消息存储器1606用来存储V2C消息并因而具有连接到开关电路1621输出的写输入,该开关电路1621从可变结点向量处理器1608接收数据。C2V消息存储器1607用来存储C2V边消息,并因而具有连接到约束结点向量处理器1609的输出的写输入。
开关1620和1621用来把可变结点向量处理器1608,连接到V2C边消息存储器的输入以及C2V边消息存储器的输出。在一特定实施例中,消息向量按向量约束套接字顺序存储。消息向量被写入C2V边消息存储器1607,并按向量约束套接字顺序例如线性地从V2C边消息存储器1606读出,这样,不需要外部控制(来自解码器控制模块1602的边下标输出通过线性排序模块1604无变化传递给其约束边下标输出)。消息向量从C2V边消息存储器1607读出,并按向量可变套接字顺序写入V2C边消息存储器1606。消息排序模块1604产生指示这一排序的可变边下标信号。注意,这一信号控制C2V边消息存储器1607的读取,并在被延迟之后传递到V2C边消息存储器1606。该延迟考虑了由开关1620和1621及向量可变结点向量处理器1608进行的处理所需的时间。这一延迟可以是被处理的结点度的一个功能,如图16中由可变结点度信号所指示。
为了避免处理管路由于可变延迟而阻塞,约束和可变结点都这样排序,使得相同的度的结点以类型的方式被处理。通过按度以单调的方式例如增加或降低度顺序存储结点组,可进一步降低出现在有不同度的结点组边界上的管路阻塞。为了实现的简化,实施例900,1500和1600都假设增加度的顺序。
在图16所示的特定实施例中,向量按向量约束结点旋转顺序存储。在每一C2V向量消息进到可变结点向量常常冷却608时,开关1620把每一向量中的消息旋转到可变旋转,并然后开关1621向对应于同一向量边的输出V2C向量消息施加逆向旋转。在与向量约束结点处理器中的处理时间匹配的延迟之后,传递给开关1620的旋转信号通过旋转逆向电路1624传递给开关1621。这一延迟可取决于约束结点度,如由度存储器1610约束结点度信号输出所指示。
解码器1600包含解码器控制模块1602。该解码器控制模块操作方式类似于先前讨论的控制模块1502。然而,在1602中没有C/V控制信号产生。通过一计数器可提供边下标产生功能,该计数器在重新起动之前通过向量边的整个集合循环。
除了输出软决策之外,每当产生向量V2C消息时,通过向量可变结点向量处理器1608中的每一Z-可变结点处理单元,每边一个产生硬决策。在向量消息写入V2C边消息存储器1606时,在由开关1622旋转之后Z×1位硬决策输出写入硬决策输出存储器1612。开关1622与硬决策存储器1612分别在与开关1621及V2C边消息存储器1606相同的控制信号下操作。
结果的Z×1旋转向量传递给向量奇偶校验验证器1614,该验证器包括Z个并行连接的奇偶校验验证器。验证器1614确定奇偶校验是否被满足,并如果所有被满足则产生一收敛信号发送到解码器控制模块。响应接收指示收敛的信号,解码器控制模块停止对接收的代码字的解码。在实施例1600中,由于对来自迭代N的数据的约束验证是在迭代N+1期间进行的,且收敛信号在完成迭代N+1时可得,收敛检测信号是在代码字已写入输出缓冲器之后可得的一迭代。
以采用不同收敛检测电路的解码器1600,图17示出类似于解码器1700的实施例,约束验证在Z×K-位输出值X写入输出缓冲器1716时“在飞行时”完成。这种情形下,在向量约束由来自可变结点向量处理器1708的硬决策输出更新时,约束状态存储器1712保持对约束状态的跟踪。每一约束状态存储器单元对应于一个代码字奇偶校验约束。在任何约束状态单元最后的更新时验证这些奇偶校验值。如果在的N期间所有验证被满足,则将产生一收敛信号,并在迭代N之后立即由向量奇偶校验验证器1714输出。这将向解码器控制模块1702证明,输出缓冲器1716中的数据是有效的。图17的实施例中,消息排序模块1704产生附加的信号,定义在图18实施例中没有产生的约束结点下标(与边下标相对)。约束结点下标指示当前V2C消息的约束结点目标。这一字段的作用是作为它被提供的约束状态存储器1712的下标。
虽然比图15的实施例需要的电路更小,但图16和图17实施例的优点是,由于在每一处理迭代期间充分使用了两个向量结点处理器,向量约束和可变结点向量处理器1609/1709,1608/1708的使用更加有效。此外,与图15实施例相比,由于约束和可变结点处理并行进行,例如同时进行,故降低了解码时间。
以上所述解码方法允许消息传递解码,例如LDPC解码,可使用软件及能够支持SIMD操作的通用计算机进行。在这些实施例中,一个或多个并行处理器作为向量处理单元,或单个处理器内的硬件可用来并行进行多个向量处理操作。在这些实施例中,边存储器,置换映象与关于每结点信息数的信息都存储在共用的存储器中,例如计算机主存储器。信息传递控制逻辑和解码器控制逻辑,可作为在计算机处理单元上执行的软件程序实现。此外,可使用软件和一个或多个SIMD处理指令实现开关装置。
以上所述LDPC解码方法允许在各种硬件平台,诸如现场可编程门阵列上或在专用集成电路中实现。本发明特别可用于明确开发简单并行机制的这些设置中。
就本发明以上的说明来看,对于业内专业人员明显的是关于本发明的解码方法和设备可以有许多另外的变形。这些变形认为在本发明的范围内。