CN101373978A - 一种Turbo码译码方法以及装置 - Google Patents

一种Turbo码译码方法以及装置 Download PDF

Info

Publication number
CN101373978A
CN101373978A CNA2007101420537A CN200710142053A CN101373978A CN 101373978 A CN101373978 A CN 101373978A CN A2007101420537 A CNA2007101420537 A CN A2007101420537A CN 200710142053 A CN200710142053 A CN 200710142053A CN 101373978 A CN101373978 A CN 101373978A
Authority
CN
China
Prior art keywords
sub
path metric
metric value
block
boundary
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CNA2007101420537A
Other languages
English (en)
Other versions
CN101373978B (zh
Inventor
许阳坡
梁伟光
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to CN2007101420537A priority Critical patent/CN101373978B/zh
Publication of CN101373978A publication Critical patent/CN101373978A/zh
Application granted granted Critical
Publication of CN101373978B publication Critical patent/CN101373978B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Error Detection And Correction (AREA)

Abstract

本发明公开了一种Turbo码译码方法,对一帧数据进行分块得到多个子块,对分块得到的各子块进行迭代译码时,计算子块的边界路径度量值的方法包括:当所述子块的边界路径度量值能够在其它子块本次迭代译码中得到时,将其它子块本次迭代中得到的路径度量值作为所述子块的边界路径度量值;当所述子块的边界路径度量值不能够在其它子块本次迭代译码中得到时,利用其它子块上一次迭代译码中得到的路径度量值,通过初始化得到所述子块的边界路径度量值。本发明还公开了Turbo码译码过程中计算边界路径度量值的方法,以及公开了一种Turbo码译码装置。根据本发明提供的方法和装置,可以提高边界路径度量值的可信度,从而能够提高译码性能。

Description

一种Turbo码译码方法以及装置
技术领域
本发明涉及信道编码的译码技术,特别是指一种Turbo码译码方法以及Turbo码译码装置。
背景技术
在通信系统的信号传输过程中,为了减少差错而进行信道编码。如果在发送端对信号进行了信道编码,则在接收端根据相应的译码规则进行译码之后,就可以完全或部分地纠正误码。
Turbo码是1993年由Berrou等提出的一种前向纠错的信道编码技术,其编码器由两个或两个以上的卷积分量码通过交织器并行级联组成。图1所示为Turbo码的编码器结构图,包括两个或两个以上卷积分量码、交织器、打孔和复接等模块。
图2示出卷积分量码的一种结构,该分量码包含3个寄存器,寄存器状态共有23=8个,对应的寄存器的状态转移如图3所示。图3中k时刻的寄存器任一状态在输入为0和输入为1时可分别转化为下一时刻k+1的某两个状态,如假设k时刻的状态为s4,若输入为0时,输出为01,下一时刻k+1的寄存器状态变为s2,若输入为1时,输出为10,下一时刻k+1的寄存器状态变为s6;当然某个时刻寄存器的任一状态是由前一时刻某两个状态中的一个转移过来的,如k+1时刻寄存器状态s4可以由k时刻的状态s0转移过来,此时输入为1,输出为11,也可以由k时刻的状态s1转移过来,此时输入为0,输出为00。
在寄存器初始状态确定的情况下,输入一段数据后,寄存器的状态又返回到初始状态,这时,对应的寄存器的状态转移路径即网格(Trellis)图也是确定的。如图4所示的Trellis图中,寄存器的初始状态为s0,输入为100111时,对应的寄存器状态转移路径如粗黑线所示。在此,使寄存器状态返回初始状态的输入比特称为结尾比特。
Turbo码的优异性能不仅在于它独特的编码结构,更重要的是与编码结构相匹配的译码算法。Turbo码的译码是在最大后验概率算法(MAP)的基础上,采用了迭代的思想。图5所示为Turbo码的译码器结构图。Turbo码的译码器中,两个软输入软输出(SISO)译码器Dec1和Dec2串行级联,分别与图1所示的Turbo码的编码器中卷积分量码1和2对应,交织器与编码器中所使用的交织器相同,交织器和解交织器是配套使用的。
假设,编码端的信息序列为:u=(u1,u2,.....uN),uk∈{0,1},编码后输出的序列为:c=(c1,c2,......cN),其中 c k = ( c k s , c k p 1 , c k p 2 ) , c k s , c k p 1 , c k p 2 ∈ { 0,1 } , 译码端接收到的序列为:y=(y1,y2,......yN),其中 y k = ( y k s , y k p 1 , y k p 2 ) .
译码器Dec1对卷积分量码1进行MAP译码,产生关于信息序列u=(u1,u2,......uN)中每一比特的后验概率信息LLR(uk),并将其中的外信息
Figure A200710142053D00114
经过交织送给Dec2;译码器Dec2将此信息作为先验信息
Figure A200710142053D00115
对卷积分量码2进行MAP译码,产生关于交织后的信息序列中每一比特的后验概率信息LLR(uk),然后将其中的外信息经过解交织送给Dec1,进行下一次译码。这样,经过多次迭代,Dec1或Dec2新产生的外信息趋于稳定,后验概率比渐进逼近于对整个码的最大似然译码。
每个软输入软输出译码器的输入包括三项,分别为译码端接收到的系统信息
Figure A200710142053D0011101408QIETU
、校验信息
Figure A200710142053D0011101416QIETU
以及其它译码器提供的信息比特的先验信息Lα(uk)。采用MAP算法,软输入软输出译码器就可以根据这些输入计算出每一个信息比特的后验概率信息LLR(uk)和外信息Le(uk)。
下面,给出在第i次迭代时,MAP算法的具体过程如下:
步骤101:计算Trellis图的前向路径度量值和后向路径度量值的初始值。
计算初始值的过程具体为,利用式(1)设定Trellis图在初始时刻的前向路径度量值,利用式(2)设定Trellis图在最后时刻的后向路径度量值。
α 0 i ( S 0 = 0 ) = 1 , α 0 i ( S 0 ≠ 0 ) = 0 , ∀ S 0 ∈ { 0,1,2 , . . . . . . 2 M } - - - ( 1 )
在式(1)中,假定卷积分量码编码器的初始状态为0状态,在初始时刻,状态为0的前向路径度量值设定为1,其它状态的前向路径度量值设定为0。
β N i ( S N = 0 ) = 1 , β N i ( S N ≠ 0 ) = 0 , ∀ S N ∈ { 0,1,2 , . . . . . . 2 M } - - - ( 2 )
在式(2)中,假定编码完成之后通过结尾处理寄存器回到初始的0状态,在最后时刻,状态为0的后向路径度量值设定为1,其它状态的后向路径度量值设定为0。
步骤102:利用初始时刻的前向路径度量值,通过前向处理计算每一时刻所有状态的前向路径度量值。
步骤103:利用最后时刻的后向路径度量值,通过后向处理计算每一时刻所有状态的后向路径度量值。
为了描述方便,以下说明中,前向路径度量值用α表示,后向路径度量值用β表示。
下面,结合图6详细介绍前向路径度量值和后向路径度量值的计算方法。图6中,k时刻的第s状态可以由k-1时刻的sa或sb状态转移过来,同时k时刻的第s状态可以转化为k+1时刻的sc或sd状态。在前向处理过程和后向处理过程中计算前向路径度量值和后向路径度量值时,需要计算相邻时刻之间的分支度量值。第i次迭代时,k-1时刻的sa状态和sb状态的前向路径度量值分别用
Figure A200710142053D00127
表示,k时刻的第s状态的前向路径度量值和后向路径度量值分别用
Figure A200710142053D00129
Figure A200710142053D001210
表示,k+1时刻的sc和sd状态的后向路径度量值分别用
Figure A200710142053D001211
表示;k-1时刻的sa和sb状态到k时刻的s状态的分支度量值分别用
Figure A200710142053D001214
表示,k时刻的s状态到k+1时刻的sc和sd状态的分支度量值分别用
Figure A200710142053D001215
Figure A200710142053D001216
表示。
这时,k时刻的第s状态的前向路径度量值通过下式(3)计算,k时刻的第s状态的后向路径度量值通过下式(4)计算。
α k i ( s ) = α k - 1 i ( s a ) γ k i ( s a , s ) + α k - 1 i ( s b ) γ k i ( s b , s ) - - - ( 3 )
β k i ( s ) = β k + 1 i ( s c ) γ k + 1 i ( s , s c ) + β k + 1 i ( s d ) γ k + 1 i ( s , s d ) - - - ( 4 )
为了防止溢出,对前向路径度量值和后向路径度量值进行归一化,具体为:某一时刻的某一状态的前向路径度量值使用该时刻所有状态的前向路径度量值之和进行归一化,某一时刻的某一状态的后向路径度量值使用该时刻所有状态的后向路径度量值之和进行归一化,分别如式(5)、(6)所示。
α k i ( s ) = Σ s ′ α k - 1 i ( s ′ ) γ k i ( s ′ , s ) Σ s Σ s ′ α k - 1 i ( s ′ ) γ k i ( s ′ , s ) - - - ( 5 )
β k i ( s ) = Σ s ′ ′ β k + 1 i ( s ′ ′ ) γ k + 1 i ( s , s ′ ′ ) Σ s Σ s ′ ′ β k + 1 i ( s ′ ′ ) γ k + 1 i ( s , s ′ ′ ) - - - ( 6 )
式(5)和式(6)中,s′代表与k时刻的s状态相连接的前一时刻k-1的状态,即图6中的sa或sb,s"代表与k时刻的s状态相连接的后一时刻k+1的状态,即图6中的sc或sd
式(5)中的分子部分相当于式(3),为k时刻的s状态的前向路径度量值,分母为k时刻的所有状态的前向路径度量值之和;式(6)中的分子部分相当于式(4),为k时刻的s状态的后向路径度量值,分母为k时刻的所有状态的后向路径度量值之和。
其中,分支度量值具体通过式(7)计算:
γ k i ( s ′ , s ) = K · exp { i L a ( u k ) + L c y k s c k s + L c y k p c k p } · P ( S k = s | S k - 1 = s ′ , u k = i ) - - - ( 7 )
式(7)中,Sk表示k时刻的状态,K,Lc为常数,La(uk)为外信息。根据上述式可知,前向路径度量值和后向路径度量值与外信息相关。
步骤104:计算后验概率信息和外信息。
由图3可知,相邻时刻之间的状态转移路径(s′,s)可以分为两个部分,一个是输入为1的状态转移路径集合用B1表示,一个是输入为0的状态转移路径集合用B0表示,相应的前向路径度量值、后向路径度量值和分支度量值也可以分为在输入为1的状态转移路径上的集合和在输入为0的状态转移路径上的集合。利用这两个集合可以计算后验概率信息,如式(8)。
LLR ( u k ) = ln P ( u k = 1 ) P ( u k = 0 ) = ln Σ ∀ ( s ′ , s ) ∈ B 1 α k - 1 i ( s ′ ) β k i ( s ) γ k i ( s ′ , s ) Σ ∀ ( s ′ , s ) ∈ B 0 α k - 1 i ( s ′ ) β k i ( s ) γ k i ( s ′ , s ) - - - ( 8 )
根据式(8),如果式(8)的结果大于0,则判定输入为uk=1,否则判定输入为uk=0。
将式(8)进一步化简得到式(9):
LLR ( u k ) = L c y k s + L a ( u k ) + L e ( u k ) - - - ( 9 )
式(9)中,
Figure A200710142053D00143
为接收端从信道得到的关于uk信息,La(uk)为uk的先验信息,即其它分量码译码器输出的外信息通过交织或解交织到达本分量译码器的信息,Le(uk)为本分量码译码器输出的外信息。
由式(9)可推导出外信息,如式(10)所示:
L e ( u k ) = LLR ( u k ) - L c y k s - L a ( u k ) - - - ( 10 )
通过以上步骤可知,传统的MAP算法首先要对接收到的一帧数据进行前向计算,将前向计算的结果存储起来,然后从该帧数据的最后一位开始进行后向计算,每完成一个后向计算就可以结合前面存储的前向计算结果进行一次LLR的计算,后向计算完成后也就可以完成一帧数据的LLR计算。以上所述的传统的译码算法的缺点主要有两个,一是存储容量要求高,因为它要存储一帧数据的前向计算结果;二是时延比较大,因为它要完成一帧数据的前向计算后才可以进行LLR和Le的计算。
对于传统的MAP算法存在的两个缺点,目前通过分块译码的方式解决,具体为,一种是滑窗方法,解决存储容量高的问题,另一种是并行译码,解决时延大的问题。
在分块译码方式中,需要引入两个概念,即边界α和边界β。边界α是指分块数据即某一帧或某一段或某一子块的初始时刻的前向路径度量值;边界β是指分块数据即某一帧或某一段或某一子块的最后时刻的后向路径度量值。
图7示出滑窗译码方法。在滑窗译码中,将接收到的一帧数据分为m块,相当于把Trellis图分为m块,然后串行地对每一子块进行译码。在对一子块进行译码时,该块的边界α值由上一块最后时刻的α值代替,而边界β值通过初始化得到。如图7所示,每块和后面块之间有一段重叠的阴影部分,在滑窗译码中,利用重叠部分初始化该块的边界β值。边界β值的初始化过程为,将重叠部分最后时刻的β值设为常数,再利用该重叠部分最后时刻的β值通过后向处理得到该块的边界β值。如在译码第2子块时,使用第一子块的最后时刻的α值计算出第2子块的边界α值,这一过程如701所示,然后通过前向处理计算出第2子块的所有其它α值;第2子块的边界β值使用重叠部分704进行初始化,然后通过后向处理计算出第2子块的所有其它β值。
使用滑窗译码方法能够降低对存储容量的要求,因为在译码过程中只需要存储当前译码块的α值而不是整帧的α值。例如,假设对长度为1024比特的一帧数据,使用4状态的Turbo编码,每一个α值使用8比特量化,如果采用传统译码则需要存储1024×4×8=32768比特;如果采用滑窗译码,假设每个窗的长度为64比特数据,则译码需要存储64×4×8=2048比特。
虽然滑窗译码方法解决了传统Turbo码译码存储容量高的问题,但由于在迭代过程中,用于初始化子块的边界β值的重叠部分的最后时刻的β值设定为一常数,在进行后向处理时没有充分利用后面子块的后向信息,所以边界β值的可信度降低,导致译码性能下降。另一方面,滑窗译码方法仍然是串行译码,完成一个子块的译码后再进行下一个子块的译码,所以也不能降低Turbo码的译码时延。
图8示出并行译码方法。在并行译码中,将一帧数据分成m个子块,然后使用m个处理器对m个子块并行译码。在第一次迭代时,该帧的边界α,β值即第一子块的边界α值和第m子块的边界β值分别按照式(1)、式(2)得到;第2~m个子块的边界α值和第1至m-1个子块的边界β值按照使信息比特先验等概的方式得到,具体为: α Wl i ( s ) = 1 2 M , l=2,...m; β Wl i ( s ) = 1 2 M , l=1,2,...m-1;其中s=0,1,2...,2M-1,M为分量卷积码采用的移位寄存器个数。第i(i>1)次迭代时,该帧的边界α,β值仍按照式(1)、式(2)得到;第2~m个子块的边界α值使用其前一子块的最后时刻的第i-1次迭代的α值代替,如801、803、805所示;第1~m-1个子块的边界β值使用其后一子块的初始时刻的第i-1次迭代的β值代替,如802、804、806所示。
使用并行译码时,由于m个处理器同时对每一子块进行译码,从而能够降低译码时延,但在该并行译码方法中用上次迭代相邻子块的α,β值作为本次迭代本子块的边界α,β值,对于本子块的边界α,β值来说其初始化序列的长度为0,这样导致边界α,β值的可信度降低,影响整个码字的译码性能。随着子块长度的降低,由α,β值的可信度降低而导致译码性能将会出现下降,尤其当子块长度小于64比特时,该方法的译码性能相较于传统方法会有很明显的差别。另一方面,由于在译码时需要同时存储每一子块的α值,需要存储整帧数据的α值,因此不能降低存储容量。
发明内容
本发明实施例提供一种Turbo码译码方法,提高译码性能。
本发明实施例提供一种在Turbo码译码过程中计算边界路径度量值的方法,提高边界路径度量值的可信度。
本发明实施例提供一种Turbo码译码装置,提高译码性能。
本发明实施例提供一种Turbo码译码方法,对一帧数据进行分块得到多个子块,对分块得到的各子块进行迭代译码时,按照如下步骤计算各子块的路径度量值:
计算各子块的边界前向路径度量值和边界后向路径度量值;
利用各子块的边界前向路径度量值计算相应子块的所有时刻的前向路径度量值,利用各子块的边界后向路径度量值计算相应子块的所有时刻的后向路径度量值;
其中,
计算除第一子块之外的子块的边界前向路径度量值的步骤包括:当所述子块的边界前向路径度量值能够在其它子块本次迭代译码中得到时,将其它子块本次迭代中得到的前向路径度量值作为所述子块的边界前向路径度量值;当所述子块的边界前向路径度量值不能够在其它子块本次迭代译码中得到时,利用所述子块的前面子块最近一次迭代译码中得到的前向路径度量值,通过初始化得到所述子块的边界前向路径度量值;
计算除最后子块之外的子块的边界后向路径度量值的步骤包括:当所述子块的边界后向路径度量值能够在其它子块本次迭代译码中得到时,将其它子块本次迭代中得到的后向路径度量值作为所述子块的边界后向路径度量值;当所述子块的边界后向路径度量值不能够在其它子块本次迭代译码中得到时,利用所述子块的后面子块最近一次迭代译码中得到的后向路径度量值,通过初始化得到所述子块的边界后向路径度量值。
在本发明实施例提供的Turbo码译码方法中,
可按照以下方式对一帧数据进行分块:将一帧数据分为第一数目个段,将每段数据分为第二数目个子块;其中,所述第一数目为大于1的自然数,所述第二数目为大于或等于1的自然数;
对于这种分块数据,可以按照以下顺序进行译码:以第三数目个段为一组,对组与组之间的数据进行串行译码,对组内的第三数目个段之间进行并行译码,对段内的各子块之间进行串行译码;其中,所述第三数目为小于或等于所述第一数目的自然数。
本发明实施例提供一种计算边界路径度量值的方法,用于对一帧数据进行Turbo码分块译码时,计算子块的边界路径度量值,其特征在于,该方法包括:当子块的边界路径度量值不能够在其它子块本次迭代译码中得到时,利用其它子块最近一次迭代译码中得到的路径度量值,通过初始化得到所述子块的边界路径度量值。
本发明实施例提供一种计算边界路径度量值的方法,用于对一帧数据进行Turbo码分块译码时,计算子块的边界路径度量值,该方法包括:
当子块的边界路径度量值能够在其它子块本次迭代译码中得到时,将其它子块本次迭代中得到的路径度量值作为所述子块的边界路径度量值;当子块的边界路径度量值不能够在其它子块本次迭代译码中得到时,利用其它子块最近一次迭代译码中得到的路径度量值,通过初始化得到所述子块的边界路径度量值。
本发明实施例提供一种Turbo码译码装置,包括接收单元、分支度量值处理单元、译码判决单元,该装置还包括:多个译码器、前向路径度量值初始化存储单元、后向路径度量值初始化存储单元;
所述接收单元用于接收数据;
所述分支度量值处理单元用于计算前向路径度量值和后向路径度量值计算中所需要的分支度量值,并进行存储;
所述前向路径度量值初始化存储单元用于存储在边界前向路径度量值计算过程中所需要的前向路径度量值;
所述后向路径度量值初始化存储单元用于存储在边界后向路径度量值计算过程中所需要的后向路径度量值;
所述各译码器用于利用所述分支度量值处理单元存储的分支度量值、所述前向路径度量值初始化存储单元中存储的前向路径度量值以及所述后向路径度量值初始化存储单元中存储的后向路径度量值,计算前向路径度量值和后向路径度量值,并利用前向路径度量值和后向路径度量值计算外信息和后验概率信息;
所述译码判决单元用于根据后验概率信息进行判决译码。
根据本发明实施例提供的Turbo码译码方法和装置,由于在计算边界前向路径度量值和边界后向路径度量值时,利用了其它子块的信息,从而能够提高边界路径度量值的可信度,这样能够提高译码性能。进一步,在分块译码时,采用串并译码方式结合的译码方式,所以,在保证译码性能的情况下,既能节省存储容量,同时又能减少译码时延。
附图说明
图1所示为现有技术中Turbo码的编码器结构图;
图2所示为现有技术中卷积分量码的结构图;
图3所示为现有技术中寄存器的状态转移图;
图4所示为现有技术中Trellis图;
图5所示为现有技术中Turbo码的译码器结构图;
图6所示为现有技术中前向路径度量值和后向路径度量值的计算示意图;
图7所示为现有技术中滑窗译码示意图;
图8所示为现有技术中并行译码示意图;
图9所示为本发明中计算边界α,β值的示意图,其中,(a)、(c)为计算边界α值的示意图,(b)、(d)为计算边界β值的示意图;
图10所示为本发明实施例一的并行译码示意图
图11所示为与图10对应的Trellis图;
图12所示为实施例一的并行译码方法和现有并行译码方法、传统译码方法的仿真结果比较示意图;
图13所示为本发明实施例二的滑窗译码示意图;
图14所示为实施例三的串并结合译码示意图;
图15所示为实施例四的串并结合译码示意图;
图16所示为实施例五的串并结合译码示意图;
图17所示为实施例六的译码装置结构图;
图18所示为实施例六的译码装置中的译码器结构图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明白,下面举具体实施例,对本发明作进一步详细的说明。
本发明实施例提供一种Turbo码译码方法,对一帧数据进行分块译码,在计算各子块的边界α,β值时,利用其它子块的信息计算边界α,β值,从而提高边界α,β值的可信度,提高译码性能。
下面结合图9,给出分块译码时一帧数据中除第一子块之外的其它子块的边界α值的计算过程,以及一帧数据中除最后子块之外的其它子块的边界β值的计算过程,并说明本发明实施例在计算边界α,β值时如何利用其它子块信息的过程。
为了描述方便,在以下说明中,使用
Figure A200710142053D00201
表示分块译码时第l子块第i次迭代初始时刻的前向路径度量值,即
Figure A200710142053D00202
表示第l子块第i次迭代的边界α值,使用
Figure A200710142053D00203
表示分块译码时第l子块第i次迭代最后时刻的前向路径度量值;使用
Figure A200710142053D00204
表示分块译码时第l子块第i次迭代初始时刻的后向路径度量值,使用
Figure A200710142053D00205
表示分块译码时第l子块第i次迭代最后时刻的后向路径度量值,即
Figure A200710142053D00206
表示第l子块第i次迭代的边界β值。
在计算边界α值时,如果该子块的边界α值能够在其它子块本次迭代过程中得到,则使用其它子块本次迭代过程中的α值代替;如果该子块的边界α值不能够在其它子块本次迭代过程中得到,则利用其它子块最近一次迭代时的α值,使用该子块的前面一段序列初始化该子块的边界α值,其中,第一次迭代时,初始化过程中将计算边界α值的初始值设为常数,第二次以上的迭代时,初始化过程中将计算边界α值的初始值使用其它子块相应时刻已得到的最近一次迭代的α值代替。
在计算边界β值时,如果该子块的边界β值能够在其它子块本次迭代过程中得到,则使用其它子块本次迭代过程中的β值代替;如果该子块的边界β值不能够在其它子块本次迭代过程中得到,则利用其它子块最近一次迭代时的β值,使用该子块的后面一段序列初始化该子块的边界β值,其中,第一次迭代时,初始化过程中将计算边界β值的初始值设为常数,第二次以上的迭代时,初始化过程中将计算边界β值的初始值使用其它块相应时刻已得到的最近一次迭代的β值代替。
图9(a)示出当前子块的边界α值能够在其它子块本次迭代过程中得到时,计算当前子块的边界α值的过程。图9(a)中,子块l1与子块l2是两个相邻的子块,当在第i次迭代过程中计算子块l2的边界α值时,如果子块l2的边界α值能够在子块l1的第i次迭代过程中得到,则可以直接将在第i次迭代中得到的子块l1的最后时刻的α值
Figure A200710142053D00211
作为第i次迭代时子块l2的边界α值
Figure A200710142053D00212
然后在子块l2中进行前向处理得出该子块l2的所有时刻的α值。其中,
Figure A200710142053D00213
Figure A200710142053D00214
在整帧Trellis图中位于同一时刻。根据图9(a)所示的边界α值的计算方法,可以认为子块l2的边界α值相当于通过一段序列初始化得到,初始化部分的长度为前一个子块l1的长度,如果子块l1的边界α值也按照图9(a)示出的方法计算,则子块l1的边界α值又相当于通过一段序列初始化得到,所以,子块l2的边界α值利用了子块l1及其前面子块的信息,由此产生的子块l2的边界α值比现有的并行译码过程中产生的边界α值更加可靠,而且在子块l2进行前向计算时又能够利用子块l1上次迭代产生的外信息,由此产生的子块l2的所有时刻的α值比现有的并行译码过程中产生的α值更加可靠。
图9(b)示出当前子块的边界β值能够在其它子块本次迭代过程中得到时,计算当前子块的边界β值的过程。图9(b)中,子块l3与子块l4是两个相邻的子块,当在第i次迭代过程中计算子块l3的边界β值时,子块l3的边界β值已在子块l4的第i次迭代过程中得到,则直接将在第i次迭代中得到的子块l4的初始时刻的β值作为第i次迭代时子块l3的边界β值
Figure A200710142053D00216
然后在子块l3中进行后向计算得出该子块l3的所有时刻的β值。其中,
Figure A200710142053D00221
在整帧Trellis图中位于同一时刻。根据图9(b)所示的边界β值的计算方法,可以认为子块l3的边界β值相当于通过一段序列初始化得到,初始化部分的长度为后一子块l4的长度,如果子块l4的边界β值也按照图9(b)示出的方法计算,则子块l4的边界β值又相当于通过一段序列初始化得到,所以子块l3的边界β值利用了子块l4及其后面子块的信息,由此产生的子块l3的边界β值比现有的滑窗译码方法和并行译码方法中产生的边界β值更加可靠,而且在进行后向计算时又能够利用子块l4上次迭代产生的外信息,因而由此产生的子块l3的所有时刻的β值比现有的滑窗译码方法和并行译码方法中产生的β值更加可靠。
图9(c)示出当前子块的边界α值不能够在其它子块本次迭代过程中得到时,计算当前子块的边界α值的过程。图9(c)中,子块l5和子块l6是相邻子块,当在第i次迭代过程中计算子块l6的边界α值时,如果子块l6的边界α值不能够在子块l5的第i次迭代中得到,则使用子块l6的前面一段长为Lα的序列进行初始化得到子块l6的边界α值
Figure A200710142053D00223
其中,该长为Lα的序列称作α初始化部,如图9(c)中阴影部分所示。通过初始化得到子块l6的边界α值
Figure A200710142053D00224
的过程为:首先设置α初始化部的初始时刻的α值,然后在α初始化部中利用α初始化部的初始时刻的α值前向计算得出子块l6的边界α值
Figure A200710142053D00225
如图9(c)中向右侧的虚线箭头所示。其中,在不同迭代过程中α初始化部的初始时刻的α值的设置如下:在第1次迭代时,将α初始化部的初始时刻的α值设为常数;在第i(i>1)次迭代过程中,α初始化部的初始时刻的α值使用第i-1次迭代时与所述初始时刻对应时刻的α值代替。例如,假设与子块l6的α初始化部的初始时刻对应的时刻落在子块l5,则子块l6的α初始化部的初始时刻的α值
Figure A200710142053D00226
使用子块l5已经计算出的第i-1次迭代时与所述初始时刻对应的时刻的α值
Figure A200710142053D00227
代替,其中,
Figure A200710142053D00228
Figure A200710142053D00231
在整帧Trellis图中位于同一时刻。在此,在α初始化部进行的前向计算同在译码子块中进行的前向计算,从α初始化部的初始时刻开始,可利用式(5)向后计算初始化部的所有时刻的α值,这时,所得到的该α初始化部的最后时刻的α值即为子块l6的边界α值。根据图9(c)所示的边界α值的计算方法,因为α初始化部的初始时刻的α值含有该时刻之前的信息,而前向计算中又可以用到α初始化部已经计算出的最近一次迭代产生的外信息,所以这样获得的边界α值要比现有的并行译码过程中获得的边界α值更加可靠。在图9(c)中,假设α初始化部的长度不大于前一子块的长度,但在实际应用中α初始化部的长度可以大于前一子块的长度,对于后一情况,在确定α初始化部的初始时刻的α值时,该初始时刻所对应时刻的α值有可能在本次迭代中得到,或者在上一次迭代中得到,这时,利用相应时刻最近一次迭代时所得到的α值代替,此时的最近一次迭代指的是上一次迭代,或者是本次迭代。
图9(d)示出当前子块的边界β值不能够在其它子块本次迭代过程中得到时,计算当前子块的边界β值的过程。在图9(d)中,子块l7和子块l8是相邻子块,当在第i次迭代过程中计算子块l7的边界β值时,如果子块l7的边界β值不能够在子块l8的第i次迭代中得到,则使用子块l7的后面一段长为Lβ的序列进行初始化得到子块l7的边界β值
Figure A200710142053D00232
其中,该长为Lβ的序列称作β初始化部,如图9(d)中阴影部分所示。通过初始化得到子块l7的边界β值
Figure A200710142053D00233
的过程为:首先设置β初始化部的最后时刻的β值,然后在β初始化部中利用β初始化部的最后时刻的β值后向计算得出子块l7的边界β值
Figure A200710142053D00234
如图9(d)中向左侧的虚线箭头所示。其中,在不同迭代过程中β初始化部的最后时刻的β值设置如下:在第1次迭代时,将β初始化部的最后时刻的β值设为常数;在第i(i>1)次迭代过程中,β初始化部的最后时刻的β值使用第i-1次迭代时与所述最后时刻对应时刻的β值代替。例如,假设与子块l7的β初始化部的最后时刻对应的时刻落在子块l8,则子块l7的β初始化部的最后时刻的β值
Figure A200710142053D00241
使用子块l8已经计算出的第i-1次迭代时与所述最后时刻对应的时刻的β值
Figure A200710142053D00242
代替,其中,
Figure A200710142053D00243
Figure A200710142053D00244
在整帧Trellis图中位于同一时刻。在此,在β初始化部进行的后向计算同在译码子块中进行的后向计算,从β初始化部的最后时刻开始,利用式(6)向前计算β初始化部的所有时刻的β值,这时,所得到的该β初始化部的初始时刻的β值即为子块l7的边界β值。根据图9(d)所示的边界β值的计算方法,因为β初始化部的最后时刻的β值含有该时刻之后的信息,而后向计算中又可以用到β初始化部已经计算出的最近一次迭代产生的外信息,所以这样获得的边界β要比现有的并行译码过程及现有的滑窗译码过程中获得的边界β更加可靠。在本图9(d)中,假设β初始化部的长度不大于后一子块的长度,但在实际应用中β初始化部的长度可以大于后一子块的长度,对于后一情况,在确定β初始化部的最后时刻的β值时,该最后时刻所对应时刻的β值有可能在本次迭代中得到,或者在上一次迭代中得到,这时,利用相应时刻最近一次迭代时所得到的β值代替,此时的最近一次迭代指的是上一次迭代或者是本次迭代。
对于以上计算边界α值和边界β值的过程中,当前子块的边界α值和边界β值是否能够在其它子块本次迭代过程中得到,需要根据分块译码时对分块的译码顺序而定,具体情况结合下面的实施例给出。
一帧数据中第一子块的边界α值使用式(1)计算,一帧数据中最后一子块的边界β值使用式(2)计算。
根据以上边界α值和边界β值的计算方法,能够使除第一子块外的任一子块的边界α值有效利用到前面子块的信息,也能够使除最后一子块外的任一子块的边界β值有效利用到后面子块的信息,这样使得边界的α值和边界β值更加可靠,从而提高分块译码时的性能。
根据以上方法得到一帧数据中各子块的边界α值和边界β值后,根据式(5)可得出该子块的其它时刻的α值,根据式(6)可得出该子块的其它时刻的β值,根据式(10)可计算出该子块每个比特的外信息,根据式(8)可计算出该子块每个比特的最大后验概率信息。
下面,结合不同的分块方法,给出实现Turbo码译码的具体实施例。
实施例一:并行译码
本实施例一的并行译码中,将一帧数据分成多个子块,使用多个处理器并行译码各子块,具体通过以下步骤实现:
步骤201:将一帧数据分成m个子块。
在此,可以将一帧数据分为m个长度相等的子块,如果一帧数据不能被分为等长的子块,则尽可能使每个子块的长度平均,因为在并行处理时,每次迭代的时延决定于拥有最大时延的处理器,所以使所有子块的长度平均可以减小每次迭代的时延。如110比特的一帧数据使用4个处理器处理时,每块的长度可设为27比特,28比特,28比特,27比特。
步骤202:各处理器并行地计算对应子块的所有时刻的α值。在此,计算子块的所有时刻的α值的具体步骤为,首先计算子块的边界α值,然后利用该子块的边界α值前向计算所有时刻的α值。前向计算时可利用式(5)。
下面,给出边界α值的计算方法。除了第一子块外,第2~m子块的边界α通过使用对应子块之前长度为Lα的α初始化部进行初始化得到,其中,Lα是Lα≥1的整数。
第一子块的边界α值由式(1)确定;由于本实施例一中所有子块之间采用并行译码方式,第2~m子块与其前面子块之间是并行关系,所以,这些第2~m子块的边界α值不能够在其前面子块本次迭代过程中得到,需要通过初始化得到,具体为,首先确定α初始化部的初始时刻的α值,然后利用该α初始化部的初始时刻的α值通过前向计算得到相应子块的边界α值。在此,在不同迭代过程中,α初始化部的初始时刻的α值不同,第一次迭代时,α初始化部的2M个状态的边界α值均设定为相等的常数,如1;第i(i>1)次迭代时,α初始化部的初始时刻的α值使用第i-1次迭代时在Trellis图中与所述初始时刻对应的时刻已计算出的的α值代替,对应图9(c)的情况。
各处理器得到相应子块的边界α值后,根据公式(5)计算出相应子块的所有时刻的α值。在第i次迭代过程中计算子块的所有时刻的α值时,需要存储与该子块的后面子块的α初始化部的初始时刻对应的时刻的α值,以在第i+1次迭代过程中,该子块的后面子块在计算边界α值时利用该α值。
步骤203:各处理器并行地计算对应子块的所有时刻的β值。在此,计算子块的所有时刻的β值的具体步骤为,首先计算子块的边界β值,然后利用该子块的边界β值后向计算所有时刻的β值。后向计算可利用式(6)。
下面,给出边界β值的计算方法。除了第m子块外,第1~m-1子块的边界β通过使用对应子块之后长度为Lβ的β初始化部进行初始化得到,其中,Lβ为Lβ≥1的整数。
第m子块的边界β值,如果有结尾比特,则第m子块的边界β值由式(2)确定,如果没有结尾比特,则第m子块的2M个状态的边界β值均设定为同一常数,如1。
由于本实施例一中所有子块之间采用并行译码方式,第1~m-1子块与其后面子块之间是并行关系,所以第1~m-1子块的边界β值不能够在其后面子块本次迭代过程中得到,第1~m-1子块的边界β值需要通过初始化得到,具体为,首先确定β初始化部的最后时刻的β值,然后利用β初始化部的最后时刻的β值通过后向计算得到相应子块的边界β值。在此,在不同迭代过程中,β初始化部的最后时刻的β值不同,第一次迭代时,β初始化部的2M个状态的边界β值均设定为相等的常数,如1;第i(i>1)次迭代时,β初始化部的最后时刻的边界β值使用第i-1次迭代时在Trellis图中与所述最后时刻对应的时刻已计算出的β值代替,对应图9(d)的情况。
各处理器得到相应子块的边界β值后,根据式(6)计算出相应子块的所有时刻的β值。在第i次迭代过程中计算所述子块的所有时刻的β值时,需要存储与该子块的前面子块的β初始化部的最后时刻对应的时刻的β值,以在第i+1次迭代过程中,该子块的前面子块在计算边界β值时利用该β值。
步骤204:每个处理器分别根据公式(10)计算出相应子块的所有比特的外信息,如果满足预定条件,则根据公式(8)计算出相应子块所有比特的后验概率信息,经过判决得到译码的结果,如果不满足预定条件,则返回步骤202进行下一次迭代。
关于预定条件以及是否满足预定条件的判断过程可采用现有的译码方法,在此不再详细介绍。
需要说明的是,在本实施例一中,子块的长度不包括α初始化部和β初始化部,初始化部计算出的α值或β值不会被保存,α初始化部不进行β值的计算,β初始化部不进行α值的计算,而且对α初始化部和β初始化部不计算外信息和后验概率信息,在其它实施例中也同样如此。
下面结合图10,给出在本实施例一的并行译码过程中,计算边界α值和边界β值的方法。在图10中,一帧数据正好被分成长度相等的m个子块,分别为B1、B2、......Bm。假设,每个子块的均包括W个状态转移过程,此时,第一子块B1包括整帧Trellis图中的0~W时刻,第l子块包括整帧Trellis图中的(l-1)W~lW时刻。
图10中第2~m子块之前的阴影部分为用于初始化相应子块的边界α值的α初始化部,其长度为Lα。如1009为第2子块的α初始化部。第l子块第i次迭代的α初始化部的初始时刻在该帧Trellis图中对应第(l-1)W-Lα时刻,若α初始化部的长度Lα小于一个子块的长度,则第(l-1)W-Lα时刻将处于第l-1子块。若设第l子块的初始时刻为START,设第l-1子块的最后时刻为END,则第i次迭代时第l子块的α初始化部的初始时刻的α值
Figure A200710142053D00271
可以用第i-1次迭代时第l-1子块的在该帧Trellis图中与所述初始时刻对应的时刻第(l-1)W-Lα时刻的α值代替,该过程如图10中箭头1001,1003,1005,1007所示。然后在该α初始化部,利用第(l-1)W-Lα时刻的α值,通过前向计算得到第(l-1)W时刻的α值,该第(l-1)W时刻的α值即为第l子块的边界α值
Figure A200710142053D00281
图10中第1~m-1子块之后的阴影部分为用于初始化相应子块的边界β值的β初始化部,其长度为Lβ。如1010为第2子块的β初始化部。第l子块第i次迭代的β初始化部的最后时刻在该帧Trellis图中对应第lW+Lβ时刻,若β初始化部的长度Lβ小于一个子块的长度,则第lW+Lβ时刻将处于第l+1子块。若设第l子块的最后时刻为END,设第l+1子块的初始时刻为START,则第i次迭代时第l子块的β初始化部的最后时刻的β值可以用第i-1次迭代时第l+1子块的在该帧Trellis图中与所述最后时刻对应的时刻第lW+Lβ时刻的β值
Figure A200710142053D00283
代替,该过程如图10中箭头1002,1004,1006,1008所示。然后在该β初始化部,利用第lW+Lβ时刻的β值,通过后向计算得到第lW时刻的β值,该第lW时刻的β值即为第l子块的边界β值
Figure A200710142053D00284
得到第l子块的边界α值和边界β值后,在计算该第l子块的所有时刻的α值和β值过程中,为了在第i+1次迭代时将α值传递给l+1子块,要保存对应于该帧Trellis图中第lW-Lα时刻的α值为了在第i+1次迭代时将β值传递给第l-1子块,要保存(l-1)W+Lβ时刻的β值
Figure A200710142053D00286
图10中的α初始化部和β初始化部的长度均小于一个子块的长度,但在实际应用中初始化部的长度可以大于子块的长度。
图11是与图10对应的Trellis图,该图11描述了在边界α值和边界β值的初始化过程中,第l-1块给第l块传递α值和第l+1块给第l块传递β值的情况。首先需要说明的是,在计算一子块的某一时刻的α值和β值时,需要计算该子块在该时刻的所有状态下的α值和β值,例如,Trellis图有2M个状态,其中M为分量码移位寄存器个数,则需要得到2M个α值和2M个β值。图11中,1101为用于初始化边界α值的α初始化部,1102为用于初始化边界β值的β初始化部,当在初始化边界α值过程中第l-1块给第l块传递α初始化部的初始时刻的α值时,需要传递相应时刻全部状态下的α值,如1103所示;当在初始化边界β值过程中第l+1块给第l块传递β初始化部的最后时刻的β值时,也需要传递相应时刻全部状态下的β值,如1104所示。
图12是本实施例一的并行译码方法和现有并行译码方法、传统译码方法的仿真结果比较。图12中,实线表示误比特率,虚线表示误帧率。仿真时数据长度均为1024比特,迭代次数均为5次。曲线4是采用传统译码方法得到的结果,传统方法中对数据不进行分块,把1024比特的数据当作一个整体进行译码;曲线3是采用现有的并行译码方法得到的结果,现有的并行译码中,将长度为1024的一帧数据分为32个大小为32比特的子块,对32个子块并行译码,每个子块的边界α值和β值初始化长度为0;曲线1和曲线2都是采用本实施例一的并行译码得到的结果,本实施例一中,将长度为1024的一帧数据分成32个大小为32比特的子块,对32个子块并行译码,区别在于曲线1是将每个子块的α初始化部和β初始化部长度均设为8时得到的结果,曲线2是将每个子块的α初始化部和β初始化部长度均设为16时得到的结果。从图12可以看出,本实施例一给出的并行译码性能明显好于现有的并行译码性能,和传统的译码性能差别很小。
根据本实施例一的并行译码方法,利用α初始化部初始化各子块的边界α值时采用图9(c)示出的方法,由于α初始化部的初始时刻的α值含有该时刻之前的信息,而前向计算中又可以用到α初始化部已经计算出的最近一次迭代产生的外信息,所以与现有的并行译码相比,能够提高边界α值的可信度;利用β初始化部初始化各子块的边界β值时采用图9(d)示出的方法,由于β初始化部的最后时刻的β值含有该时刻之后的信息,而后向计算中又可以用到β初始化部已经计算出的最近一次迭代产生的外信息,所以与现有的并行译码相比,能够提高边界β值的可信度。从而,与现有的并行译码相比,本实施例一中得到的边界α值和边界β值的可信度高,从而能够提高译码性能。
实施例二:滑窗译码
本实施例二的滑窗译码也可称为串行译码,将一帧数据分成多个子块,串行处理各子块,具体通过以下步骤实现:
步骤301:将一帧数据分成m个子块。
在此,可以将一帧数据分为m个长度相等的子块,如果一帧数据不能被分为等长的子块,则尽可能使每个子块的长度平均,因为在串行处理时,用于存储α值或β值的存储容量决定于所有子块中的最大长度,所以使所有子块的长度平均可以减小存储容量。如110比特的一帧数据分为4块时,每块的长度可设为27比特,28比特,28比特,27比特。
步骤302:从第一子块开始,依次计算各子块的所有时刻的α值。在此,计算子块的所有时刻的α值的具体步骤为,首先计算该子块的边界α值,然后利用该子块的边界α值前向计算该子块所有时刻的α值。前向计算时可利用式(5)。
下面给出边界α值的计算方法。
针对第一子块,第一子块的边界α值按照式(1)得到。
针对除了第一子块外的第2~m子块,由于在滑窗译码中,本次迭代中处理第l子块时,第l-1子块已被处理,第l子块的边界α值能够在第l-1子块中计算得到,所以,第l子块的边界a值可直接使用第l-1子块的最后时刻的a值代替,对应图9(a)的情况。
在第i次迭代过程中计算子块的所有时刻的α值时,需要存储该子块的最后时刻的α值,以该子块的后一子块直接利用该α值得到边界α值。
步骤303:从第一子块开始,依次计算各子块的所有时刻的β值。在此,计算一子块的所有时刻的β值的具体步骤为,首先计算该子块的边界β值,然后利用该子块的边界β值后向计算该子块所有时刻的β值。后向计算可利用式(6)。
下面给出边界β值的计算方法。
针对第m子块,第m子块的边界β值按照式(2)得到。
针对除了第m子块外的第1~m-1子块,由于在滑窗译码中,本次迭代中处理第l子块时,第l+1子块还未被处理,第l子块的边界β值不能够在第l+1子块本次迭代过程中得到,所以,第l子块的边界β值需要通过初始化得到,具体为,首先确定β初始化部的最后时刻的β值,然后利用β初始化部的最后时刻的β值通过后向计算得到相应子块的边界β值。在此,在不同迭代过程中,β初始化部的最后时刻的β值不同,第一次迭代时,β初始化部的所有状态的最后时刻的边界β值均设定为相等的常数,如1;第i(i>1)次迭代时,β初始化部的最后时刻的β值使用第i-1次迭代时在Trellis图中与所述最后时刻对应的时刻已计算出的β值代替,对应图9(d)的情况。
在第i次迭代过程中计算子块的所有时刻的β值时,需要存储与该子块的前面子块的β初始化部的最后时刻对应的时刻的β值,以在第i+1次迭代过程中,该子块的前面子块在计算边界β值时利用该β值。
步骤304:根据公式(10)计算出各子块的所有比特的外信息,如果满足预定条件,则根据公式(8)计算出相应子块所有比特的后验概率信息,经过判决得到译码的结果,如果不满足预定条件,则返回步骤302进行下一次迭代。
关于预定条件以及是否满足预定条件的判断过程可采用现有的译码方法,在此不再详细介绍。
下面结合图13,给出在本实施例二的滑窗译码过程中,计算边界α值和边界β值的方法。在图13中,一帧数据正好被分成长度相等的m个子块,分别为B1、B2、......Bm。假设,每个子块的均包括W个状态转移过程,此时,第一子块B1包括整帧Trellis图中的0~W时刻,第l子块包括整帧Trellis图中的(l-1)W~lW时刻。
图13中的第2~m子块的边界α值,直接使用前一子块的最后时刻的α值代替,该过程如图13中箭头1301,1303,1305,1307所示。
图13中第1~m-1子块之后的阴影部分为用于初始化相应子块的边界β值的β初始化部,其长度为Lβ。如1309为第2子块的β初始化部。第l子块第i(i>1)次迭代β初始化部的最后时刻在该帧Trellis图中对应第lW+Lβ时刻,若β初始化部的长度Lβ小于一个子块的长度,则第lW+Lβ时刻将处于第l+1子块。此时,若设第l子块的最后时刻为END,设第l+1子块的初始时刻为START,则第i次迭代时第l子块的β初始化部的最后时刻的β值
Figure A200710142053D00321
可以用第i-1次迭代时第l+1子块的在该帧Trellis图中与所述最后时刻对应的时刻第lW+Lβ时刻的β值
Figure A200710142053D00322
代替,该过程如图13中箭头1302,1304,1306,1308所示。然后在该β初始化部,利用第lW+Lβ时刻的β值,通过后向计算得到第lW时刻的β值,该第lW时刻的β值即为第l子块的边界β值
Figure A200710142053D00323
得到第l子块的边界α值和边界β值后,在计算该第l子块的所有时刻的α值和β值过程中,为了在第i次迭代时将α值传递给第l+1子块,需要保存lW时刻的α值,为了在第i+1次迭代时将β值传递给第l-1子块,要保存(l-1)W+Lβ时刻的β值
Figure A200710142053D00324
图13中的β初始化部的长度均小于一个子块的长度,但在实际应用中根据需要初始化部的长度可以大于子块的长度。
根据本实施例二的滑窗译码方法,利用β初始化部初始化各子块的边界β值时采用图9(d)示出的方法,由于β初始化部的最后时刻的β值含有该时刻之后的信息,而后向计算中又可以用到β初始化部已经计算出的最近一次迭代产生的外信息,所以与现有的滑窗译码相比,能够提高边界β值的可信度,从而能够提高译码性能。
Turbo码的并行译码可以降低译码时延,相同数据长度下,使用的并行处理器越多,则译码时延越低;而Turbo码的串行译码可以减少存储容量,相同数据长度下,一次处理的数据长度越短,则需要的存储容量越少。在通信系统中,对于不同的业务,帧的长度是不同的,而接收设备的处理能力和内存容量一般而言是固定不变的。所以,在时延和存储容量的要求都满足的情况下,能够处理较短帧长的设备在处理较长帧时,如果采用完全并行的方式会遇到比如存储量不足的困难;而如果采用完全串行的方式会导致处理时延过长的缺陷。遇到这类问题,可以采用串行和并行结合的方式进行,下面结合具体实施例给出串并结合的译码方案。
实施例三:串并结合译码-1
本实施例三中,将一帧数据分成q段,将每段数据再分成m子块,对于段内的m子块使用m个处理器并行处理,对于段与段之间采用串行译码方式,即先并行处理完第一段内的m子块后再并行处理第二段内的m子块,依次类推,处理第1~q段数据的过程为一次迭代过程,然后再重复相同的迭代过程。对于每段的长度和每块的长度可根据时延要求和存储容量的要求而定,在此不作任何限定。较佳为,每段数据长度相同,这样译码每段数据所需要的存储容量相同;每段数据分成相同长度的块,这样每一子块的处理时延相同。另外,对于不足m块的段可使用和该段块数相等的处理器个数并行处理即可。
下面,结合图14给出计算各子块的边界α值和边界β值的方法。图14中,将一帧数据分成3段,每段数据又分成3各子块。当采用3个处理器时,先并行处理B1、B2、B3子块,然后并行处理B4、B5、B6子块,最后并行处理B7、B8、B9子块。
下面给出计算各子块的边界α值的方法。
第一段中第一块的边界α值:利用式(1)得到。
第2~q段中第一块的边界α值:由于这些子块与其前面子块之间是串行译码关系,所以这些子块的边界α值能够在其前面子块本次迭代时得到,同实施例二中边界α值的计算方法,这些子块的边界α值可直接使用前一子块的最后时刻的α值代替,对应图9(a)的情况。如B4、B7子块的边界α值可分别直接使用B3、B6子块的最后时刻的α值代替,如箭头1405、1411所示。
第1~q段中第2~m块的边界α值:由于这些子块与其前面子块之间是并行译码关系,所以这些子块的边界α值不能够在其前面子块本次迭代时得到,同实施例一中边界α值的计算方法,需要通过初始化得到,对应图9(c)的情况。如B2、B3、B5、B6、B8、B9子块的第i次迭代时边界α值需要利用α初始化部初始化得到,α初始化部的初始时刻的α值分别使用B1、B2、B4、B5、B7、B8子块的第i-1次迭代时相应时刻的α值代替,如箭头1401、1403、1407、1409、1413、1415。
在第i次迭代时按照如上方法得到子块的边界α值之后,在计算该子块的所有时刻的α值的过程中,需要存储该子块的最后时刻的α值,例如需要存储子块B3的最后时刻的α值,以该子块B3的后一子块B4接利用该α值得到边界α值;还需要存储与该子块的后面子块的α初始化部的初始时刻对应的时刻的α值,例如,需要存储子块B1中与其后一子块B2的α初始化部的初始时刻对应的时刻的α值,以在第i+1次迭代过程中,子块B2在计算边界α值时利用该α值。
下面给出计算各子块的边界β值的方法。
第q段中第m块的边界β值:利用式(2)得到。
第1~q段中第1~m-1块的边界β值:由于这些子块与其后面子块之间是并行译码关系,所以这些子块的边界β值不能够其后面子块本次迭代过程中得到,同实施例一中边界β值的计算方法,需要通过初始化得到,对应图9(d)的情况。如B1、B2、B4、B5、B7、B8子块的第i次迭代式边界β值需要利用β初始化部初始化得到,β初始化部的最后时刻的β值分别使用B2、B2、B5、B6、B8、B9子块的第i-1次迭代时相应时刻的β值代替,如箭头1402、1404、1408、1410、1414、1416。
第1~q-1段中第m块的边界β值:由于这些子块与其后面子块之间是串行译码关系,所以这些子块的边界β值不能够其后面子块本次迭代过程中得到,同实施例二中边界β值的计算方法,需要通过初始化得到,对应图9(d)的情况。如B3、B6子块的第i次迭代式边界β值需要利用β初始化部初始化得到,β初始化部的最后时刻的β值分别使用B4、B7子块的第i-1次迭代时相应时刻的β值代替,如箭头1406、1412。
在第i次迭代时按照如上方法计算子块的所有时刻的β值的过程中,需要存储与该子块的前面子块的β初始化部的最后时刻对应的时刻的β值,例如,需要存储子块B9中与该子块B9的前一子块B8的β初始化部的最后时刻对应的时刻的β值,以在第i+1次迭代过程中,子块B8在计算边界β值时利用该β值。
实施例四:串并结合译码-2
本实施例四中,将一帧数据分成q段,每段再分成2m个子块,使用m个处理器并行处理。对于第一段中的2m子块,使用m个处理器先并行处理第1,3,......,2m-1子块,这些块称作先处理的块,再并行处理第2,4,......,2m子块,这些块称作后处理的块,处理完第一段之后,按照先隔块并行处理再并行处理剩下子块的方法处理第二段,依次类推。处理第1~q段数据的过程为一次迭代过程,然后再重复相同的迭代过程。在对一帧数据分段分块时,如果该帧数据的某一段分为少于m个的子块,则该段使用与该段的子块数目相等的处理器并行处理;如果该帧数据的某一段分为y个子块,其中m<y<2m,则使用m-x个处理器并行处理,其中x为整数,且2(m-x-1)<y≤2(m-x),然后将y个子块隔块分成两部分,先后处理。例如,如果某帧数据使用4个处理器并行处理,但最后一段的子块个数为5,依次记为x1、x2、x3、x4、x5,则使用3个处理器并行处理,先并行处理x1、x3、x5,然后并行处理x2、x4。在本实施例四的串并结合译码中,也可以先并行处理第2,4,......,2m子块,然后再并行处理第1,3,......,2m-1子块。
下面结合图15给出计算各子块的边界α值和边界β值的方法。图15中,一帧数据被分成2段,每段被分成4个子块。译码时使用两个处理器,t0时刻并行处理B1、B3子块,处理完B1、B3子块后,t1时刻并行处理B2、B4子块,处理完B2、B4子块后,t2时刻并行处理B5、B7子块,处理完B5、B7子块后,t3时刻并行处理B6、B8子块,这样的处理过程为一次迭代过程。
在迭代过程中各个子块的边界α值的计算如下所述:
第1段中第一子块的边界α值:通过式(1)得到。如B1子块的边界α值通过式(1)得到。
第1~q段中先处理的子块(除每段第一子块之外)的边界α值:由于这些子块与其前面子块之间是并行译码关系,所以这些子块的边界α值不能够在其前面子块的本次迭代中得到,需要通过α初始化部初始化得到,对应图9(c)的情况。如B3、B7子块的边界α值分别利用各自前面的α初始化部初始化得到,第i(i>1)次迭代时,α初始化部的初始时刻的α值使用前一子块的上一次迭代时的相应时刻的α值代替,如箭头1503、1511。
第2~q段中先处理的子块是该段内的第一子块时,该子块与其前面子块之间是串行处理关系,该子块的边界α值能够在其前面子块本次迭代过程中得到,所以可以直接使用前一段本次迭代过程中得到的α值代替,对应图9(a)的情况。如B5子块的边界α值直接使用B4子块的本次迭代最后时刻的α值代替,如箭头1507。
第1~q段中后处理的子块的边界α值:由于这些后处理的子块与先处理的子块之间是串行处理关系,后处理子块的边界α值能够在先处理子块的本次迭代过程中得到,所以后处理子块的边界α值可直接使用前一子块本次迭代最后时刻的α值代替,对应图9(a)的情况。如B2、B4、B6、B8子块的边界α值分别使用B1、B3、B5、B7子块的本次迭代最后时刻的α值代替,如箭头1501、1505、1509、1513。
在第i次迭代时按照如上方法得到子块的边界α值之后,在计算该子块的所有时刻的α值的过程中,需要存储该子块的最后时刻的α值,例如需要存储子块B1的最后时刻的α值,以该子块B1的后一子块B2接利用该α值得到边界α值;还需要存储与该子块的后面子块的α初始化部的初始时刻对应的时刻的α值,例如,需要存储子块B2中与其后一子块B3的α初始化部的初始时刻对应的时刻的α值,以在第i+1次迭代过程中,子块B3在计算边界α值时利用该α值。
在迭代过程中各个子块的边界β值的计算如下所述:
第q段中第m子块的边界β值:通过式(2)得到。如B8子块的边界β值利用式(2)得到。
第1~q-1段中第m子块的边界β值:由于这些子块与其后面相邻子块之间是串行处理关系,所以这些子块的边界β值不能够在其后面子块的本次迭代过程中得到,需要利用β初始化部初始化得到,对应图9(d)的情况。如B4子块的边界β值利用其后面的β初始化部初始化得到,β初始化部的最后时刻的β值使用B5子块的上一次迭代相应时刻的β值代替,如箭头1508所示。
第1~q段中先处理的子块(除每段最后一子块外)的边界β值:由于这些先处理与其后面相邻子块之间是串行处理关系,所以这些先处理子块的边界β值不能够在其后面子块的本次迭代过程中得到,需要利用β初始化部初始化得到,对应图9(d)的情况。如B1、B3、B5、B7子块的边界β值分别利用各自后面的β初始化部初始化得到,β初始化部的最后时刻的β值分别使用B2、B4、B6、B8子块上一次迭代相应时刻的β值代替,如箭头1502、1506、1510、1514。
第1~q段中后处理的子块(除每段最后一子块外)的边界β值:由于在处理这些后处理子块之前,这些后处理子块的后面子块已处理完毕,所以,这些后处理子块的边界β值能够在其后面子块的本次迭代过程中得到,使用后面相邻子块初始时刻已计算出的本次迭代的β值代替,对应图9(b)的情况。如B2、B6子块的边界β值分别使用B3、B7子块本次迭代的初始时刻的β值代替,如箭头1504、1512。
在第i次迭代时按照如上方法计算子块的所有时刻的β值的过程中,需要存储该子块的初始时刻的β值,例如,需要存储子块B3的初始时刻的β值,以该子块B3的前一子块B2直接利用该β值得到边界β值;还需要存储与该子块的前面子块的β初始化部的最后时刻对应的时刻的β值,例如,需要存储子块B2中与该子块B2的前一子块B1的β初始化部的最后时刻对应的时刻的β值,以在第i+1次迭代过程中,子块B1在计算边界β值时利用该β值。
实施例五:串并结合译码-3
本实施例五中,将一帧数据分成q段,每段再分为p个子块,其中p≥2。对该帧数据译码时,使用m个处理器先并行处理第1~m段,然后并行处理第m+1~2m段、第2m+1~3m段......,如果q不能被m整除,则最终剩下的不足m段的x段使用x个处理器并行处理即可,其中m≤q。对于一段内的各个子块之间,采用实施例二的滑窗译码方式。为了描述方便,同时并行处理的m段或最后不足m段的x段构成一组,在此,设一帧数据被分为D个组。这时,本实施例五的串并结合译码方式为,对组与组之间的数据进行串行译码,对组内的段之间进行并行译码,对段内的各子块之间进行串行译码。
下面结合图16,详细介绍各子块的边界α值和边界β值的方法。图16中,将一帧数据分成两组,每组分成六段,每段再分成三个子块。译码时,使用三个处理器分别对组内的三段进行并行处理,先并行处理第一组内的第一段、第二段和第三段,再并行处理第二组内的第四段、第五段和第六段。第一组的子块处理顺序为t0时刻先并行处理B1、B4、B7,然后t1时刻并行处理B2、B5、B8,最后t2时刻并行处理B3、B6、B9,第二组的子块处理顺序与此类似。
在处理各子块时,各子块的边界α值按照如下方法得到:
第一组的第一段的第一子块的边界α值:通过式(1)得到。如B1子块的边界α值通过式(1)得到。
第1~D组的除第一段外的第2~m段的第一子块的边界α值:由于这些子块所在的段与其前面段之间采用并行处理方式,所以,这些子块的边界α值不能够在其前面子块本次迭代中得到,需要利用α初始化部初始化得到,α初始化部的初始时刻的α值使用前面子块上一次迭代相应时刻的α值代替,对应图9(c)的情况。如B4、B7、B13、B16的边界α值需要使用其自身前面的α初始化部初始化,α初始化部的初始时刻的α值分别使用B3、B6、B12、B15子块上一次迭代相应时刻的α值代替,如箭头1605、1611、1623、1629所示。
第1~D组的第1~m段的第2~p子块的边界α值:由于这些子块与其前面子块之间采用串行处理方式,所以这些子块的边界α值能够在其前面子块本次迭代中得到,直接使用前一子块本次迭代最后时刻的α值代替,对应图9(a)的情况。如B2、B3、B5、B6、B8、B9、B11、B12、B14、B15、B17、B18子块的边界α值,分别直接使用B1、B2、B4、B5、B7、B8、B10、B11、B13、B14、B16、B17子块本次迭代最后时刻的α值代替,如箭头1601、1603、1607、1609、1613、1615、1619、1621、1625、1627、1631、1633所示。
第2~D组的第一段的第一子块的边界α值:由于这些子块所在的组与其前面组之间采用串行处理方式,所以,这些子块的边界α值能够在其前面子块本次迭代中得到,直接使用前一子块本次迭代最后时刻的α值代替,对应图9(a)的情况。如B10子块的边界α值直接使用B9子块本次迭代最后时刻的α值代替,如箭头1617所示。
在第i次迭代时按照如上方法得到子块的边界α值之后,在计算该子块的所有时刻的α值的过程中,需要存储该子块的最后时刻的α值,例如需要存储子块B1的最后时刻的α值,以该子块B1的后一子块B2接利用该α值得到边界α值;还需要存储与该子块的后面子块的α初始化部的初始时刻对应的时刻的α值,例如,需要存储子块B3中与其后一子块B4的α初始化部的初始时刻对应的时刻的α值,以在第i+1次迭代过程中,子块B4在计算边界α值时利用该α值。
在处理各子块时,各子块的边界β值按照如下方法得到:
第1~D组的第1~m段的第1~p-1子块(串行处理)的边界β值,由于这些子块与其后面子块之间采用串行处理方式,所以,这些子块的边界β值不能够在其后面子块的本次迭代过程中得到,需要使用β初始化部初始化得到,对应图9(d)的情况。如B1、B2、B4、B5、B7、B8、B10、B11、B13、B14、B16、B17子块的边界β值需要利用其自身子块后面的β初始化部初始化,β初始化部的最后时刻的β值分别使用B2、B3、B5、B6、B8、B9、B11、B12、B14、B15、B17、B18子块的上一次迭代相应时刻的β值代替,如箭头1602、1604、1608、1610、1614、1616、1620、1622、1626、1628、1632、1634。
第1~D组的第1~m-1段的第p子块的边界β值,由于在处理这些子块之前,其后面子块已被处理,所以,这些子块的边界β值能够在其它子块的本次迭代过程中得到,直接使用后一子块本次迭代初始时刻的β值代替,对应图9(b)的情况。如B3、B6、B12、B15子块的边界β值分别直接使用B4、B7、B13、B16子块本次迭代初始时刻的β值代替,如箭头1606、1612、1624、1630。
第1~D-1组的第m段的第p子块的边界β值,由于这些子块与其后面子块之间采用串行处理方式,所以,这些子块的边界β值不能够在其后面子块的本次迭代过程中得到,需要使用β初始化部初始化得到,对应图9(d)的情况。如B9子块的边界β使用β初始化部初始化得到,β初始化部的最后时刻的β值使用B10子块上一次迭代相应时刻的β值代替,如箭头1618。
第D组的第m段的第p子块的边界β值,由式(2)得到。如B18子块的边界β值通过式(2)得到。
在第i次迭代时按照如上方法计算子块的所有时刻的β值的过程中,需要存储该子块的初始时刻的β值,例如,需要存储子块B4的初始时刻的β值,以该子块B4的前一子块B3直接利用该β值得到边界β值;还需要存储与该子块的前面子块的β初始化部的最后时刻对应的时刻的β值,例如,需要存储子块B2中与该子块B2的前一子块B1的β初始化部的最后时刻对应的时刻的β值,以在第i+1次迭代过程中,子块B1在计算边界β值时利用该β值。
以上实施例三~五的串并结合译码中,计算各子块的边界α值和边界β值时,采用如图9所示的方法,边界α值和边界β值的可信度提高,从而能够提高译码性能。
而且,采用以上实施例三~五的串并结合译码方法时,与采用传统的译码方法或仅采用串行译码方法或者仅采用并行译码方法相比,在保证译码性能的情况下,既能节省存储容量,同时又能减少译码时延。下面给出分块译码方式与需要的存储容量以及译码时延之间的关系,如下表一所示。
Figure A200710142053D00411
表一
从表一可以看出,假设无分块的传统译码方式所需要的存储容量为1,译码时延为1时,采用实施例三、四、五的译码方式,均可以减少存储容量的同时降低译码时延。
例如,对于1024比特的一帧数据,如果采用实施例三的译码方式,将一帧数据分成64段,每段又分为4块时,每个子块16比特,使用4个处理器并行处理各段的4个子块,假设Trellis图中每个时刻有8个状态,每个状态的α值使用8比特量化,则译码过程中存储α需要(16×8)×4=512字节,如果采用传统的译码方法或者采用完全并行的方式则存储α需要(1024×8)=8192字节,同时采用实施例三的译码方式时译码时延约是传统译码时延的0.25倍。所以串并结合的译码方案既能够降低存储量要求又能够降低译码时延,使得同样的设备可以处理不同长度的数据。对于要求较低时延或要处理大量数据的设备可采用较多的并行处理器,对于性能要求比较高的业务可采用分块比较大,初始化长度比较长的方法。
以上实施例三~五这三种串并结合方案各有特点,实施例三的优点在于,分块分段简单,在不需要接收完整帧数据的条件下,只需要接收完m个子块就可以进行并行译码;实施例四的优点在于,在不需要接收完整帧数据的条件下,只需要接收到2m个子块后就可以进行并行译码,同时,它与实施例三相比,需要的α、β初始化部较少,每段的后处理子块的边界α值和边界β值相对比较可靠,在译码过程中能得到较好的保护;实施例五的优点在于,需要的α、β初始化部较少,和实施例四相当,在任意组中,当段的长度比较小,段的个数比较多时,在不需要接收完整帧数据的情况下,只需要接收m段数据后就可以进行并行译码。
下面介绍实施例三~五这三种串并结合方案之间的关系。例如4096比特长的一帧数据,分成256个子块,使用4个处理器进行处理,这时,对于实施例三的串并结合方式,数据被分成64段,每段4个子块,接收完4×16=64比特的数据及接收完对应的校验比特后就可以实现并行译码,整帧需要的α、β初始化部个数为7×63+6=447个;对于实施例四的串并结合方式,数据被分成32段,每段8个子块,接收完7×16=112比特的数据及接收完对应的校验比特后就可以实现并行译码,整帧需要的α、β初始化部个数为8×31+7=255个;对于实施例五的串并结合方式,如果数据被分成四段,每段64个子块,则需要接收(64×3+1)×16=3088比特的数据及接收完对应的校验比特后才可以实现并行译码,整帧需要的α、β初始化部个数为63+64+64+64=255个;如果数据被分成64段,每段4个子块,则需要接收(4×3+1)×16=208比特的数据及接收完对应的校验比特后就可以实现并行译码,需要的α、β初始化部个数仍然为255个;如果数据被分成128段,即每段两个子块时,则实施例五的串并结合方式和实施例四的串并结合方式完全相同;如果数据被分成256段,即每段一个子块时,则实施例五的串并结合方式和实施例三的串并结合方式完全相同。
下面给出Turbo码译码装置的实施例。
实施例六:
本实施例六提供Turbo码译码装置。图17所示为Turbo码译码装置结构图,该译码装置包括:接收单元1701、分支度量值处理单元1702、1~m译码器1703、α初始化存储单元1704、β初始化存储单元1705、译码判决单元1706。在图17所示的译码装置中,接收单元1701接收数据并对其进行缓存;分支度量值处理单元1702计算m个译码器译码需要的分支度量值,并存储所计算的分支度量值,这些分支度量值用于α值和β值的计算;α初始化存储单元1704中存储α值,这些存储的α值用于边界α值的计算,可以作为α初始化部的初始时刻的α值或直接作为边界α值,具体需要存储哪些α值已在前述的实施例一~五中详细给出;β初始化存储单元1705中存储的β值,这些存储的β值用于边界β值的计算,可以作为β初始化部的最后时刻的β值或直接作为边界β值,具体需要存储哪些β值已在前述的实施例一~五中详细给出;1~m译码器1703分别利用所述分支度量值处理单元1702存储的分支度量值、所述α初始化存储单元1704中存储的α值以及所述β初始化存储单元1705中存储的β值,计算α值和β值,并利用α值和β值计算外信息和后验概率信息;所述各译码器将计算得到的外信息返回给所述分支度量值处理单元1702,由所述分支度量值处理单元1702利用外信息计算分支度量值;所述各译码器将最后一次迭代过程中计算得到的后验概率信息送给所述译码判决单元1706,由译码判决单元1706进行判决输出译码结果。
其中,分支度量值处理单元1702包括:交织器/解交织器单元1702-1、外信息存储单元1702-2、分支度量值计算单元1702-3、分支度量值存储单元1702-4。译码器输出的外信息送入交织器/解交织器单元1702-1,由交织器/解交织器单元1702-1对外信息进行交织/解交织后,送给外信息存储单元1702-2,以备分支度量值的计算过程中所用;分支度量值计算单元1702-3利用接收数据和所述外信息存储单元1702-2存储的外信息计算分支度量值,并存入所述分支度量值存储单元1702-4。
译码装置中的译码器的内部结构如图18所示,包括α初始化单元1801、α计算单元1802、α存储单元1803、β初始化单元1804、β计算单元1805、外信息和后验概率信息计算单元1806。α初始化单元1801从分支度量值存储单元1702-4获取初始化部分需要的γ值,从α初始化存储单元1704获取本子块α初始化部的初始时刻的α值,然后前向计算得出本子块的边界α值,送入α计算单元1802;α计算单元1802得到边界α值后进行前向计算得出本子块的所有α值,送入α存储单元1803,并将后面子块初始化边界α值时可能用到的本子块的α值送入α初始化存储单元1704,由α初始化存储单元1704存储。β初始化单元1804从β初始化存储单元1705获取本子块β初始化部最后时刻的β值,然后后向计算得出本子块的边界β值,送入β计算单元1805;β计算单元1805得到边界β值后进行后向计算得出本子块的所有的β值,送入外信息和后验概率信息计算单元1806,并将前面子块初始化边界β值时可能用到的本子块的β值送入β初始化存储单元1705,由β初始化存储单元1705存储。外信息和后验概率信息计算单元1806得到每一个时刻的β值后,结合已经算出的α值、γ值进行对应于该时刻的信息比特的外信息的计算和后验概率信息的计算。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同代替、改进等,均应包含在本发明的保护范围之内。

Claims (16)

1.一种Turbo码译码方法,其特征在于,对一帧数据进行分块得到多个子块,对分块得到的各子块进行迭代译码时,按照如下步骤计算各子块的路径度量值:
计算各子块的边界前向路径度量值和边界后向路径度量值;
利用各子块的边界前向路径度量值计算相应子块的所有时刻的前向路径度量值,利用各子块的边界后向路径度量值计算相应子块的所有时刻的后向路径度量值;
其中,
计算除第一子块之外的子块的边界前向路径度量值的步骤包括:当所述子块的边界前向路径度量值能够在其它子块本次迭代译码中得到时,将其它子块本次迭代中得到的前向路径度量值作为所述子块的边界前向路径度量值;当所述子块的边界前向路径度量值不能够在其它子块本次迭代译码中得到时,利用所述子块的前面子块最近一次迭代译码中得到的前向路径度量值,通过初始化得到所述子块的边界前向路径度量值;
计算除最后子块之外的子块的边界后向路径度量值的步骤包括:当所述子块的边界后向路径度量值能够在其它子块本次迭代译码中得到时,将其它子块本次迭代中得到的后向路径度量值作为所述子块的边界后向路径度量值;当所述子块的边界后向路径度量值不能够在其它子块本次迭代译码中得到时,利用所述子块的后面子块最近一次迭代译码中得到的后向路径度量值,通过初始化得到所述子块的边界后向路径度量值。
2.根据权利要求1所述的方法,其特征在于,
所述对一帧数据进行分块得到多个子块为:将一帧数据分为第一数目个段,将每段数据分为第二数目个子块;其中,所述第一数目为大于1的自然数,所述第二数目为大于或等于1的自然数;
所述对分块得到的各子块分别进行译码为:以第三数目个段为一组,对组与组之间的数据进行串行译码,对组内的第三数目个段之间进行并行译码,对段内的各子块之间进行串行译码;其中,所述第三数目为小于或等于所述第一数目的自然数。
3.根据权利要求1所述的方法,其特征在于,
所述将其它子块本次迭代中得到的前向路径度量值作为所述子块的边界前向路径度量值为:将所述子块的前面相邻子块的最后时刻的前向路径度量值作为所述子块的边界前向路径度量值;
所述通过初始化得到所述子块的边界前向路径度量值为:
将所述子块的前面一段序列设为前向初始化部,得到所述前向初始化部的初始时刻的前向路径度量值;
利用所述前向初始化部的初始时刻的前向路径度量值,在所述前向初始化部通过前向计算得到该前向初始化部的最后时刻的前向路径度量值,并将所述前向初始化部的最后时刻的前向路径度量值作为所述子块的边界前向路径度量值;
其中,所述前向初始化部的初始时刻的前向路径度量值为:
当第一次迭代时,将前向初始化部的初始时刻的前向路径度量值设为常数;
当第二次以上的迭代时,将最近一次迭代时在网格图中与所述前向初始化部的初始时刻对应的时刻的前向路径度量值作为本次迭代时所述前向初始化部的初始时刻的前向路径度量值。
4.根据权利要求3所述的方法,其特征在于,在本次迭代过程中计算所述子块的所有时刻的前向路径度量值时,存储该子块的最后时刻的前向路径度量值或者存储与该子块的后面子块的前向初始化部的初始时刻对应的时刻的前向路径度量值。
5.根据权利要求1所述的方法,其特征在于,
所述将其它子块本次迭代中得到的后向路径度量值作为所述子块的边界后向路径度量值为:将所述子块的后面相邻子块的初始时刻的后向路径度量值作为所述子块的边界后向路径度量值;
所述通过初始化得到子块的边界路径度量值为:
将所述子块的后面一段序列设为后向初始化部,得到所述后向初始化部的最后时刻的后向路径度量值;
利用所述后向初始化部的最后时刻的后向路径度量值,在所述后向初始化部通过后向计算得到该后向初始化部的初始时刻的后向路径度量值,并将所述后向初始化部的初始时刻的后向路径度量值作为所述子块的边界后向路径度量值;
其中,所述后向初始化部的最后时刻的后向路径度量值为:
当第一次迭代时,将后向初始化部的最后时刻的后向路径度量值设为常数;
当第二次以上的迭代时,将最近一次迭代时在网格图中与所述后向初始化部的最后时刻对应的时刻的后向路径度量值作为本次迭代时所述后向初始化部的最后时刻的后向路径度量值。
6.根据权利要求5所述的方法,其特征在于,在本次迭代过程中计算所述子块的所有时刻的后向路径度量值时,存储该子块的初始时刻的后向路径度量值或者存储与该子块的前面子块的后向初始化部的最后时刻对应的时刻的后向路径度量值。
7.一种Turbo码译码方法,其特征在于,
将一帧数据分为第一数目个段,将每段数据分为第二数目个子块;其中,所述第一数目为大于1的自然数,所述第二数目为大于或等于1的自然数;
以第三数目个段为一组,对组与组之间的数据进行串行译码,对组内的第三数目个段之间进行并行译码,对段内的各子块之间进行串行译码;其中,所述第三数目为小于或等于所述第一数目的自然数;
其中,对各子块译码时,按照如下步骤计算各子块的路径度量值:
计算各子块的边界前向路径度量值和边界后向路径度量值;
利用各子块的边界前向路径度量值计算相应子块的所有时刻的前向路径度量值,利用各子块的边界后向路径度量值计算相应子块的所有时刻的后向路径度量值;
其中,
计算除第一子块之外的子块的边界前向路径度量值的步骤包括:当所述子块的边界前向路径度量值能够在其它子块本次迭代译码中得到时,将其它子块本次迭代中得到的前向路径度量值作为所述子块的边界前向路径度量值;当所述子块的边界前向路径度量值不能够在其它子块本次迭代译码中得到时,利用所述子块的前面子块最近一次迭代译码中得到的前向路径度量值,通过初始化得到所述子块的边界前向路径度量值;
计算除最后子块之外的子块的边界后向路径度量值的步骤包括:当所述子块的边界后向路径度量值能够在其它子块本次迭代译码中得到时,将其它子块本次迭代中得到的后向路径度量值作为所述子块的边界后向路径度量值;当所述子块的边界后向路径度量值不能够在其它子块本次迭代译码中得到时,利用所述子块的后面子块最近一次迭代译码中得到的后向路径度量值,通过初始化得到所述子块的边界后向路径度量值。
8.一种计算边界路径度量值的方法,用于对一帧数据进行Turbo码分块译码时,计算子块的边界路径度量值,其特征在于,该方法包括:
当子块的边界路径度量值不能够在其它子块本次迭代译码中得到时,利用其它子块最近一次迭代译码中得到的路径度量值,通过初始化得到所述子块的边界路径度量值。
9.根据权利要求8所述的方法,其特征在于,所述边界路径度量值为:边界前向路径度量值;
所述通过初始化得到子块的边界路径度量值为:将所述子块的前面一段序列设为前向初始化部,并利用所述子块的前面子块最近一次迭代译码中得到的前向路径度量值,利用所述前向初始化部进行初始化。
10.根据权利要求9所述的方法,其特征在于,所述利用前向初始化部进行初始化为:
得到所述前向初始化部的初始时刻的前向路径度量值;
利用所述前向初始化部的初始时刻的前向路径度量值,在所述前向初始化部通过前向计算得到该前向初始化部的最后时刻的前向路径度量值,并将所述前向初始化部的最后时刻的前向路径度量值作为所述子块的边界前向路径度量值;
其中,所述前向初始化部的初始时刻的前向路径度量值为:
当第一次迭代时,将前向初始化部的初始时刻的前向路径度量值设为常数;
当第二次以上的迭代时,将最近一次迭代时在网格图中与所述前向初始化部的初始时刻对应的时刻的前向路径度量值作为本次迭代时所述前向初始化部的初始时刻的前向路径度量值。
11.根据权利要求8所述的方法,其特征在于,所述边界路径度量值为:边界后向路径度量值;
所述通过初始化得到子块的边界路径度量值为:将所述子块的后面一段序列设为后向初始化部,并利用所述子块的后面子块最近一次迭代译码中得到的后向路径度量值,利用所述后向初始化部进行初始化。
12.根据权利要求11所述的方法,其特征在于,所述利用后向初始化部进行初始化为:
得到所述后向初始化部的最后时刻的后向路径度量值;
利用所述后向初始化部的最后时刻的后向路径度量值,在所述后向初始化部通过后向计算得到该后向初始化部的初始时刻的后向路径度量值,并将所述后向初始化部的初始时刻的后向路径度量值作为所述子块的边界后向路径度量值;
其中,所述后向初始化部的最后时刻的后向路径度量值为:
当第一次迭代时,将后向初始化部的最后时刻的后向路径度量值设为常数;
当第二次以上的迭代时,将最近一次迭代时在网格图中与所述后向初始化部的最后时刻对应的时刻的后向路径度量值作为本次迭代时所述后向初始化部的最后时刻的后向路径度量值。
13.一种计算边界路径度量值的方法,用于对一帧数据进行Turbo码分块译码时,计算子块的边界路径度量值,其特征在于,该方法包括:
当子块的边界路径度量值能够在其它子块本次迭代译码中得到时,将其它子块本次迭代中得到的路径度量值作为所述子块的边界路径度量值;
当子块的边界路径度量值不能够在其它子块本次迭代译码中得到时,利用其它子块最近一次迭代译码中得到的路径度量值,通过初始化得到所述子块的边界路径度量值。
14.根据权利要求13所述的方法,其特征在于,
所述边界路径度量值为:边界前向路径度量值;
所述将其它子块本次迭代中得到的路径度量值作为所述子块的边界路径度量值为:将所述子块的前面相邻子块的最后时刻的前向路径度量值作为所述子块的边界前向路径度量值;
或者,
所述边界路径度量值为:边界后向路径度量值;
所述将其它子块本次迭代中得到的路径度量值作为所述子块的边界路径度量值为:将所述子块的后面相邻子块的初始时刻的后向路径度量值作为所述子块的边界后向路径度量值。
15.一种Turbo码译码装置,包括接收单元、分支度量值处理单元、译码判决单元,其特征在于,该装置还包括:多个译码器、前向路径度量值初始化存储单元、后向路径度量值初始化存储单元;
所述接收单元用于接收数据;
所述分支度量值处理单元用于计算前向路径度量值和后向路径度量值计算中所需要的分支度量值,并进行存储;
所述前向路径度量值初始化存储单元用于存储在边界前向路径度量值计算过程中所需要的前向路径度量值;
所述后向路径度量值初始化存储单元用于存储在边界后向路径度量值计算过程中所需要的后向路径度量值;
所述各译码器用于利用所述分支度量值处理单元存储的分支度量值、所述前向路径度量值初始化存储单元中存储的前向路径度量值以及所述后向路径度量值初始化存储单元中存储的后向路径度量值,计算前向路径度量值和后向路径度量值,并利用前向路径度量值和后向路径度量值计算外信息和后验概率信息;
所述译码判决单元用于根据后验概率信息进行判决译码。
16.根据权利要求15所述的装置,其特征在于,所述译码器包括前向路径度量值初始化单元、前向路径度量值计算单元、前向路径度量值存储单元、后向路径度量值初始化单元、后向路径度量值计算单元、外信息和后验概率信息计算单元;
所述前向路径度量值初始化单元用于将所述前向路径度量值初始化存储单元中存储的前向路径度量值作为计算边界前向路径度量值的初始值,并利用所述计算边界前向路径度量值的初始值和所述分支度量值处理单元存储的分支度量值,通过前向计算得到边界前向路径度量值;
所述前向路径度量值计算单元用于利用所述前向路径度量值初始化单元得到的边界前向路径度量值和所述分支度量值处理单元存储的分支度量值,通过前向计算得到所有时刻的前向路径度量值;
所述前向路径度量值存储单元用于存储所述前向路径度量值计算单元计算得到的所有时刻的前向路径度量值;
所述后向路径度量值初始化单元用于将所述后向路径度量值初始化存储单元中存储的后向路径度量值作为计算边界后向路径度量值的初始值,并利用所述计算边界后向路径度量值的初始值和所述分支度量值处理单元存储的分支度量值,通过后向计算得到边界后向路径度量值;
所述后向路径度量值计算单元用于利用所述后向路径度量值初始化单元得到的边界后向路径度量值和所述分支度量值处理单元存储的分支度量值,通过后向计算得到所有时刻的后向路径度量值;
所述外信息和后验概率信息计算单元用于利用所述前向路径度量值存储单元存储的前向路径度量值、所述后向路径度量值计算单元计算得到的后向路径度量值以及所述分支度量值处理单元存储的分支度量值,计算外信息和后验概率信息。
CN2007101420537A 2007-08-20 2007-08-20 一种Turbo码译码方法以及装置 Expired - Fee Related CN101373978B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN2007101420537A CN101373978B (zh) 2007-08-20 2007-08-20 一种Turbo码译码方法以及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN2007101420537A CN101373978B (zh) 2007-08-20 2007-08-20 一种Turbo码译码方法以及装置

Publications (2)

Publication Number Publication Date
CN101373978A true CN101373978A (zh) 2009-02-25
CN101373978B CN101373978B (zh) 2011-06-15

Family

ID=40447948

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2007101420537A Expired - Fee Related CN101373978B (zh) 2007-08-20 2007-08-20 一种Turbo码译码方法以及装置

Country Status (1)

Country Link
CN (1) CN101373978B (zh)

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2011082509A1 (zh) * 2010-01-11 2011-07-14 新邮通信设备有限公司 一种turbo码译码方法和装置
WO2013107140A1 (zh) * 2012-01-20 2013-07-25 华为技术有限公司 与循环冗余校验级联的极性码的译码方法和译码装置
CN104092470A (zh) * 2014-07-25 2014-10-08 中国人民解放军国防科学技术大学 一种Turbo码译码装置及方法
WO2014173133A1 (zh) * 2013-04-27 2014-10-30 华为技术有限公司 极性码的译码方法和译码装置
CN104823380A (zh) * 2012-12-14 2015-08-05 诺基亚技术有限公司 用于解码的方法和装置
ES2561913A1 (es) * 2014-11-06 2016-03-01 Universidad De Málaga Sistemas y métodos para turbo decodificación iterativa de baja tasa de error y baja complejidad
ES2561935A1 (es) * 2014-11-06 2016-03-01 Universidad De Málaga Sistemas y métodos para turbo decodificación iterativa de alto régimen binario, baja tasa de error y baja complejidad
WO2016071546A1 (es) * 2014-11-06 2016-05-12 Universidad De Málaga Sistemas y métodos para turbo decodificación iterativa de bajo tasa de error y baja complejidad
CN113992213A (zh) * 2021-10-28 2022-01-28 成都星联芯通科技有限公司 一种双路并行译码存储设备及方法

Cited By (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2011082509A1 (zh) * 2010-01-11 2011-07-14 新邮通信设备有限公司 一种turbo码译码方法和装置
WO2013107140A1 (zh) * 2012-01-20 2013-07-25 华为技术有限公司 与循环冗余校验级联的极性码的译码方法和译码装置
USRE47936E1 (en) 2012-01-20 2020-04-07 Huawei Technologies Co., Ltd. Decoding method and decoding device for polar code cascaded with cyclic redundancy check
US9178532B2 (en) 2012-01-20 2015-11-03 Huawei Technologies Co., Ltd. Decoding method and decoding device for polar code cascaded with cyclic redundancy check
CN104823380A (zh) * 2012-12-14 2015-08-05 诺基亚技术有限公司 用于解码的方法和装置
WO2014173133A1 (zh) * 2013-04-27 2014-10-30 华为技术有限公司 极性码的译码方法和译码装置
CN104092470B (zh) * 2014-07-25 2017-07-07 中国人民解放军国防科学技术大学 一种Turbo码译码装置及方法
CN104092470A (zh) * 2014-07-25 2014-10-08 中国人民解放军国防科学技术大学 一种Turbo码译码装置及方法
ES2561935A1 (es) * 2014-11-06 2016-03-01 Universidad De Málaga Sistemas y métodos para turbo decodificación iterativa de alto régimen binario, baja tasa de error y baja complejidad
WO2016071546A1 (es) * 2014-11-06 2016-05-12 Universidad De Málaga Sistemas y métodos para turbo decodificación iterativa de bajo tasa de error y baja complejidad
ES2561913A1 (es) * 2014-11-06 2016-03-01 Universidad De Málaga Sistemas y métodos para turbo decodificación iterativa de baja tasa de error y baja complejidad
CN113992213A (zh) * 2021-10-28 2022-01-28 成都星联芯通科技有限公司 一种双路并行译码存储设备及方法
CN113992213B (zh) * 2021-10-28 2024-06-04 成都星联芯通科技有限公司 一种双路并行译码存储设备及方法

Also Published As

Publication number Publication date
CN101373978B (zh) 2011-06-15

Similar Documents

Publication Publication Date Title
CN101373978B (zh) 一种Turbo码译码方法以及装置
CN1168237C (zh) 移动通信系统中的分量解码器及其方法
US7657819B2 (en) Method and apparatus for termination of iterative turbo decoding
JP4227481B2 (ja) 復号装置および復号方法
CN101026439B (zh) 一种提高Turbo码译码速率的译码方法
US20010021233A1 (en) Soft-decision decoding of convolutionally encoded codeword
MXPA01009713A (es) Descodificador de map altamente paralelo.
CN101286817B (zh) 传统二进制和双二进制Turbo码通用译码方法
US20040025103A1 (en) Turbo decoding method and turbo decoding apparatus
CN103873073A (zh) 一种基于并行与加窗结构的Turbo码高速译码实现方法
CN106888026A (zh) 基于lsc‑crc译码的分段极化码编译码方法及系统
US6950975B2 (en) Acceleration of convergence rate with verified bits in turbo decoding
CN102064838A (zh) 基于新型无冲突交织器的低延迟并行Turbo译码方法
US7584389B2 (en) Turbo decoding apparatus and method
US20130007568A1 (en) Error correcting code decoding device, error correcting code decoding method and error correcting code decoding program
CN101971504A (zh) 用于多个代码类型的可编程解码的方法和设备
JP2004343716A (ja) 畳み込み符号化信号の伝送形式をブラインド検出する方法および復号器
CN109660265B (zh) 一种基于DVB-RCS标准的自适应双二元Turbo码编译码方法
CN110730011A (zh) 一种基于部分叠加的递归分组马尔可夫叠加编码方法
CN1129257C (zh) 串行回溯的最大似然解码方法及其使用该方法的解码器
CN109245846B (zh) 一种阶梯码解码方法和阶梯码解码装置
CN112332868B (zh) 一种基于DVB-RCS2的turbo并行译码方法
JP2003152556A (ja) 誤り訂正符号復号装置
CN103916141A (zh) Turbo码译码方法及装置
CN1133276C (zh) 一种高速并行级联码的译码方法及译码器

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20110615

Termination date: 20150820

EXPY Termination of patent right or utility model