TD-SCDMA中CRC的DSP实现

  引言

  TD-SCDMA系统多采用FPGA+ARM+DSP的方案,其中DSP用于实现物理层信号处理。物理层信号处理一般流程,如图1所示。流程包括给每个传输模加CRC、传输块级连/码块分段、信道编码、无线帧尺寸均衡、交织(分两步)、无线帧分段、速率匹配、传输信道复用、比特加扰、物理信道分段、子帧分段、映射到物理信道、调制、扩频,最后生成TD-SCDMA的基带信号[1,2]。

  本文重点研究TD-SCDMA中CRC实现的DSP算法。CRC实现分为直接和查表两种。查表实现用于存储空间大,且对实时性要求高的场合。直接实现则不需要过大的存储空间,通常采用移位寄存器,不能获得很高的实时性。为了保证实时性,本文提出了基于标志与移位算法的固定寄存器实现方法。寄存器用DSP内存空间实现,标志用指针实现,其关键是移位算法的实现。该方法具有占用内存空间小,运算速度快的优点,满足TD-SCDMA系统的要求。

  CRC原理

  CRC(循环冗余校验码)是一种系统的缩短循环码,具有编码及错误检测简单,容易实现且误判概率低、检错能力强等优点,广泛应用于帧校验,其中包括TD-SCDMA。TD-SCDMA物理信道复用与编码的第一步是附加CRC,是利用CRC校验校验功能实现传输块的差错检测。CRC校验的基本思想是利用线性编码理论,在发送端根据要传送的A位传输块,以一定的规则产生一个校验用的监督码(既CRC码)M位,并附在传输块后,构成一个新的(A+M)位传输块,进行后续信道处理,最后发送出去;在接收端,则根据信息码和CRC码之间所遵循的规则进行检验,以确定传送中是否出错。这里的规则是指CRC生成多项式。根据3GPP相关协议TD-SCDMA中采用生成多项式如下[3]:

  TD-SCDMA中CRC多项式的选择是由高层信令决定的,但是利用他们生成CRC的原理是一样的[4]。生成CRC码所采用运算是模二加减运算法则,既是不带进位和借位的按位加减。这种加减运算实际上就是逻辑上的异或运算,加法和减法等价,乘法和除法运算与普通代数式的乘除法运算是一样,符合同样的规律。移位寄存器实现CRC的步骤如下:

  (1)建立移位寄存器,长度等于CRC长度加1;

  (2)移位寄存器的初始值清零;

  (3)给输入数据后补零,补零长度等于CRC长度;

  (4)输入数据从低位移入寄存器中,每次移一位;

  (5)把寄存器值与生成多项式值做模二运算,结果存储在寄存器中;

  (6)如果最高位为零,则移位寄存器向前移位一次,输入数据也移进一位,跳转到步骤5;如果不为零,则直接跳转到步骤5。

  (7)如果输入数据(不包括补的零)全部移出寄存器,此时寄存器的值就是CRC值。

  移位算法

  直接实现方法采用移位寄存器,运算速度很低,不能满足TD-SCDMA系统对实时性要求。本文对直接法进行了改进,提出新的、易于DSP实现的方法。该方法是由标志位与移位算法组成。标志位确定模二运算的起始点,运算长度为CRC长度加1。移位算法是根据运算结果确定标志位的位置。下面利用TD-SCDMA中CRC生成多项式进行说明,并给出实现代码。

  根据高层信令,选用TD-SCDMA中CRC生成多项式,其中CRC的长度M。设输入信号为长度A的比特流为,其中 。输入信号对应的多项式为

  (5)

  把输入比特按顺序存储在寄存器中,并在其尾部多加M个零,如图2所示。

  图中的倒三角作为标志位,用于指示与CRC生成多项式做模二运算的起始位置,运算的结果存储在对应输入信号寄存器中。移位算法是标志位根据本位寄存器的值是否为零进行移位。如果值为零就向后移一位,否则,不移位,并继续与CRC生成多项式做模二运算。如果移位后本位寄存器依然为零,则要连续移位,但是,连续移位的总位数要小于等于M+1。当标志位移到倒数第M位,此时,最后M位寄存器存储的序列,是所求的CRC序列,具体步骤如下:

  (1)建立移位寄存器,长度等于输入数据长度和CRC长度之和;

  (2)给输入数据后补零,补零长度等于CRC长度;

  (3)把数据写入移位寄存器中;

  (4)标志位放在寄存器最高位;

  (5)以标志位为起始位置,把寄存器值与生成多项式值做模二运算,结果存储在寄存器中;

  (6)如果标志位的寄存器值为零,则标志位向后移位一次,重新执行本步骤,重复次数等于CRC长度时跳转到步骤5;如果标志位的寄存器值不为零,则跳转到步骤5。

  (7)当标志位移出输入数据(不包括补的零),此时最后补零寄存器的值就是CRC值。

  编程计算CRC的关键是标志位的移位判断,根据本位寄存器的值进行判断是否移位,以及连续移位不能超过CRC长度加1。下面给出了CRC生成的主要代码。data_2为存储输入序列的寄存器,且尾部补了M个零。CrcPoly存储生成多项式的逆序列。这里要特别说明的是,由于高位存储寄存器的低位,生成多项式的序列应逆序储存。例如,生成多项式(4)其序列为110011011,但是CrcPoly存储值为其逆序,即为110110011。

  i=1;

  while(i<=A) % A为输入比特长度

  for m=1:M+1 % M+1次模二运算

  if data_2(1,i)==CrcPoly(1,m)

  data_2(1,i)=0;

  else data_2(1,i)=1;

  end

  i=i+1;

  end

  i=i-1;

  %重新定位倒三角的位置

  for j=i-M:i

  if data_2(1,j)==0

  j=j+1;

  else break;

  end

  end

  i=j;

  end

  %取最后M位为CRC

  CRCout=[data_2(end-M-1:end)]

  DSP实现

  TD-SCDMA系统中的DSP选择TI公司的多核DSP(TMS320TCI6487)。TMS320TCI6487采取VLIW(Very-Long-Instruction-Word)结构,具有丰富的外设接口、3个内Cores[5]。每个Core内有8个独立功能单元,每个周期可以并行执行8条32bit指令,最大峰值速度4800MIPS,2组共64个32bit通用寄存器,32bit寻址范围,支持8/16/32/40位的数据访问,片内集成大容量SRAM,最大可达8Mbit。TMS320TCI6487是TMS320C6000?系列中高性能DSP芯片,具有出色的运算能力、高效的指令集、大范围的寻址能力,被用于实现无线通信的基带处理,例如,TD-SCDMA、UMTSDSP、Vi-MAX、GSM/EDGE等。

  DSP开发环境采用CCS3.3(Code Composer Studio)。CCS是TI为其DSP设计提供的集成化开发环境,简化了DSP系统的配置和应用程序的设计,使设计者能更快地开展工作,开发流程如图3所示。

  3GPP协议规定TD-SCDMA的四种CRC生成多项式,CRC长度分别为24、16、12和8。如果采用查表实现CRC,要建立的四张查询表,这样就占用一定的数据内存空间;每种生成多项式都有单独的程序,对于长度为24,12的CRC,要进行位处理,这要占用一定的程序内存空间。为了提高内存利用率,本文采用CRC直接实现。实现的核心算法是上文介绍的移位算法,DSP实现CRC流程如图4所示。

  TMS320TCI6487提供了新的与CRC运算相关的_mem2(void)pointer寻址指针、Galois域乘法指令和寄存[6]。_mem2(void)pointer指针允许访问2bit的地址空间,这样可以把固定寄存器占用的内存空间降到最低。Galois域乘法指令可在两个乘法单元M1、M2中并行执行,可以把寻址算法执行速度提到最快。本文在TMS320TCI6487平台上,分别对查表法、传统直接实现法和本文提出的改进算法进行仿真,CRC生成多项式选择式(2),CRC长度为16,性能比较如表1所示。

  总结

  本文分析了CRC实现原理,提出一种新CRC实现方法。利用TMS320TCI6487提供的特殊指令,完成移位算法,使其内存利用率提高,且实时性与查表法的接近。该方法占用内存小,速度快,具有很高的应用价值。

  参考文献:

  [1] 曹志刚,钱亚生.现代通信原理[M].北京:清华大学出版社,1992-08

  [2] 李世鹤.TD-SCDMA第三代移动通信标准[M].北京:北京邮电大学出版社,2003-10

  [3] 3GPP TS 25.221Physical Channels and Mapping of Transport Channels onto Physical Channels(TDD)[S].2011-12

  [4] 3GPP TS 25.222 Multiplexing and Channel Coding (TDD)[S].2011-12

  [5] Texas Instruments Incorporated.TMS320TCI6487/8 Communications Infrastructure Digital Signal Processor[Z/OL].http://www.ti.com/

  [6] Texas Instruments Incorporated.TMS320C6000 Programmer’s Guide[Z/OL].http://www.ti.com/

  徐兰天 中国电子科技集团公司第四十一研究所(安徽 蚌埠2330101)

……
关注读览天下微信, 100万篇深度好文, 等你来看……
阅读完整内容请先登录:
帐户:
密码: