crc校验算法LTE系统的CRC校验算法研究及DSP实现

星座频道 2020-05-2366未知admin

  码[1]CRC(Cyclic Redundancy Check)是数据通信领域中最常用的一种差错校验码,其特征是信息字段和校验字段的长度可以任意选定。

  为了完成信传输过程中误码检测,获得正确无误的传输数据,LTE(Long Term Evolution)系统针对不同的数据传输采用了多种格式的循环冗余码,以适应系统高速率高性能的需求。

  其中长度为24的CRC24A和CRC24B主要用于共享信道数据传输[3],长度为16的CRC16主要用于下行控制信道和信道数据传输,长度为8的CRC8主要用于CQI(Control quality infortion)信息的传输。

  CRC的校验原理非常简单,它要求发送方和接收方采用同一个生成多项式g(x),且g(x)的首位和末位的系数必须为l。编码时将待发送的数据t(x)除以g(x),crc校验算法得到的余数作为CRC校验码添加到t(x)的后面;译码时将接收到的数据r(x)除以g(x),如果余数为0,则说明校验正确,否则校验失败,从而判断数据帧是否出错。在工程应用中,常用的CRC校验算法主要有两种:查表生成法和块异或长除法。

  这种算法的优点是运算量小、速度快、效率高;缺点是可移植性较差,且要事先计算出余式表,而不同长度的生成多项式的余式表不同,因此余式表会占用系统较大的存储空间,增大系统资源开销。

  (4)判断块的最高位是否为‘1’,若为‘1’则数据块与生成多项式做一次异或操作。

  (5)将数据左移一位,如果当前块的剩余比特等于CRC生成多项式的长度,则转入步骤(3);否则转入步骤(4)。

  (6)如果所有数据都已经操作完毕,则计算结束,寄存器中的值为最终求得的CRC。

  这种算法的优点是算法简单、容易实现、修改灵活、可移植性好,对任意长度的生成多项式都适用;但因为它一次只能处理一位数据,因此计算效率低,运算量大。

  如前所述,在TD-LTE系统中采用了4种格式的CRC,如果采用查表算法,则需要建立4张查找表,会占用系统较大的存储空间,且程序移植性差;如果采用块异或长除法,则又会出现计算效率低,运算量大的问题。

  综上,结合项目需求及系统硬件配置,考虑到系统所采用的高效DSP处理器——TMS320Cx(主频最高可达到1.2 GHz)可以弥补块异或长除法的低效性,系统最终采用块异或长除法来实现。

  TMS320C6000系列DSP是TI1997年2月推向市场的高性能DSP,综合了目前DSP性价比高、功耗低等优点。TMS320Cx系列在TMS320C6000 DSP芯片中处于领先水平,它不但提高了时钟频率,而且在体系结构上采用了VelociTI甚长指令集VLIW(Very Long Instruction Word)结构[5],片内有8个功能单元的内核,每个周期可以并行执行8条32 bit指令,最大峰值速度4 800 MIPS,2组共个32 bit 通用寄存器,32 bit 寻址范围,支持8/16/32/40位的数据访问,片内集成大容量SRAM,最大可达8 Mbit。由于其出色的运算能力、高效的指令集、大范围的寻址能力,使其特别适用于无线基站、测试仪表等对运算能力和存储量有高要求的应用场合。

  因为系统采用了4种格式的CRC,如果对每种格式进行单独实现,不仅任务繁琐,而且增加了系统的代码量,更给代码测试和增加了难度。因此本实现采用实现,即同一个程序,支持系统中的所有CRC格式,仅需在程序头部增添一点格式判断的代码即可。

  虽然TMS320Cx DSP处理器的字长为32 bit,但是为了兼容4种格式的CRC,最终决定数据的分块长度为半字,即16 bit,这样做的目的就是为了支持CRC24,因为TMS320Cx DSP的寄存器在用作逻辑移位寄存器使用时,其有效长度为40 bit。

  根据LTE协议,输入数据按大端模式输入。为了处理方便,每次读入半字都将其倒序,采用低端对齐的方式进行CRC除法,因此,CRC多项式也必须经过倒序。最后生成的CRC也是倒序的,需要再次倒序,然后进行加扰[2](如果必要的话),最后添加到输入数据后面。倒序可使用指令“BITR”,crc校验算法简单易行。

  输出数据仍为大端模式。由前面所述可知:CRC8的生成多项式倒序值为0x1b3;CRC16的生成多项式倒序值为0x10811;CRC24A的生成多项式倒序值为0x1bec3;CRC24B的生成多项式倒序值为0x18c0003。

  值得注意的是:输入数据后面应该多写入一个字的0,因为每次取半字处理,当剩余比特为最大15 bit且CRC为最长24 bit时,组合起来也不会超过40 bit,避免特殊性的出现,以便处理。同时完成CRC计算过后,可以直接将CRC添加到原数据之后,而不担心其会覆盖系统中的数据,引起不必要的错误。

  图1为CRC计算及添加的程序实现流程。当CRC格式为CRC16、CRC24A、CRC24B时,读取的第一个数据块(半字)在第一次内循环中将只作16次的移位,而没有异或操作,表面上看在这里应该加一个判断,如果是这种情况则直接将数据右移16 bit,然后接着处理第二个数据块。但这样会对后续的数据块造成麻烦,因为每个数据块到达此处都需判断一次,当数据量比较大时,会带来更大的开销,因此在程序流程中可以忽略此问题。

  在接收端,CRC的校验与发送端的计算基本相同,只是由于LTE系统的特殊性,如果在发送端CRC曾被加扰过,则在接收端校验之前,应先从接收到的数据末尾截取出CRC进行解扰,然后再将解扰后的CRC添加回去,最后对整个接收数据进行CRC校验。如果CRC校验正确,则接收数据正确;否则接收数据错误,在此程序流程不再赘述。

  在DSP软件实现中,通过指令并行,尽量优化程序循环体[6],减少或消除程序中的“NOP”指令。对于不同格式的CRC,根据它们所用的以及数据的大致长度,通过程序运行,可以得到统计结果如表1。

  表1的数据长度仅为个别举例,但不失一般性。从表中可以看出,虽然块异或长除法的运算量较大,但是当运用TMS320Cx芯片实现时,由于处理器的超高主频,其计算速率也非常快,完全可以忽略它的计算量。因此,本实现采用块异或长除法不仅简化了程序实现方法,还减少了模块程序代码,节约了系统存储空间。

  本文从理论出发,crc校验算法根据TD-LTE系统特性,选择了一种最优的CRC校验算法,并在TMS320Cx芯片上加以实现,详细讲述了块异或长除法在DSP中的实现方法。程序运行结果表明,本实现能够满足LTE系统的需要,具有可行性和高效性。

原文标题:crc校验算法LTE系统的CRC校验算法研究及DSP实现 网址:http://www.gunfollow.com/xingzuopindao/2020/0523/26165.html

Copyright © 2002-2020 脚踏实地新闻网 www.gunfollow.com 版权所有  

联系QQ:1352848661