5G中CRC table的生成

5G信道编码之CRC

CRC介绍

参照38.212 第5章
信道编码是一种组合,这种组合包含了检错,纠错,速率匹配,交织,以及传输信道和控制信息向物理信道的映射。
CRC是信道编码的重要组成部分。CRC的原理是通过多项式除法获得校验码,但是实际代码实现是通过查表法,以空间换时间。
关于CRC基本原理的介绍可以参考这篇专家博文:
https://blog.csdn.net/liyuanbhu/article/details/7882789
简单说,就是把输入数据除以一个给定的二进制序列,所得到的余数就是CRC码。例如:
在这里插入图片描述
图中的remainder:1110就是输入数据1101011011除以给定序列(专业名称叫:生成多项式)10011后所得到的CRC校验码,它应该附在输入数据后面形成11010110111110的最终数据。
需要注意的是,这个过程中的减法运算都是通过模2减法(也就是异或)完成的。

CRC查表法

为了获得运行效率,一般都是要使用查表法来计算CRC的,也就是预先计算出一定位数的CRC码,实际计算时,将输入数据切分成对应的位数,通过查表获得最终的CRC码。
其推导过程如下:
在给定生成多项式的情况下,CRC的计算过程其实可以通过异或(XOR)来完成。
例如:
给定输入数据 A=11001, 给定生成多项式 G=10101, 那么计算CRC校验位的过程如下:
在这里插入图片描述
所以CRC_A=(A<<5)^ (G<<5)^ (G<<4)^ (G<<3)^ (G<<2)^ (G<<1)=(A<<5)^G’
记A’=A<<5=1100100000, B=10100, B’=A’^B=1100110100
那么CRC_A=A’^G’
在来看B’的CRC计算过程:
在这里插入图片描述
所以CRC_B’=(B’<<5)^ (G<<10)^ (G<<9)^ (G<<8)^ (G<<7)^ (G<<6)^ (G<<5)^ (G<<3)^ (G<<2)^G
=(A’<<5)^ (B<<5)^ (G’<<5)^ (G<<5)^ (G<<3)^ (G<<2)^G
=((A’^ G’)<<5)^ (B<<5)^ (G<<5)^ (G<<3)^ (G<<2)^G
=(CRC_A<<5)^ (B<<5)^ (G<<5)^ (G<<3)^ (G<<2)^G
=((CRC_A^ B)<<5)^ (G<<5)^ (G<<3)^ (G<<2)^G
如果我们把CRC_A^ B看作一个新的输入数据,记做D,我们可以发现,D其实是跟A一样的一个5位数据。如果我们提前把所有5位数据的CRC结果计算出来并保存到一个表里,那么,当我们要计算B’=(A<<5)^B这个10位的输入数据的CRC的时候,只需要查找A对应的CRC结果,然后再用它和B做异或得到D,然后查D的CRC结果就是最终结果。这就是CRC的查表法。
另一个图文并茂的对CRC及查表法讲解通俗易通的博文在这里:
http://www.cnblogs.com/esestt/archive/2007/08/09/848856.html

OAI中的代码实现

接下来我们来看在OAI的5G代码中用到的CRC table及其生成过程。
5G中CRC table的生成是通过crcTableInit (void)函数实现的。它的调用关系如下:

Created with Raphaël 2.2.0
  • 0
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值