简介:
这是本专栏信道编码/Channel Coding的第四站,想对信道编码有一个系统性的认识可以看本专栏的 信道编码的整体框架 一文。而在本篇文章中,将介绍CRC校验码的基本原理。
目录
一、CRC(Cyclic Redundancy Check)原理
一、CRC(Cyclic Redundancy Check)原理
沿用本专栏的 信道编码的整体框架 一文中的分组码符号表示,CRC也可写为 C(n,k),其中冗余信息段长度 r=n-k。
1.1 生成多项式
很多人在初学过程中题目会给好生成多项式T(x),但是当自己亲自设计通信系统时,会考虑到底用什么生成多项式。实际上,生成多项式都是通过一些规则推导而得,查表沿用即可。而常用的有以下几种:
名称 | T(x) |
CRC-8 | |
CRC-12 | |
CRC-16 | |
CRC-CCITT |
1.2 编码原理
以 C(7,4)CRC校验码为例,我们这里假设使用生成多项式:
信息段为:
算法:
- 首先根据生成多项式的最高位,在m后面补上r=n-k个0;
- 用补零后得到的码与生成多项式代表的码进行模二除法;
- 用模二除法得到的r位余数加到信息段m的后面
- 完成编码
可以看到,CRC的编码方法相当简单!
1.3 接收方的校验
CRC校验码在接收方的检错手段非常简单,接收方直接就拿接收到的码和生成多项式代表的码进行模二除法,若余数为0则无差错。
这就可以联系到本专栏另一篇文章 纠错编码与差错控制 中的差错控制方法,我们在采用ARQ的通信系统中,用CRC可以快速检测错误,所以CRC比较适合ARQ。
1.4 CRC校验码的纠错能力
当对接收码进行模二除法,错误比特的变化会导致余数的循环变化,所以当满足下面的条件的时候,CRC校验码就有了纠错能力:
实践可得,比如我们有一个CRC码101001010:
接收码 | 余数 | 出错位 |
101001011 | 001 | 1 |
101001000 | 010 | 2 |
101001110 | 100 | 3 |
101000010 | 101 | 4 |
101011010 | 111 | 5 |
101101010 | 011 | 6 |
100001010 | 110 | 7 |
111001010 | 001 | 8 |
001001010 | 010 | 9 |
会发现余数能告知出错位是什么。其数学原理我尚未弄清楚。