假设数据位是n位,校验位是k位,则n和k的关系必须满足以下关系:
2^k -1 >= n+k
依据给定的数据位,很容推断到校验位,但是校验位在数据中的位置需要立即。
还是以一个实际的例子说明吧:
原始数据:1011
这样 n=4 , 将 k=1,2,3,... 代入公式很容发现 k=3就满足条件,2^3-1 >=4+3
所以校验码位数为3位,数据和校验码一共7位。
校验码的位置都处在2的n(n=0,1,2,3...)次方中,即位于1,2,4,8,16....的位置上,其余为才能填充数据。
本例就7位数据组成:D4D3D2D1+P2P1P0
7 6 5 4 3 2 1
D4 D3 D2 P2 D1 P1 P0
1 0 1 1
7=4+2+1 ==>第4位 P2,第2位P1,第1位 P0 这3个校验位共同校验
6=4+2==>第4位 P2,第2位P1 这2个校验位共同校验
5=4+1 ==>第4位 P2,第1位 P0 这2个校验位共同校验
3=2+1 ==>第2位P1,第1位 P0 这2个校验位共同校验
校验码计数,异或运算:
P2 = D7^D6^D5=1^0^1=0
P1=D7^D6^D3=1^0^1=0
P0=D7^D5^D3=1^1^1=1
校验码为:001
传输数据为: 1 0 1 0 1 0 1
检错和纠错原理
接收方依据同样的规则重新计算三位校验码的值。而后与接收到的校验码进行异或。当数据无误时,产生的校验码无误,若接收到的校验码有误,那么这不同的2个校验码异或,必然为1.
若某位的校验码最终异或结果为1,则表示产生了错误,找出错误位之后,就可以纠错了,纠错方法就时将该为逆转。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)