现场实时产生宽带码分多址Turbo码内交织器算法及其装置的制作方法

文档序号:7631688阅读:229来源:国知局
专利名称:现场实时产生宽带码分多址Turbo码内交织器算法及其装置的制作方法
技术领域
本发明涉及信道纠错编码,具体涉及宽带码分多址Turbo码内交织器现场实时产生的算法和硬件实现。
宽带码分多址(WCDMA)是第三代移动通信系统标准化组织3GPP(3rdGeneration Partnership Project)提出的无线传输技术(RTT)方案。3GPP的技术规范中将Turbo码作为误码率10-6以下数据业务的信道编码。Turbo码是一种并行级联码,需要交织器对原信息比特序列重新组合后输入第二个系统递归卷积编码器中进行编码。而译码时也需要使用相应的交织器给出信息比特重新组合的具体方式。
3GPP给出了Turbo内交织器算法(见附录一),可唯一确定40-5114间任意长度的交织器。现简述其主要步骤如下Turbo内交织器的产生分为两个阶段,一为母交织矩阵的计算,二为无效交织位的删除。母交织矩阵的深度需确保大于等于目标交织器的深度,而矩阵变换后得到的母交织器中可能有一些超出目标交织器深度的位,必须删除后得到目标交织器。可见,第二阶段的算法比较简单,只要对交织位和目标交织器的深度的大小作出判断就可以实现,而算法的重点在于第一阶段。
母交织矩阵的计算又分为三个步骤。
首先是确定母交织矩阵的行数(R)和列数(C),以及质数核p。列数的确定相对简单,为5、10或20,由目标交织器深度(K)决定。然后确定质数核,p应为满足(p+1)×R≥K的最小质数。行数C则取为p-1、p或p+1,在保证C×R≥K的前提下尽量取较小者。
第二步是母交织矩阵的行内变换。行内变换模式各行都不相同,但都由同样的基序列变换而来。基序列&lt;s(j)&gt;j∈{0,1,…,p-2}的由质数核p唯一确定s(j)=(v×s(j-1))modp,j=1,2,…,(p-2),且s(0)=1其中,v由3GPP提供的表查找而得,和p有直接对应关系(见附录一Table2)。而各行的变换模式是通过对基序列的抽取实现的,第i行的抽取序列由质数ri完全刻划,而各行的ri可组成一个质数序列&lt;ri&gt;i∈{0,1,…,R-1}。&lt;ri&gt;i∈{0,1,…,R-1}从&lt;qi&gt;i∈{0,1,…,R-1}而来rT(i)=qi,i=0,1,…,R-1,其中,&lt;Ti&gt;i∈{0,1,…,R-1}是3GPP规范给出的行间变换模式,根据目标交织器的深度有在4种模式中选择(见附录一Table3)。而&lt;qi&gt;i∈{0,1,…,R-1}是这样定义的q0等于1,&lt;qi&gt;i∈{1,…,R-1}是最小的质数序列,且序列中各质数须和(p-1)互质。可以看到,基序列的长度仅为p-1,而母交织矩阵的列数则可能为p-1、p或p+1,其算法如下<pre listing-type="program-listing"><![CDATA[ if(C=p)thenUi(j)=s((j×ri)mod(p-1)),j=0,1,…,(p-2),and Ui(p-1)=0,where Ui(j)is the original bit position of j-th permuted bit of i-th row. end if if(C=p+1)thenUi(j)=s((j×ri)mod(p-1)),j=0,1,…,(p-2). Ui(p-1)=0,and Ui(p)=p,where Ui(j)is the original bit position of j-th permuted bit ofi-throw,andif(K=R×C)thenExchange UR-1(p) with UR-1(0).end if end if if(C=p-1)then Ui(j)=s((j×ri)mod(p-1))-1,j=0,1…,(p-2), where Ui(j) is the original bit position of j-th permuted bit of i-th row.end if]]></pre>第三步是母交织矩阵的行间变换。3GPP根据交织器长度给出了四种变换模式,只要将母交织矩阵各行按新模式排列即可。
总结3GPP规范的Turbo内交织算法,发现用FPGA实施具有以下难点(1)母交织矩阵的计算是逐行进行的,但输出却是列序的,使得必须先存储全部母交织矩阵然后才能输出,因此需要的片内存储空间至少应满足最大交织深度所要求的13bit×5114=66,482bit对FPGA内部存储器来说是相当可观的开销。(2)母交织矩阵计算和输出方向的不一致还导致时间复杂度的增加。由于交织器必须在计算完整张表后才能开始输出数据,Turbo译码器在此之前即使已完成一次迭代算法,也必须等交织表计算完毕才能工作,降低了交织器和译码器的并行度。(3)母交织矩阵的行间变换和行内变换过程中大量使用乘法和取模运算,在硬件电路实现中开销过大。
目前,对现场实时产生Turbo内交织器的算法研究较少,主要采用对少数几种业务中涉及到的交织器事先存储的方法。现场产生Turbo交织器的算法国外有在DSP上实现的例子,但对其作大规模的简化得以在单片FPGA上实现,并做到和Turbo译码器并行工作,集成于单芯片上,国内外尚无相关先例和研究成果的报导。
本发明目的是针对上述现有技术的不足,提出现场实时产生交织器的算法。新算法顺序计算并输出交织器,可以和基于滑动窗算法的Turbo译码器协同工作,避免了整张交织表的存储,大大降低了存储器需求。由于新算法实现的交织器仅需要少量逻辑和存储资源即可实现,为集成Turbo译码器和交织器于单片FPGA创造了条件。
本发明技术方案描述如下
首先,注意到原算法母交织矩阵的计算和输出方向不一致是导致空间和时间复杂度增加的主要原因,新算法采取了不同的算法结构。
观察行间变换和行内变换算法,假设变换后的母交织矩阵为MIII(x,y),原交织矩阵为MI(x,y),则可以写出它们位元的对应关系MIII(x,y)=MI(T(x),UT(x)(y))因为T{},S{},U{}都是由交织深度唯一确定的,故原交织矩阵MI相应位元的行标和列标之间没有耦合给定变换后母交织矩阵位元的位置(x,y),可以写出最终母交织表中它的值为MIII(x,y)=T(x)×C+UT(x)(y)=Rb(x)+UT(x)(y)所以,母交织矩阵的每个值都有两部分组成,一是反映行首地址偏移量的Rb(x),还有每行中该列的相对偏移UT(x)(y)。Rb(x)由固定数组的乘法定义,实时产生比较方便,更可以事先计算并储存,供输出交织表时随时调用。UT(x)(y)的定义涉及递推关系,每行中某列的偏移和该行前一列的偏移有关,故现场产生时需要把上一列各行内偏移量计算中同递推有关的参数保存起来,这样交织器算法实现中就不必考虑列序计算的特殊性了。这种算法类似于计算机软件的现场保护和恢复机制,好比把列序计算分解为顺序的行序计算的中断,通过对行序计算进程的控制达到列序计算并输出的效果。
新算法的结构示意图如图1所示,可以把算法分为三个步骤。第一步和原算法一致,都是根据目标交织器的深度确定质数核和母交织矩阵的行数和列数。第二步是计算变换序列Rb,s和q。s和q和原算法的定义一致,Rb是新算法定义的,用数学表达式可以写为Rb(j)=T(j)×C第三步列序计算并输出交织表是原算法中没有的,它是本算法思想的集中体现。简而言之,它的作用就是在已知Rb,b,s,q的情况下,计算MIII(x,y)=T(x)×C+UT(x)(y)=Rb(x)+UT(x)(y)
的值。Rb的计算已在第二步完成,所以只需要解决UT(x)(y)的计算。原算法分C=p-1,p,p+1三种情况讨论,这里按行号对它们统一处理。
<pre listing-type="program-listing"><![CDATA[If y=0if C=p+1 and K=R×C and T(x)=R-1UT(x)(y)=pElse if C=p-1 UT(x)(y)=s(0)-1ElseUT(s)(y)=s(0)End ifElse If y<=p-2UT(x)(y)=s((y×rT(x))mod(p-1))=s((y×q(x))mod(p-1)) =s(CPq(x)(y))if C=p-1UT(x)(y)=UT(x)(y)-1End ifElse if y=p-1UT(x)(y)=0Else if y=p and K=R×C and T(x)=R-1UT(x)(y)=s(0)ElseUT(x)(y)=pEnd if]]></pre>可见,UT(x)(y)的计算除了简单的逻辑判断和常数的赋值外,需要计算CPq(x)(y)。可以把CPq(x)(y)看成前面提到过的“行内变换基序列的抽取序列”。y是由0到C-1递增的序号,而抽取序列的性质由该行对应的抽取质数列q中的第x个质数决定。上面已经隐含了CPq(x)(y)表达式CPq(x)(y)=(y×q(x))mod(p-1),y=0,1,…p-2至此,新算法已完成了母交织矩阵的计算,并且其算法完全适合FPGA实现。而且,以上算法的描述已给出整个交织器的框架。
本发明有益效果1.可以和基于滑动窗算法的Turbo译码器协同工作,避免了整张交织表的存储,大大降低了存储器需求。
2.新算法实现的交织器仅需要少量逻辑和存储资源即可实现,为集成Turbo译码器和交织器于单片FPGA创造了条件。


图1为交织算法结构2为Rb计算模块电路示意3为s序列计算电路示意4为q序列计算电路图5为交织表计算电路图6为译码器和交织器接口示意图下面就各序列和参数的计算作具体说明,并给出可供参考的电路图和相关说明。
步骤一的实现。本步骤要计算的参量有母交织矩阵的行数R,列数C,质数核p。行数R的计算直接用VHDL的条件赋值语句实现如下R<= 5 when 40≤K<160 else10 when(160≤K<201)or(480<K<531)else20 when others;列数C和质数核p的计算是相关的,依据算法,先计算p,然后求C。p是满足(p+1)×R≥K的最小质数,直接计算会牵涉乘法、质数检验等复杂的运算,所以要采取技术处理。定义p_id=「(K/R-7)/2」,然后查找表给出相应的质数核偏移p_offset,从而得到质数核p=(p_id+p_offset)×2+7这里的除法,除数为R=5,10或20。由于除数之间是2倍递增的,所以只要构造除以5的运算模块就可以实现此除法。被除数最大为(5114-7×120)/8<535,故构造1024以内5的除法运算为x/5」=((((x>>2+x)>>1+x)>>3+x)>>1+x)>>3(48)&lt;证明&gt;
令t=2051024x,]]>则t-x5=x1024&CenterDot;15&lt;15]]>,即x5&le;t&lt;x+15]]>有 所以, 而,2051024=18(1+12(1+18(1+12(1+14))))]]>故 将其写为移位加法的形式即得证。证毕。#这样,除法被转换为一系列移位加法,用FPGA实现很方便。而p_offset可用以下查找表实现
表1、p_offset查找表

由于上表中,地址p_id取值在0~124之间,数据p_offset取值在0~6之间,所以只需要建立125×3=375bit的p_offset查找表就可以完成对质数核p的求取。
利用p_offet和p_id的性质,母交织矩阵列数C的求解变得很简单C<=53 when 480<K<531 elsep-1 when p_offset>0 elsep when R×p≥K else
p+1 when others;步骤二需要计算Rb,q和s三个序列。Rb序列比较简单,只是一个数目为R,级差为C的等差数列,然后经一定模式的地址映射即得。地址映射的模式反映了行间变换模式,也是整个交织器计算用到行间变换模式的地方。行间变换模式由目标交织器深度决定,并对其取逆后结果如下表所示表2、逆行间变换模式表

其具体电路图如图2所示Rb内存的数据在锁存器的控制下每次递加C,且能在clr信号的控制下初始化。地址则由计数器产生,并在行间变换模式查找表T-1的作用下反映出行间变换的作用。当计数大于等于R时,表示序列已计算完毕,clr信号有效,锁存器和计数器清零,随时准备开始下一次计算。
s的计算难点在于常数乘法的实现和取模运算。为此,定义算子Δ

当0≤a<K,0≤b<K时,有a&Delta;Kb=(a+b)modK]]>观察s表达式中常数v的取值,发现乘法可以化为以下运算中的一个Y2=X&Delta;KX,Y3=Y2&Delta;KX,Y5=Y2&Delta;KY3]]>Y6=Y3&Delta;KY3,Y7=Y2&Delta;KY5,Y19=Y6&Delta;KY6&Delta;KY7]]>这样,可以给出s序列计算电路,如图3所示
可以看到,上面电路的主要时延在于Δ算子的多阶迭代。阶数最多的是v=19的情形,需要5阶,但这样的情况只有在p=191时才会出现,概率很低。若对这种情况单独查表处理,则可以把阶数控制在3,大大提高时延特性。
q序列的计算主要涉及质数判断、互质判断、取模运算等。由于最大的质数核为257,而最小的待判断质数为7,辗转相减需要大量时钟周期才能实现取模运算,时延过大。经计算机搜索,发现q质数列必是以下序列的一部分{1,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89}而如何从中选取取决于质数是否和p-1互质。这可以通过查找表实现表3、和p-1非互质质数查找表

从表中看到,除239外,其他质数都只需要排除不超过一个的质数,实现比较方便。p=239的情况下也不过2个质数,单独处理也容易实现。还有,原质数序列差分后储存,可以大大减少存储空间,如下所示dlt_q={(1),6,4,2,4,2,4,6,2,6,4,2,4,6,6,2,6,4,2,6,4,6}初始的1不存储,更可约去共因子2,使存储更简便。q序列计算电路如图4所示。
第三步就可以计算并输出交织表了。先用Δ算子化简原CP序列计算公式中的乘法和取模,得 其中x为0到R-1的整数。另外,为了便于统一处理,扩充定义 这样,可以得到输出交织表电路图如图5所示。
其中,用三维方框表示的模块主要完成时序控制。因为母交织矩阵是按序输出的,从母交织矩阵到目标交织表的删节只要用比较器判断是否有效地址,并控制一个锁存器就可以实现,非常简单。若将比较器的输出接到外部端口上还能提供目标交织表的采样时钟。
另外值得一提的是本交织器和滑动窗Turbo译码器的接口。由于本交织器可以按序输出交织表,使交织表在产生过程中没必要全部存储。而Turbo译码器采用滑动窗机制又令交织表的使用没有必要全部存储,充分发挥了本交织器的功效。鉴于Turbo译码器对交织表是顺序寻址的,而交织表的产生也是顺序进行的,所以FIFO更适合担当二者并行协同工作的接口。
下面具体说明这种协同工作的原理,译码器和交织器的接口如图6所示。Turbo译码器先进行奇数次MAP运算,此时不需要使用交织器,可以利用这个间隙完成交织算法第一、第二阶段的内存初始化工作,并计算首批交织位数据存入FIFO直至满。当进行偶数次MAP运算时,每当译码器读取一个交织位就计算一个交织位并填入FIFO。可见,FIFO是为了匹配译码器和交织器的速率而设的当交织器速率较高时,FIFO一直为满,译码器永远可以有充足的数据供应;当译码器速率较高时,交织器一直全速工作,FIFO初始的那些数据维持着二者的速率差,直至完成此次迭代过程。译码器读FIFO速率恒定,设平均cycle_per_read个时钟周期读一次;交织器虽有删节,但也均匀分布,可以认为速率基本恒定,设为平均cycle_per_write个时钟周期可产生一个交织位。若cycle_per_write≤cycle_per_read,则FIFO的容量可以设得较小,只要应付峰值读写速度差即可。但若cycle_per_write>cycle_per_read,FIFO要保证不被读空,容量至少为(单位为“个交织位”) 其中,N是Turbo译码块的长度,也是目标交织器的深度。可见,FIFO的容量下限和译码帧长度成正比,又和读写速率之比有关。
权利要求
1.现场实时产生宽带分多址Turbo码内交织器算法,其特征在于按以下步骤(1)确定母交织矩阵行数R、列数C及质数核P(2)计算变换序列RB{}、行内变换基序列S{}及行内变换质数列q{}(3)列序计算并输出交织表
2.如权利要求1所述的现场实时产生宽带码分多址Turbo码内交织器算法,其特征在于(1)所述计算变换序列Rb时基于数学表达式Rb(j)=T(j)×C(2)所述列序计算并输出交织表,其作用在于在已知Rb、s和q的情况下,计算MIII(x,y)=T(x)×C+UT(x)(y)=Rb(x)+UT(x)(y)
3.现场实时产生宽带码分多址Turbo码内交织器算法的装置,其特征在于(1)在步骤(1)的计算中,行数R的计算直接用VHDL的条件赋值语句,质数核P的计算中将除法转换为一系列移位加法,再以FPGA实现。(2)在步骤(2)的序列Pb计算时,在Rb计算模块电路中Rb内存的数据在锁存器的控制下每次递加C,且能在clr信号的控制下初始化。地址则由计数器产生,并在行间变换模式查找表T1的作用下反映出行间变换的作用。在序列s计算电路中,主要时延在于Δ算子的多阶迭代阶数最多时可通过查表处理将阶数降低。在序列q的计算电路中原质数序列差分后储存,以大大养活存储空间。(3)在交织表计算电路中,从母交织矩阵到目标交织表的删节用比较器判断是否有效地址,并控制一个锁存器予以实现。
全文摘要
本发明目的是针对现有技术的不足,提出现场实时产生交织器的算法。新算法顺序计算并输出交织器,可以和基于滑动窗算法的Turbo译码器协同工作,避免了整张交织表的存储,大大降低了存储器需求。由于新算法实现的交织器仅需要少量逻辑和存储资源即可实现,为集成Turbo译码器和交织器于单片FPGA创造了条件。
文档编号H04J13/00GK1336738SQ0112019
公开日2002年2月20日 申请日期2001年7月11日 优先权日2001年7月11日
发明者阮铭, 徐友云, 罗汉文, 宋文涛 申请人:信息产业部电信传输研究所, 上海交通大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1