|
Implementation for Long TFCI for 8PSK decoding based on ZSP500 core in td-SCDMA
摘要:在td-SCDMA系统的物理层协议中,对传输组合格式指示TFCI采用了基于RM (Reed_Muller)的超码编码方式。根据TFCI的长度不同,编码的方式又略有变化。本文主要讨论了8PSK的较长TFCI(6-10bit)的译码算法,此算法首先恢复打孔比特并进行消掩,然后采用了快速哈达码变换与超码译码结合的方法进行译码。本文在进行算法分析的基础上,阐述了8PSK的较长TFCI译码算法在ZSP500 DSP核上的实现,并给出了程序实现步骤。
关键字:TFCI译码 ZSP500 FHT
Abstract: TFCI(Transport Format Combination Indicator) is coded by a super code method based on RM(Reed_Muller) in td-SCDMA system. The coding method is different based on different TFCI length. The decoding algorithm of long TFCI(6-10bit) for 8PSK is pointed out. In the algorithm, puncture bits are resumed and mask is removed firstly, FHT(Fast hadamard transformation) combined with super code decoding is used then. Based on the algorithm, the implementation on ZSP500 DSP core and process in program are described.
Keyword: TFCI decoding ZSP500 Fast Hadamard Transformation
1 引言
td-SCDMA系统中,上行信道编码典型流程为:给每个传输模块加CRC,传输模块级连/码块分段,信道编码,无线帧尺寸均衡,交织(分两步),无线帧分段,速率匹配,传输信道的复用,比特加扰码,物理信道的分段,子帧分段,映射到物理信道。下行信道解码是上行编码的逆流程。其中,传输格式组合指示(TFCI)是用来指示CCTrCh信道中的传输格式组合。根据TFCI,可以知道当前各个传输信道中的传输时间间隔(TTI)、传输块数量(Transport Block Number)、传输块大小(Transport Block Size)等参数。所以TFCI译码的正确性,是保证后面的信道解码的一个重要前提。
由于ZSP500的低成本、低功耗、强大的多媒体性能,适用于需要高性能信号处理的多媒体、语音、无线和其它应用,使ZSP架构迅速成为基于td-SCDMA、CDMA2000、WCDMA等标准的3G无线应用设计中的DSP理想选择[3]。基于ZSP500 DSP核,TFCI译码算法实现起来更为简洁。
2 8PSK的较长TFCI译码算法
记TFCI中的码字数NTFCI ,码字中的比特记为bk ,其中k = 0, …, NTFCI-1 。当进行8PSK
的较长TFCI编码时,将会把TFCI分为4个均匀部分在2个子帧中进行发送[4],如图1。
在3GPP的物理层协议中对8PSK的较长TFCI(6-10bit)采用了二阶Reed-Muller码的一个(64,10)子码进行编码,之后64bit中有16个bit被打孔,剩下48bit做为此次TFCI编码输出。定义TFCI 比特为a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9,其中a0是LSB,a9是MSB。TFCI比特须对应于RRC层定义的TFC 指示(用无符号的二进制格式表示),为相关DPCH无线帧的CCTrCH的TFC提供参考。
![]()
500)this.style.width=500;" border=0>
输出码字比特bi为:
![]()
500)this.style.width=500;" border=0>,式中i∈[0,48],10个基本序列如下:
M0=101101101001101101010010011011001101011011001001
M1=011011011011011011001001001001011011001001011011
M2=000111000111000111000111000111000111000111000111
M3=000000111111000000111111000000111111000000111111
M4=000000000000111111111111000000000000111111111111
M5=000000000000000000000000111111111111111111111111
M6=111111111111111111111111111111111111111111111111
M7=011101110111010011000011111010001011101111100001
M8=100111101001110101011101011101001010111001111100
M9=001000110011101100110010101111111101011001100110
其中,M6为全1序列,MO,M1,M2,M3,M4和 M5由 Walsh码发生器产生,M7,M8和 M9由掩码发生器产生。
较长TFCI可采用超码译码法,超码译码原理:在接收的双极性码字中依次乘前面的双极性化后的掩码集,然后对消除掩码的码字采用基础码集的译码算法(在此为一阶RM码的FHT),译出码字和相应的陪集表示确定出最后的译码信息。分析编码的原理,8PSK的较长TFCI编码就是以32阶walsh码的子集和全1矢量为基础码序列,以三个Mask矢量为掩码序列,所组成的线性组合(b0~b63),然后打孔生成48比特。译码实际上就是要找到译码输入码字添加打孔位置比特之后的码字(b0~b63)所对应信息比特(a0~a9)。因此,8PSK的较长TFCI译码首先要恢复打孔位置的16个bit,然后进行消掩处理,即消除掩码对接受码字的影响,之后进行基础码集译码即可,如图2。
![]()
500)this.style.width=500;" border=0>
根据[2],在8PSK的较长TFCI编码后的打孔位置填0,此时得到一个长为64bit的序列。
当TFCI的原始比特数为6~10时,TFCI的编码实际上是一种超码编码方式。就是以一阶RM(1,7)码(3GPP为RM(64,10))为基础码集,以生成矩阵的后三列构成三维掩码集。译码的时候,得到掩码集后,将掩码集双极性化,然后用恢复打孔后的序列双极性化后得到的码字与双极性化后的掩码集依次相乘,完成消掩。
对于8PSK的较长TFCI编码,二阶Reed-Muller码的打孔 (48,10) 子码的码字是10个基本序列的线性组合。根据消掩后得到的双极性矩阵,分别对每一行进行FHT变换并存储,循环进行8次,再比较并进行译码,进而得到二进制信息序列m。
FHT的实质就是求 Hadamard矩阵和输入向量的相关值向量, 它主要利用了蝶形运算来减少运算量。对于一个 M阶的哈达马矩阵 HM,如果直接计算(brute force method)输入向量与Hadamard矩阵中每个行向量的相关值,容易得到其运算量为M2的加减法运算,利用快速哈得马变换可以大大减少运算次数。
3 译码算法的实现
ZSP500 DSP核硬件主要包括预存取单元(PFU)、指令定序单元(ISU)、流水线控制单元(PIP)、装载保存单元(LSU)、寄存器文件单元、旁路单元(BYU)、算数逻辑单元(ALU)、乘累加单元(MAU),存储系统包括数据存储区(data memory)和 指令存储区(Instruction memory)。数据存储区和指令存储区的大小分别都是0x20000(128k)word,各自由2个bank组成,而每个bank又包含两个block[3]。
在实现8PSK的较长TFCI译码时,可考虑将打孔位置、掩码矩阵分别计算出来并存成2张表,另外,较长TFCI译码在实现时,采用FHT可以减小运算量,理论上,FHT就是将Hadamard矩阵分解为稀疏矩阵的乘积,采用蝶形变换。
3.1 恢复打孔的实现
恢复打孔在实现时,通过查打孔位置表可以得到打孔的位置,根据相应位置在接收序列中填0即可。部分代码如下:
AddPun:
xor r0, r0
stu r0, a1, 1 !add punctured bit
ldu r0, a3, 1 !r0=original bit num
mov %loop2, r0
FillOrg:
ldu r0, a0, 1
stu r0, a1, 1
3.2 消掩的实现
实现消掩时,从已经计算并存好的掩码表M(8*64)中查取每个元素,根据查取到的元素看输入序列是否要取反(为1取反)。部分代码如下:
ldu r4, a0, 1
bitt r3, 15
cexe(z, nu)
{
neg r4, r4
}
stu r4, a1, 1
3.3 FHT的实现
FHT算法与FFT算法类似,采用蝶形运算。部分代码如下:
mov a1, a0 //the first data
add a1, r8 //adjacent the second data
ld r4, a0
ld r5, a1
add r6, r4, r5
sub r7, r4, r5
3.4 计算TFCI值的实现
由上面软判决的步骤可以知道,要计算TFCI的值,关键是要找出经过hadamard变换以后的矩阵的最大绝对值的行号和列号,此项工作的实现可以通过一个查找最大值子模块来实现。部分代码如下:
cmp r8, 0 ! r8->the max abs(value)
cexe(gt, nu)
{
mov r14, 1
}
shll r14, 6
4 结语
本文重点讨论了8PSK的较长TFCI译码算法原理,并根据算法原理,给出了在ZSP500 DSP核上的实现过程。在td-SCDMA系统的信道译码过程中,TFCI是一个很重要的参数,TFCI译码的正确性是进行正确信道译码的前提,本文对td-SCDMA系统研发中的信道编解码过程具有一定实用价值。本文作者创新点:根据8PSK的较长TFCI编码算法原理,得出译码算法原理,并对其在ZSP500 DSP核上进行了代码实现。
参考文献:
[1] Samsung Electronics Co., Ltd,TFCI Coding Scheme for 8PSK in low chip rate tdD Option.
[2] 3GPP TS 25.222: "Multiplexing and channel coding (tdD)" (Release 5).
[3] ZSP500 Digital Signal Processor Core TECHNICAL MANUAL.
[4] 李小文等编.td—SCDMA第三代移动通信系统、信令及实现[M].北京:人民邮电出版社,2003.
[5] 陈永翾,陈向东,李长春. 基于tdD的无线语音通信协议的研究. 微计算机信息, 2007,2-3:106-107.
作者简介:
赵义(1983—),男(汉族),籍贯河北,重庆邮电大学在读研究生,通信与信息系统专业,研究方向为第三代移动通信。
申敏(1963—),女,籍贯贵州,教授,硕士生导师,主要从事DSP及物理层协议算法研究。
联系方式:赵义,重庆邮电大学05级研究生77#信箱34栋123室,邮编400065,邮箱hyozia@126.com[1]
[/td]
[/tr]
|
|