数据校验码
任意两个码字之间最少变化的二进制位数,被称为数据校验码的码距
例如用四位二进制数表示16种状态,此时码距为1,即两个码字之间最少仅有一个二进制不同,这种编码没有检错能力。
检纠错能力实现原理:在编码中,除去合法的码字外,再加入一些非法的码字,当某个合法的码字出现错误时,就变成为非法码字。
码距越大,检错纠错的能力越强。
奇偶校验码:
奇偶校验码的码距为2,能检测出一位错误,组成为n位有效信息和一位校验码
奇校验:有效信息和校验码“1”的个数为奇数
偶校验:有效信息和校验码“1”的个数为偶数
交叉奇偶校验:
进行横向和纵向的奇偶校验
汉明码:
汉明码有三要素
检测位的个数
2^k>=n+k+1
k=检测位的位数
n=二进制代码的位数
二进制代码有4位需要3位检测位
二进制代码有8位需要4位检测位
检测位的位置
2i(i=0,1,2,3,4……)
检测位的取值
检测位的取值与该位所在的检测小组中承担的奇偶校验任务有关
C1检测小组g1小组包含1,3,5,7…
C2检测小组g2小组包含2,3,6,7,10,11…
C4检测小组g3小组包含4,5,6,7,12,13…
C8检测小组g4小组包含8,9,10,11,12,13,14,15,24…
小组占位
gi小组独占2i-1位
gi,gj小组共同占第2i-1+2j-1
依此类推三个小组
偶原则配置汉明码时,计算出C1,C2,C3…汉明码错误的位数就是C3,C3,C1依此将其排列成为一个二进制数,其对应的十进制数就是错误的位数
对于偶校验配置 的汉明码不出错时P1=0,P2=0,P4=0。
CRC码
首先介绍模2运算:
模2运算的加减的结果想相同,可用异或逻辑实现
两个相同的数据的模2加减为0,两个不同的数据为1
模2乘按模2加求部分积的和
例如模2除
按模2除求部分余数。每求一位商应使部分余数减少一位,上商的原则为当余数的首位为1时,商取1,当部分余数的首位是0时,商取0。当部分的余数位数小于位数时,该余数为最后的余数
CRC码的编码方法是再纠错编码代数中,把二进制数字表示为一个数据系列看成一个多项式
变成一个多项式后将多项式左移K位,这空出来的K位来拼接校验码,K的位数应该为生成多项式G(x)的位数减一
有效信息为M(x)
生成多项式为G(x)
计算CRC码的步骤:
1.k=G(x)-1
2.M(x)* Xk
3.R(x)=M(x)*xk /G(x)的余数
4.CRC码为M(x)*xk +R(x)
CRC码纠错:
用CRC码除以生成多项式G(x)得到余数若为0则没有出错,若不为0,则有错。更换不同的待测码字,余数和出错位的对应关系不变,只有码字和生成多项式有关
对余数 补0,再进行模2除法就会依此由001到010到100等,在移满一个周期后,就得到一个纠正后的码字
生成多项式应该满足的条件