TD-SCDMA中CRC的DSP实现

嵌入式系统   作者:徐兰天 时间:2013-07-24来源:电子产品世界

  移位算法

  直接实现方法采用移位寄存器,运算速度很低,不能满足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)]

1 2 3

关键词: TD-SCDMA CRC DSP 寄存器 FPGA 201308

加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW

或用微信扫描左侧二维码

相关文章

查看电脑版