检错编码
1.奇偶效验码
从图我们可以看出
1.奇偶效验码由两部分组成 分别是一位校验元(也就是一个校验码)和n-1个信息原
2.奇偶效验码分为奇效验码和偶效验码,使用那种要根据最前面加上校验元1后一共有几个1
奇效验码有奇数个1 偶校验码有偶数个1
数据经过转换发送过去的就是在前面加入了一个1的数据,如果采用的是奇效验码的方式,则接收方会判断1的个数是否为奇数;偶数一样!!
因此----当数据中改变了两个数字,奇效验码原本是001101传送过去变成了110010,接收方并不会检测出错误,因为1的个数还是奇数!!!so 检测的成功率只有50%!!一个拉跨的效验码!!
2.循环冗余码CRC
书上概念很乱,但它却很简单,你只需要知道怎么求码,接收方怎么检验是否有问题就可以!!
首先先要知道:循环冗余码需要一个生成多项式(这个不用管是什么,题中会给)
做题步骤: 1. 加0 ------ 需要发送的数据有n位则在数据的最后加上n-1个0
2. 将已经加0的数据 除以 生成多项式
3. 得到除后的余数 将第一步加上的0,改成这个余数即可,就是我们真正需要发送的数据
例题:假设发送的数据是1101 0110 11 ,采用ORC校验,生成多项式为1001 1 ,则最终发送的数据是?计算机怎么检验的?
解答:
1. 加0 数据变成1101 0110 1100 00
2.除以多项式,1101 0110 1100 00 / 1001 1 ,计算得到余数是1110
3.替换 所以发送到数据是1101 0110 1111 10
计算机检验:将数据除以 生成多项式,如果没有余数,则数据正确,如果有余数,则错误
检测并纠错编码
3. 海明码
海明码是比较难的一种,不仅可以检错还能纠错!
首先你要知道:海明码发现双比特错,纠正单比特错
工作原理:动一下则牵扯全身!!
一个数据变成经过海明码变成最终发送的数据一共需要三部
假设要发送的数据为 101101
第一步:确定校验码位数
一个公式解决:2^r >= k + r + 1 ( r 就是校验码位数; k 是发送数据的个数)
带入 k = 6 ,求出 r = 4
第二步:确定校验码和数据的位置
校验码的位置都在2的n次方位,转化成二进制也就是只有一个1的地方
数据则在其他的位置, 我们看图
第三步:求出校验码的值
方法:看对应位的效验码的1 数据位的这个地方是否有1,与其数据为按位与运算结果为0
P1 ^ D1 ^ D2 ^ D4 ^ D5 == 0 ➡ P1 = 0
P2 ^ D1 ^ D3 ^ D4 ^ D5 == 0 ➡ P2 = 0
P3 ^ D2 ^D3 ^D4 == 0 ➡ P3 = 0
P4 ^D5 ^D6 == 0 ➡ P4 =1
将这些值填入表中的对应位置,因此得到的 发送过去的码就是0010 0111 01
检验???方法一样
将校验码与对应的位进行按位与,如果结果都为0 则正确,如果都为1 则错误!!但是海明码还可以纠错!比如第五位除错,接收端收到的是0010 1111 01
令所有要校验的位异或运算:
P1 ^ D1 ^ D2 ^ D4 ^ D5 == 0 ➡ P1 = 1
P2 ^ D1 ^ D3 ^ D4 ^ D5 == 0 ➡ P2 = 0
P3 ^ D2 ^D3 ^D4 == 0 ➡ P3 = 1
P4 ^D5 ^D6 == 0 ➡ P4 =0
1010==5,所以就得到了第五位错了 !!是不是很神奇??