一种双二进制CTC译码装置
技术领域
本发明涉及移动通信领域,具体涉及一种双二进制CTC(卷积Turbo码)的译码装置。
背景技术
法国的C.Berrou等人提出了一种称为Turbo码的编码方案,使人们朝着编码性能的极限迈进了一大步。Turbo码是一种级联码,由两个卷积码并行级联而成。每个子编码器采用了反馈型的卷积码编码器,子编码器之间采用了交织器来消除子码间的相关性。同时,Turbo码的译码部分采用了软输入和软输出的译码算法和迭代译码的方法,使子译码器间可以相互传递信息,保证编码信息的充分利用。两次编码输出序列越不相关,在译码端交换的信息量就越大。
Turbo码译码算法要求编码器的终止状态已知,最简单的方法是令所有的分量码的编码器的终止状态为零。在以卷积码为分量码的情况下,同时使得两个分量码编码器归零非常困难,通常采用额外的结尾比特使得第一个分量码归零,而不考虑第二个分量码的结束状态,WCDMA采用了这种方式,cdma2000两个分量都使用了结尾比特。序列较短时,这种处理方法降低了编码效率,对译码的性能也有一定的影响。为了解决这个问题,C.Berrou提出了基于咬尾tailbiting卷积码的Turbo码,这种编码方式解决了传统Turbo码的两个子编码器的编码状态难以同时归零问题,并在码率较高、交织长度较小时比传统Turbo码取得了更好的性能,而且很好的克服分量码-卷积码的码率损失问题。由于在实际通信系统中,数据帧长常常在100-200之间,所以这种基于tailbiting卷积码的Turbo码将会有很好的应用前景。
WiMAX系统的CTC码是基于卷积码面向分组的双二进制Turbo码,适合短分组数据的传输,具有优于传统二进制turbo码的性能,尤其在非常低的比特误码率BER和高码率的时候更加明显。它的分量码是双二进制循环递归系统卷积码double binary Circular Recursive Convolutional Code,简称DB-CRSC。CTC码与传统的卷积码turbo码比较,相同之处在于它的分量码采用了递归系统码;不同之处在于它的分量码采用了双二进制码而不是二进制码,以及格栅终止策略采用了tailbiting的方法。
中国发明专利申请“基于软状态估计的非二进制循环Turbo码译码装置”,公开号CN1700605,该发明装置为单一CTC译码器,其算法结构如图1所示,包括软状态估计模块、分量译码器和交织/解交织,其单一CTC译码器结构使得CTC译码速率比较低,不能满足IEEE 802.16e标准对译码速率的要求。
另一方面,目前关于单二进制Turbo码的译码算法研究比较多,但对双二进制的CTC(卷积Turbo码)的译码算法研究得比较少,对于EnhancedMax-Log-APP定点译码算法公式,文献(Y.O.C.Mouhamedou,P.Guinand,P.Kabal.“Enhanced Max-Log-APP and Enhanced Log-APP Decoding forDVB-RCS”.Proc,Int.Symp.Turbo Codes(Brest,France),Sept.2003:pp.259-262)作者研究了用于DVB-RCS的Max-Log-APP译码算法,该针对双二进制卷积Turbo码的MAX-LOG-MAP译码算法使用了下面的表达式来实现:
分支度量:
前向递推:
后向递推:
输出比特似然比:
但这种算法仍不太适合直接用于硬件实现。
发明内容
本发明需要解决的技术问题是提供一种双二进制CTC译码装置,可以提高译码速率,满足IEEE 802.16e标准对译码速率的要求。
本发明的上述第一个技术问题这样解决,提供一种双二进制CTC译码装置,包括:
总体输入FIFO模块,与输入端连接,缓冲接收双二进制CTC码;
总体输出FIFO模块,与输出端连接,缓冲输出译码结果;
并行级联的译码核心模块,通过各自输入端上的双口RAM模块与所述总体输入FIFO模块连接并通过各自输出端上的译码核心模块输出FIFO与所述总体输出FIFO模块连接,进行CTC译码;
输入调度模块,控制连接所述双口RAM模块与所述总体输入FIFO模块之间的连接,对所述二进制CTC码进行调度;
输出调度模块,控制连接所述译码核心模块输出FIFO与所述总体输出FIFO模块之间的连接,对所述译码结果进行调度。
按照本发明提供的译码装置,所述译码核心模块是二个或二个以上;这种多个级联的译码核心模块,能够提高译码速率。
按照本发明提供的译码装置,所述译码核心模块可以进一步采用发明人改进并提出的更适合于硬件直接实现的Enhanced MAX-LOG-MAP算法结构和流程:
(一)译码算法结构,如图1所示,其中符号约定是:
d:发送数据序列;
Ai,Bi,Y1i,W1i,Y2i,W2i:CTC编码器输出码字;
yS0,i,yS1,i,yP00,i,yP01,i,,yP10,i,yP11,i:信道输出码字;
z∈{01,10,11}:第一个分量码译码器输出比特似然比;
z∈{01,10,11}:第二个分量码译码器输出比特似然比;
L(z)(di),z∈{01,10,11}:发送数据序列的先验的对数似然比;
z∈{01,10,11}:接收系统符号的后验对数似然比;
z∈{01,10,11}:第一个分量码译码器输出的外信息;
z∈{01,10,11}:第二个分量码译码器输出的外信息;
SF:外信息修正因子常数;
uS1,k,uS0,k,uP1,k,uP0,k:编码器输入比特对为uS1,k,uS0,k(BPSK调制),编码状态s′跳变到s,编码器输出校验位uP1,k,uP0,k(BPSK调制)。
(二)Enhanced MAX-LOG-MAP算法简略流程:
在译码过程中,第一个分量码译码器输出的外信息
经过交织以后得到
作为第二个分量码译码器的先验信息,第二个分量码译码器输出的外信息
经过解交织以后得到
作为第二个分量码译码器的先验信息。在第一次迭代的时候,第一个分量码译码器的输入先验信息被初始化为0。第二个分量码译码器输出的比特似然比
经过解交织后硬判决输出
作为译码结果。
(三)Enhanced MAX-LOG-MAP算法:
①算法输入:
信道信息:yS1,i,yS0,i,yP1,i,yP0,i,(1≤i≤N)
先验信息:L(z)(di),z∈{01,10,11},(1≤i≤N)
状态度量初值:
②算法输出:
后验信息:
z∈{01,10,11},(1≤i≤N)
状态度量终值:
③Enhanced MAX-LOG-MAP算法详细流程:
for s=0,...,7
end
2.计算分支度量
其中uS1,k,uS0,k,uP1,k,uP0,k∈{+1,-1}
for k=1,...,N
for z∈{00,01,10,11}
end
end
for i=1,...,(N+WIN_SIZE)
for s=0,...,7
k=i mod N
k-1=(i-1) mod N
end
end
for i=N-1,...,-WIN_SIZE
for s′=0,...,7
k-1=i mod N
k=(i+1) mod N
end
end
5.计算输出比特似然比
for k=1,...,N
for z∈{01,10,11}
end
end
(四)外信息计算算法:
for 1≤i≤N
for z∈{01,10,11}
end
end
for 1≤i≤N
for z∈{01,10,11}
end
end
L
c 1(z)(d
i)等于
L
c 2(z)(d
i)等于经过交织以后的
接收系统符号的后验对数似然比
z∈{01,10,11}的计算:
for 1≤i≤N
end
(五)译码输出硬判决算法:
按照下面公式完成输出比特的硬判决:
for k=1,...,N
end switch
end
采用这一套算法的本发明译码核心模块更容易实现。
按照本发明提供的译码装置,所述译码核心模块包括:
主控制器,控制连接译码核心模块各部件并协调各部件共同完成CTC译码;
CTC分量码译码器,经主控制器与所述双口RAM模块连接,采用max-log-map算法进行迭代译码;
译码迭代结束判断及硬判决打包器,输入连接所述CTC分量码译码器、输出连接所述译码核心模块输出FIFO,用于根据设定硬判决准则和最大允许迭代次数结束迭代并完成打包;
交织/解交织地址生成器,经主控制器与所述CTC分量码译码器连接,用于对分量码的输入输出信息进行交织/解交织;
存储器,用于存储CTC译码的过程信息。
按照本发明提供的译码装置,所述CTC分量码译码器包括从输出到输入的硬判决单元、完成对数似然比和外信息计算的L和Le计算单元和与L和Le计算单元连接的完成前向状态度量计算的Alpha计算单元以及完成后向状态度量计算的Beta计算单元。
按照本发明提供的译码装置,所述Alpha计算单元和Beta计算单元都内置完成分支度量计算的Gamma计算子单元。
按照本发明提供的译码装置,所述Beta计算单元是二个。
按照本发明提供的译码装置,所述CTC分量码译码器还包括连接输入端与所述Alpha计算单元和Beta计算单元之间依次连接的复用器、4块循环缓冲结构的RAM和选择器。
按照本发明提供的译码装置,所述交织/解交织地址生成器包括依次电连接的交织参数存储器单元、交织地址生成电路单元和交织地址存储器单元以及控制连接所述交织地址生成电路单元的交织地址生成控制单元。
按照本发明提供的译码装置,所述交织地址存储器单元是交织/解交织地址存储RAM,交织和解交织地址存储RAM各2块,共4块。
按照本发明提供的译码装置,所述过程信息包括外信息、交织地址和解交织地址;所述存储器对应分为外信息、交织地址和解交织地址存储器单元。
本发明提供的双二进制CTC译码装置,采用并行级联CTC译码器以提高译码吞吐量,译码器装置的结构是可扩展的,可根据译码吞吐量的要求增加CTC译码器的数量,从而能够实现双二进制卷积Turbo码的高速译码,满足IEEE 802.16e标准对译码速率的要求。
附图说明
下面结合附图和具体实施例进一步对本发明进行详细说明。
图1是现有技术CTC译码装置示意图。
图2是本发明CTC译码装置译码核心模块采用译码算法结构框图。
图3是本发明CTC译码装置电路结构框图。
图4是图3所示装置中译码核心模块结构框图。
图5是图3所示装置中交织/解交织地址生成模块结构框图
图6与图5对应的交织/解交织地址生成数据通路。
图7是图4所示译码核心模块中分量码译码器结构框图。
图8是图7所示分量码译码器中Gamma计算子单元结构框图。
图9是图7所示分量码译码器中Alpha计算单元结构框图。
图10是图7所示分量码译码器中Belta计算单元结构框图。
图11是图7所示分量码译码器中L和Le计算单元结构框图。
具体实施方式
如图3所示,本发明CTC译码装置实施例包括总体输入FIFO模块31、总体输出FIFO模块32、输入调度模块33、输出调度模块34、译码数据存储器35、译码核心模块输出FIFO 36和两个并行级联的译码核心模块1,即:译码核心模块_1和译码核心模块_2,其中:总体输入FIFO模块31,其主要功能是完成接收发送过来得CTC译码数据包;译码数据存储器35,其主要功能用于存储译码数据,每个译码核心模块都有一个双口RAM;输入调度器模块33,其主要功能采用公平轮循调度方法对译码数据进行调度;输出调度器模块34,其主要功能采用公平轮循调度方法对译码数据进行调度;译码输出FIFO_1 36,其主要功能是存放译码核心模块_1译码结果,译码输出FIFO_2 36,其主要功能是存放译码核心模块_2译码结果;总体输出FIFO模块32,其主要功能是存储CTC译码数据包;译码核心模块1,其主要功能是完成CTC译码。
如图4所示,译码核心模块_1、译码核心模块_2结构完全相同,为了实现吞吐量13Mbps,所以译码器中使用两个译码核心模块。该译码核心模块1包括主控制器41、CTC分量码译码器42、译码迭代结束判断及硬判决打包器43、交织/解交织地址生成器44以及外信息451、交织地址452和解交织地址存储器单元453,其中:
(一)主控制器41,是译码核心模块的控制部件,其主要功能如下:
生成模块各部件接口时序和使能控制信号,计算CTC分量译码器42的迭代次数等,并在多次迭代后自动停止。
(二)交织/解交织地址生成器44,其主要功能如下:
在CTC译码的过程中,需要对分量码的输入输出信息进行交织/解交织,在本发明CTC分量译码器中将生成交织/解交织地址存储在RAM中,在交织/解交织的时候读取相应的地址。交织地址生成器41,如图5所示,包括交织参数存储器单元51、交织地址生成电路单元52、交织地址存储器单元53和交织地址生成控制单元54。
交织/解交织操作是通过控制数据RAM的读出地址来完成的,就是数据顺序写入RAM,按照交织/解交织地址读出数据即完成对应的交织/解交织操作。
在一个FEC块开始译码的时候,第一个半次迭代在译码的时候不需要使用交织/解交织模块,在这个时间内交织地址生成模块按照包头中的包类型参数读取相应的交织参数生成交织地址存储到RAM中。
在本发明CTC分量译码器中用了四块交织/解交织地址存储RAM,分别有两块交织地址RAM和两块解交织地址RAM。其中输入系统软信息和外信息需要一对交织/解交织地址RAM,输出硬判决和迭代终止检测模块需要另外一对交织/解交织地址RAM。
交织算法如下:
交织器需要P0,P1,P2,P3四个参数,这些参数和调制方式、码率和码长都有关系,在16e标准中提供了相应的表格。交织过程分两步:
第一步:比特对交替置换
for j=0,...,N-1
if(j mod 2==0)(B,A)=(A,B)
end
第二步:下面函数Pi(j)提供了比特对j的交织地址i
for j=0,...,N-1
switch(j mod 4):
case 0:i=(P0·j+1)mod N
case 1:i=(P0·j+1+N/2+P1)mod N
case 2:i=(P0·j+1+P2)mod N
case 3:i=(P0·j+1+N/2+P3)mod N
end switch
end
解交织算法为交织算法的逆过程。
生成交织地址的算法比较复杂,涉及到乘法器和除法器,流水线比较长。在本交织器中将采用四路并行计算来同时生成四个交织地址,数据通路如图6所示。
对于信息长度为480-b的FEC块(QPSK,RATE 1/2,10-SLOT),生成交织地址需要的cycles数:
480/(2*4)+Pipeline_overhead=60+Pipeline_overhead
480-b的FEC块的格栅数为240,使用普通的串行结构完成一次分量码译码最少需要240个cycles,所以有足够时间生成交织地址。
(三)译码迭代结束判断及硬判决打包器43,其主要功能如下:
采用硬判决相等准则作为迭代结束判断准则。在完成每个分量码译码的时候,分别对
和
进行硬判决,如果两个硬判决结果相等,则结束当前码字译码;如果两个硬判决结果不相等,则看是否达到最大允许迭代次数,如果达到则结束当前码字译码,否则继续迭代。在当前迭代输出数据的时候,将上半次迭代的输出从RAM中读出完成比较,在读出数据的时候需要完成相应的交织或解交织操作。采用硬判决相等准则可以有效减少译码迭代次数。
输出硬判决数据打包包括将2-b硬判决数据打包成32-b并且添加包头信息。
按照下面公式完成输出比特的硬判决:
for k=1,...,N
end switch
end
(四)CTC分量码译码器42,其主要功能如下:
采用单滑动窗结构。在硬件实现中,我们使用的滑动窗为32个格栅。在每个窗长度时间分别计算三个滑动窗长的数据,分别是无效Beta计算、有效Alpha计算和有效Beta计算。一个分量码译码器42包括一个Alpha计算单元73、两个Beta计算单元74、一个L/Le计算单元72和一个输出硬判决单元71,每个Alpha计算单元73和Beta计算单元74内部都有单独的Gamma计算子单元。在计算的时候每个窗长的数据要相继用到三次,分别是无效Beta计算、有效Alpha计算和有效Beta计算。为了和该计算结构相匹配,在分量码译码器42数据输入端使用4块RAM组成循环缓冲结构75,循环的单位是一个窗长的数据。在每个窗计算时间,三块RAM用于给一个Alpha计算单元和两个Beta计算单元提供输入数据,另一块RAM用于写入新的数据。
由于16e中的CTC采用循环递归系统卷积码作为分量码,在每次迭代Alpha/Beta开始计算以前必须确定Alpha/Beta计算的初值。该初值通过在Alpha/Beta开始计算以前提前计算一个窗的Alpha/Beta来获得,前一个Alpha/Beta无效计算窗的终值作为下一个Alpha/Beta有效计算窗的初值。Alpha的计算比Beta的计算提前一个窗长,当前Alpha窗Alpha被算出来以后存储在Alpha缓存中,在下一个窗时间计算Beta的时候将该Alpha逆序从Alpha缓存中读出和Beta一起用于计算L和Le。
如图7所示,CTC分量码译码器42包括复用器75、4块循环缓冲结构的RAM 76、选择器77、Alpha计算单元73、Belta计算单元74、L和Le计算单元72;Alpha计算单元73和Belta计算单元74都包含Gamma计算子单元,其中:
(一)Gamma计算子单元,其计算结构如图8所示,其主要功能如下:
根据计算公式完成分支度量计算。
分支度量
的计算公式如下,其中u
S1,k,u
S0,k,u
P1,k,u
P0,k∈{+1,-1}
for k=1,...,N
for z∈{00,01,10,11}
end
end
上式中最后一个归一化项通过仿真发现对性能影响很小,可以考虑省略。
(二)Alpha计算单元,其主要功能如下:
根据计算公式完成前向状态度量计算。前向状态度量
的计算结构如图9所示,每个cycle可以计算一个格栅。
for i=1,...,(N+WIN_SIZE)
for s=0,...,7
k=imod N
k-1=(i-1)mod N
end
end
(三)Beta计算模块,其主要功能如下:
根据计算公式完成后向状态度量计算。反向状态度量
的计算结构如图10所示,每个cycle可以计算一个格栅。
for i=N-1,...,-WIN_SIZE
for s’=0,...,7
k-1=imod N
k=(i+1)mod N
end
end
(四)L和Le计算模块,其主要功能如下:
根据计算公式完成对数似然比和外信息的计算。L和Le计算的计算结构如图1l所示。L和Le计算路径比较长,但是其计算只有前馈结构,可以使用流水线技术提高吞吐量。
for k=1,...,N
for z∈{01,10,11}
end
end
的计算公式如下:
按照下式计算
其中SF=0.75:
for 1≤i≤N
for z∈{01,10,11}
end
end
for 1≤i≤N
for z∈{01,10,11}
end
end
接收系统符号的后验对数似然比
z∈{01,10,11)的计算:
for 1≤i≤N
end
进一步,补充说明本发明实施例译码核心模块1中部件基本要求:
译码数据存储器35用于存储译码前的数据,容量要求为4KX36双口RAM存储器;
交织地址存储器单元452,用于存储动态产生好的译码数据的交织地址,容量为4KX13;
解交织地址存储器单元453,用于存储动态产生好的LLR数据的交织地址,容量为4KX13;
译码输出FIFO 36,容量需求为1KX32;
外信息存储器单元451的容量需求为4KX24,用于缓存上次迭代的外信息,作为本次迭代的外信息。
最后,总结说明本发明实施例CTC译码装置的工作流程:
总体输入FIFO模块31接收到译码数据包存储下来,输入调度器模块33根据两个译码核心模块的空闲状态决定采用哪个译码核心模块1进行译码。若译码核心模块_1空闲,则译码数据包ram_dat_1送给译码核心模块_1进行处理,译码核心模块_1译出数据后,将译码结果cfifo_dat_1送到译码输出FIFO_1中存储;若译码核心模块_2空闲,则译码数据包ram_dat_2送给译码核心模块_2进行处理,译码核心模块_2译出数据后,将译码结果cfifo_dat_2送到译码输出FIFO_2中存储。译码核心模块1中,主控器41从译码数据存储器35中将数据ram_dat读出,将数据ys,yp,la送给分量码译码器42。在分量码译码器42中,进行Max-log-map算法计算,Alpha计算单元73进行前向状态度量计算,Beta计算单元74进行后向状态度量。Alpha计算单元73前向状态度量计算比Bet计算单元74的后向状态度量计算提前一个窗长。当前滑动窗的前向状态度量被算出来以后存储在前向状态度量缓存中,在下一个窗时间计算后向状态度量的时候将该前向状态度量逆序从前向状态度量缓存中读出和后向状态度量一起送入L和Le计算单元72用于计算L和Le。分量码译码器42完成Max-log-map算法计算后,将结果llr送给译码迭代结束判断及硬判决打包器43。译码迭代结束判断及硬判决打包器43进行译码迭代结束判断,若满足迭代结束判断准则,则译码迭代结束,然后进行硬判决,再将2比特硬判决数据打包成32比特后送给译码输出FIFO 36。输出调度器模块34根据译码输出FIFO_1和译码输出FIFO_2的空满状态采用公平调度的方法,将译码结果送给总体输出FIFO模块32存储下来。