CRC
一、基本原理
CRC即循环冗余校验码(Cyclic Redundancy Check), CRC检验原理实际上就是在一个K位二进制数据序列之后附加一个R位二进制检验码(序列),从而构成一个总长为N=K+R位的二进制序列;附加在数据序列之后的这个检验码与数据序列的内容之间存在着某种特定的关系。如果因干扰等原因使数据序列中的某一位或某些位发生错误,这种特定关系就会被破坏。因此,通过检查这一关系,就可以实现对数据正确性的检验。
二、几个基本概念
1、帧检验序列FCS(Frame Check Sequence):为了进行差错检验而添加的冗余码。
2、多项式模2运行:实际上是按位异或(Exclusive OR)运算,即相同为0,相异为1,也就是不考虑进位、借位的二进制加减运算。如:10011011 + 11001010 = 01010001。
3、生成多项式(generator polynomial):当进行CRC检验时,发送方与接收方需要事先约定一个除数,即生成多项式,一般记作G(x)。生成多项式的最高位与最低位必须是1。常用的CRC码的生成多项式有:
下表中列出了一些见于标准的CRC资料:
名称 |
生成多项式 |
简记式 |
应用举例 |
CRC-4 |
x4+x+1 |
3 |
ITU G.704 |
CRC-8 |
x8+x5+x4+1 |
31 |
DS18B20 |
CRC-12 |
x12+x11+x3+x+1 |
5E |
|
CRC-16 |
x16+x15+x2+1 |
8005 |
IBM SDLC |
CRC-ITU** |
x16+x12+x5+1 |
1021 |
ISO HDLC, ITU X.25, V.34/V.41/V.42, PPP-FCS |
CRC-32 |
x32+x26+x23+...+x2+x+1 |
04C11DB7 |
ZIP, RAR, IEEE 802 LAN/FDDI, IEEE 1394, PPP-FCS |
CRC-32c |
x32+x28+x27+...+x8+x6+1 |
1EDC6F41 |
SCTP |
每一个生成多项式都可以与一个代码相对应,如CRC8对应代码:100110001。生成多项式的比特数越大,其差错检测能力越强;漏检错误率越低。
三、CRC检验码的计算
计算方法为:在K位信息字段的后面添加R个0,再除以G(x)对应的代码序列,得到的余数即为r(x)对应的代码(应为R位;若不足,而在高位补0)。
计算示例
设需要发送的信息为M = 1010001101,产生多项式对应的代码为P = R=5。在M后加5个0,然后对P做模2除法运算,得余数r(x)对应的代码:01110。故实际需要发送的数据是101000110101110。
四、CRC校验
在接收端收到了CRC码后用生成多项式为G(x)去做模2除,若得到余数为0,则码字无误。若如果有一位出错,则余数不为0,而且不同位出错,其余数也不同。可以证明,余数与出错位的对应关系只与码制及生成多项式有关,而与待测码字(信息位)无关。下表给出了G(x)=1011,C(x)=1010的出错模式,改变C(x)(码字),只会改变表中码字内容,不改变余数与出错位的对应关系。
如果循环码有一位出错,用G(x)作模2除将得到一个不为0的余数。如果对余数补0继续除下去,我们将发现一个有趣的结果;各次余数将按上表顺序循环。例如第一位出错,余数将为001,补0后再除(补0后若最高位为1,则用除数做模2减取余;若最高位为0,则其最低3位就是余数),得到第二次余数为010。以后继续补0作模2除,依次得到余数为100,0ll…,反复循环,这就是“循环码”名称的由来。这是一个有价值的特点。如果我们在求出余数不为0后,一边对余数补0继续做模2除,同时让被检测的校验码字循环左移。当出现余数(101)时,出错位也移到A7位置。可通过异或门将它纠正后在下一次移位时送回A1。这样我们就不必像海明校验那样用译码电路对每一位提供纠正条件。当位数增多时,循环码校验能有效地降低硬件代价,这是它得以广泛应用的主要原因。
五、CRC在LTE中的运用
LTE TDD系统采用了4种格式的CRC:CRC24A、CRC24B、CRCl6、CRC8。其生成多项式如下:
CRC-24A:g(x)=x24+x23+x18+x17+x14+x11+x10+x7+x6+x5+x4+x3+x+1;
CRC-24B: g(x)=x24+x23+x6+x5+x+1;
CRC-16: g(x)=x16+x12+x5+1;
CRC-8: g(x)=x8+x7+x4+x3+x+1;
其中长度为24的CRC24A和CRC24B主要用于共享信道数据传输,长度为16的CRCl6主要用于下行控制信道和广播信道数据传输,长度为8的CRC8主要用于CQI(Control quality information)信息的传输。
校验多项式 |
使用的信道 |
CRC-24A |
PDSCH/PUSCH/PMCH/PCH |
CRC-24B |
PDSCH/PUSCH/PMCH/PCH |
CRC-16 |
PBCH |
CRC-8 |
控制信令 |
首先对传输块TB(长度为A)按照CRC-24A的生成多项式添加24bitsCRC,则传输块添加CRC校验后的长度则为B=L+A。
上述 TB 块数据添加完 24 为校验码后,若长度超过 Z=6144,则必须分段,分成若干个码块,并对这些码块使用生成多项式CRC-24B再次进行CRC处理,对每一分段都进行CRC添加。
在下列计算中如果填充比特 F 大于 0,则填充比特添加到第一个码块的开始 端。 如果 B 小于 40,填充比特添加到码块的开始位置。 在编码器的输入端,填充比特将被设置为空。