微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > TD-SCDMA中CRC的DSP实现

TD-SCDMA中CRC的DSP实现

时间:07-24 来源:电子产品世界 点击:

摘要:针对生成CRC多采用移位寄存器不易于DSP实现和实时性差的问题,提出固定寄存器的实现方法。该方法由标志位和移位算法组成,利用高性能DSP特殊指令实现,具有程序小,速度快的优点,可应用于3G、4G通信系统中。

引言

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值。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top