解码设备、控制方法及程序的制作方法

文档序号:7538679阅读:223来源:国知局
专利名称:解码设备、控制方法及程序的制作方法
技术领域
本发明涉及一种解码设备、控制方法以及程序,并且尤其涉及一种利用之可以减少例如解码LDPC(Low Density Parity Check,低密度奇偶校验)码的设备的尺寸的解码设备、控制方法以及程序。
背景技术
近些年,例如,通信领域诸如移动通信或太空通信的研究,以及广播领域诸如地面广播或卫星数字广播的研究,已经取得了明显的进步,而随之一起的,涉及码理论的研究也在积极地开展,以提高纠错编码和解码的效率。
置于码能力的理论限制,已经知道由所谓的C.E.Shannon的信道编码理论提出的香农(Shannon)限。从事涉及码理论的研究的目的是得到接近于这个香农限的能力。近些年,作为一种接近香农限的能力的编码方法,开发出了一种叫做Turbo编码的技术,诸如并联卷积码(parallel concatenated convolutional codes,PCCC)和串联卷积码(SCCC)。另外,在开发了这种Turbo编码的同时,作为一种久为人知的编码方法的低密度奇偶校验码(之后称其为LDPC码)受到了关注。
LDPC码是由R.G.Gallager于1963年在麻省的剑桥在M.I.T.Press的”Low Density Parity Check Codes”中第一次提出的,随后,关注集中在由D.J.C.MacKay于1999年发表在IEEE Trans.Inf.Theory,IT-45,第399-431页的”Gooderror correcting codes based on very spare matrices”,以及由M.G.Luby,M.Mitzenmacher,M.A.Shokrollahi和D.A.Spielman于1998年发表在Proceedingsof ACM Symposium on Theory of Computing上的第249-258页的”Analysis of lowdensity codes and improved designs using irregular graphs”,等等。
已知LDPC码是随着加长码的长度来获得接近于香农限的编码能力的,这与Turbo码和其他码一样。另外,LDPC码具有一个属性,就是其最小距离与码长度是成比例的,相应的由于该特性,可以获得极好的块错误概率属性,并且进一步的,在Turbo码或类似码的解码属性中观察到的/所谓的错误平底现象(error floorphenomenon)很少出现,这个事实可以引作优点。
下面将对于这种LDPC码进行具体描述。注意LDPC码是线性码,尽管其不必总是二进制的,但这里的描述将假设LDPC码是二进制的。
对于LDPC码,其最大的特征就是定义该LDPC码的奇偶校验矩阵是疏矩阵。这里,疏矩阵是由极少数的为“1”的矩阵分量组成的矩阵,并且如果我们将一个稀疏奇偶校验矩阵表示为H,对于这样的奇偶校验矩阵H,例如在图1中所描述的,每一列的汉明(hamming)权(“1”的数目)是“3”,而且每一行的汉明权是“6”,等等。
这样,由其中每行和每列的汉明权都是常数的奇偶校验矩阵H定义的LDPC码称为规则LDPC码,。另一方面,由其中每行和每列的汉明权不是常数的奇偶校验矩阵所定义的LDPC码被称为不规则LDPC码。
通过根据奇偶校验矩阵H来生成一生成矩阵G、并且通过将二进制信息消息乘以该生成矩阵G,来实现采用这样的LDPC码的编码。特别的,使用LDPC码来进行编码的编码设备首先计算生成矩阵G,其中在奇偶校验矩阵H的转置矩阵HT和生成矩阵G之间保持GHT=0的关系式。这里,对于生成矩阵G是k×n矩阵的情况,编码设备将生成矩阵G乘以一由k个比特构成的信息消息(向量u),以生成由n个比特构成的码字c(=uG)。由该编码设备生成的码字被进行映射,例如码比特的“0”值被映射为“+1”,而码比特的“1”值被映射为“-1”,并被经由预定的通信信道发送,并且随后在接收端被接收。
另一方面,LDPC码的解码是一种由Gallager提出的算法,将这种解码称为概率解码,并可以由消息传递算法来执行,该算法采用在所谓Tanner图上的概率传播(置信传播),这个图由可变节点(也被称为消息节点)和检查节点构成。这里,在下面的适当时候还将可变节点和检查节点简称为节点。
然而,对于概率解码,节点之间交换的消息是实数值,从而为了解析地求解此,有必要跟踪指示连续值的该消息的概率分布本身,这导致需要伴有极大难度的解析。因此,Gallager提出了算法A或算法B,作为LDPC码的解码算法。
例如,按图2所描述的过程来执行对LDPC码的解码。现在,我们假设具有码长的LDPC码的接收数据的第i个是U0(u0i),从检查节点输出的第j个消息(从连接到可变节点的第j个分支输出的消息)是uj,而从可变节点输出的第i个消息(从连接到可变节点的第i个分支输出的消息)是vi。还有,这里提到的术语“消息”是实数值,它使用所谓的对数似然比来标识“0”值。
首先,对于LDPC码的解码,如图2所示,在步骤S11,接收到接收数据U0(u0i),将消息uj初始化为“0”,而且将作为重复处理计数器的整数变量k初始化为“0”,流程前进到步骤S12。在步骤S12重,通过基于接收数据U0(u0i)执行公式(1)中所示的可变节点计算,来获得消息vi,并通过基于消息vi执行公式(2)中所示的检查节点计算,来获得消息uj。
vi=u0i+Σj=1dv-1uj...(1)]]>tanh(uj2)=Πi=1dc-1tanh(vi2)...(2)]]>这里,公式(1)和公式(2)中的dv和dc是指示奇偶校验矩阵H的纵向(列)和横向(行)的“1”的数目的参数,并且它们是分别任意可选择的。例如,(3,6)码得到dv=3,而dc=6。
注意对于公式(1)或(2)的计算,从输出消息的分支(边缘,edge)输入的消息并不被用作OR或AND运算的对象,并且相应的,OR或AND运算的范围是1到dv-1,或者1到dc-1。另外,公式(2)的计算还可以通过创建函数R(v1,v2)的表来执行,如公式(3)中所示,该公式被预先定义为1输出和两个输入v1和v2,并连续(递归地)采用这种方式,如公式(4)所示。
x=2tanh-1{tanh(v1/2)tanh(v2/2)}=R(v1,v2)...(3)uj=R(v1,R(v2,R(v3,···R(vdc-2,vdc-1))))...(4)]]>在步骤S12中,变量k被进一步加“1”,并且流程继续到步骤S13。在步骤S13中,判断变量k是否是预定的重复解码次数N或以上。在步骤S13中,当判断出变量k小于N时,流程返回到步骤S12,然后重复执行相同的过程。
另外,当在步骤S13中判断出变量k不小于N时,流程继续到步骤S14,获得消息v并将其输出,该消息v是通过执行公式(5)所示的计算来最终输出的解码结果,从而该LDPC码的解码过程就完成了。
v=u0i+Σj=1dvuj...(5)]]>
这里,使用来自连接到可变节点的所有分支的消息uj来执行公式(5)的计算,这不同于公式(1)的计算。
对于这样的LDPC码的解码,例如如图3所示,在(3,6)码的情况下,在节点之间交换消息。注意在图3中用“=”表示的节点代表可变节点,其中执行公式(1)所示的可变节点计算。注意在图3中用“+”表示的节点代表检查节点,其中执行公式(2)所示的检查节点计算。特别的,对于算法A,消息被二值化,在显示为“+”的节点执行dc-1个输入消息(输入到检查节点的消息vi)的异或逻辑运算,并且当dv-1个输入消息(输入到可变节点的消息vj)的比特值完全不同于在用“=”表示的可变节点的接收数据R时,其中的符号被反转并输出。
另一方面,在近些年,已经开展了涉及解码LDPC码的实现方法的研究。首先,在描述实现方法之前,先示意性地描述一下对LDPC码的解码。
图4是(3,6)LDPC码(编码率为1/2,编码长度为12)的奇偶校验矩阵H的例子。LDPC码的奇偶校验矩阵H可以被表示成如图5的Tanner图。这里,在图5中,用“+”表示的节点是检查节点,用“=”表示的节点是可变节点。检查节点和可变节点分别对应于奇偶校验矩阵的行和列。检查节点和可变节点之间的交叉线是分支(边界),并对应于奇偶校验矩阵H的“1”。也就是说,在奇偶校验矩阵的第j行和第i列的元素是1的情况下,在图5中,从顶部起的第i个可变节点(“=”节点),以及从顶部起的第j个检查节点(“+”节点)由一个分支相连。分支表示了对应于可变节点的(接收数据的)LDPC码的比特具有对应于检查节点的约束条件。注意图5是图4的奇偶校验矩阵H的Tanner图。
作为LDPC码的解码方法的总乘积算法(Sum Product Algorithm),重复执行可变节点计算和检查节点计算。
在一个可变节点,按照诸如图6所示来执行公式(1)的可变节点计算。也就是说,在图6中,使用来自连接到一个可变节点的其余分支的消息u1和u2,以及接收数据u0i来计算对应于要被计算的一个分支(连接到一个可变节点的分支中的第i个分支)的消息vi。对应于其他分支的消息也按同样方式来计算。
在描述检查节点的计算之前,使用关系式a×b=exp{ln(|a|)+ln(|b|)}×sign(a)×sign(b)来将公式(2)重写为诸如公式(6)。然而,当x≥0时sign(x)是1(逻辑0),而当x<0时是-1(逻辑1)。
uj=2tanh-1(Πi=1dc-1tanh(vi2))]]>=2tanh-1[exp{Πi=1dc-1ln(|tanh(vi2)|)}×Πi=1dc-1sign(tanh(vi2))]]]>=2tanh-1[exp{-(Πi=1dc-1-ln(tanh(|vi|2)))}]×Πi=1dc-1sign(vi)...(6)]]>另外,当定义非线性函数Φ(x)=-ln(tanh(x/2)),x≥0时,逆函数Φ-1(x)用公式Φ-1(x)=2tanh-1(e-x)来表示,从而公式(6)可以写成公式(7)。
uj=Φ-1(Σi=1dc-1Φ(|vi|))×Πi=1dc-1sign(vi)...(7)]]>在一个检查节点,按照诸如图7来执行公式(7)的检查节点计算。也就是说,在图7中,使用来自连接到一个检查节点的其余分支的消息v1、v2、v3、v4和v5,来计算对应于要被计算的一个分支(连接到一个检查节点的分支中的第j个分支)的消息uj。对应于其他分支的消息也按同样方式来计算。
注意,函数Φ(x)也可以表示为Φ(x)=ln((ex+1)/(ex-1)),并且当x>0,Φ(x)=Φ-1(x),也就是说,非线性函数Φ(x)的计算结果和逆函数Φ-1(x)的计算结果相同。当在硬件上实现函数Φ(x)和Φ-1(x)时,有时会使用LUT(查找表)来实现,但两个函数都共享同一个LUT。
还有,公式(1)的可变节点计算可以被分成公式(5)和下面的公式(8)。
vi=v-udv...(8)因此,重复执行公式(5)、公式(8)和公式(7)的计算,由此可以重复执行公式(1)的可变节点计算和公式(7)的检查节点计算。在这种情况下,在用公式(5)和公式(8)的可变节点计算中,公式(5)的计算结果可以依原样确定为最终的解码结果。
在硬件上实现总乘积算法的情况下,有必要用适当的电路尺寸和操作频率来重复执行用公式(1)(或公式(5)和公式(8))表示的可变节点计算(可变节点的计算)和用公式(7)表示的检查节点计算(检查节点的计算)。
作为解码设备的实现示例,下面将对完全串行解码的实现方法进行描述,该解码是通过简单的逐个顺序执行每个节点的计算而执行的。
图8描述了用于执行LDPC码的解码的解码设备的配置示例。
对于图8中的解码设备,在运行时钟的每个钟点计算对应于一个分支的消息。
特别的,图8中的解码设备是由消息计算单元101、消息存储器104、接收数据存储器105和控制单元106构成的。另外,消息计算单元101是由可变节点计算器102和检查节点计算器103构成的。
对于图8中的解码设备,消息计算单元101从消息存储器104中逐个顺序读出消息,并使用该消息来计算对应于期望分支的消息。随后,从计算中获得的消息被存储在消息存储器104中。图8中的解码设备通过重复执行上述过程来实现重复解码。
也就是说,可以通过接收发送的LDPC码而获得的接收数据(LDPC码)D100被提供给接收数据存储器105,该数据是对数似然比,它表示了码0(或1)的标识,并且接收数据存储器105存储接收数据D100。
在可变节点计算时,接收数据存储·器105根据从控制单元106提供的控制信号来读出所存储的接收数据,并将其作为接收数据D101提供给消息计算单元101的可变节点计算器103。
另外,在可变节点计算时,消息存储器104根据从控制单元106提供的控制信号来读出所存储的消息(检查节点消息uj)D102,并将其提供给可变节点计算器102。可变节点计算器102使用从消息存储器104提供的消息D102,以及从接收数据存储器105提供的接收数据D101,来执行公式(1)的可变节点计算,并将作为可变节点计算结果的消息(可变节点消息)vi提供给消息存储器104,作为消息D103。
随后,消息存储器104储存由可变节点计算器102提供的上述消息D103。
另一方面,在检查节点计算时,消息存储器104根据从控制单元106提供的控制信号来读出所存储的可变节点消息vi,作为消息D104,并将其提供给检查节点计算器103。
检查节点计算器103使用从消息存储器104提供的消息D104来执行公式(7)的检查节点计算,并将作为检查节点计算结果的消息(检查节点消息)uj提供给消息存储器104,作为消息D105。
随后,消息存储器104储存由检查节点计算器103提供的上述消息D105。
消息存储器104所存储的来自检查节点计算器103的消息D105,即检查节点消息uj,在下一可变节点计算时被作为消息D102读出,并被提供给可变节点计算器102。
图9描述了图8中的用于逐个执行可变节点计算的可变节点计算器102的配置示例。
可变节点计算器102包括两个输入端口P101和P102,作为从外部提供(输入)消息(数据)的输入端口,以及一个输出端口P103,作为向外部提供(输出)消息的端口。随后,可变节点计算器102使用从每个输入端口P101和P102输入的消息,来执行公式(1)的可变节点计算,并将获得的作为计算结果的消息从输出端口P103输出。
也就是说,输入端口P101被提供以从接收数据存储器105读出的接收数据D101。而且,输入端口P102被提供以从消息存储器104读出的接收数据D102(检查节点消息uj)。
可变节点计算器102从输入端口P102逐个读入来自检查节点的消息D102(消息uj),该检查节点对应于奇偶校验矩阵的每一行,并将消息D102提供给计算器151和FIFO存储器155。同样,可变节点计算器102从输入端口P101逐个读入来自输入端口P101的接收数据存储器105的接收数据D101,并将其提供给计算器157。
计算器151通过将消息D102(消息uj)与存储于寄存器152中的值D151相加,来积分消息D102,并将获得的作为积分结果的积分值存储在寄存器152中。注意当来自穿过奇偶校验矩阵的一列的所有分支的消息D102都被积分后,寄存器152被复位为0。
在穿过奇偶校验矩阵的一列的消息D102被逐个读取,一列的消息D102的积分值被存储于寄存器152中的情况下,即在其中积分了来自穿过奇偶校验矩阵的一列的所有分支的消息D102(消息uj)的积分值(∑uj,j=1到dv)被存储在寄存器152中的情况下,选择器153选择存储在寄存器152中的值,即其中积分了穿过奇偶校验矩阵的一列的所有分支的消息D102(消息uj)的积分值D151(∑uj,j=1到dv),,并将其输出到寄存器154,以存储该值。
寄存器154将所存储的值D151提供给选择器153和计算器156,作为值D152。选择器153选择从寄存器154提供的值D152,并将其输出到寄存器154,以再存储该值,直到其中积分了一列的消息D102的值被存储于寄存器152中。也就是说,寄存器154提供先前积分的值到选择器153和计算器156,直到来自穿过奇偶校验矩阵的一列的所有分支的消息D102(消息uj)被积分。
另一方面,FIFO存储器155延迟来自检查节点的消息D102,以将其作为值D153提供给计算器156,直到从寄存器154输出了一个新值D152(∑uj,j=1到dv)。计算器156将由寄存器154提供的值D152减去由FIFO存储器提供的值D153。也就是说,计算器156将穿过奇偶校验矩阵的一列的所有分支的消息D102(uj)的积分值(∑uj,j=1到dv)减去来自一个期望分支的消息uj,以获得差值(∑uj,j=1到dv-1),并将其提供给计算器157。
计算器157将来自输入端口P101的接收数据D101加上来自计算器156的差值(∑uj,j=1到dv-1),并将作为结果获得的加和值作为消息D103(消息vi)从输出端口P103输出。
如上所述,可变节点计算器102执行公式(1)(vi=u0i+∑uj)的可变节点计算,并将作为结果获得的消息(可变节点消息)vi从输出端口P103输出。
图10描述了图8中的用于逐个执行检查节点计算的检查节点计算器103的配置示例。
检查节点计算器103包括一个输入端口P111,作为从外部提供(输入)消息(数据)的输入端口,以及一个输出端口P112,作为用于向外部提供(输出)消息的端口。随后,检查节点计算器103使用从输入端口P111输入的消息,来执行公式(7)的检查节点计算,并将作为结果获得的消息从输出端口P112输出。
也就是说,输入端口P111被提供以从消息存储器104读出的消息D104(可变节点消息vi)。
对于检查节点计算器103,从输入端口P111逐个读入来自可变节点的消息D104(消息vi),该可变节点对应于奇偶校验矩阵的每一列,并且其中的除了最高位外的低位,也就是消息D104的绝对值D122(|vi|),被提供给LUT 121,而最高位,即消息D104的符号位D121,被提供给EXOR电路129和FIFO(先入先出)存储器133。
LUT 121是用于以输入作为参数(argument)x而输出公式(7)的检查节点计算中的非线性函数Φ(x)的计算结果的LUT、响应于绝对值D122(|vi|)的提供读出非线性函数Φ(|vi|)计算的计算结果D123(Φ(|vi|))、并将其提供给计算器122和FIFO存储器127。
计算器122通过将计算结果D123(Φ(|vi|))与存储于寄存器123中的值D124相加,来积分计算结果D123,并将作为结果获得的积分值再存储在寄存器123中。注意在对于穿过奇偶校验矩阵的一行的所有分支的消息D104的绝对值D122(|vi|)的计算结果D123(Φ(|vi|))都被积分的情况下,寄存器123被复位为0。
在穿过奇偶校验矩阵的一行的消息D104被逐个读取,并且其中积分了一行的计算结果D123的积分值被存储于寄存器123中的情况下,选择器124选择存储在寄存器123中的值,也就是其中积分了穿过奇偶校验矩阵的一行的所有分支的消息D104(消息vi)的Φ(|vi|)的积分值D124(∑Φ(|vi|),i=1到i=dc),并将其作为值D125输出到寄存器125,以存储该值。寄存器125将所存储的值D125作为值D126提供给选择器124和计算器126。
选择器124选择从寄存器125提供的值D126,并将其输出到寄存器125,以再存储该值,直到其中积分了一行的计算结果D123的积分值被存储于寄存器123中。也就是说,寄存器125提供先前所积分的Φ(|vi|)的积分值到选择器124和计算器126,直到来自穿过奇偶校验矩阵的一行的所有分支的消息D104(消息uj)获得的Φ(|vi|)都被积分。
另一方面,FIFO存储器127延迟LUT 121输出的计算结果D123(Φ(|vi|)),直到从寄存器125输出了一个新值D126(∑Φ(|vi|),i=1到i=dc),并将其作为值D127提供给计算器126。计算器126将从寄存器125提供的值D126减去从FIFO存储器D127提供的值D127,并将相减的结果作为差值D128提供给LUT 128。也就是说,计算器126将从来自穿过奇偶校验矩阵的一行的所有分支的消息D104获得的积分值(∑Φ(|vi|),i=1到i=dc)减去从来自一个期望分支的消息(消息vi,i=dc)获得的Φ(|vi|),并将差值(∑Φ(|vi|),i=1到i=dc-1)提供给LUT 128。
LUT 128是用于以输入其的值作为参数x而输出公式(7)的检查节点计算中的非线性函数Φ(x)的逆函数Φ-1(x)的计算结果的LUT、响应于从计算器126提供的差值D128(∑Φ(|vi|),i=1到i=dc-1)输出逆函数Φ-1((∑Φ(|vi|))计算的计算结果D129(Φ-1((∑Φ(|vi|)))。
注意,如上所述,非线性函数Φ(x)和逆函数Φ-1(x)的计算结果是相等的,并且相应地,LUT 121和LUT 128具有相同的配置。
并行于上面的处理,EXOR电路129计算存储于寄存器130中的值D131与符号位(表示正/负的比特)D121的异或,由此在消息D104的符号位D121之间进行乘法,并且相乘结果D130被再存储于寄存器130中。注意,在来自穿过奇偶校验矩阵的一行的所有分支的消息D104的符号位D121都被相乘后,寄存器130被复位。
在其中来自穿过奇偶校验矩阵的一行的所有分支的消息D104的符号位D121都被相乘的相乘结果D130(∏sign(vi),i=1到i=dc)被存储于寄存器130中的情况下,选择器131选择存储于寄存器130中的值,即其中来自穿过奇偶校验矩阵的一行的所有分支的消息D104的符号位D121都被相乘的值D131(∏sign(vi),i=1到i=dc),并将其作为值D132输出到寄存器132,以存储该值。寄存器132将所存储的值D132作为值D133提供给选择器131和EXOR电路134。
选择器131选择从寄存器132提供的值D133,并将其输出到寄存器132,以再存储该值,直到其中来自穿过奇偶校验矩阵的一行的所有分支的消息D104的符号位D121都被相乘的相乘结果(∏sign(vi),i=1到i=dc)被存储于寄存器130中。也就是说,寄存器132提供先前所存储的值到选择器131和EXOR电路134,直到来自穿过奇偶校验矩阵的一行的所有分支的消息D104(消息vi)的符号位D121都被相乘。
另一方面,FIFO存储器133延迟符号位D121,直到一个新值D133(∏sign(vi),i=1到i=dc)被提供给EXOR电路134,并将其作为比特值D134提供给EXOR电路134。EXOR电路134计算从寄存器132提供的值D133与从FIFO存储器133提供的值D134的异或,由此值D133除以值D134,以输出相除的结果,作为商值D135。也就是说,EXOR电路134将来自穿过奇偶校验矩阵的一行的所有分支的消息D104的符号位D121(sign(vi))的乘积值除以来自一个期望分支的消息D104的符号位D121(sign(vi)),并输出商值(∏sign(vi),i=1到i=dc-1)作为商值D135。
随后,对于检查节点计算器103,一个位串,其中从LUT 128输出的计算结果D129被作为低位,以及从EXOR电路134输出的商值D135被作为最高位(符号位),被从输出端口P112输出,作为消息D105(消息uj)。
如上所述,对于检查节点计算器103,执行公式(7)的计算,以获得消息(检查节点消息)uj。
注意,尽管在图中没有示出,但是对于图8中的解码设备,在最终的解码阶段,执行公式(5)的计算,以代替公式(1)的可变节点计算,并且计算结果被作为最终解码结果输出。
根据图8的解码设备,只要消息存储器104(图8)、可变节点计算器102的FIFO存储器155(图9)、以及检查节点计算器103的FIFO存储器127和133(图10)有足够的容量,就可以解码各种类型的奇偶校验矩阵的LDPC码。
图11是一个定时表,描述了对于图8的解码设备的消息存储器104的消息读/写定时。
对于图8的解码设备,在可变节点计算时,从消息存储器104中读出来自检查节点的消息(检查节点消息)uj,并且当消息计算器101的可变节点计算器102使用从消息存储器104读出的消息uj来执行可变节点计算时,作为可变节点计算的结果所获得的消息(可变节点消息)vi被写入消息存储器104。
另外,在检查节点计算时,从消息存储器104中读出来自可变节点的消息(可变节点消息)vi,并且当消息计算器101的检查节点计算器103使用从消息存储器104读出的消息vi来执行检查节点计算时,作为检查节点计算的结果所获得的消息(检查节点消息)uj被写入消息存储器104。
相应地,对于图8的解码设备,有必要在可变节点计算或检查节点计算时,执行从消息存储器104读出一个消息,并同时写入作为使用该消息的可变节点计算或检查节点计算(以后,通过集成此两者简称之为节点计算)的结果的消息。
因此,消息存储器104例如是由作为一个内存条的一个RAM(随机存取存储器)#A和作为另一个内存条的一个RAM#B来构成的。对于RAM#A和RAM#B的各自的访问使得可以同时进行两个对于消息存储器104的显式访问。
图11的定时表表示了对于构成消息存储器104的RAM#A和RAM#B的读/写定时。
在图11中,首先,从RAM#A中读出为了获取对应于特定检查节点或可变节点(之后,在适当时,通过集成此两者而简称之为节点)node#1的消息所必需的消息,并使用该消息来执行节点计算。随后,作为节点计算的结果获得的对应于节点node#1的分支的消息被写入RAM#A(W(node#1)),并且在同时,从RAM#B(W(node#2))中读出为了获取对应于下一个节点node#2的分支的消息所必需的消息,并执行一个节点计算。
而且,作为节点计算的结果获取的对应于节点node#2的分支的消息,被写入RAM#B(W(node#2)),并且在同时,从RAM#A中读出为了获取对应于下一个节点node#3的消息所必需的消息(R(node#3)),并执行节点计算。之后,以相同方式,连续地执行对应于构成消息存储器104的每个RAM#A和RAM#B的消息读/写。
注意对于图8的解码设备,在使用交替执行一个检查节点计算和一个可变节点计算的重复解码来解码LDPC码的情况下,一次解码(一组检查节点计算和可变节点计算)需要时钟的数目是消息数目的两倍,这导致需要高速操作。
因此,对于特定奇偶校验矩阵的LDPC码,提出了一种解码设备,其中通过提供多个,p个消息计算单元101来同时获取关于p个节点的消息,以及一种在图8的解码设备情况下可以时钟数目的1/p执行一次解码,即提出了一种可以用不是很高的频率来操作的解码设备(例如,参见公开号为2004-364233的日本未审查专利申请)。

发明内容
如上所述,对于构成消息计算单元101的可变节点计算器102(图9),提供了FIFO存储器155用于延迟消息,直到完成在计算器151和寄存器152处的消息积分。相似的,同样对于检查节点计算器103(图10),提供了FIFO存储器127用于延迟Φ(|vi|),直到完成在计算器122和寄存器123处的积分,并且提供了FIFO存储器133用于延迟符号位,直到完成在EXOR电路129和寄存器130处的符号位的乘法AND计算。这样,对于用于解码LDPC码的解码设备,需要提供用于延迟数据(消息)的存储器。
特别的,为了以不是很高的操作频率来操作用于解码包括很多节点的LDPC码的解码设备,需要提供多个消息计算单元101,以并行地获得多个节点的消息,并且这种情况进一步要求用于延迟数据的存储器,这导致该解码设备的尺寸大。
本发明是根据这种情况做出的,旨在减小用于解码LDPC码的解码设备的尺寸。
根据本发明的一个实施例,提供了一种用于解码LDPC(低密度奇偶校验)码的解码设备,包括消息计算装置,用于使用所提供的消息执行可变节点计算以解码所述LDPC码,或执行检查节点计算,和输出作为所述计算的结果而获得的消息;存储装置,用于存储所述消息;以及控制装置,用于执行写控制,用于把所述消息计算装置输出的消息写入所述存储装置中,以及读出控制,用于从所述存储装置两次读出用于所述消息计算装置的计算的相同的消息,并把它们提供到所述消息计算装置。
根据本发明的一个实施例,对于一个用于控制用于解码LDPC(低密度奇偶校验)码的解码设备的控制方法,或者一种用于使计算机执行控制用于解码LDPC(低密度奇偶校验)码的解码设备的程序,所述解码设备包括消息计算装置,用于使用所提供的消息执行可变节点计算以解码所述LDPC码,或执行检查节点计算,和输出作为所述计算的结果而获得的消息;以及存储装置,用于存储所述消息;其中所述方法或程序包括步骤写控制,用于把所述消息计算装置输出的消息写入所述存储装置中,以及读出控制,用于从所述存储装置两次读出用于所述消息计算装置的计算的相同的消息,并把它们提供到所述消息计算装置。
根据本发明实施例的解码设备、控制方法或程序可以执行写控制,用于将消息计算装置输出的消息写入存储装置,以及读出控制,以从存储装置中两次用于读出消息计算装置的计算的相同消息,并将这些消息提供给消息计算装置。
根据上述配置,用于解码LDPC码的解码设备的尺寸可以被减小。


通过下面结合附图进行的详细描述,本发明的上述目的、特征和优点将会变得更加清楚,其中图1描述了一LDPC码的奇偶校验矩阵;图2是一流程图,描述了LDPC码的解码过程;图3是描述消息流的图;图4描述了一个LDPC码的奇偶校验矩阵的例子;图5描述了一个奇偶校验矩阵的tanner图;图6描述了一个可变节点;图7描述了一个检查节点;图8是一个框图,描述了常规的解码设备的一个配置示例;图9是一个框图,描述了用于逐个计算消息的可变节点计算器102的配置示例;图10是一个框图,描述了用于逐个计算消息的检查节点计算器103的配置示例;图11是一个定时图,描述了关于消息存储器104的常规的写入消息定时;图12是一个框图,描述了应用了本发明的解码设备的第一实施例的配置示例;图13是一个框图,描述了可变节点计算器172的配置示例;图14是一个框图,描述了检查节点计算器173的配置示例;图15是一个流程图,描述了对于消息存储器104的读/写控制处理;图16是一个定时图,描述了对于消息存储器104的消息读/写定时;图17是一个框图,描述了一个解码设备的配置示例,其中用于执行可变节点计算的电路和用于执行检查节点计算的电路的一部分是共享的;图18是一个框图,描述了消息计算器191的配置示例;图19是一个框图,描述了在可变节点计算时消息计算器191的实际配置;图20是一个框图,描述了在检查节点计算时消息计算器191的实际配置;图21是一个框图,描述了应用了本发明的解码设备的第二实施例的配置示例;图22是一个框图,描述了消息计算器201的配置示例;图23描述了由消息计算器201执行的可变节点计算和检查节点计算;图24是一个框图,描述了在可变节点计算时消息计算器201的实际配置;图25是一个框图,描述了在检查节点计算时消息计算器201的实际配置;图26是一个框图,描述了应用了本发明的解码设备的第三实施例的配置示例;图27是一个框图,描述了消息计算器211的配置示例;
图28描述了由消息计算器211执行的可变节点计算和检查节点计算;图29是一个框图,描述了在可变节点计算时消息计算器211的实际配置;图30是一个框图,描述了在检查节点计算时消息计算器211的实际配置;图31是一个框图,描述了应用了本发明的解码设备的第四实施例的配置示例;图32是一个框图,描述了消息计算器221的配置示例;图33描述了由消息计算器221执行的可变节点计算和检查节点计算;图34是一个框图,描述了在可变节点计算时消息计算器221的实际配置;图35是一个框图,描述了在检查节点计算时消息计算器221的实际配置;图36是一个框图,描述了应用了本发明的解码设备的第五实施例的配置示例;图37是一个框图,描述了消息计算器231的配置示例;图38是一个框图,描述了在可变节点计算时消息计算器231的实际配置;图39是一个框图,描述了在检查节点计算时消息计算器231的实际配置;图40是一个定时图,描述了对于消息存储器104的消息读/写定时;以及图41是一个框图,描述了应用了本发明的计算机的实施例的配置示例;具体实施方式
下面将描述本发明的实施例,并且本发明的组成特征与在说明书及附图中描述的实施例之间的对应关系举例如下。这个描述是用于确认由本发明所支持的实施例在说明书和附图中进行了描述。相应的,即使有一个实施例在说明书和附图中描述了,但是没有在这里作为对应于本发明的组成特征的实施例来描述,这不意味着该实施例不对应于其中的组成特征。相反的,即使在这里将一个实施例作为对应于组成特征的一个实施例进行描述,这也不意味着该实施例不对应于除该组成特征之外的其他组成特征。
根据本发明实施例的解码设备是用于解码LDPC(低密度奇偶校验)码的解码设备(例如图12的解码设备),并且包括消息计算装置,用于使用所提供的消息来执以解码该LDPC码,或者执行检查节点计算,并将作为计算结果获得的消息输出(例如图12中的消息计算单元171);以及存储装置,用于存储所述消息(例如图12中的消息存储器104);以及控制装置,用于执行写入控制,用于将消息计算装置输出的消息写入存储装置,和读出控制,用于从存储装置中两次读出消息计算装置的计算所采用的相同的消息,并将这些消息提供给消息计算装置(例如图12中的控制单元174)。
对于消息计算装置,在从存储装置中两次读出的相同消息中,可以提供两个端口,将第一次读出的消息提供给一个端口(例如图13中的输入端口P102,或者图14中的输入端口P111),而将第二次读出的消息提供给另一个端口(例如图13中的输入端口PD102,或者图14中的输入端口PD111)。
另外,消息计算装置可以配备有可变节点计算装置,用于执行可变节点计算(例如图12中的可变节点计算器172),以及检查节点计算装置,用于执行检查节点计算(例如图12中的检查节点计算器173)。
消息计算装置可以配备有一个LUT(查找表),用于关于输入到检查节点的输入数据x输出非线性函数Φ(x)=ln(tanh(x/2))的计算结果(例如,图22中的LUT300),以及另一个LUT,用于对于从检查节点输出的输出数据x输出非线性函数的逆函数Φ-1(x)=2tanh-1(e-x)的计算结果(例如,图22中的LUT 314),其中数据可以在检查节点计算时经过该一个LUT和另一个LUT,并且数据可以在可变节点计算时绕过该一个LUT和另一个LUT。
另外,消息计算装置可以配置有如下LUT(查找表)(例如图27中的LUT 600),用于对于输入到检查节点的输入数据x输出非线性函数Φ(x)=-ln(tanh(x/2))的计算结果,该结果与逆函数Φ-1(x)=2tanh-1(e-x)的计算结果是相同的,还用于对于输入到可变节点的输入数据x输出逆函数Φ-1(x)的计算结果。
消息计算装置可以配备有如下LUT(查找表)(例如图32中的LUT 713),用于对于从可变节点输出的输出数据x来输出非线性函数Φ(x)=-ln(tanh(x/2))的计算结果,该结果与逆函数Φ-1(x)=2tanh-1(e-x)的计算结果是相同的,还用于对于从检查节点输出的输出数据x输出逆函数Φ-1(x)的计算结果。
根据本发明实施例的控制方法或程序是用于控制解码设备,以解码LDPC(低密度奇偶校验)码的方法,或者是用于使计算机执行对解码设备的控制以解码LDPC码(低密度奇偶校验)的程序,其中解码设备包括消息计算装置,用于使用所提供的消息执行可变节点计算,来解码该LDPC码,或者执行检查节点计算,并将作为结果获得的消息输出(例如图12中的消息计算单元171);以及存储装置,用于存储所述消息(例如图12中的消息存储器104),以及其中控制方法或程序包括下述步骤执行写入控制,以将消息计算装置输出的消息写入存储装置(例如图15中的步骤S103);和读出控制,用于从存储装置中两次读出消息计算装置的计算所采用的相同的消息,以及将这些消息提供给消息计算装置(例如图15中的步骤S101和S102)。
下面将结合附图对本发明的特定实施例进行描述。
图12是一个框图,描述了应用了本发明的解码设备的第一实施例的配置示例。
注意,对应于图8中的解码设备中的部分被附加以相同的附图标记,下面适当时将省略其描述。也就是说,图12的解码设备以与图8的解码设备相同的方式配置,除了用消息计算单元171来代替消息计算单元101,以及控制单元174代替控制单元106。
图12的解码设备如图8的解码设备那样重复执行整个串行解码。
具体地,图12中的解码设备由消息存储器104、接收数据存储器105、消息计算单元171、以及控制单元174组成。另外,消息计算单元171由可变节点计算器172和检查节点计算器173组成。
对于图12的解码设备,消息计算单元171从消息存储器104中逐个顺序读出消息,并使用该消息来计算对应于期望的分支的消息。随后,计算获得的消息被存储在消息存储器104中。图12的解码设备通过重复执行上述处理来进行重复解码。
也就是说,可以通过接收所发送的LDPC码而获得的接收数据(LDPC码)D100被提供给接收数据存储器105,该接收数据是对数似然比,它表示码0(或1)的标识,并且该接收数据存储器105存储该接收数据D100。
在可变节点计算时,接收数据存储器105根据从控制单元174提供的控制信号来读出所存储的接收数据,并将其作为接收数据D101提供给消息计算单元171的可变节点计算器173。
另外,在可变节点计算时,消息存储器104根据从控制单元174提供的控制信号,两次读出所存储的相同的消息(两次重复读出对于获取从感兴趣的可变节点输出的可变节点消息vi是必需的检查节点消息(来自连接到感兴趣的可变节点的检查节点的检查节点消息)uj),将第一次读出的消息作为消息D102提供给可变节点计算器172,并第二次读出的消息作为消息DD102提供给可变节点计算器172。可变节点计算器172使用从消息存储器104提供的消息D102和DD102,执行公式(1)的可变节点计算,并将作为可变节点计算的结果获得的的消息(可变节点消息)vi提供给消息存储器104,作为消息D103。
随后,消息存储器104根据从控制单元174提供的控制信号,存储(写入)从可变节点计算器172提供的消息D103。
另一方面,在检查节点计算时,消息存储器104根据从控制单元174提供的控制信号,两次读出所存储的相同的消息(可变节点消息vi)(两次重复读出可变节点消息vi(来自连接到感兴趣的检查节点的可变节点的可变节点消息),它对于获取从感兴趣的检查节点输出的检查节点消息uj是必需的,),将第一次读出的消息作为消息D104提供给检查节点计算器173,并第二次读出的消息作为消息DD104提供给检查节点计算器173。
检查节点计算器173使用消息存储器104所提供的消息D104和DD104,执行公式(7)的检查节点计算,并将由检查节点计算所获得的消息(检查节点消息)uj提供给消息存储器104,作为消息D105。
随后,消息存储器104根据从控制单元174提供的控制信号,存储(写入)从检查节点计算器173提供的消息D105。
在下一次可变节点计算时,消息存储器173所存储的来自检查节点计算器173的消息D105,也就是检查节点消息uj,被作为消息D102和消息DD102读出,并被提供给可变节点计算器172。
图13描述了图12中的可变节点计算器172的配置示例。
注意,对应于图9中的可变节点计算器中的部分被附加以相同的附图标记,下面适当时将省略其描述。
可变节点计算器172被配置为不提供用于延迟数据的存储器(在图9的可变节点计算器中提供的FIFO存储器155)。
然而,可变节点计算器172包括三个输入端口P101、P102和PD102,作为从外部提供(输入)消息(数据)的输入端口。
输入端口P101被提供(输入)以从接收数据存储器105中读出的接收数据D101。另外,输入端口P102被提供(输入)以消息D102,它是两次从消息存储器104中读出的相同消息D102和DD102中第一次读出的,而输入端口PD102被提供以第二次读出的消息DD102。
检查节点计算器173使用从输入端口P101、P102、和PD102输入的消息来执行公式(1)的可变节点计算,并将作为结果获得的消息从输出端口P103输出。
也就是说,输入端口P101被提供以从接收数据存储器105中读出的接收数据D101。另外,输入端口P102被提供以从消息存储器104中读出的消息D102(检查节点消息uj)。
随后,对于可变节点计算器172,来自对应于奇偶校验矩阵的每一行的检查节点的消息D102,也就是从消息存储器104中第一次读出的消息uj,被从输入端口P102逐个输入,并且消息D102被提供给计算器151。
另外,可变节点计算器172从输入端口P101,逐个读入来自接收数据存储器105的接收数据D101,并将其提供给计算器157。
计算器151通过将消息D102(消息uj)与存储于寄存器152中的值D151相加来积分消息D102,并将作为结果获得的积分值再存储于寄存器152中。注意,在来自穿过奇偶校验矩阵的一列的所有分支的消息D102都被积分的情况下,寄存器152被复位。
在穿过奇偶校验矩阵的一列的消息D102被逐个读入,并且一列的消息D102的积分值被存储于寄存器152中的情况下,也就是在其中来自穿过奇偶校验矩阵的一列的所有分支的消息D102(消息uj)都被积分了的积分值(∑uj,j=1到dv)被存储于寄存器152中的情况下,选择器153选择所存储在寄存器152中的值,也就是其中积分了穿过奇偶校验矩阵的一列的所有分支的消息D102(消息uj)的积分值D151(∑uj,j=1到dv),并将其输出到寄存器154,以存储该值。
寄存器154将所存储的值D151提供给选择器153和计算器156,作为值D152。选择器153选择从寄存器154提供的值D152,并将其输出到寄存器154,以再存储该值,直到其中积分了一列的消息D102的值被存储于寄存器152中。也就是,寄存器154提供先前所积分的值到选择器153和计算器156,直到穿过奇偶校验矩阵的一列的所有分支的消息D102(消息uj)都被积分。
另一方面,当从寄存器154开始输出一个新值D152(∑uj,j=1到dv),也就是紧接在其中来自穿过奇偶校验矩阵的一列的所有分支的消息D102(消息uj)都被积分了的积分值(∑uj,j=1到dv)被存储于寄存器152中之后,对于可变节点计算器172,与消息D102(消息uj)相同的消息DD102,也就是从消息存储器104中第二次读出的消息uj,被从输入端口PD102逐个输入,并且消息DD102被提供给计算器156。
计算器156将从寄存器154提供的积分值D152减去从输入端口PD102提供的消息DD102。也就是说,计算器156将穿过奇偶校验矩阵的一列的所有分支的消息D102(消息uj)的积分值D152(∑uj,j=1到dv)减去从一个期望分支提供的消息uj(uj,j=dv),以获得差值(∑uj,j=1到dv-1),并将其提供给计算器157。
计算器157将来自输入端口P101的接收数据D101加上来自计算器156的差值(∑uj,j=1到dv-1),并将作为结果获得的加和值作为消息D103(消息vi)从输出端口P103输出。
如上所述,可变节点计算器172执行公式(1)的可变节点计算,并将作为结果获得的消息(可变节点消息)vi从输出端口P103输出。
图14描述了图12的检查节点计算器173的配置示例。
注意,对应于图10中的检查节点计算器103中的部分被附加以相同的附图标记,下面适当时将省略其描述。
检查节点计算器173被配置为不提供用于延迟数据的存储器(在图10的检查节点计算器103中提供的FIFO存储器127和133)。
然而,检查节点计算器173包括两个输入端口P111和PD111,作为从外部提供(输入)消息(数据)的输入端口。
输入端口P111被提供(输入)以从消息存储器104中两次读出的相同消息D104和DD104中第一次读出的消息D104,而输入端口PD111被提供以第二次读出的消息DD104。
检查节点计算器173使用从输入端口P111和PD111输入的消息来执行公式(7)的检查节点计算,并将作为结果获得的消息从输出端口P112输出。
也就是说,输入端口P111被提供以从消息存储器104中读出的消息D104(可变节点消息uj)。
对于检查节点计算器173,来自对应于奇偶可变矩阵的每一列的可变节点的消息D104(消息vi),被从输入端口P111逐个输入,并且其中的除了最高位外的低位,也就是消息D104的绝对值D122(|vi|),被提供给LUT 121,而最高位,也就是消息D104的符号位D121,被提供给EXOR电路129。
LUT 121读出作为以绝对值D122(|vi|)作为参数的非线性函数Φ(|vi|)的计算结果所获得的计算结果D123,并将其提供给计算器122。
计算器122通过将计算结果D123(Φ(|vi|))与存储于寄存器123中的值D124相加,来积分计算结果D123,并将作为积分结果获得的积分值再存储在寄存器123中。注意,在对于穿过奇偶校验矩阵的一行的所有分支的消息D104的绝对值D122(|vi|)的计算结果D123(Φ(|vi|))都被积分后,寄存器123被复位为0。
在穿过奇偶校验矩阵的一行的消息D104被逐个读取,并且其中积分了一行的计算结果D123的积分值被存储于寄存器123中的情况下,选择器124选择存储在寄存器123中的值,也就是其中积分了从来自穿过奇偶校验矩阵的一行的所有分支的消息D104(消息vi)获得的Φ(|vi|)的积分值D124(∑Φ(|vi|),i=1到i=dc),并将其作为值D125输出到寄存器125,以存储该值。寄存器125将所存储的值D125提供给选择器124和计算器126,作为值D126。
选择器124选择从寄存器125提供的值D126,并将其输出到寄存器125,以再存储该值,直到其中积分了一行的计算结果D123的积分值被存储于寄存器123中。也就是说,寄存器125提供先前所积分的Φ(|vi|)的积分值到选择器124和计算器126,直到从来自穿过奇偶校验矩阵的一行的所有分支的消息D104(消息vi)获得的Φ(|vi|)都被积分。
另一方面,当从寄存器125开始输出一个新值D126(∑Φ(|vi|),i=1到i=dc),也就是紧接在其中积分了一列的计算结果D123的积分值(∑Φ(|vi|),i=1到i=dc)被存储于寄存器125中之后,对于检查节点计算器173,与消息D104(消息vi)相同的消息DD104,也就是从消息存储器104中第二次读出的消息vi,被从输入端口PD104逐个输入,并且在消息DD104中,除了最高位外的低位,也就是消息DD104的绝对值(|vi|),被提供给LUT 135,而最高位,也就是消息DD104的符号位,被提供给EXOR电路134。
LUT 135是与LUT 121相同的LUT,并且以消息的绝对值(|vi|)作为参数读出作为非线性函数Φ(|vi|)的计算结果所获得的计算结果(Φ(|vi|)),并将其提供给计算器126。
计算器126将从寄存器125提供的值D126减去从LUT 135获得的计算结果(Φ(|vi|)),并将相减结果作为差值D128提供给LUT 128。也就是说,计算器126将从来自穿过奇偶可变矩阵的一行的所有分支的消息D104(消息vi)获得的Φ(|vi|)的积分值(∑Φ(|vi|),i=1到i=dc)减去从作为通过一个期望分支获得的消息vi(vi,i=dc)的消息DD104所获得的Φ(|vi|),并将差值(∑Φ(|vi|),i=1到i=dc-1)作为差值D128提供给LUT 128。
LUT 128以来自计算器126的差值D128(∑Φ(|vi|),i=1到i=dc-1)作为参数而输出作为逆函数Φ-1(∑Φ(|vi|))的计算结果的计算结果D129(Φ-1(∑Φ(|vi|)))。
并行于上面的处理,EXOR电路129计算存储于寄存器130中的值D131与符号位(表示正/负的比特)D121的异或,由此在消息D104的符号位D121之间进行乘法,并且相乘结果D130被再存储于寄存器130中。注意,在来自穿过奇偶校验矩阵的一行的所有分支的消息D104的符号位D121都被相乘后,寄存器130被复位。
在其中来自穿过奇偶校验矩阵的一行的所有分支的消息D104的符号位D121都被相乘的相乘结果D130(∏sign(vi),i=1到i=dc)被存储于寄存器130中的情况下,选择器131选择存储于寄存器130中的值,即其中来自穿过奇偶校验矩阵的一行的所有分支的消息D104的符号位D121都被相乘的值D131(∏sign(vi),i=1到i=dc),并将其作为值D132输出到寄存器132,以存储该值。寄存器132将所存储的值D132提供给选择器131和EXOR电路134,作为值D133。
选择器131选择从寄存器132提供的值D133,并将其输出到寄存器132,以存储该值,直到其中来自穿过奇偶校验矩阵的一行的所有分支的消息D104的符号位D121都被相乘的相乘结果(∏sign(vi),i=1到i=dc)都被存储于寄存器130中。也就是说,寄存器132提供先前所存储的值到选择器131和EXOR电路134,直到来自穿过奇偶校验矩阵的一行的所有分支的消息D104(消息vi)的符号位D121都被相乘。
另一方面,当一个新值D133(∏sign(vi),i=1到i=dc)被从寄存器132提供给EXOR电路134时,也就是当其中来自穿过一行的所有分支的消息D104的符号位D121都被相乘的值D131(∏sign(vi),i=1到i=dc)被存储于寄存器130中时,如上所述,其中一行的计算结果D123都被积分的积分值(∑Φ(|vi|),i=1到i=dc)被存储于寄存器125中,。
当其中一行的计算结果D123都被积分的积分值(∑Φ(|vi|),i=1到i=dc)被存储于寄存器125中时,如上所述,对于检查节点计算器173,与消息D104(消息vi)相同的消息DD104,也就是从消息存储器104第二次读出的消息vi,被逐个从输入端口PD104输入,并且在消息DD104中,除了最高位外的低位,也就是消息DD104的绝对值(|vi|),被提供给LUT 135,而最高位,也就是消息DD104的符号位,被提供给EXOR电路134。
EXOR电路134计算从寄存器132提供的值D133与来自输入端口PD104的消息DD104的符号位之间的异或,由此值D133除以消息DD104的符号位,并且其相除结果被作为商值D135输出。也就是说,EXOR电路134将来自穿过奇偶校验矩阵的一行的所有分支的消息D104的符号位D121的乘积(∏sign(vi),i=1到i=dc)除以用作来自一个期望分支的消息vi的消息DD104的符号位D121(sign(vi),i=dc),并输出商值(∏sign(vi),i=1到i=dc-1)作为商值D135。
随后,对于检查节点计算器173,一个位串,其中从LUT 128输出的计算结果D129被作为低位,以及从EXOR电路134输出的商值D135被作为最高位(符号位),被从输出端口P112输出,作为消息D105(消息uj)。
如上所述,检查节点计算器173执行公式(7)的计算,以获得消息(检查节点消息)uj。
注意,尽管在附图中没有示出,对于图12中的解码设备,在最终的解码阶段,执行公式(5)的计算,以代替公式(1)的可变节点计算,并且计算结果被作为最终解码结果输出。
下面将结合图15的流程图,对由图12的解码设备的控制单元174进行的消息存储器104的消息(数据)读/写控制处理进行描述。
注意,在这里及以后,对于为获取消息所采用的节点,输入到该节点的消息被称为输入消息,另外,节点使用输入消息获取并输出的消息称为输出消息。
在步骤S101,控制单元174控制消息存储器104来读出对于获取从特定感兴趣的节点(感兴趣节点)输出的输出消息必需的输入消息(从连接到感兴趣节点的分支输出的消息),也就是从连接到感兴趣节点的分支输入的消息,并将其提供给消息计算单元171(以执行输入消息的第一次读出),并继续到步骤S102。
在步骤S102,控制单元174控制消息存储器104来读出与在紧前面的步骤S101从消息存储器104中读出的输入消息相同的输入消息,并将其提供给消息计算单元171(以执行输入消息的第二次读出),并继续到步骤S103。
换句话说,在步骤S101和S102,执行读出控制,其中消息计算单元171处的计算(检查节点计算或可变节点计算)所采用的相同输入消息被从消息存储器104两次读出,以将这些消息提供给消息计算单元171。
在步骤S103,控制单元174控制消息存储器104来写入输出消息,该输出消息是由消息计算单元171使用在步骤S101和S102从消息存储器104中读出的输入消息执行计算而获得的。
换句话说,在步骤S103,执行写入控制,其中由执行公式(1)或公式(7)的计算的消息计算单元171输出的输出消息被写入消息存储器104。
随后,流程从步骤S103返回到步骤S101,其中控制单元174将另一个节点作为新的感兴趣节点,并控制消息存储器104来读出对于获取要从该新感兴趣节点输出的输出消息所必需的输入消息,并将其提供给消息计算单元171,然后重复相同的处理。
消息存储器104具有如上所述的RAM#A和RAM#B双内存条配置,控制单元174使每条RAM#A和RAM#B受控于图15中描述的读/写控制。
图16是一个定时图,描述了对于图12的解码设备的消息存储器104的消息读/写定时。
图16中的定时图如上面图11的定时图那样表示了对于构成消息存储器104的RAM#A和RAM#B的读/写定时。
在图16中,首先,执行从RAM#A的输入消息的第一次读出(R1(node#1)),该输入消息对于获得来自特定节点node#1的输出消息是必需的。读取完成后,执行从RAM#A的输入消息的第二次读出(R2(node#1)),该输入消息对于获得来自节点node#1的输出消息是必需的,并且在同时,执行从RAM#B的输入消息的第一次读出(R1(node#2)),该输入消息对于获得来自下一个节点node#2的输出消息是必需的。
基于完成了从RAM#A的、对于获得来自节点node#1的输出消息所必需的输入消息的第二次读出,并且在消息计算单元171获得了来自节点node#1的输出消息,则来自节点node#1的输出消息被写入RAM#A(W(node#1)),并且在同时,执行从RAM#B的输入消息的第二次读出(R2(node#2)),该输入消息对于获得来自下一个节点node#2的输出消息是必需的。
基于完成了从RAM#B的、对于获得来自节点node#2的输出消息所必需的输入消息的第二次读出,,并且在消息计算单元171获得了来自节点node#2的输出消息,则来自节点node#2的输出消息被写入RAM#B(W(node#2)),并且在同时,执行从RAM#A的输入消息的第一次读出(R1(node#3)),该输入消息对于获得来自下一个节点node#3的输出消息是必需的。
基于将来自节点node#2的输出消息写入RAM#B,并且完成了从RAM#B的、对于获得来自节点node#3的输出消息必需的输入消息的第一次读出,则执行从RAM#A的、对于获得来自节点node#3的输出消息所必需的输入消息的第二次读出(R2(node#3)),并且在同时,执行从RAM#B的、对于获得来自下一个节点node#4的输出消息所必需的输入消息的第一次读出(R1(node#4))。
基于完成了从RAM#A的、对于获得来自节点node#3的输出消息所必需的输入消息的第二次读出,并且在消息计算单元171获得了来自节点node#3的输出消息,则来自节点node#3的输出消息被写入RAM#A(W(node#3)),并且在同时,执行从RAM#B的、对于获得来自节点node#4的输出消息所必需的输入消息的第二次读出(R2(node#4))。
之后,以相同方式,连续地执行对应于构成消息存储器104的每个RAM#A和RAM#B的消息读/写。
根据图12的解码设备,消息计算单元171从消息存储器104中两次读出对于获取输出消息所必需的相同的输入消息,由此在消息计算单元171中不必延迟输入消息,并且相应地,消息计算单元可以被配置为不提供仅用于延迟数据的存储器(图9中的可变节点计算器102中提供的FIFO存储器155,以及图10中的检查节点计算器103中提供的FIFO存储器127和133)。结果,可以减小解码设备的尺寸。
注意,从在对于图12的解码设备中的消息存储器104的读/写定时(图16)(其从消息存储器104两次读出相同的输入消息,而不提供只用于延迟数据的存储器(以后称为延迟存储器))和对于图8的解码设备中的消息存储器104的读/写定时(图11)(其提供延迟存储器,并从消息存储器104中只读出一次消息)之间的比较可知,为从特定节点获取输出消息,图12的解码设备需要比图8的解码设备长50%的时间,从而需要恰恰针对那么多的高速操作(要求高速的运行时钟)。
然而,特别在对于用于执行完全并行解码的解码设备,即执行计算,以同时(并行)获得关于所有节点的输出消息,或者对于用于执行部分并行解码的解码设备,即执行计算,以同时获得关于p个节点的输出消息,该p个节点不是一个节点也不是全部节点(例如公开号为2004-364233的日本未审查专利申请中公开的解码设备),被配置为提供延迟存储器的情况下,就需要提供大量的延迟存储器,这大大影响了整个设备的尺寸。
对于诸如图12中的解码设备的这样的解码设备,该解码设备采用一种配置,其中从消息存储器104中两次读出相同的输入消息以获得输出消息,这消除了延迟存储器的必要性,该解码设备要求有些高速的操作,但是反过来,可以获得极大减小设备尺寸的优点。
注意,在本说明书中,为了便于描述,将描述完全串行解码设备,但是下面描述的解码设备的配置和处理方法也可以适用于执行完全并行解码的解码设备、部分执行并行解码的解码设备,包括图12中的解码设备,并且在将这些配置用于这样的解码设备的情况下,可以获得显著减小设备尺寸的优点。
附带地,对于图12的解码设备,尽管作出了下述描述,即用于获取输出消息的消息计算单元171是由用于执行可变节点计算的可变节点计算器172,以及用于执行检查节点计算的检查节点计算器173构成的,但是用于获取输出消息的装置可以被配置为共享用于执行可变节点计算的电路和用于执行检查节点计算的电路的一部分,并且选择性地执行可变节点计算或检查节点计算。
下面将描述一种解码设备,它被配置为用于执行可变节点计算的电路和用于执行检查节点计算的电路的一部分是共享的,并且也不提供延迟存储器,但是在准备阶段,描述将首先考虑具有下述配置的解码设备,其中用于执行可变节点计算的电路和用于执行检查节点计算的电路的一部分被共享,并且提供延迟存储器。
图17是一个框图,描述了这样的解码设备的配置示例。
注意在该图中,对应于图8中的解码设备的部分被附加以相同的附图标记,下面适当时将省略其描述。也就是说,图17的解码设备与图8的解码设备以相同方式配置,除了用消息计算单元191来代替消息计算单元101,以及用控制单元192代替控制单元106。
同图8的解码设备一样,图17的解码设备重复执行完全串行解码。
对于图17中的解码设备,消息计算单元191从消息存储器104中逐个顺序读出输入消息,并使用该输入消息来计算对应于期望分支的输出消息。随后,由计算获得的输出消息被存储在消息存储器104中。图17中的解码设备通过重复执行上述处理来实现所谓的重复解码。
也就是说,可以通过接收所发送的LDPC码来获得的接收数据(LDPC码)D100被提供给接收数据存储器105,该接收数据是对数似然比,表示了码0(或1)的标识,并且接收数据存储器105存储接收数据D100。
在可变节点计算时,接收数据存储器105根据从控制单元192提供的控制信号来读出所存储的接收数据,并将其作为接收数据D101提供给消息计算单元191。
另外,在可变节点计算时,消息存储器104根据从控制单元192提供的控制信号来读出所存储的消息D201,并将其提供给消息计算单元191。而且,在可变节点计算时,控制单元192向消息计算单元191提供用于指令可变节点计算的控制信号作为控制信号D203。
消息计算单元191根据来自控制单元192的控制信号D203,使用从消息存储器104提供的消息D201以及从接收数据存储器105提供的接收数据D101,来执行公式(1)的可变节点计算,并将作为可变节点计算结果所获得的输出消息(可变节点消息)vi提供给消息存储器104,作为消息D202。
随后,消息存储器104储存从消息计算单元191提供的上述消息D202。
另一方面,在检查节点计算时,消息存储器104根据从控制单元192提供的控制信号来读出所存储的可变消息vi,作为输入消息D201,并将其提供给消息计算单元191。
而且,在检查节点计算时,控制单元192向消息计算单元191提供用于指令检查节点计算的控制信号作为控制信号D203。
消息计算单元191根据来自控制单元192的控制信号D203,使用从消息存储器104提供的消息D201来执行公式(7)的检查节点计算,并将由检查节点计算所获得的消息(检查节点消息)uj提供给消息存储器104,作为消息D202。
随后,消息存储器104储存从消息计算单元191提供的上述消息D202。
消息D202,也就是消息存储器104存储的来自消息计算单元191的检查节点消息uj,在下一次可变节点计算时被作为消息D201读出,并被提供给消息计算单元191。
图18描述了图17中的消息计算单元191的配置示例。
消息计算单元191包括两个输入端口P101和P201,作为从外部提供(输入)消息(数据)的输入端口,以及一个输出端口P202,作为用于向外部提供(输出)消息的端口。另外,消息计算单元191包括一个输入端口P203,作为从外部提供控制信号的输入端口。
消息计算单元191根据从输入端口P203输入的控制信号D203,使用从输入端口P201输入的消息,以及如果必要的话,还使用从输入端口P101输入的消息(接收数据),选择性地执行公式(1)的可变节点计算或公式(7)的检查节点计算,并将作为结果获得的消息从输出端口P202输出。
也就是说,输入端口P101被提供以从接收数据存储器105读出的接收数据D101。同样,输入端口P201被提供以从消息存储器104读出的接收数据D201(检查节点消息uj或可变节点消息vi)。而且,输入端口P203被提供以从控制单元192读出的控制信号D203。
随后,提供给输入端口P101的接收数据D101被提供给计算器313,并且提供给输入端口P201的消息D201被提供给选择器301的端子v。另外,在提供给输入端口P201的消息D201中,除了最高位外的低位,也就是消息D201的绝对值,被作为值D303提供给LUT 300,而消息D201的最高位,也就是消息D201的符号位,被作为值D304提供给EXOR电路306和FIFO存储器320。
另外,提供给输入端口P203的控制信号D203被提供给选择器301和316。
选择器301和306包括端子v和端子c,并根据控制信号D203选择提供给端子v和端子c之一的值,并将其输出给后续阶段。也就是说,在控制信号D203是指令可变节点计算的控制信号的情况下,选择器301和316选择提供给端子v的值,以将其输出到后续阶段,而在控制信号D203是指令检查节点计算的控制信号的情况下,选择器301和316选择提供给端子c的值,以将其输出到后续阶段。
作为结果,消息计算单元191在可变节点计算时转换到图19所描述的配置,以执行可变节点计算,并在检查节点计算时转换到图20所描述的配置,以执行检查节点计算。
图19描述了在可变节点计算时消息计算单元191的基本配置示例。
注意,如上所述,在可变节点计算时,选择器301和316选择端子v,但是在图19中,在图中省略通过选择器301和316选择端子v在进行可变节点计算在图18所描述的配置中(基本)不起作用的部分(与可变节点计算无关的部分)。
在可变节点计算时,输入端口P101被提供以从接收数据存储器105中逐个读出的接收数据D101。另外,输入端口P201被顺序提供以来自对应于奇偶校验矩阵的每一行的检查节点(对应于要获得其输出消息vi的可变节点的列的每行的检查节点)的检查节点消息uj,作为消息D201。
提供给输入端口P101的接收数据D101被提供给计算器313。
另外,提供给输入端口P201的消息D210(消息uj)被提供给选择器301的端子v,并从在可变节点计算时选择端子v的选择器301提供给计算器302和选择器301的FIFO存储器320,作为消息D306。
计算器302通过将来自选择器301的消息D306(消息uj)与寄存器303中存储的值D307相加,来对消息D306积分,并且将作为结果获得的积分值再存储在寄存器303中。注意,在来自穿过奇偶校验矩阵的一列的所有分支的消息D306都被积分的情况下,寄存器303被复位。
在穿过奇偶校验矩阵的一列的消息D306被逐个读取,并且其中一列的消息D306被积分的积分值被存储于寄存器303中的情况下,也就是,在其中来自穿过奇偶校验矩阵的一列的所有分支的消息D306(消息uj)被积分的积分值(∑uj,j=1到dv)被存储在寄存器303中的情况下,选择器304选择所存储在寄存器303中的值,也就是其中积分了穿过奇偶校验矩阵的一列的所有分支的消息D306(消息uj)的积分值D307(∑uj,j=1到dv),并将其输出到寄存器305,以存储该值。
寄存器305将所存储的值D307提供给选择器304和计算器312,作为值D308。选择器304选择从寄存器305提供的值D308,并将其输出到寄存器305,以再存储该值,直到其中积分了一列的消息D306的值被存储于寄存器303中。也就是说,寄存器305提供先前所积分的值到选择器304和计算器312,直到穿过奇偶校验矩阵的一列的所有分支的消息D306(消息uj)都被积分。
另一方面,FIFO存储器320延迟从选择器301输出的、来自检查节点的消息D306,以将其作为值D315提供给计算器312,直到从寄存器305输出了一个新值D308(∑uj,j=1到dv)。计算器312将从寄存器305提供的值D308减去从FIFO存储器320提供的值D315。也就是说,计算器312将穿过奇偶校验矩阵的一列的所有分支的消息D306(消息uj)的积分值D308(∑uj,j=1到dv)减去从一个期望分支提供的消息D315(uj),以获得差值D316(∑uj,j=1到dv-1),并将其提供给计算器313。
计算器313将来自输入端口P101的接收数据D101加上来自计算器312的差值D316(∑uj,j=1到dv-1),并将作为结果获得的加和值D317(可变节点消息Vi)提供给选择器316的端子v。
选择器316在可变节点计算时选择端子v,并且被提供给端子v的来自计算器313的加和值D317被从输出端口P202输出,作为消息D202(消息vi)。
如上所述,其中选择器301和304选择端子v的消息计算单元191执行公式(1)的可变节点计算,并将作为结果获得的消息(可变节点消息)vi从输出端口P202输出。
图20描述了在检查节点计算时图18中的消息计算单元191的基本配置示例。
注意如上所述,在检查节点计算时,选择器301和316选择端子c,但是在图20中,省略了在通过选择器301和316选择端子c而进行可变节点计算时,图18所描述的配置中(基本)不起作用的部分(与检查节点计算无关的部分)。
在检查节点计算时,输入端口P201被顺序提供以来自对应于奇偶校验矩阵的每列的可变节点(对应于一行的每列的可变节点,该行对应于要获得其输出消息uj的检查节点)的可变节点消息vi,作为消息D201。
在提供给输入端口P201的消息D201(消息uj)中,除了最高位外的低位,也就是消息D201的绝对值D303(|vi|),被提供给LUT 300,而最高位,即消息D201的符号位D304,被分别提供给EXOR电路306和FIFO(先入先出)存储器320。
LUT 300是用于以输入其的值的参数而输出公式(7)的检查节点计算中的非线性函数Φ(x)的计算结果的LUT,以绝对值D303(|vi|)作为参数而读出非线性函数Φ(|vi|)计算的计算结果D305(Φ(|vi|)),并将其提供给选择器301的端子c。
选择器301在检查节点计算时选择端子c,并且提供给端子c的来自LUT 300的计算结果D305(Φ(|vi|))被提供给计算器302和FIFO存储器320,作为计算结果D306(Φ(|vi|))。
计算器302通过将计算结果D306(Φ(|vi|))与存储于寄存器303中的值D307相加,来积分计算结果D306,并将作为积分结果获得的积分值再存储在寄存器303中。注意,在对于穿过奇偶校验矩阵的一行的所有分支的消息D201的绝对值D303(|vi|)的计算结果D306(Φ(|vi|))都被积分的情况下,寄存器303被复位。
在穿过奇偶校验矩阵的一行的消息D201被逐个读取,并且一行的计算结果D306被积分的积分值被存储于寄存器303中的情况下,选择器304选择所存储在寄存器303中的值,也就是其中积分了来自穿过奇偶校验矩阵的一行的所有分支的消息D201(消息vi)所获得的Φ(|vi|)的积分值D307(∑Φ(|vi|),i=1到i=dc),并将其输出到寄存器305,以存储该值。寄存器305将所存储的积分值D307提供给选择器304和计算器312,作为值D308。
选择器304选择从寄存器305提供的值D308,并将其输出到寄存器305,以再存储该值,直到其中积分了一行的计算结果D306的积分值被存储于寄存器303中。也就是说,寄存器305提供先前所积分的Φ(|vi|)的积分值到选择器304和计算器312,直到从来自穿过奇偶校验矩阵的一行的所有分支的消息D201(消息vi)获得的Φ(|vi|)都被积分。
另一方面,FIFO存储器320延迟LUT 300输出的计算结果D306(Φ(|vi|)),以将其作为值D315提供给计算器312,直到从寄存器305输出了一个新值D308(∑Φ(|vi|),i=1到i=dc)。计算器312将从寄存器305提供的值D308减去从FIFO存储器320提供的值D315,并将相减的结果提供给LUT 314,作为差值D316。也就是说,计算器312将从来自穿过奇偶校验矩阵的一行的所有分支的消息D201(消息vi)获得的积分值(Φ(|vi|的∑Φ(|vi|),i=1到i=dc)减去从自一个期望分支提供的消息D201(消息vi)获得的Φ(|vi|),并将差值(∑Φ(|vi|),i=1到i=dc-1)提供给LUT 314,作为差值D316。
LUT 314是用于以输入其的值作为参数x而输出公式(7)的检查节点计算中的非线性函数Φ(x)的逆函数Φ-1(x)的计算结果的LUT,以来自计算器312的差值D316(∑Φ(|vi|),i=1到i=dc-1)作为参数而输出逆函数Φ-1((∑Φ(|vi|))计算的计算结果D318(Φ-1((∑Φ(|vi|))),。
注意,如上所述,非线性函数Φ(x)和逆函数Φ-1(x)的计算结果是相等的,并且相应的,LUT 300和LUT 314具有相同的配置。
并行于上面的处理,EXOR电路306计算存储于寄存器307中的值D310与符号位(表示正/负的比特)D304之间的异或,由此在符号位之间进行乘法,并且相乘结果D309被再存储于寄存器307中。注意,在来自穿过奇偶校验矩阵的一行的所有分支的消息D201的符号位D304都被相乘后,寄存器307被复位。
在其中来自穿过奇偶校验矩阵的一行的所有分支的消息D201的符号位D304都被相乘的相乘结果D309(∏sign(vi),i=1到i=dc)被存储于寄存器307中的情况下,选择器308选择存储于寄存器307中的值,即其中来自穿过奇偶校验矩阵的一行的所有分支的消息D201的符号位D304都被相乘的值D310(∏sign(vi),i=1到i=dc),并将其输出到寄存器309,以存储该值。寄存器309将存储的值D311提供给选择器308和EXOR电路315。
选择器308选择从寄存器309提供的值D311,并将其输出到寄存器309,以再存储该值,直到其中来自穿过奇偶校验矩阵的一行的所有分支的消息D201的符号位D304都被相乘的相乘结果D309(∏sign(vi),i=1到i=dc)被存储于寄存器307中。也就是说,寄存器309提供先前所存储的值到选择器308和EXOR电路315,直到来自穿过奇偶校验矩阵的一行的所有分支的消息D201(消息vi)的符号位D304都被相乘。
另一方面,FIFO存储器320延迟符号位D304,直到一个新值D311(∏sign(vi),i=1到i=dc)被从寄存器309提供给EXOR电路315,并将其作为一个比特值D313提供给EXOR电路315。EXOR电路315计算从寄存器309提供的值D311与从FIFO存储器320提供的值D313的异或,由此,值D311除以值D313,以输出相除的结果,作为商值D319。也就是说,EXOR电路315将来自穿过奇偶校验矩阵的一行的所有分支的消息D201的符号位D304(sign(vi))的乘积值(∏sign(vi),i=1到i=dc)除以来自一个期望分支的消息D201的符号位D304(sign(vi)),并输出商值(∏sign(vi),i=1到i=dc-1)作为商值D319。
随后,对于消息计算单元191,一个位串D320(检查节点消息uj),其中从LUT 314输出的计算结果D318被作为低位,以及从EXOR电路315输出的商值D319它被作为最高位(符号位),被提供给选择器316的端子c。
选择器316在检查节点计算时选择端子c,并且所提供给端子c的位串D320(消息uj)被从输出端口P202输出,作为消息D202(消息vi)。
如上所述,其中选择器301和304选择端子c的消息计算单元191执行公式(7)的检查节点计算,并从输出端口P202输出作为结果获得的消息(检查节点消息)uj。
注意,尽管在附图中没有示出,但是对于图17中的解码设备,在最终的解码阶段,执行公式(5)的计算,以代替公式(1)的可变节点计算,并且计算结果被作为最终解码结果输出。
根据图17的解码设备,只要消息存储器104以及消息计算单元191的FIFO存储器320有足够的容量,就可以解码各种类型的奇偶校验矩阵的LDPC码。
另外,对于图17中的解码设备的消息计算单元191(图18),从图19和图20之间的比较可知,用于执行值积分并输出积分值的计算器302和寄存器303、用于将积分值减去特定值并输出差值的选择器304、寄存器305和计算器312、以及用作延迟值的延迟存储器的FIFO存储器320,在可变节点计算和检查节点计算中是共享的,由此与包括独立的可变节点计算器102和检查节点计算器103的消息计算单元101诸如图8的解码设备相比,可以减小电路规模。
图21是一个框图,描述了应用了本发明的解码设备的第二实施例的配置示例。注意在该图中,对应于图17中的解码设备中的部分被附加以相同的附图标记,下面适当时将省略其描述。也就是说,图21的解码设备与图17的解码设备是以相同方式配置,除了用消息计算单元201来代替消息计算单元191,以及控制单元202代替控制单元192。
图21的解码设备被配置为其中的消息计算单元201共享用于执行可变节点计算的电路和用于执行检查节点计算的电路的一部分,像图17的解码设备的计算单元191一样。而且,对于图21的解码设备,用于执行可变节点计算和检查节点计算的消息计算单元201被配置为不提供延迟存储器(相当于图18中的消息计算单元191的FIFO存储器320的存储器)。
对于图21的解码设备,消息计算单元201从消息存储器104中逐个顺序读出输入消息,并使用该输入消息来计算对应于期望分支的输出消息。随后,由计算获得的输出消息被存储在消息存储器104中。图21的解码设备通过重复执行上述处理进行全部串行重复解码。
也就是说,可以通过接收所发送的LDPC码来获得的接收数据(LDPC码)D100被提供给接收数据存储器105,该接收数据是对数似然比,表示了码0(或1)的标识,并且该接收数据存储器105存储该接收数据D100。
在可变节点计算时,接收数据存储器105根据从控制单元202提供的控制信号来读出所存储的接收数据,并将其作为接收数据D101提供给消息计算单元201。
另外,在可变节点计算时,消息存储器104根据从控制单元202提供的控制信号,两次读出所存储的相同的消息,将第一次读出的消息作为消息D201提供给消息计算单元201,并将第二次读出的消息作为消息DD201提供给消息计算单元201。消息计算单元201根据从控制单元202提供的控制信号D203所表示的可变节点计算指令,使用从消息存储器104所提供的消息D201和DD201,以及从接收数据存储器105提供的接收数据D101,来执行公式(1)的可变节点计算,并将作为可变节点计算的结果所获得的消息(可变节点消息)vi提供给消息存储器104,作为消息D202。
随后,消息存储器104根据从控制单元202提供的控制信号,存储从消息计算单元201提供的消息D202(可变节点消息vi)。
另一方面,在检查节点计算时,消息存储器104根据从控制单元202提供的控制信号,两次读出所存储的相同的消息(可变节点消息vi),将第一次读出的消息作为消息D201提供给消息计算单元201,并第二次读出的消息作为消息DD201提供给消息计算单元201。
消息计算单元201根据来自控制单元202的控制信号D203所表示的检查节点计算指令,使用从消息存储器104所提供的消息D201和DD201,执行公式(7)的检查节点计算,并将检查节点计算所获得的消息(检查节点消息)uj提供给消息存储器104,作为消息D202。
随后,消息存储器104根据从控制单元202提供的控制信号,存储从消息计算单元201提供的消息D202(检查节点消息Uj)。
在下一次可变节点计算时,消息存储器104所存储的来自消息计算单元201的消息D202,也就是检查节点消息uj,被作为消息D102和消息DD201读出,并被提供给消息计算单元201。
图22描述了图21中的消息计算单元201的配置示例。
注意在该图中,对应于图18中的消息计算单元191中的部分被附加以相同的附图标记,下面将适当省略其描述。
消息计算单元201被配置为不提供用于延迟数据的延迟存储器(图18中的消息计算单元191中提供的FIFO存储器320。
替代地,消息计算单元201包括输入端口PD201,作为从外部提供(输入)消息(数据)的输入端口,以及输入端口P101和P201,还包括LUT 310和选择器311。
输入端口P101被提供(输入)以从接收数据存储器105读出的接收数据D101。同样,输入端口P201被提供(输入)以从消息存储器104两次读出的相同消息D201和DD201中第一次读出的消息D201(这里及以后,适当时称为第一次消息),而输入端口PD201被提供以第二次读出的消息DD201(这里及以后,适当时称为第二次消息)消息计算单元201根据从输入端口P203输入的控制信号D203,使用从输入端口P201第一次输入的第一次消息D201、从输入端口PD201输入的第二次消息DD201、以及如果进一步需要,从输入端口P101输入的消息(接收数据),来执行公式(1)的可变节点计算或公式(7)的检查节点计算,并将作为结果获得的消息从输出端口P202输出。
也就是说,提供给输入端口P101的接收数据D101被提供给计算器313,并且提供给输入端口P201的第一次消息D201被提供给选择器301的端子v。
而且,在提供给输入端口P201的第一次消息D201中,除了最高位外的低位,也就是消息D201的绝对值,被作为值D303提供给LUT 300,而消息D201的最高位,也就是消息D201的符号位,被作为值D304提供给EXOR电路306。
另外,提供给输入端口PD201的第二次消息DD201被提供给选择器311的端子v。而且,在提供给输入端口PD201的第二次消息DD201中,除了最高位外的低位,也就是消息DD201的绝对值,被作为值D312提供给LUT 310,而消息DD201的最高位,也就是消息DD201的符号位,被作为值D313提供给EXOR电路306。
另外,提供给输入端口P203的控制信号D203被提供给选择器301、311和316。
选择器301、311和306包括端子v和端子c,并根据控制信号D203选择提供给端子v和端子c之一的值,并将其输出给后续阶段。也就是说,在控制信号D203是指令可变节点计算的控制信号的情况下,选择器301、311和316选择提供给端子v的值,以将其输出到后续阶段,而在控制信号D203是指令检查节点计算的控制信号的情况下,选择器301、311和316选择提供给端子c的值,以将其输出到后续阶段。
作为结果,对于图22中的消息计算单元201,当控制信号D203指令可变节点计算时,执行可变节点计算,并且当控制信号D203指令检查节点计算时,执行检查节点计算。
下面将结合图23对由图22中的消息计算单元201执行的可变节点计算和检查节点计算进行描述。
图23的左边示意性地描述了用于执行公式(1)可变节点计算的可变节点,和用于执行公式(7)的检查节点计算的检查节点。
在可变节点,对应于要计算的分支(连接到该可变节点的分支中的第i个分支)的消息vi是通过将来自其余连接到该可变节点的分支的消息u1、u2等等相加而获得的,如公式(1)所示。
另外,在检查节点,对应于要计算的分支(连接到该可变节点的分支中的第j个分支)的消息uj是通过以来自其余连接到该检查节点的分支的消息v1、v2等等作为参数x积分非线性函数Φ(x)的计算结果而获得的,并将获得的积分值结果作为参数x来计算逆函数Φ-1(x),如公式(7)所示。
现在,如果我们将输入到一个节点的数据(输入前的数据)称为输入数据,将从一个节点输出的数据(输出前的数据)称为输出数据,图23左边的在可变节点和检查节点处的计算就相当于图23右边所描述的计算。
也就是说,在图23的右边,可变节点中的消息vi是通过与图23左边的可变节点中的计算相同的计算来获得的。而且,在图23的右边,在检查节点不执行非线性函数Φ(x)计算,但是输入到检查节点的输入数据(输入前的消息v1、v2等等)被经历非线性函数Φ(x)的计算,接着计算结果被输入到检查节点,并且在该检查节点中对非线性函数Φ(x)的计算结果进行积分。而且,在图23的右边,在检查节点中不执行逆函数Φ-1(x)的计算,但是从检查节点输出的输出数据(在经受逆函数Φ-1(x)计算之前,非线性函数Φ(x)的计算结果的积分值)经受逆函数Φ-1(x)的计算,从而获得消息uj。
对于图22中的消息计算单元201,执行可变节点计算和检查节点计算,以获取消息vi和uj,与图23的右边所描述的一样。
这里,对于图23右边的可变节点,输入到该可变节点的输入数据和从该可变节点输出的数据都不经受非线性函数Φ(x)和逆函数Φ-1(x)的计算。另一方面,对于检查节点,输入数据经受给非线性函数Φ(x)的计算,并且输出数据经受逆函数Φ-1(x)的计算。
相应地,对于图22中用于执行可变节点计算和检查节点计算的消息计算单元201,提供了LUT 300和310,用于执行非线性函数Φ(x)的计算(以输出计算结果),以及提供了LUT 314,用于执行逆函数Φ-1(x)的计算(以输出计算结果)。
随后,在可变节点计算时,消息计算单元201基本改变到一种配置,使对于可变节点的输入数据和输出数据绕过LUT 300、310、和314(后面描述的图24中的配置),并执行对于图23的右边的可变节点所描述的计算。
另外,在检查节点计算时,消息计算单元201基本改变到一种配置,使得输入到检查节点的输入数据通过LUT 300或310,还使得从检查节点输出的输出数据通过LUT 314(后面描述的图25中的配置),并执行对于图23的右边的检查节点所描述的计算。
图24描述了在图23的右边描述的可变节点计算时图22中的消息计算单元201的基本配置示例。
注意如上所述,在可变节点计算时,选择器301、311和316选择端子v,但是在图24中,图中省略了在通过选择器301、311和316选择端子v在进行可变节点计算时在图22所描述的配置中(基本)不起作用的部分(与可变节点计算无关的部分)。
消息计算单元201使用从每个输入端口P101、P201和PD201输入的消息来执行公式(1)的可变节点计算,并将作为结果获得的消息D202从输出端口P202输出。
也就是说,输入端口P101被提供以从接收数据存储器105中逐个读出的接收数据D101。另外,输入端口P201被提供以从消息存储器104逐个读出的第一次消息D201(检查节点消息uj),该消息是从对应于奇偶校验矩阵的每行的检查节点获得的。
提供给输入端口P101的接收数据D101被提供给计算器313。
另外,提供给输入端口P201的消息D201(消息uj)被提供给选择器301的端子v,并从在可变节点计算时选择端子v的选择器301提供给计算器302,作为消息D306。
随后,对于计算器302、寄存器303、选择器304、和寄存器305,执行与图19中所描述的消息计算单元191中一样的处理。
具体地,计算器302通过将来自选择器301的消息D306(消息uj)与寄存器303中存储的值D307相加,来对消息D306积分,并且将作为结果获得的积分值再存储在寄存器303中。注意,在来自穿过奇偶校验矩阵的一列的所有分支的消息D306都被积分的情况下,寄存器303被复位。
在穿过奇偶校验矩阵的一列的消息D306被逐个读取,并且其中一列的消息D306被积分的积分值被存储于寄存器303中的情况下,也就是,在其中来自穿过奇偶校验矩阵的一列的所有分支的消息D306(消息uj)被积分的积分值(∑uj,j=1到dv)被存储在寄存器303中的情况下,选择器304选择所存储在寄存器303中的值,也就是其中积分了穿过奇偶校验矩阵的一列的所有分支的消息D306(消息uj)的积分值D307(∑uj,j=1到dv),并将其输出到寄存器305,以存储该值。
寄存器305将存储的值D307提供给选择器304和计算器312,作为值D308。选择器304选择从寄存器305提供的值D308,并将其输出到寄存器305,以再存储该值,直到其中积分了一列的消息D306的值被存储于寄存器303中。也就是说,寄存器305提供先前所积分的值到选择器304和计算器312,直到穿过奇偶校验矩阵的一列的所有分支的消息D306(消息uj)都被积分另一方面,基于从寄存器305开始输出一个新值D308(∑uj,j=1到dv),也就是紧接在其中一列的消息D201被积分的积分值(∑uj,j=1到dv)被存储于寄存器303中之后,对于消息计算单元201,与消息D201(消息uj)相同的消息DD201,也就是来自消息存储器104的第二次消息被逐个从输入端口PD201输入,并且该消息DD201被提供给计算器311的端子v。
在可变节点计算时,选择器311选择端子v,并将提供给端子v的消息(第二次消息uj)DD201提供给计算器312。
计算器312将从寄存器305提供的值D308减去从输入端口PD201经由选择器311提供的消息DD201。也就是说,计算器312将穿过奇偶校验矩阵的一列的所有分支的消息D201(消息uj)的积分值D308(∑uj,j=1到dv)减去用作从一个期望分支提供的消息uj(uj,j=dv)的消息DD201,以获得差值(∑uj,j=1到dv-1),并将其提供给计算器313。
计算器313将来自输入端口P101的接收数据D101加上来自计算器312的差值(∑uj,j=1到dv-1),并将作为结果获得的加和值D317(可变节点消息Vi)提供给选择器316的端子v。
选择器316在可变节点计算时选择端子v,并且所提供给端子v的来自计算器313的加和值D317被从输出端口P202输出,作为消息D202(消息vi)。
如上所述,其中选择器301和304选择端子v的消息计算单元201执行公式(1)的可变节点计算,并将作为结果获得的消息(可变节点消息)vi从输出端口P202输出。
图25图示了在图23右侧所示的检查节点计算时图22中的消息计算单元201的基本配置示例。
注意如上所述,在检查节点计算时,选择器301,311和316选择端子c,但是在图25中,省略了在通过选择器301,311,和316选择端子c而进行检查节点计算时不起作用的部分(与检查节点计算无关的部分)。
在检查节点计算时,输入端口P201被逐个地顺序地提供从消息存储器104读出的、从相应于奇偶校验矩阵的每列的可变节点获得的可变节点消息vi,作为消息D201。
随后,对于LUT300,选择器301,计算器302,寄存器303,选择器304,寄存器305,EXOR电路306,寄存器307,选择器308,寄存器309,计算器312,LUT314,和EXOR电路315,执行与图20所述的消息计算单元191相同的处理。
具体地,在提供给输入端口P201的消息D201(消息uj)中,除了最高位外的低位,也就是消息D201的绝对值D303(|vi|),被提供给LUT 300,而最高位,即消息D201的符号位D304,被提供给EXOR电路306。
LUT300读出作为以绝对值D303(|vi|)为参数的非线性函数Φ(|vi|)的计算结果而获得的计算结果D305(Φ(|vi|)),并把它提供给选择器301的端子c。
选择器301在检查节点计算时选择端子c,并且提供给端子c的来自LUT 300的计算结果D305(Φ(|vi|))被提供给计算器302,作为计算结果D306(Φ(|vi|))。
计算器302通过将计算结果D306(Φ(|vi|))与存储于寄存器303中的值D307相加,来积分计算结果D306,并将作为结果获得的积分值再存储在寄存器303中。注意,在对于穿过奇偶校验矩阵的一行的所有分支的消息D201的绝对值D303(|vi|)的计算结果D306(Φ(|vi|))都被积分的情况下,寄存器303被复位。
在穿过奇偶校验矩阵的一行的消息D201被逐个读取,并且一行的计算结果D306被积分的积分值被存储于寄存器303中的情况下,选择器304选择所存储在寄存器303中的值,也就是其中积分了来自穿过奇偶校验矩阵的一行的所有分支的消息D201(消息vi)所获得的Φ(|vi|)的积分值D307(∑Φ(|vi|),i=1到i=dc),并将其输出到寄存器305,以存储该值。寄存器305将所存储的积分值D307提供给选择器304和计算器312,作为值D308。
选择器304选择从寄存器305提供的值D308,并将其输出到寄存器305,以再存储该值,直到其中积分了一行的计算结果D306的积分值被存储于寄存器303中。也就是说,寄存器305提供先前所积分的Φ(|vi|)的积分值到选择器304和计算器312,直到从来自穿过奇偶校验矩阵的一行的所有分支的消息D201(消息vi)获得的Φ(|vi|)都被积分。
另一方面,基于从寄存器305开始输出新的值D308(i=1至i=dc的∑Φ(|vi|)),即,紧接在其中积分了一列值的计算结果D306的积分值(i=1至i=dc的∑Φ(|vi|))被存储在寄存器305之后,对于消息计算单元201,与消息D201(消息vi)相同的消息DD201,即,来自消息存储器104的第二次的消息vi从输入端口PD201被逐个输入,并且在消息DD201中,除了最高位之外的低位,即消息DD201的绝对值D312(|vi|)被提供给LUT 310,而且最高位,即消息DD201的符号位D313被提供给EXOR电路315。
LUT 310是与LUT 300相同的LUT,并读出作为以消息DD201的绝对值D312(|vi|)为参数的非线性函数Φ(|vi|)的计算结果而获得的计算结果D314(Φ(|vi|)),并把它提供给选择器311的端子c。
选择器311在检查节点计算时选择端子c,并且所提供给端子c的、来自LUT 310的计算结果D314(Φ(|vi|))被提供给计算器312,作为计算结果D315(Φ(|vi|))。
计算器312将从寄存器305提供的值D308减去从选择器311提供的值D315,并把减法结果提供给LUT 314,作为差值D316。也就是说,计算器312将从来自穿过奇偶校验矩阵的一行的所有分支的消息D201(消息vi)所获得Φ(|vi|的积分值(∑Φ(|vi|),i=1到i=dc)减去从自期望的分支提供的消息DD201(消息vi)获得的Φ(|vi|)的值D315,并将差值(∑Φ(|vi|),i=1到i=dc-1)提供给LUT 314,作为差值D316。
LUT 314输出作为以来自计算器312的差值D316(∑Φ(|vi|),i=1到i=dc-1)的Φ-1((∑Φ(|vi|))的计算结果D318(Φ-1((∑Φ(|vi|)))。
与上述处理相并行,EXOR电路306计算寄存器307中存储的值D310和符号位(表示正/负的比特)D304之间的异或,借此在符号位之间进行乘法,并且相乘结果D309被再存储于寄存器307中。注意,在来自穿过奇偶校验矩阵的一行的所有分支的消息D201的符号位D304都被相乘的情况下,寄存器307被复位。
在其中来自穿过奇偶校验矩阵的一行的所有分支的消息D201的符号位D304都被相乘的相乘结果D309(∏sign(vi),i=1到i=dc)被存储于寄存器307中的情况下,选择器308选择存储于寄存器307中的值,即其中来自穿过奇偶校验矩阵的一行的所有分支的消息D201的符号位D304都被相乘的值D310(∏sign(vi),i=1到i=dc),并将其输出到寄存器309,以存储该值。寄存器309将存储的值D311提供给选择器308和EXOR电路315。
选择器308选择从寄存器309提供的值D311,并将其输出到寄存器309,以再存储该值,直到其中来自穿过奇偶校验矩阵的一行的所有分支的消息D201的符号位D304都被相乘的相乘结果D309(∏sign(vi),i=1到i=dc)被存储于寄存器307中。也就是说,寄存器309提供先前所存储的值到选择器308和EXOR电路315,直到来自穿过奇偶校验矩阵的一行的所有分支的消息D201(消息vi)的符号位D304都被相乘。
另一方面,当新的值D311(∏sign(vi),i=1至i=dc)从寄存器309被提供给EXOR电路315时,即,当其中穿过一行的所有分支的消息D201的符号位D304被相乘的值D310(∏sign(vi),i=1至i=dc)被存储在寄存器307时,如上所述,其中一行值的计算结果D306被积分的积分值(∑Φ(|vi|),i=1至i=dc)被存储在寄存器305中。
基于其中积分了一行值的计算结果D306的积分值(∑Φ(|vi|),i=1至i=dc)被存储在寄存器305中,如上所述,对于消息计算单元201,与消息D201(消息vi)相同的消息DD201,即,来自消息存储器104的第二次消息vi从输入端口PD201被逐个输入,并且在消息DD201中,除了最高位外的低位,即,消息DD201的绝对值(|vi|)被提供给LUT 310,而且最高位,即,消息DD201的符号位D313被提供给EXOR电路315。
EXOR电路315计算从寄存器309提供的值D311和来自输入端口PD201的消息DD201的符号位之间的异或,由此,值D311除以消息DD201的符号位,并且输出相除的结果,作为商值D319。也就是说,EXOR电路315将来自穿过奇偶校验矩阵的一行的所有分支的消息D201的符号位D304的乘积值(∏sign(vi),i=1到i=dc)除以用作来自一个期望分支的消息vi的消息D201的符号位D304(sign(vi),i=dc),并输出商值(∏sign(vi),i=1到i=dc-1)作为商值D319。
随后,对于消息计算单元191,一个位串D320(检查节点消息uj),其中从LUT 314输出的计算结果D318被作为低位,以及从EXOR电路315输出的商值D319它被作为最高位(符号位),被提供给选择器316的端子c。
选择器316在检查节点计算时选择端子c,并且所提供给端子c的位串D320(消息uj)被从输出端口P202输出,作为消息D202(消息vi)。
如上所述,其中选择器301,311,和304选择端子c的消息计算单元201执行公式(7)的检查节点计算,并从输出端口P202输出作为结果所获得的消息(检查节点消息)uj。
注意,尽管在附图中没有示出,但是对于图21中的解码设备,在最终的解码阶段,执行公式(5)的计算,以代替公式(1)的可变节点计算,并且计算结果被作为最终解码结果输出。
此外,对于图21中的解码设备,控制单元202执行的读/写控制与图12的解码设备的控制单元174的对消息存储器104的消息的读/写控制相同,如图15描述的流程图那样。
此外,图21的解码设备的对消息存储器104的消息的读/写定时也与对于图12的解码设备所述的图16中的情况相同,而且它也需要图21的解码设备执行某些高速操作,但不必提供延迟存储器,因而可以减少设备尺寸比例。另外,对于图21中的解码设备的消息计算单元201,可以共享用于执行可变节点计算的电路和用于执行检查节点计算的电路的一部分(计算器302,寄存器303,选择器304,寄存器305,和计算器312),并因此,相比于图12的解码设备,可以把尺寸减小共享程度那么多。
图26的方框示了其中应用了本发明的解码设备的第三实施例的配置示例。在该图中,对应于图21中的解码设备中的部分被附加以相同的附图标记,下面适当时将省略其描述。也就是说,图26的解码设备与图21的解码设备是以相同方式配置,除了用消息计算单元211来代替消息计算单元201,以及控制单元212代替控制单元202。
对于图26中的解码设备,配置消息计算单元211以便共享用于执行可变节点计算的电路和用于执行检查节点计算的电路的一部分,另外不提供延迟存储器。
对于图26中的解码设备,消息存储器104中存储的消息被逐个读出,并被提供给消息计算单元211。消息计算单元211利用从消息存储器104获得的消息来执行计算,并且通过计算获得的消息被存储在消息存储器104中。图26的解码设备通过重复执行上述的处理,执行全部串行重复解码。
也就是说,可以通过接收所发送的LDPC码来获得的接收数据(LDPC码)D100被提供给接收数据存储器105,该接收数据是时数似然比,表示了码0(或1)的标识,并且该接收数据存储器105存储该接收数据D100。
在可变节点计算时,接收数据存储器105根据从控制单元202提供的控制信号来读出所存储的接收数据,并将其作为接收数据D101提供给消息计算单元211。
另外,在可变节点计算时,消息存储器104根据从控制单元202提供的控制信号,两次读出所存储的相同的消息,将第一次读出的消息作为消息D601提供给消息计算单元211,并将第二次读出的消息作为消息DD601提供给消息计算单元211。此外,控制单元212向消息计算单元211提供用于指令可变节点计算的控制信号D603。消息计算单元201根据从控制单元212提供的控制信号D603,使用从消息存储器104所提供的消息D601和DD601,以及从接收数据存储器105提供的接收数据D101,来执行可变节点计算,并将作为可变节点计算的结果所获得的消息提供给消息存储器104,作为消息D622。
随后,消息存储器104根据从控制单元212提供的控制信号来存储从消息计算单元211提供的消息D622。
另一方面,在检查节点计算时,消息存储器104根据控制单元212提供的控制信号两次读出存储的相同的消息,把第一次读出的消息提供到消息计算单元211作为消息D601,并把第二次读出的消息提供到消息计算单元211作为消息DD601。此外,控制单元212提供用于指令检查节点计算的控制信号D603到消息计算单元211。
消息计算单元211根据控制单元212的控制信号,利用从消息存储器104提供的消息D601和DD601来执行检查节点计算,并把检查节点计算获得的消息提供到消息存储器104来作为消息D622。
随后,消息存储器104根据从控制单元212提供的控制信号,存储从消息计算单元211提供的消息D622。
现在,将作出有关图26中的消息计算单元211所执行的计算的描述。
现在,如果我们假定,引入公式u′j=Φ(|uj|)×sign(uj)所表示的消息u′j作为从连接到检查节点的诸分支的第j个分支输出的消息(数据),公式(1)和公式(7)可以分别用公式(9)和公式(10)重写。
vi=u0i+Σj=1dv-1(Φ-1|u′j|)×sign(u′j))---(9)]]>u′j=Σi=1dc-1cΦ(|vi|)×Πi=1dc-1sign(vi)...(10)]]>现在,当重写有关消息uj的公式u′j=Φ(|uj|)×sign(uj)时,该公式变成uj=φ-1(|u′j|)×sign(u′j)。该公式uj=φ-1(|u′j|)×sign(u′j)被可变计算公式(1)替代,由此可以获得作为新的可变节点计算公式的公式(9)。
此外,检查节点计算公式(7)被公式u′j=Φ(|uj|)×sign(uj)所替代,借此可以获得作为新的检查节点计算公式的公式(10)。
对于可变节点计算的公式(9),以输入数据(消息)u′j的绝对值(|u′j|)作为参数执行逆函数φ-1(|u′j|)的计算,而且对于检查节点计算的公式(10),以输入数据vi的绝对值(|vi|)作为参数执行非线性函数Φ(|vi|)的计算。这里,非线性函数Φ(x)和逆函数φ-1(x)在x>0是相等的。因此,对于公式(9)和公式(10),以输入数据x的绝对值|x|作为参数来执行函数Φ(x)的计算。
然后,在公式(9)中,考虑有关函数Φ(x)的计算结果(φ-1(|u′j|)的计算结果)的输入数据u′j的符号(sign(u′j)),值(φ-1(|u′j|)×sign(u′j))被积分,并且再将其加上接收数据u0i,借此可以获得消息vi。
此外,在公式(10)中,函数Φ(x)的计算结果(Φ(|uj|)的计算结果)被积分,并与此分开地,获得输入数据vi的符号位的相乘与(multiplierAND)(∏sign(vi)),函数Φ(x)的计算结果的积分值和符号位做乘法与,借此能获得消息u′j。
利用图26中的消息计算单元211,执行公式(9)的可变节点计算,和公式(10)的检查节点计算。
图27示例了图26中消息计算单元211的结构。
以与图22中的消息计算单元201相同的方式,配置消息计算单元211为不提供延迟存储器。而且,消息计算单元211配备有输入端口P101,P601,PD601,和P603,和输出端口P622。
输入端口P101被提供(输入)以从接收数据存储器105读出的接收数据D101。输入端口P601被提供(输入)以从消息存储器104两次读出的相同的消息D601和DD601的第一次读出的D601,并且输入端口PD601被提供以第二次读出的消息(第二次消息)DD601。而且,输入端口P603被提供以来自控制单元212的控制信号D603(图26)。
消息计算单元211根据从输入端口P603输入的控制信号D603,利用从输入端口P601输入的第一次消息D601,从输入端口PD601输入的第二次消息DD601,和如果需要的话,从输入端口P101输入的消息(接收数据),来执行公式(9)的可变节点计算或公式(10)的检查节点计算,并从输出端口P622输出作为结果获得的消息D622。
现在,将结合参考图28作出有关由图27中的消息计算单元211执行的可变节点计算和检查节点计算的描述。
图28的左侧示意地示例了用于执行公式(1)的可变节点计算的可变节点,以及与在图23的右侧的相同图示的用于执行公式(7)的检查节点计算的检查节点。
在图28的左侧,如图23的右侧所述的,输入到检查节点的输入数据经受非线性函数Φ(x)的计算,之后计算结果被输入到检查节点,并且在检查节点处对非线性函数Φ(x)的计算结果进行积分。此外,从检查节点输出的输出数据(在经受逆函数Φ-1(x))的计算之前,非线性函数Φ(x)的计算结果的积分值)经受逆Φ-1(x)的计算,借此获得消息uj。
消息uj被输入到可变节点来作为输入数据,并被用于可变节点计算。
因此,替代图28左侧所示的检查节点输出的输出数据x经受逆函数Φ-1(x)的计算,即使输入到可变节点的输入数据x受到图28右侧所示的逆函数Φ-1(x)的计算,也可以执行可变节点计算和检查节点计算。
特别的,在图28的右侧,如公式(9)所示,输入到可变节点的输入数据受到逆函数Φ-1(x)的计算,并且逆函数Φ-1(x)的计算结果在可变节点上被积分,借此获得消息vi。此外,在图28的右侧,如公式(10)所述的,输入到检查节点的输入数据受到非线性函数Φ(x)的计算,并且非线性函数Φ(x)的计算结果在检查节点上被积分。此外,在图28的右侧,通过在检查节点上积分非线性函数Φ(x)的计算结果而获得的积分值被原样输出作为输出数据u′j(没有受到逆函数Φ-1(x)的计算)。
对于图27中的消息计算单元211,执行用于获得消息vi和uj的公式(9)的可变节点计算和公式(10)的检查节点计算,如图28的右侧所示的那样。
这样,消息计算单元211执行用于获得消息vi和u′j的公式(9)的可变节点计算和公式(10)的检查节点计算,因而消息计算单元211(图27)被配备有LUT600(和LUT 610),用于输出非线性函数Φ(x)的计算结果,它能获得针对输入到检查节点的输入数据x与逆函数Φ-1(x)相同的计算结果,并还输出有关输入到可变节点的输入数据x的逆函数Φ-1(x)的计算结果。
随后,消息计算单元211根据所提供到输入端口P603的控制信号D603而改变它的基本的结构配置,并选择地执行公式(9)的可变节点计算和公式(10)的检查节点计算。
这就是说,消息计算单元211(图27)包括选择器601,611和615,并且所提供给输入端口P603的控制信号D603被提供到选择器601,611和615。
选择器601,611,和615包括端子v和端子c,并根据控制信号D603选择所提供给端子v和端子c之一的值,并把它输出到后续阶段。这就是说,在控制信号D603是用于指令可变节点计算的控制信号的情况下,选择器601,611,和615选择被提供给端子v的值以把它输出到后续阶段,而在控制信号D603是用于指令检查节点计算的控制信号的情况下,选择器601,611,和615选择提供给端子c的值以把它输出到后续阶段。
作为结果,对于图27中的消息计算单元211,当控制信号D603指令可变节点计算时,执行可变节点计算,和当控制信号D603指令检查节点计算时,检查节点计算被执行。
图29示例了图28右侧示例的可变节点计算时的图27中的消息控制单元211的基本配置示例。
注意,如上所述,在可变节点计算时,选择器601,611,和615选择端子v,但在图29中,通过选择器601,611,和615选择端子v的可变节点计算时图27中示例的结构不起作用的部分(与可变节点计算无关的部分)在图中被省略。
消息计算单元211利用从每个输入端口P101,P601,PD601输入的消息来执行公式(9)的可变节点计算,并从输出端口P622输出作为结果所获得的消息D622。
这就是说,输入端口P101被提供以从接收数据存储器105读出的接收数据D101。此外,输入端口P601被提供以从消息存储器104逐个读出的第一次消息D601(消息u′j),它是从对应于奇偶校验矩阵的每行的检查节点所获得的。
提供到输入端口P101的接收数据D101被提供到计算器613。
而且,在提供给输入端口P601的消息D601中,除了最高位外的较低位,即消息D601的绝对值D603(|u′j|),被提供到LUT 600。
LUT 600读出和输出计算结果D605(Φ-1(|u′j|)),作为以绝对值D603(|u′j|)为参数的逆函数Φ(|u′j|)的计算结果。LUT 600输出的计算结果D605(Φ-1(|u′j|))通过把其最高位加上所提供到输入端口P601的消息D601(消息u′j)的最高位,即,消息D601的符号位D604(sign(u′j))而被变换成消息D606(检查节点消息ui),,并被提供到选择器601的端子v。
选择器601在上述的可变节点计算时选择端子v,并且所提供到端子v的消息D606(检查节点消息uj)被提供到计算器602,作为消息D607。
通过相加来自选择器601的消息D607(消息uj)和存储在寄存器603中的值D608,计算器602积分消息D607,并在寄存器中再存储作为结果所获得的积分值。注意,在来自穿过奇偶校验矩阵的一列的所有分支的消息D607(从消息u′j获得的)都被积分的情况下,寄存器603被复位。
在穿过奇偶校验矩阵的一列的消息D607被逐个读取,并且其中一列值的消息D607被积分的积分值被存储在寄存器603中的情况下,即,在其中来自穿过奇偶校验矩阵的一列的所有分支的消息D607(消息uj)被积分的积分值(∑uj,j=1至dv)被存储在寄存器603的情况下,选择器604选择存储在寄存器603中的值,也就是,其中来自穿过奇偶校验矩阵的一列的所有分支的消息D607(消息uj)被积分的积分值D608(∑uj,j=1至dv),并把它输出到寄存器605以便存储。
寄存器605把存储的值D608提供到选择器604和计算器612作为值D609。选择器604选择从寄存器605提供的值D609,并把它输出到寄存器605,以再存储它,直到紧在其中积分了一列值的消息D607的值被存储在寄存器603之前为止。这就是说,寄存器605把先前积分的值提供给选择器604和计算器612,直到来自穿过奇偶校验矩阵的一列的所有分支的消息D607(消息uj)被积分为止。
另一方面,基于从寄存器605开始的新的值D609(∑uj,j=1至dv)的输出,即,紧接在其中一列值的消息D607被积分的积分值(∑uj,j=1至dv)被存储在寄存器603之后,对于消息计算单元211,与消息D601(消息u′j)相同的消息DD601,即,来自消息存储器104的第二次消息u′j从输入端口PD601被逐个输入,并且在消息DD601(消息u′j)之中,除了最高位之外的低位,即消息DD601的绝对值D613(|u′j|)被提供给LUT 610。
LUT 610读出和输出计算结果D615(Φ-1|u′j|),作为以绝对值D613(|u′j|)为参数的逆函数Φ(|u′j|)的计算结果。通过将其最高位加上所提供到输入端口PD601的消息DD601(消息u′j)的最高位,即消息DD601的符号位D304(sign(u′j)),LUT 600输出的计算结果D605(Φ-1(|u′j|))被变换成消息D616(检查节点消息u′j),并被提供到选择器611的端子v。
选择器611在如上所述的可变节点计算时选择端子v,而且所提供到端子v的消息D616(检查节点消息uj)被提供到计算器612,作为消息D617。
计算器612从寄存器605提供的积分值D609(∑uj,j=1至dv)中减去从选择器611获得的消息D617(j=dv的消息)。这就是说,计算器612从穿过奇偶校验矩阵的一列的所有分支的消息D607(消息uj)的积分值D609(∑uj,j=1至dv)中减去作为从期望的分支提供的消息uj(j=dv的uj)的消息D617,以获得差值D618(∑uj,j=1至dv-1),并把它提供到计算器613。
计算器613相加来自输入端口P101的接收数据D101和来自计算器612的差值D618(∑uj,j=1至dv-1)以获得消息D619(可变节点消息vi),并把它提供给选择器615的端子v。
选择器615在可变节点计算时选择端子v,并从输出端口P622输出所提供到端子v的来自计算器613的消息D619(可变节点消息vi),作为消息D622。
如上所述,其中选择器601,611,和615选择端子v的消息计算单元211执行公式(9)的可变节点计算,并从输出端口P622输出作为结果而获得的消息(可变节点消息)vi。
图30示例了图28右侧所示的检查节点计算时的图27的消息控制单元211的基本配置示例。
注意,如上所述,在检查节点计算时,选择器601,611,和615选择端子c,但在图30中,通过选择器601,611,和615选择端子c的在可变节点计算时图27中图示的结构的不起作用的部分(与可变节点计算无关的部分)在图中被省略。
在检查节点计算时,输入端口P601被顺序地提供从消息存储器104逐个读出的、从相应于奇偶校验矩阵的每列的可变节点所获得的可变节点消息vi,作为消息D601。
在提供给输入端口P601的消息D601(消息vi)中,除了最高位外的低位即消息D601的绝对值D603(|vi|)被提供到LUT 600,并且最高位,即,消息D601的符号位D604被提供到EXOR电路606。
LUT 600读出以绝对值D603(|vi|)作为参数的非线性函数Φ(|vi|)的计算结果所获得的计算结果D605(Φ(|vi|)),并把它提供到选择器601的端子c。
选择器601在检查节点计算时选择端子c,而且所提供到端子c的来自LUT 600的计算结果D605(Φ(|vi|))被提供给计算器602,作为计算结果D607(Φ(|vi|))。
计算器602通过相加计算结果D607(Φ(|vi|))和存储在寄存器603中的值D608而积分计算结果D607,并在寄存器603中再存储作为结果所获得的积分值。注意,在有关穿过奇偶校验矩阵的一行的所有分支的消息D601的绝对值D603(|vi|)的计算结果D607(Φ(|vi|))都被积分的情况下,寄存器603被复位。
在奇偶校验矩阵的穿过一行的消息D601被逐个读取,并且其中积分了一行值的计算结果D607的积分值被存储在寄存器603中的情况下,选择器604选择存储器603中存储的值,即,其中积分了从来自穿过奇偶校验矩阵的一行的所有分支的消息D601(消息vi)获得的Φ(|vi|)的积分值D608(∑Φ(|vi|),i=1至i=dc),并把它输出到寄存器605以存储它。寄存器605提供存储的积分值D608到选择器604和计算器612作为值D609。
选择器604选择从寄存器605提供的值D609,并把它输出到寄存器605以再存储它,直到紧在其中一行值的计算结果D607的积分值被存储在寄存器603中之前为止。这就是说,寄存器605把先前积分的Φ(|vi|)的积分值提供到选择器604和计算器612,直到来自穿过奇偶校验矩阵的一行的所有分支的消息D601(消息vi)所获得的Φ(|vi|)都被积分为止。
另一方面,基于从寄存器605开始的新的值D609(∑Φ(|vi|),i=1至i=dc)的输出,即,紧接在其中积分了一行值的计算结果D607的积分值(∑Φ(|vi|),i=1至i=dc)被存储在寄存器605之后,对于消息计算单元211,与消息D601(消息vi)相同的消息DD601,即,来自消息存储器104的第二次的消息vi(与第一次的消息vi相同的消息)从输入端口PD601被逐个输入,并且在消息DD601中,除了最高位外的低位,即消息DD601的绝对值D613(|vi|)被提供到LUT 610,而且最高位,即消息DD601的符号位D614被提供到EXOR电路614。
LUT 10读出作为以消息DD601的绝对值D613(|vi|)为参数的非线性函数Φ(|vi|)的计算结果所获得的计算结果D615(Φ(|vi|)),并把它提供到选择器611的端子c。
选择器611在检查节点计算时选择端子c,并且所提供到端子c的、来自LUT 610的计算结果D615(Φ(|vi|))被提供到计算器612,作为计算结果D617(Φ(|vi|)。
计算器612从寄存器605提供的值D609中减去选择器611提供的值D617,并输出减法结果作为减法值D618。这就是说,计算器612将从来自穿过奇偶校验矩阵的一行的所有分支的消息D601(消息vi)所获得的Φ(|vi|)的积分值D609(∑Φ(|vi|),i=1至i=dc)减去从期望的分支提供的消息DD601(消息vi)所获得的Φ(|vi|)的值D617,并把减法值(∑Φ(|vi|),i=1至i=dc-1)输出,作为减法值D618。
并行于上述处理,EXOR电路606计算寄存器607中存储的值D611和作为第一次消息(消息vi)的最高位的符号位D604之间的异或,借此在符号位之间作出乘法,并在寄存器607中再存储乘法结果D610。注意,在来自穿过奇偶校验矩阵的一行的所有分支的消息D601的符号位D604都被相乘的情况下,寄存器607被复位。
在其中来自穿过奇偶校验矩阵的一行的所有分支的消息D601的符号位D604被相乘的乘法结果D610(∏sign(vi),i=1至i=dc)被存储在寄存器607的情况下,选择器608选择寄存器607中存储的值,即,其中来自穿过奇偶校验矩阵的一行的所有分支的消息D601的符号位D604被相乘的值D611(∏sign(vi),i=1至i=dc),并把它输出到寄存器609以便存储它。寄存器609把存储的值D612提供到选择器608和EXOR电路614。
选择器608选择从寄存器609提供的值D612,并把它输出到寄存器609以再存储它,直到紧在其中来自穿过奇偶校验矩阵的一行的所有分支的消息D601的符号位D604被相乘的乘法结果D610(∏sign(vi),i=1至i=dc)被存储在寄存器607之前为止。这就是说,寄存器609把先前存储的值提供到选择器608和EXOR电路614,直到来自穿过奇偶校验矩阵的一行的所有分支的消息D601(消息vi)的符号位D604都被相乘为止。
另一方面,当从寄存器609提供了新的值D612(∏sign(vi),i=1至i=dc)到EXOR电路614时,即,当其中来自穿过一行的所有分支的消息D601的符号位D604被相乘的值D611(∏sign(vi),i=1至i=dc)被存储在寄存器607中时,如上所述,其中一行值的计算结果D607被积分的积分值(∑Φ(|vi|),i=1至i=dc)被存储在寄存器605中。
基于其中积分了一列值的计算结果D607的积分值(∑Φ(|vi|),i=1至i=dc)被存储在寄存器605中,如上所述,对于消息计算单元211,与消息D601(消息vi)相同的消息DD601,即,来自消息存储器104的第二次的消息vi从输入端口PD601被逐个输入,并且在消息DD601中,除了最高位之外的低位,即消息DD601的绝对值D613(|vi|)被提供到LUT 610,而且最高位,即消息DD601的符号位D614被提供到EXOR电路614。
EXOR电路614计算寄存器609提供的值D612和来自输入端口PD601的消息DD601的符号位之间的异或,借此,值D612除以消息DD601的符号位,并输出除法结果来作为除法值D620。这就是说,EXOR电路614用作为来自期望的分支的消息vi的消息DD601的符号位D614(i=dc的sign(vi))去除来自穿过奇偶校验矩阵的一行的所有分支的消息D601的符号位D604的乘法值(∏sign(vi),i=1至i=dc),并输出除法值(∏sign(vi),i=1至i=dc-1)来作为除法值D620。
随后,对于消息计算单元211,位串D621(消息u′j),其中从LUT 612输出的计算结果D618被作为低位,而且从EXOR电路614输出的除法值D620被作为最高位(符号位),被提供给选择器615的端子c。
选择器615在检查节点计算时选择端子c,而且所提供到端子c的位串D621(消息u′j)被从输出端口P622输出,作为消息D622。
如上所述,其中选择器601,611,和615选择端子c的消息计算单元211执行公式(10)的检查节点计算,并从输出端口P622输出作为结果所获得的消息(消息u′j)。
注意,对于图26中的解码设备,在解码最终阶段,执行公式(5)的计算以代替公式(9)的可变节点计算,并输出它的计算结果来作为最终解码结果。
此外,对于图26中的解码设备,控制单元212执行与图12的解码设备的控制单元174有关消息存储器104的消息的读/写控制相同的读/写控制,如图15中的流程图所描述的那样。
另外,有关图26的解码设备的消息存储器104的读/写定时也与有关图12的解码设备所述的图16的情形相同,并且其也需要图26的解码设备执行某些高速操作,但因为其中不需要提供延迟寄存器,所以可以减少设备尺寸。此外,对于图26的解码设备的消息计算单元211,共享用于执行可变节点计算的电路和用于执行检查节点计算的电路的一部分(LUT 600,计算器602,寄存器603,选择器604,寄存器605,LUT 610,和计算器612),并因此,相对于图12的解码设备,可以把尺寸减小共享程度那么多。
图26的解码设备的消息计算单元211还根据公式(9)和公式(10)执行可变节点计算和检查节点计算,公式(9)和公式(10)每个包括逆函数Φ-1(x)和非线性函数Φ(x),它们对于以输入到节点的输入数据x的绝对值|x|作为参数可以获得相同的计算结果。
因此,如图27所示,对于消息计算单元211只包括两个LUT即LUT 600和LUT 610是足够的,LUT 600用于使从输入端口P601提供的第一次消息经受逆函数Φ-1(x)和非线性函数Φ(x)的计算,LUT 610用于使从输入端口PD601提供的第二次的消息经受逆函数Φ-1(x)和非线性函数Φ(x)的计算,并因此,如图22所示,相比于需要提供三个LUT即LUT 300、LUT 310和LUT 314的消息计算单元201,可以减少尺寸,LUT 300用于使第一次的消息经受非线性函数Φ(x)的计算,LUT310用于使第二次的消息经受非线性函数Φ(x)的计算,和LUT 314用于受到逆函数Φ-1(x)的计算。
图31的方框图示例了其中应用了本发明的解码设备的第四实施例的结构例子。注意的是,在图中,相应于图21的解码设备的部分被附属了相同的参考数字,而且下面适当时将省略它们的描述。这就是说,图31的解码设备与图21的解码设备以相同的方式被配置,除了提供消息计算单元221来代替消息计算单元201,并且还提供了控制单元222来代替控制单元202。
对于图31的解码设备,配置消息计算单元221以便共享用于执行可变节点计算的电路和用于执行检查节点计算的电路的一部分,此外不提供延迟存储器。
对于图31的解码设备,存储在消息存储器104中的消息被逐个读出,并被提供到消息计算单元221。消息计算单元221利用消息存储器104获得的消息执行计算,并且通过计算获得的消息被存储在消息存储器104中。图31的解码设备通过重复执行上述的操作,执行全部串行重复解码。
也就是说,可以通过接收所发送的LDPC码来获得的接收数据(LDPC码)D100被提供给接收数据存储器105,该接收数据是对数似然比,表示了码0(或1)的标识,并且该接收数据存储器105存储该接收数据D100。
在可变节点计算时,接收数据存储器105根据从控制单元222提供的控制信号读出存储的接收数据,并把它作为接收数据D101送到消息计算单元211。
此外,在可变节点计算时,消息存储器104根据从控制单元222提供的控制信号,两次读出所存储的相同的消息,把第一次读出的消息作为消息D701提供到消息计算单元221,和把第二次读出的消息作为消息DD701提供到消息计算单元221。此外,控制单元222提供用于指令可变节点计算的控制信号D703到消息计算单元221。消息计算单元221根据从控制单元212提供的控制信号703,利用从消息存储器104提供的消息D701和DD701,以及从接收数据存储器105提供的接收数据D101,来执行可变节点计算,并把作为可变节点计算的结果所获得的消息提供到消息存储器104,作为消息D722。
随后,消息存储器104根据从控制单元222提供的控制信号来存储从消息计算单元221提供的消息D722。
另一方面,在检查节点计算时,消息存储器104根据控制单元222提供的控制信号两次读出存储的相同的消息,把第一次读出的消息提供到消息计算单元221作为消息D701,并把第二次读出的消息提供到消息计算单元221作为消息DD701。此外,控制单元222提供用于指令检查节点计算的控制信号D703到消息计算单元221。
消息计算单元221根据控制单元222的控制信号,利用从消息存储器104提供的消息D701和DD701来执行检查节点计算,并把检查节点计算获得的消息提供到消息存储器104来作为消息D722。
随后,消息存储器104根据从控制单元222提供的控制信号,存储从消息计算单元221提供的消息D722。
现在,将作出有关图31中的消息计算单元221所执行的计算的描述。
现在,如果我们假定,引入公式v′i=Φ(|vi|)×sign(vi)所表示的消息v′i作为从连接到可变节点的诸分支的第i个分支输出的消息(数据),公式(1)和公式(7)可以分别用公式(11)和公式(13)重写。
vi=u0i+Σj=1dv-1uj...(11)]]>v′i=Φ(|vi|)×sign(vi) ...(12)
v′i=Φ-1(Σi=1dc-1|v′i|)×Πi=1dc-1sign(v′i)...(13)]]>这里,分别地,公式(1)的可变节点计算对应于公式(11)和公式(12)的计算,公式(7)的检查节点计算对应于公式(13)的计算。
对于公式(11)和公式(12)的可变节点计算,输入到可变节点的输入数据(消息)uj包括符号(uj)在内被积分(∑uj),并且加上接收数据u0i,并接着以作为结果获得的加法值vi(=u0i+∑uj)的绝对值|vi|作为参数,执行非线性函数Φ(|vi|)的计算,借此能获得消息v′i。
而且,对于公式(13)的检查节点计算,输入到检查节点的输入数据(消息)v′i的绝对值|v′i|被积分(∑|v′i|),并用积分值∑|v′i|作为参数,当执行逆函数Φ-1(∑|v′i|)的计算时,从其分开地,获得输入数据v′i的符号位的乘法与(∏sign(v′i)),并接着将逆函数Φ-1(∑|v′i|)的计算结果和输入数据v′i的符号位的乘法与(∏sign(v′i))相乘,借此可以获得消息uj。
这里,如上所述,非线性函数Φ(x)和逆函数Φ-1(x)在x>0是相等的。因此,对于公式(11)和公式(12)的可变节点计算以及公式(13)的检查节点计算,用输出数据x的绝对值|x|执行函数Φ(x)(Φ-1(x))的计算。
对于图31的消息计算单元211,如上述的,执行公式(11)和公式(12)的可变节点计算,以及公式(13)的检查节点计算。
图32示例了图31中的消息计算单元211的结构示例。
以与图22中的消息计算单元201相同的方式,配置消息计算单元221,但不提供延迟存储器。此外,消息计算单元221配备有输入端口P101,P701,PD701,和P703,以及输出端口P722。
输入端口P101被提供(输入)以从接收数据存储器105读出的接收数据D101。输入端口P701被提供(输入)以从消息存储器104两次读出的相同的消息D701和DD701的第一次读出的D701,并且输入端口PD701被提供以第二次读出的消息(第二次消息)DD701。而且,输入端口P703被提供以来自控制单元222的控制信号D703(图31)。
消息计算单元221根据从输入端口P703输入的控制信号D703,利用从输入端口P701输入的第一次消息D701,从输入端口PD701输入的第二次消息DD701,和如果需要的话,从输入端口P101输入的消息(接收数据),来执行公式(11)和公式(12)的可变节点计算,或公式(13)的检查节点的计算,并从输出端口P722输出作为结果获得的消息D722。
现在,将结合参考图33作出有关图32中的消息计算单元221执行的可变节点计算和检查节点计算的描述。
图33的左侧示意地示例了用于执行公式(1)的可变节点计算的可变节点,以及与在图23的右侧的相同图示的用于执行公式(7)的检查节点计算的检查节点。
在图33的左侧,如图23的右侧所述的,输入到检查节点的输入数据经受非线性函数Φ(x)的计算,之后计算结果被输入到检查节点,并且在检查节点处对非线性函数Φ(x)的计算结果进行积分。此外,从检查节点输出的输出数据(在受到逆函数Φ-1(x))的计算之前,非线性函数Φ(x)的计算结果的积分值)经受逆Φ-1(x)的计算,借此获得消息uj。
如上所述,在图33的左侧,作为输入到检查节点的输入数据,用作从可变节点输出的输出数据的消息vi经受非线性函数Φ(x)的计算,并接着被输入到检查节点。
因此,替代图33左侧所示的输入到检查节点的输入数据x经受非线性函数Φ(x)的计算,即使从可变节点输出的输出数据x(可变节点消息vi)经受图33右侧所示的非线性函数Φ(x)的计算,也可以执行可变节点计算和检查节点计算。
也就是说,在图33的右侧,如公式(11)和(12)所示,对于可变节点,输入到可变节点的输入数据uj被积分,由此获得消息vi并作为输出数据输出。随后,从可变节点输出的消息vi经受非线性函数Φ(x)的计算,借此获得消息v′i。该消息v′i(通过使消息vi经受非线性函数Φ(x)的计算而获得的计算结果)被输入到检查节点,用所述的公式(13)积分,并作为输出数据输出。随后,其输出数据(通过使消息vi经受非线性函数Φ(x)的计算而获得的积分值)经受逆函数Φ-1(x)的计算,借此可以获得消息uj。
对于图32中的消息计算单元221,执行公式(11)和公式(12)的可变节点计算,以及公式(13)的检查节点计算,以获得消息v′i和uj,如在图33的右侧所示的那样。
这样,消息计算单元221执行公式(11)和公式(12)的可变节点计算,以及公式(13)的检查节点计算,以获得消息v′i和uj,如图33的右侧所示的那样,并因此,消息计算单元221被配备有LUT 713,用于输出非线性函数Φ(x)的计算结果,其能获得针对从可变节点输出的输出数据x与逆函数Φ-1(x)相同的计算结果,并且输出有关从检查节点输出的输出数据x的逆函数Φ-1(x)的计算结果。
随后,消息计算单元221根据所提供到输入端口P703的控制信号D703改变它的基本结构配置,并选择地执行公式(11)和公式(12)的可变节点计算和公式(13)的检查节点计算。
具体地,消息计算单元221包括选择器700,705,712,和715,并且所提供到输入端口P703的控制信号D703被提供到选择器700,705,712和715。
选择器700,705,712,和715包括端子v和端子c,并根据控制信号D703选择所提供给端子v和端子c之一的值,并把它输出到后续阶段。这就是说,在控制信号D703是用于指令可变节点计算的控制信号的情况下,选择器700,705,712,和715选择被提供给端子v的值以把它输出到后续阶段,而在控制信号D703是用于指令检查节点计算的控制信号的情况下,选择器700,705,712,和715选择提供给端子c的值以把它输出到后续阶段。
作为结果,对于图32中的消息计算单元221,当控制信号D703指令可变节点计算时,执行可变节点计算,和当控制信号D703指令检查节点计算时,检查节点计算被执行。
图34示例了图33右侧示例的可变节点计算时的图32中的消息控制单元221的基本配置示例。
注意,如上所述,在可变节点计算时,选择器700,705,712,和715选择端子v,但在图34中,通过选择器700,705,712,和715选择端子v的可变节点计算时图32中示例的结构中不起作用的部分(与可变节点计算无关的部分)在图中被省略。
消息计算单元221利用从每个输入端口P101,P701,PD701输入的消息来执行公式(11)和(12)的可变节点计算,并从输出端口P722输出作为结果所获得的消息D722。
这就是说,输入端口P101被提供以从接收数据存储器105读出的接收数据D101。此外,输入端口P701被提供以从消息存储器104逐个读出的第一次消息D701(消息uj),它从对应于奇偶校验矩阵的每行的检查节点所获得的。
提供到输入端口P101的接收数据D101被提供到计算器711。
而且,提供到输入端口P701的消息D701(消息uj)被提供到选择器700的端子v。
选择器700在上述的可变节点计算时选择端子v,并且所提供到端子v的消息D701(检查节点消息uj)被提供到计算器701,作为消息D705。
通过相加来自选择器700的消息D705(消息uj)和存储在寄存器702中的值D706,计算器701积分消息D705,并在寄存器702中再存储作为结果所获得的积分值。注意,在来自穿过奇偶校验矩阵的一列的所有分支的消息D705(消息uj)都被积分的情况下,寄存器702被复位。
在穿过奇偶校验矩阵的一列的消息D701(消息uj)被逐个读取,并且这样其中积分了一列值的消息D705(消息uj)的值被存储在寄存器702中的情况下,即,在其中积分了来自穿过奇偶校验矩阵的一列的所有分支的消息D705(消息uj)的积分值(∑uj,j=1至dv)被存储在寄存器702的情况下,选择器703选择存储在寄存器702中的值,也就是,其中积分了来自穿过奇偶校验矩阵的一列的所有分支的消息D705(消息uj)的积分值D706(∑uj,j=1至dv),并把它输出到寄存器704以便存储。
寄存器704把存储的值D706提供到选择器703和计算器710作为值D707。选择器703选择从寄存器704提供的值D707,并把它输出到寄存器704以再存储它,直到紧在其中积分了一列值的消息D705(消息uj)的值被存储在寄存器702之前为止。这就是说,寄存器704把先前积分的值提供给选择器703和计算器710,直到来自穿过奇偶校验矩阵的一列的所有分支的消息D705(消息uj)都被积分为止。
另一方面,基于从寄存器704开始的新的值D707(∑uj,j=1至dv)的输出,即,紧接在其中一列值的消息D705(消息uj)被积分的积分值(∑uj,j=1至dv)被存储在寄存器702之后,对于消息计算单元221,与消息D701(消息uj)相同的消息DD701,即,来自消息存储器104的第二次消息uj从输入端口PD701被逐个输入,并且消息DD701被提供到选择器705的端子v。
选择器705在如上所述的可变节点计算时选择端子v,而且所提供到端子v的消息DD701(检查节点消息uj)被提供到计算器710,作为消息D713。
计算器710从寄存器704提供的积分值D707(∑uj,j=1至dv)中减去从选择器705获得的消息D713(检查节点消息uj)。这就是说,计算器710从穿过奇偶校验矩阵的一列的所有分支的消息D705(消息uj)的积分值D707(∑uj,j=1至dv)中减去作为从期望的分支提供的消息uj(j=dv的uj)的消息D713,以获得差值D714(∑uj,j=1至dv-1),并把它提供到计算器711。
计算器711相加来自输入端口P101的接收数据D101和来自计算器710的减法值D714(∑uj,j=1至dv-1)以获得和输出消息D715(可变节点消息vi)。
这样,执行公式(11)的计算,并且从计算器711输出可变节点消息vi。
在计算器711输出的消息D715(消息vi)中,除了最高位外的低位,即消息D715的绝对值D716(|vi|)被提供到选择器712的端子v,而且最高位,即消息D715(消息vi)的符号位D717(sign(vi))被提供到选择器715的端子v。
选择器712在可变节点计算时选择端子v,并把计算器711输出的,所提供到端子v的消息D715(消息vi)的绝对值D716(|vi|)提供给LUT 713,作为绝对值D718。
LUT 713读出和输出用来自选择器712的绝对值D718(|vi|)作为参数的非线性函数(Φ(|vi|))的计算结果所获得的计算结果D719(Φ(|vi|))。
选择器715在可变节点计算时也选择端子v,并输出所提供到端子v的、计算器711输出的消息D715(消息vi)的符号位D717(sign(vi))来作为符号位D721(sign(vi))。
消息计算单元211把选择器715输出的符号位D721(sign(vi))附加到最高位来作为LUT 713输出的计算结果D719(Φ(|vi|))的符号位,这样,获得消息D722(消息v′i)以从输出端口P722输出它。
这样,执行了公式(12)的计算,并获得消息v′i。
如上所述,其中选择器700,705,712,和715选择端子v的消息计算单元221执行公式(11)和公式(12)的可变节点计算,并从输出端口P722输出作为结果所获得的消息v′i。
图35示例了在图33的右侧示例的检查节点计算时图32中的消息控制单元221的基本配置示例。
注意,如上所述,在检查节点计算时,选择器700,705,712,和715选择端子c,但在图35中,通过选择器700,705,712,和715选择端子c在检查节点计算时在图32图示的结构中的不起作用的部分(与检查节点计算无关的部分)在图中被省略。
在检查节点计算时,输入端口P701被顺序地提供从消息存储器104逐个读出的、从相应于奇偶校验矩阵的每列的可变节点的可变节点消息vi获得的消息v′i(公式(11)和公式(12)的可变节点计算所获得的消息),作为消息D701。
在提供到输入端口P701的消息D701(消息v′i)中,除了最高位外的低位,即消息D701的绝对值D703(|v′i|)被提供到选择器700的端子c,并且最高位,即消息D701的符号位D704被提供到EXOR电路706。
选择器700在检查节点计算时选择端子c,并把所提供到端子c的消息D701的绝对值D703(|v′i|)提供给计算器701,作为绝对值D705(|v′i|)。
计算器701通过相加绝对值D705(|v′i|)和寄存器702中存储的值D706而积分绝对值D705,并在寄存器702中再存储作为结果所获得的积分值。注意,在来自穿过奇偶校验矩阵的一行的所有分支的消息D701(从消息vi获得的)的绝对值D705(D703)(|v′i|)都被积分的情况下,寄存器702被复位。
在奇偶校验矩阵的穿过一行的消息D701被逐个读取,并且其中积分了一行值的计算结果D705的积分值被存储在寄存器702中的情况下,选择器703选择寄存器702中存储的值,即其中积分了来自穿过奇偶校验矩阵的一行的所有分支的消息D701(消息v′i)的积分值D706(∑|v′i|,i=1至i=dc),并把它输出到寄存器704以存储它。寄存器704把存储的积分值D706提供到选择器703和计算器710,作为值D707。
选择器703选择从寄存器704提供的值D707,并把它输出到寄存器704以再存储它,直到紧在其中一行值的绝对值D705被积分的积分值被存储在寄存器702之前为止。这就是说,寄存器704把先前积分的绝对值|v′i|的积分值提供到选择器703和计算器710,直到来自穿过奇偶校验矩阵的一行的所有分支的消息D701(消息v′i)的绝对值|v′i|都被积分为止。
另一方面,当从寄存器704开始输出新的值D707(∑|v′i|,i=1至i=dc),即,紧接在其中一行值的绝对值D705(|v′i|)被积分的积分值(∑|v′i|)被存储在寄存器704之后,对于消息计算单元221,与消息D701(消息v′i)相同的消息DD701,即,来自消息存储器104的第二次的消息v′i(与第一次消息v′i相同的消息)从输入端口PD701被逐个输入,并且在消息DD701(v′i)中,除了最高位之外的低位,即消息DD701的绝对值D711(|v′i|)被提供到选择器705的端子c,而且此外,最高位,即消息DD701(v′i)的符号位D712(sign(v′i))被提供到EXOR电路714。
选择器705在检查节点计算时选择端子c,并把所提供到端子c的消息DD701(v′i)的绝对值D711(|v′i|)提供给计算器710,作为绝对值D713(|v′i|)。
计算器710从寄存器704提供的值D707(∑|v′i|)中减去从选择器705提供的值D713(|v′i|),并输出减法结果来作为减法值D714。这就是说,计算器710将从来自穿过奇偶校验矩阵的一行的所有分支获得的消息D701(消息v′i)的绝对值|v′i|的积分值D707(∑|v′i|,i=1至i=dc-1)减去从期望的分支所获得的消息DD701(I=dc的消息v′i)的绝对值D713(|v′i|),并把减法值(∑|v′i|,i=1至i=dc-1)提供到选择器712的端子c作为值D714。
选择器712在检查节点计算时选择端子c,并把所提供到端子c的值D714(∑|v′i|,i=1至i=dc-1)提供给LUT 713,作为值D718。
LUT 713读出和输出用来自选择器712的值D718(∑|v′i|)作为参数的逆函数Φ-1(∑|v′i|)的计算结果所获得的计算结果D719(Φ-(∑|v′i|))。
与上述处理相并行,EXOR电路706计算寄存器707中存储的值D709和作为第一次消息D701(消息v′i)的最高位的符号位D704(sign(v′i))之间的异或,借此在符号位D704之间作出乘法,并在寄存器707中再存储乘法结果D708。注意的是,在来自穿过奇偶校验矩阵的一行的所有分支的消息D701的符号位D704被相乘的情况下,寄存器707被复位。
在其中来自穿过奇偶校验矩阵的一行的所有分支的消息D701的符号位D704被相乘的乘法结果D708(∏sign(v′i),i=1至i=dc)被存储在寄存器707的情况下,选择器708选择寄存器707中的值,即,其中来自穿过奇偶校验矩阵的一行的所有分支中的消息D701的符号位D704被相乘的值D709(∏sign(v′i),i=1至i=dc),并把它输出到寄存器709以便存储它。寄存器709把存储的值D710送到选择器708和EXOR电路714。
选择器708选择从寄存器709提供的值D308,并把它输出到寄存器709以再存储它,直到紧在其中来自穿过奇偶校验矩阵的一行的所有分支的消息D701的符号位D704被相乘的乘法结果D708(∏sign(v′i),i=1至i=dc)被再存储在寄存器707中。这就是说,寄存器709把先前存储的值提供给选择器708和EXOR电路714,直到来自穿过奇偶校验矩阵的一行的所有分支的消息D701(消息v′i)的符号位D704都被相乘为止。
另一方面,当新的值D710(∏sign(v′i),i=1至i=dc)被从寄存器709提供到EXOR电路714时,即,当其中来自穿过一行的所有分支的消息D701的符号位D704被相乘的值D709(∏sign(v′i),i=1至i=dc)被存储在寄存器707时,如上所述,其中一行值的绝对值D705(|v′i|)被积分的积分值(∑|v′i|,i=1至i=dc)被存储在寄存器704中。
基于其中一列值的绝对值D705被积分的积分值(∑|v′i|,i=1至i=dc)被存储在寄存器704中时,如上所述,对于消息计算单元221,与消息D701(消息v′i)相同的消息DD701,即,来自消息存储器104的第二次消息v′i从输入端口PD701被逐个输入,并且在消息DD701中,除了最高位外的低位,即,消息DD701的绝对值(|v′i|)被提供到选择器705的端子c,而且最高位,即,消息DD701的符号位D712(sign(v′i))被提供到EXOR电路714。
EXOR电路714计算从寄存器709提供的值D710和来自输入端口PD701的消息DD701的符号位D712之间的异或,借此,值D710除以消息DD701的符号位D712,并且除法结果作为除法值D720被提供到选择器715的端子c。这就是说,EXOR电路714用作为期望分支中的消息v′i的消息DD701的符号位D712(i=dc的sign(v′i))去除来自穿过奇偶校验矩阵的一行的所有分支的消息D701的符号位D704的乘法值(∏sign(v′i),i=1至i=dc),并把除法值(∏sign(v′i),i=1至i=dc-1)提供给选择器715的端子c来作为除法值D720。
选择器715在检查节点计算时选择端子c,并输出所提供给端子c的除法值D720(∏sign(v′i),i=1至i=dc-1),作为符号位D721。
随后,消息计算单元221把上述从选择器715输出的D721(∏sign(v′i))作为符号位附加(相乘)到LUT 713输出的计算结果D719(Φ-1(∑|v′i|)),并从而获得用公式(13)表示的消息(检查节点消息)uj,以从输出端口P722输出它,作为消息D722。
如上所述,其中选择器700,705,712,和715选择端子c的消息计算单元221执行公式(13)的检查节点计算,并从输出端口P722输出作为结果所获得的消息(检查节点消息)uj。
注意的是,对于图31中的解码设备,在解码最终阶段,执行公式(5)的计算而代替公式(11)和(12)的可变节点计算,并且计算结果被输出作为最终解码结果。
此外,对于图31中的解码设备,控制单元222执行的读/写控制与图12的解码设备的控制单元174的对消息存储器104的消息的读/写控制相同,如图15的流程图描述那样。
此外,图31的解码设备的对消息存储器104的消息的读/写定时也与对于图12的解码设备所述的图16中的情况相同,而且它也需要图31的解码设备执行某些高速操作,但不需要提供延迟存储器,因而可以减少设备尺寸比例。另外,对于图31中的解码设备的消息计算单元221,可以共享用于执行可变节点计算的电路和用于执行检查节点计算的电路的的一部分(计算器701,寄存器702,选择器703,寄存器704,计算器710,和LUT 713),并因此,相比于图12的解码设备,可以把尺寸减小共享程度那么多。
图31的解码设备的消息计算单元221还利用公式(12)和公式(13)执行可变节点计算和检查节点计算,公式(12)和公式(13)每个包括逆函数Φ-1(x)和非线性函数Φ(x),它们对以从节点输出的输出数据x的绝对值|x|作为参数能获得相同的计算结果。
因而,消息计算单元221只需要一个LUT即LUT 713,用于使输出数据x的绝对值|x|经受逆函数Φ-1(x)和非线性函数Φ(x)的计算,如图32所示,而且相比于图22所示的需要三个LUT即LUT 300,310,和314的消息计算单元201,以及图27所示的需要两个LUT即LUT 600和610的消息计算单元211来说,消息计算单元221可以减少它的尺寸。
图36的方框图示例了应用本发明的解码设备的第五实施例的结构例子。注意,在该图中,对应于图21中的解码设备的部分附加了相同的参考数字,并在下面适当的省略了它们的描述。这就是说,图36与图21的解码设备以相同的方式被配置,除了提供消息计算单元231来代替消息计算单元201,还有就是提供了控制单元232代替控制单元202。
配置图36中的解码设备,其中消息计算单元231共享执行可变节点计算的电路和执行检查节点计算的电路的一部分,如同图21的解码设备的消息计算单元201一样。另外,对于图36中的解码设备,配置用于执行可变节点计算和检查节点计算的消息计算单元231为不提供延迟存储器。
对于图36中的解码设备,消息计算单元231顺序地从消息存储器104逐个读出存储的消息,并利用输入消息计算相应于期望的分支的输出消息。随后,通过计算获得的输出消息被存储在消息存储器104中。图36的解码设备通过重复的执行上述处理,执行全部串行重复解码。
也就是说,可以通过接收所发送的LDPC码来获得的接收数据(LDPC码)D100被提供给接收数据存储器105,该接收数据是对数似然比,表示了码0(或1)的标识,并且该接收数据存储器105存储该接收数据D100。
在可变节点计算时,接收数据存储器105根据从控制单元232提供的控制信号读出存储的接收数据,并把它送到计算单元231作为接收数据D101。
此外,在可变节点计算时,消息存储器104根据从控制单元232提供的控制信号两次读出存储的相同的消息,把第一次读出的消息送到消息计算单元231作为消息D801,和把第二次读出的消息送到消息计算单元231,也作为消息D801。消息计算单元231根据从控制单元232提供的控制信号D203,利用从消息存储器104两次提供的消息D801,以及从接收数据存储器105提供的接收数据D101,来执行公式(1)的可变节点计算,并把作为可变节点计算的结果获得的消息(可变节点消息)vi提供到消息存储器104来作为消息D802。
随后,消息存储器104根据从控制单元232提供的控制信号来存储从消息计算单元231提供的消息D802(可变节点消息vi)。
另一方面,在检查节点计算时,消息存储器104根据控制单元232提供的控制信号两次读出存储的相同的消息(可变节点消息vi),把第一次读出的消息提供到消息计算单元231作为消息D801,并把第二次读出的消息提供到消息计算单元231也作为消息D801。
消息计算单元231根据控制单元232的控制信号D203,利用消息存储器104两次提供的消息D801来执行公式(7)的检查节点计算,并把检查节点计算获得的消息(检查节点消息)uj提供到消息存储器104来作为消息D802。
随后,消息存储器104根据从控制单元232提供的控制信号,来存储从消息计算单元231提供的消息D802(检查节点消息uj)。
消息D802,即消息存储器104存储的来自消息计算单元231的检查节点消息uj,在下一个可变节点计算时被作为消息D801读出两次,并被提供到消息计算单元231。
图37图示了图36的消息计算单元231的结构例子。
注意,在该图中,相应于图22中的消息计算单元201中的那些部分被附属相同的参考数字,并在下面适当地省略它们的描述。
以与图22的消息计算单元201相同的方式配置消息计算单元231,但不提供延迟存储器。
此外,除了输入端口P101和P203之外,图22中的消息计算单元201包括从外部提供(输入)第一次消息的输入端口P201,和提供第二次消息的输入端口PD201,然而,消息计算单元231配备了一个输入端口P801而非两个输入端口P201和PD201,并第一次消息和第二次消息都被布置为从输入端口P801输入。
输入端口P101被提供以从接收数据存储器105读出的接收数据D101。此外,输入端口P801被提供以从消息存储器104两次读出的相同的消息D801(第一次消息和第二次消息)。
消息计算单元231根据从输入端口P203输入的控制信号D203,利用从输入端口P801输入的第一次消息D801和第二次消息D801,以及另外如果需要的话,从输入端口P101输入的消息(接收数据),执行公式(1)的可变节点计算或公式(7)的检查节点计算,并从输出端口P802输出作为结果获得的消息D802。
这就是说,提供到输入端口P101的接收数据D101被提供到计算器313,并且所提供到输入端口P801的第一次消息D801被提供到选择器301的端子v。
另外,在提供给输入端口P801的第一次消息D801中,除了最高位外的低位,即消息D801的绝对值被提供到LUT 300作为值D303,而且第一次消息D801的最高位,即消息D801的符号位被提供到EXOR电路306来作为值D304,并还被提供到EXOR电路315作为值D313。
所提供到输入端口PD801的第二次消息D801也被提供到消息计算单元231的各个部分,如同第一次消息D801一样。这就是说,所提供到输入端口P801的第二次消息D801被提供到选择器301的端子v。此外,所提供到输入端口P801的第二次消息D801的绝对值被提供到LUT300作为值D303,并且第二次消息D801的符号位被提供到EXOR电路306作为值D304,而且还被提供到EXOR电路315作为值D313。
此外,所提供给输入端口P203的控制信号D203被提供到选择器301和316。
选择器301和316包括端子v和端子c,并根据控制信号D203选择所提供给端子v和端子c之一的一个值,并把它输出到后续阶段。这就是说,在控制信号D203是用于指令可变节点计算的控制信号的情况下,选择器301和316选择被提供给端子v的值以把它输出到后续阶段,而在控制信号D203是用于指令检查节点计算的控制信号的情况下,选择器301和316选择提供给端子c的值以把它输出到后续阶段。
作为结果,对于图37中的消息计算单元231,如同图22中的消息计算单元201一样,当控制信号D203指令可变节点计算时,执行可变节点计算,和当控制信号D203指令检查节点计算时,检查节点计算被执行。
图38示例了在可变节点计算时的图37中消息计算单元231的基本配置示例。
注意的是,如上所述,在可变节点计算时,选择器301和316选择端子v,但在图38中,通过选择器301和316选择端子v在可变节点计算时在图37中示例的结构中不起作用的部分(与可变节点计算无关的部分)在图中被省略。
消息计算单元231利用从每个输入端口P101,P801输入的消息来执行公式(1)的可变节点计算,并从输出端口P802输出作为结果所获得的消息D802。
这就是说,输入端口P101被提供以从接收数据存储器105读出的接收数据D101。此外,输入端口P801被提供以从对应于奇偶校验矩阵的每行的检查节点的第一次消息D801(检查节点消息uj),它是从消息存储器104被逐个读出的。
提供到输入端口P101的接收数据D101被提供到计算器313。
此外,提供给输入端口P801的消息D801(消息uj)被提供到选择器301的端子v,并从在可变节点计算时选择端子v的选择器301被提供到计算器302(和计算器312)作为消息D306。
通过相加来自选择器301的消息D306(消息uj)和存储在寄存器303中的值D307,计算器302积分消息D306,并在寄存器303中再存储作为结果所获得的积分值。注意,在来自穿过奇偶校验矩阵的一列的所有分支的消息D306都被积分的情况下,寄存器303被复位。
在穿过奇偶校验矩阵的一列的消息D801被逐个读取,并且其中一列值的消息D306被积分的积分值被存储在寄存器303中的情况下,即,在其中来自穿过奇偶校验矩阵的一列的所有分支的消息D306(消息uj)被积分的积分值(∑uj,j=1至dv)被存储在寄存器303的情况下,选择器304选择存储在寄存器303中的值,也就是,其中来自穿过奇偶校验矩阵的一列的所有分支的消息D306(消息uj)被积分的积分值D307(∑uj,j=1至dv),,并把它输出到寄存器305以便存储。
寄存器305把存储的值D307提供到选择器304和计算器312作为值D308。选择器304选择从寄存器305提供的值D308,并把它输出到寄存器305以再存储它,直到紧在其中积分了一列值的消息D306的值被存储在寄存器303之前为止。这就是说,寄存器305把先前积分的值提供给选择器304和计算器312,直到来自穿过奇偶校验矩阵的一列的所有分支的消息D306(消息uj)都被积分为止。
另一方面,基于从寄存器305开始输出新的值D308(∑uj,j=1至dv),即,紧接在其中一列值的消息D801被积分的积分值(∑uj,j=1至dv)被存储在寄存器303之后,对于消息计算单元231,与消息D801(消息uj)相同的消息D801,即,来自消息存储器104的第二次消息uj从输入端口PD801被逐个输入,并且消息D801被提供到选择器301的端子v。
选择器301选择端子v,如上所述,并把所提供到端子v的消息(第二次消息)D801提供到计算器312作为消息D315(并还提供到计算器302作为消息D306)。
计算器312从寄存器305提供的积分值D308中减去经由选择器301从输入端口P801提供的消息D315。这就是说,计算器312从穿过奇偶校验矩阵的一列的所有分支的消息D801(消息uj)的积分值D308(∑uj,j=1至dv)中减去作为从期望的分支获得的消息uj(j=dv的uj)的消息D315,以获得减法值(∑uj,j=1至dv-1),并把它提供到计算器313。
计算器313相加来自输入端口P101的接收数据D101和来自计算器312的减法值(∑uj,j=1至dv-1),并把作为结果获得的加法值D317提供到选择器316的端子v。
选择器316在可变节点计算时选择端子v,并且从计算器313提供到端子v的加法值D317被从输出端口P802输出作为消息D802(消息vi)。
如上所述,其中选择器301和304选择端子v的消息计算单元231执行公式(1)的可变节点计算,并从输出端口P802输出作为结果而获得的消息(可变节点消息)vi。
图39示例了在检查节点计算时图37中的消息计算单元231的基本配置示例。
注意的是,如上所述,在检查节点计算时,选择器301和316选择端子c,但在图39中,通过选择器301和316选择端子c在可变节点计算时在图37中示例的结构中不起作用的部分(与检查节点计算无关的部分)在图中被省略。
在检查节点计算时,输入端口P801被顺序地提供以来自对应于奇偶校验矩阵的每列的可变节点的可变节点消息vi,作为消息D801,它是从消息存储器104被逐个读出的。
在提供给输入端口P801的消息D801(消息uj)中,除了最高位外的低位即消息D801的绝对值D303(|vi|)被提供到LUT 300,并且最高位,即,消息D801的符号位被提供到EXOR电路306来作为符号位D304(并还被提供到EXOR电路315作为值D313)。
LUT 300读出用绝对值D303(|vi|)作为参数的非线性函数Φ(|vi|)的计算结果所获得的计算结果D305(Φ(|vi|)),并把它送到选择器301的端子c。
选择器301在检查节点计算时选择端子c,而且所提供到端子c的来自LUT 300的计算结果D305(Φ(|vi|))被提供给计算器302作为计算结果D306(Φ(|vi|))(并还被提供到计算器312作为计算结果D315(Φ(|vi|)))。
计算器302通过相加计算结果D306(Φ(|vi|))和存储在寄存器303中的值D307而积分计算结果D306,并在寄存器303中再存储作为结果所获得的积分值。注意,在有关穿过奇偶校验矩阵的一行的所有分支的消息D801的绝对值D303(|vi|)的计算结果D306(Φ(|vi|))都被积分的情况下,寄存器303被复位。
在奇偶校验矩阵的穿过一行的消息D801被逐个读取,并且其中一行值的计算结果D306被积分的积分值被存储在寄存器303中的情况下,选择器304选择存储器303中存储的值,即,其中从来自穿过奇偶校验矩阵的一行的所有分支的消息D801(消息vi)获得的Φ(|vi|)被积分的积分值D307(∑Φ(|vi|),i=1至i=dc),并把它输出到寄存器305以便存储它。寄存器305提供存储的积分值D307到选择器304和计算器312作为值D308。
选择器304选择从寄存器305提供的值D308,并把它输出到寄存器305以再存储它,直到紧在其中一行值的计算结果D306被积分的积分值被存储在寄存器303中之前为止。这就是说,寄存器305把先前积分的Φ(|vi|)的积分值提供到选择器304和计算器312,直到从来自穿过奇偶校验矩阵的一行的所有分支的消息D801(消息vi)所获得的Φ(|vi|)都被积分为止。
另一方面,基于从寄存器305开始的新的值D308(∑Φ(|vi|),i=1至i=dc)的输出,即,紧接在其中一行值的计算结果D306被积分的积分值(∑Φ(|vi|),i=1至i=dc)被存储在寄存器305之后,对于消息计算单元231,来自消息存储器104的第二次的消息D801(vi)从输入端口P801被逐个输入,并且消息D801的绝对值D303(|vi|)被提供到LUT 300,而且消息D801的符号位被提供到EXOR电路315作为符号位D313(并还被提供到EXOR电路315作为符号位D304)。
LUT 300读出作为用消息D801的绝对值D303(|vi|)作为参数的非线性函数Φ(|vi|)的计算结果所获得的计算结果D305(Φ(|vi|)),并把它送到选择器301的端子c。
选择器301在检查节点计算时选择端子c,并且所提供到端子c的来自LUT 300的计算结果D305(Φ(|vi|))被提供到计算器312作为计算结果D315(Φ(|vi|))(并还被提供到计算器302作为计算结果D306)。
计算器312从寄存器305提供的值D308中减去从选择器301提供的值D315,并把减法结果提供到LUT 314作为减法值D316。这就是说,计算器312将从来自穿过奇偶校验矩阵的一行的所有分支的消息D801(消息vi)所获得的Φ(|vi|)的积分值D308(∑Φ(|vi|),i=1至i=dc)减去从期望的分支所提供的消息D801(消息vi)所获得的Φ(|vi|)的值D315,并把减法值(∑Φ(|vi|),i=1至i=dc-1)提供到LUT 314作为减法值D316。
LUT 314输出作为以从计算器312输出的减法值D316(∑Φ(|vi|),i=1至i=dc-1)作为参数的逆函数Φ-1(∑Φ(|vi|))的计算结果的计算结果D318(Φ-1(∑Φ(|vi|)))。
并行于上述处理,EXOR电路306计算寄存器307中存储的值D310和符号位D304之间的异或,借此在符号位之间作出乘法,并在寄存器307中再存储乘法结果D309。注意,在来自穿过奇偶校验矩阵的一行的所有分支的消息D801的符号位D304被相乘的情况下,寄存器307被复位。
在其中来自穿过奇偶校验矩阵的一行的所有分支的消息D801的符号位D304被相乘的乘法结果D309(∏sign(vi),i=1至i=dc)被存储在寄存器307的情况下,选择器308选择寄存器307中存储的值,即,其中来自穿过奇偶校验矩阵的一行的所有分支的消息D801的符号位D304被相乘的值D310(∏sign(vi),i=1至i=dc),并把它输出到寄存器309以便存储它。寄存器309把存储的值D311送到选择器308和EXOR电路315。
选择器308选择从寄存器309提供的值D311,并把它输出到寄存器309以再存储它,直到紧在其中来自穿过奇偶校验矩阵的一行的所有分支的消息D801的符号位D304被相乘的乘法结果D309(∏sign(vi),i=1至i=dc)被存储在寄存器307之前。这就是说,寄存器309把先前存储的值提供到选择器308和EXOR电路315,直到来自穿过奇偶校验矩阵的一行的所有分支的消息D801的符号位D304都被相乘为止。
另一方面,当从寄存器309提供新的值D311(∏sign(vi),i=1至i=dc)到EXOR电路315时,即,当其中来自穿过一行的所有分支的消息D801的符号位D304被相乘的值D310(∏sign(vi),i=1至i=dc)被存储在寄存器307中时,如上所述,其中一行值的计算结果D306(Φ(|vi|))被积分的积分值(∑Φ(|vi|),i=1至i=dc)被存储在寄存器305中。
当其中一列值的计算结果D303(Φ(|vi|))被积分的积分值(∑Φ(|vi|),i=1至i=dc)被存储在寄存器305中时,如上所述,对于消息计算单元231,来自消息存储器104的第二次的消息D801(vi)从输入端口P801被逐个输入,并且第二次消息D801的绝对值(|vi|)被提供到LUT 300,而且消息D801的符号位被提供到EXOR电路315作为符号位D313(并还被提供到EXOR电路306作为符号位D304)。
EXOR电路315计算寄存器309提供的值D311和来自输入端口P801的第二次消息D801的符号位D313之间的异或,借此,值D311除以符号位D313,并输出除法结果来作为除法值D319。这就是说,EXOR电路315用来自期望的分支的消息vi的符号位D313(i=dc的sign(vi))去除来自穿过奇偶校验矩阵的一行的所有分支的消息D801的符号位D304的乘法值(∏sign(vi),i=1至i=dc),并输出除法值(∏sign(vi),i=1至i=dc-1)来作为除法值D319。
随后,对于消息计算单元231,位串D320(消息uj),其中从LUT 314输出的计算结果D318被当作低位,而且从EXOR电路315输出的除法值D319被当作最高位(符号位),被提供给选择器316的端子c。
选择器316在检查节点计算时选择端子c,而且所提供到端子c的位串D320(消息uj)被从输出端口P802输出作为消息D802(消息vi)。
如上所述,其中选择器301和316选择端子c的消息计算单元231执行公式(7)的检查节点计算,并从输出端口P802输出作为结果所获得的消息uj(检查节点消息)。
注意的是,尽管在图中没有显示,但是,对于图36中的解码设备,在解码最终阶段,执行公式(5)的计算而代替公式(1)的可变节点计算,并输出它的计算结果来作为最终解码结果。
此外,对于图36中的解码设备,控制单元232执行的读/写控制与图12的解码设备的控制单元174的对对消息存储器104的消息的读/写控制相同,如图15的流程图描述那样。
然而,有关图36的解码设备的消息存储器104的读/写定时则不同于有关图12的解码设备所述的图16的情形,这是由于消息计算单元231只包括作为输入端口的单一的输入端口P801,从消息存储器104输入消息到该端口。
图40是定时图,图示了有关图36的解码设备的消息存储器104的消息的读/写定时。
图40的定时图表示有关构成消息存储器104的RAM#A和RAM#B的读/写定时,如同图16中的上述的定时图一样。
在图40中,首先,执行从RAM#A的输入消息的第一次读出(R1(node#1)),该输入消息对于获得来自特定节点node#1的输出消息是必需的。跟随该读出,执行从RAM#A的输入消息的第二次读出(R2(node#1)),该输入消息对于获得来自节点node#1的输出消息是必需的。此时,在图16中,从RAM#B的输入消息的第一次读出(R1(node#2)),该输入消息对于获得来自下一个节点node#2的输出消息是必需的,但图36的解码设备的消息计算单元231只包括单一的输入端口P801(作为从消息存储器104输入消息的输入端口),并因而在图40中,尚不执行为获得来自下一个节点#2的输出消息所需的输入消息的RAM#B的第一次读出(R1(node#2)。
基于为获得来自节点node#1的输出消息所需的输入消息的从RAM#A的第二次的读出被完成,在消息计算单元231处获得来自节点node#1的输出消息,来自节点node#1的输出消息被写入RAM#A(W(node#1)),并在同时,执行为获得来自节点node#2的输出消息所需的输入消息的从RAM#B的第一次读出(R1(node#2))。
基于为获得来自节点node#2的输出消息所需的输入消息的从RAM#B的第一次的读出被完成,随后执行为获得来自节点node#2的输出消息所需的输入消息的从RAM#B的第二次读出(R2(node#2)),并在消息计算单元231处获得来自节点node#2的输出消息,而且随后如果请求来自节点node#2的输出消息,来自节点node#2的输出消息被写入RAM#B(W(node#2)),并在同时上,执行为获得来自从下一节点node#3的输出消息所需的输入消息的从RAM#A的第一次读出(R1(node#3))。
此后,以相同的方式,连续地执行相应于构成消息存储器104的RAM#A和RAM#B的每个的消息的读/写。
从图16和图40之间的比较可知,对于图36中的解码设备,其为获得输出消息比图16的情形花费更多的时间,但可以在不提供延迟存储器的情况下执行解码,并因此,可以减少解码设备的尺寸。
注意的是,诸如消息计算单元231(图31)的其中将来自消息存储器104的输入消息输入到其的一个输入端口的结构也可以被用于图12中的消息计算单元171的可变节点计算器172(图13)和检查节点计算器173(图14),图22的消息计算单元201,图27的消息计算单元211,和图32的消息计算单元221。
此外,如由RAM#A和RAM#B组成的两个存储条构成那样,消息存储器104可以由使用三个类型的RAM的三个或更多的存储条构成。
可以由控制单元174(图12)执行的有关图15图示的消息存储器104的读/写处理等可以通过使用专用的硬件或通过使用软件来执行。在通过软件执行系列处理的情形下,构成软件的程序被安装在诸如微计算机等等的计算机中。
图41图示了计算机的一个实施例的结构,其中安装了用于执行上述系列处理的程序。
程序可以被记录在非易失性存储器905或ROM903中,它们是内置在计算机中的记录媒体。
可替换的,程序可以被暂时地或永久地存储(记录)在可移动的记录媒体中,比如软盘,CD-ROM(只读存储器光盘),MO(磁光)盘,DVD(数字通用盘),磁盘,半导体存储器,等等。
注意,可以从上述的可移动记录媒体911或者通过我拿过了把程序安装在计算机中。
CPU(中央处理单元)902被内置在计算机中。CPU 902经总线901与输入/输出接口906相连接,并且CPU 902把安装在ROM(只读存储器)903或非易失性存储器905中的程序装入RAM(随机访问存储器)904中以便执行该程序。因此,CPU 902经由输入/输出接口906执行有关消息存储器104的读/写控制。
此外应该注意的是,在本说明书中用于描述引起计算机各种类型处理的程序的处理步骤不限于如流程图所述的以时间顺序所完成的,可以包括并行或独立执行的处理(例如并行处理,或使用对象的处理)。
而且,该程序可以通过一个计算机处理,或通过多个计算机处理。
注意的是,本发明的实施例不限于上述的实施例,在不脱离本发明的精神和范围的情况下可以作出各种类型的修改。
本领域技术人员应该明白的是,取决于设计需求和其他的因素,在所附权利要求或它们的等同的范围内,可以出现各种修改,组合,次组合和替换。
本申请包括了于2005年12月20日提交到日本特许厅的第2005-365909号日本专利申请的主题,该申请公开于此以资参考。
权利要求
1.一种用于解码LDPC(低密度奇偶校验)码的解码设备,包括消息计算装置,用于使用所提供的消息执行可变节点计算以解码所述LDPC码,或执行检查节点计算,和输出作为所述计算的结果而获得的消息;存储装置,用于存储所述消息;以及控制装置,用于执行写控制,用于把所述消息计算装置输出的消息写入所述存储装置中,以及读出控制,用于从所述存储装置两次读出用于所述消息计算装置的计算的相同的消息,并把它们提供到所述消息计算装置。
2.根据权利要求1的解码设备,所述消息计算装置包括从其提供从所述存储装置两次读出的相同的消息中第一次读出的消息的端口,以及从其提供第二次读出的消息的端口。
3.根据权利要求1的解码设备,所述消息计算装置包括可变节点计算装置,用于执行可变节点计算,以及检查节点计算装置,用于执行检查节点计算。
4.根据权利要求1的解码设备,其中,所述消息计算装置选择地执行可变节点计算和检查节点计算。
5.根据权利要求4的解码设备,其中,对于所述消息计算装置,共享用于执行可变节点计算的电路和用于执行检查节点计算的电路的一部分。
6.根据权利要求5的解码设备,所述消息计算装置包括一个LUT(查找表),用于关于输入到检查节点的输入数据x输出非线性函数Φ(x)=-1n(tanh(x/2))的计算结果,和另一个LUT,用于关于从检查节点输出的输出数据x输出所述非线性函数的逆函数Φ-1(x)=2tanh-1(e-x)的计算结果,其中,在检查节点计算时,所述消息计算装置使得数据经过所述一个LUT和另一个LUT,以及其中,在可变节点计算时,所述消息计算装置使得数据绕过所述一个LUT和另一个LUT。
7.根据权利要求5的解码设备,其中,所述消息计算装置包括下述LUT(查找表),用于关于输入到检查节点的输入数据x输出从其得到与逆函数Φ-1(x)=2tanh-1(e-x)相同计算结果的非线性函数Φ(x)=-1n(tanh(x/2))的计算结果,并且还关于输入到可变节点的输入数据x输出所述逆函数Φ-1(x)的计算结果。
8.根据权利要求5的解码设备,其中,所述消息计算装置包括下述LUT(查找表),用于关于从可变节点输出的输出数据x输出从其得到与逆函数Φ-1(x)=2tanh-1(e-x)相同计算结果的非线性函数Φ(x)=-1n(tanh(x/2))的计算结果,并还关于从检查节点输出的输出数据x输出所述逆函数Φ-1(x)的计算结果。
9.根据权利要求1的解码设备,其中,所述存储装置包括两个或更多个存储条。
10.一种控制方法,用于控制用于解码LDPC(低密度奇偶校验)码的解码设备,所述解码设备包括消息计算装置,用于使用所提供的消息执行可变节点计算以解码所述LDPC码,或执行检查节点计算,和输出作为所述计算的结果而获得的消息;以及存储装置,用于存储所述消息;所述方法包括步骤写控制,用于把所述消息计算装置输出的消息写入所述存储装置中,以及读出控制,用于从所述存储装置两次读出用于所述消息计算装置的计算的相同的消息,并把它们提供到所述消息计算装置。
11.一种程序,使得计算机控制解码LDPC(低密度奇偶校验)码的解码设备,其中所述解码设备包括消息计算装置,用于使用所提供的消息执行可变节点计算以解码所述LDPC码,或执行检查节点计算,和输出作为所述计算的结果而获得的消息;以及存储装置,用于存储所述消息;所述方法包括步骤写控制,用于把所述消息计算装置输出的消息写入所述存储装置中,以及读出控制,用于从所述存储装置两次读出用于所述消息计算装置的计算的相同的消息,并把它们提供到所述消息计算装置。
12.一种用于解码LDPC(低密度奇偶校验)码的解码设备,包括消息计算单元,用于使用所提供的消息执行可变节点计算以解码所述LDPC码,或执行检查节点计算,和输出作为所述计算的结果而获得的消息;存储单元,用于存储所述消息;以及控制单元,用于执行写控制,用于把所述消息计算单元输出的消息写入所述存储单元中,以及读出控制,用于从所述存储单元两次读出用于所述消息计算单元的计算的相同的消息,并把它们提供到所述消息计算单元。
13.一种控制方法,用于控制用于解码LDPC(低密度奇偶校验)码的解码设备,所述解码设备包括消息计算单元,用于使用所提供的消息执行可变节点计算以解码所述LDPC码,或执行检查节点计算,和输出作为所述计算的结果而获得的消息;存储单元,用于存储所述消息;以及所述方法包括步骤写控制,用于把所述消息计算单元输出的消息写入所述存储单元中,以及读出控制,用于从所述存储单元两次读出用于所述消息计算单元的计算的相同的消息,并把它们提供到所述消息计算单元。
14.一种程序,使得计算机控制用于解码LDPC(低密度奇偶校验)码的解码设备,其中所述解码设备包括消息计算单元,用于使用所提供的消息执行可变节点计算以解码所述LDPC码,或执行检查节点计算,和输出作为所述计算的结果而获得的消息;存储单元,用于存储所述消息;以及所述方法包括步骤写控制,用于把所述消息计算单元输出的消息写入所述存储单元中,以及读出控制,用于从所述存储单元两次读出用于所述消息计算单元的计算的相同的消息,并把它们提供到所述消息计算单元。
全文摘要
一种用于解码LDPC(低密度奇偶校验)码的解码设备,包括消息计算单元,用于使用所提供的消息执行可变节点计算以解码所述LDPC码,或执行检查节点计算,和输出作为所述计算的结果而获得的消息;存储单元,用于存储所述消息;以及控制单元,用于执行写控制,用于把所述消息计算单元输出的消息写入所述存储单元中,以及读出控制,用于从所述存储单元两次读出用于所述消息计算单元的计算的相同的消息,并把它们提供到所述消息计算单元。
文档编号H03M13/11GK101047390SQ20061006445
公开日2007年10月3日 申请日期2006年12月20日 优先权日2005年12月20日
发明者横川峰志 申请人:索尼株式会社
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1