数据校验:
①奇偶校验:增设一位校验位,从而使1的个数是奇数或者是偶数
例:
待编码信息 10110001
奇校验编码 10110001 1 -----5个‘1’
偶校验编码 10110001 0 -----4个‘1’
局限性:不能发现偶数位(2/4/6/8...)错,不能定位错误
②海明校验:是一种多重分组奇偶校验,将代码分为若干组,每组进行奇偶校验,能检验和定位错误
设待编码信息K位,分为r组,每组1个校验位
这样能产生2^r种指误码,全0时无错,其余2^r-1种一一对应所有错误情况(所以K+r<=2^r-1)
以7位为例:
注:
海明校验码所在位置为2^n,如1、2、4.
两个合法代码对应位上编码不同的位数称海明距离。举例如下:10101和00110从第一位开始依次有第一位、第四、第五位不同,则海明距离为3。
③循环冗余校验:用待校验数据除以某个约定代码,能除尽则表明数据正确,否则通过循环移位校正出错误位。
CRC检验原理实际上就是在一个p位二进制数据序列之后附加一个r位二进制检验码(序列),从而构成一个总长为n=p+r位的二进制序列;附加在数据序列之后的这个检验码与数据序列的内容之间存在着某种特定的关系。如果因干扰等原因使数据序列中的某一位或某些位发生错误,这种特定关系就会被破坏。因此,通过检查这一关系,就可以实现对数据正确性的检验。
编码方法:
1、将K位有效数据M(x)左移r位得到全编码多项式M(x)*x^r,以装填r位余数。(一般先选取G(x),通过G(x)确定r)
r = G(x)最高次幂
例如 1001对应多项式1*x^3+0*x^2+0*x^1+1*x^0
1001000对应(1*x^3+0*x^2+0*x^1+1*x^0)*x^3
2、选取r+1位的生成多项式G(x),对M(x)*x^r进行模2除运算,得到商Q(x)与余数R(x)。
模2除即无借位除法,对于上下对应的数字进行异或运算(必须保证除数首位为1)。
例如:
注:生成多项式需满足以下要求:
①G(x)最高位最低位必须为1
②CRC码中任何一位出错,根据G(x)得到的余数不全为0
③不同位发生错误,得到余数不同
④余数继续做模2运算,能使余数循环出现
生成多项式选取是个困难的问题,与检错成功的概率密切相关,只需要将专家的研究成果拿来用就好。
最常用的几种生成多项式如下:
CRC8=X8+X5+X4+X0
CRC16=X16+X15+X2+X0
CRC12=X12+X11+X3+X2+X0
CRC32=X32+X26+X23+X22+X16+X12+X11+X10+X8+X7+X5+X4+X2+X1+X0
3、将左移r位的待编码信息与余数R(x)模2加(不进位二进制加法),可拼接成CRC编码。
例:
余数特性:
①余数全0无错
②余数非全0,与错误位一一对应
③相邻非零余数,出错位也相邻
④余数循环出现,循环周期T = 2^r-1