要不是考研要考,我才不高兴学呢!!!
开始正题吧!
一.奇偶校验码
0 0 0 1 1 0 1 0 0
校验码:0 原码:0 0 1 1 0 1 0 0
因为有3个1,3为奇数,所以为奇数校验码,p设为0
有奇数个1的时候,P(P为校验位)也可以 这么求(求出来是0):
P=X1⊕X2⊕X3⊕..⊕Xn⊕1
1 0 1 0 1 0 1 0 1
校验码:1 原码:0 1 0 1 0 1 0 1
因为有4个1,4为奇数,所以为偶数校验码,p设为1
有偶数个1的时候,P也可以这么求(求出来是1):
P=X1⊕X2⊕X3⊕..⊕Xn
缺点:只提供奇数个位错误检测,无法检测偶数个位错误。(细节我无法用自己的话组织,自己看书吧)
讲的通俗一点就是:
- 你先 输入 一个二进制数,然后确定这个数里有多少个1,奇数个就让P=0(偶数P=1)
- 比较 输出 结果中的1的个数,根据先前P的值作比较
- 如果P=0,那就看结果中的1是不是奇数个,如果是奇数则没有发生错误,反之则错误。
如果P=0,那就看结果中的1是不是偶数个,如果是偶数则没有发生错误,反之则错误。
二. 海明校验码(Hamming)也叫汉明码
海明码是一种多重奇偶校验码,它不但可以发现错误,还可以指明哪一位发生了错误。
设校验位的位数为q位(能表示2^q种状态)
设数据位的位数位n位
有个公式2^q>=1+n+q , 即2^q-1>=n+q。(至于为什么不必深究啦)
可以根据上面的公式和n,求出符合条件的q的最小值。
海明校验码的位数 :m=n+q。
假设有一个8位数:X=X8X7X6X5X4X3X2X1
n=8
由 2^q>=1+n+q可以求出q=4
设海明码为:HmHm-1…H2H1
m=q+n=4+8=12
所以可以列出这样的表格:
海明码 | H12 | H11 | H10 | H9 | H8 | H7 | H6 | H5 | H4 | H3 | H2 | H1 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
数据位/校验位 | X8 | X7 | X6 | X5 | P4 | X4 | X3 | X2 | P3 | X1 | P2 | P1 |
接下来让我们把不是校验位的海明码,用校验码的海明码表示:
H1=H1(P1)
H2=H2(P2)
H3=H2+H1
H4=H4(P3)
H5=H1+H4
H6=H2+H4
H7=H1+H2+H4
H8=H8(P4)
H9=H8+H1
H10=H8+H2
H11=H8+H2+H1
H12=H8+H4
通过上面的关系式,我们可以看出,右边在海明码中的数位,正好都是校验码的位置,下面来正式求校验码了。
(H1在那个位置出现了就那个位置加上去,多看看应该就明白了)
P1(H1) = H3⊕H5⊕H7⊕H9⊕H11 =X1⊕X2⊕X4⊕X5⊕X7
P2(H2) = H3⊕H6⊕H7⊕H10⊕H11 =X1⊕X3⊕X4⊕X6⊕X7
P3 = H5⊕H6⊕H7⊕H12 =X2⊕X3⊕X4⊕X8
P4(H8) = H9⊕H10⊕H11⊕H12 =X5⊕X6⊕X7⊕X8
设置故障位:S4,S3,S2,S1
S1=P1⊕X1⊕X2⊕X4⊕X5⊕X7
S2=P2⊕X1⊕X3⊕X4⊕X6⊕X7
S3=P3⊕X2⊕X3⊕X4⊕X8
S4=P4⊕X5⊕X6⊕X7⊕X8
故障位数S4,S3,S2,S1 | 出错情况 |
---|---|
0 0 0 0 | 没错错误 |
0 0 0 1 | 第1位出错 |
0 0 1 0 | 第2位出错 |
0 0 1 1 | 第3位出错 |
0 1 0 0 | 第4位出错 |
0 1 0 1 | 第5位出错 |
0 1 1 0 | 第6位出错 |
0 1 1 1 | 第7位出错 |
1 0 0 0 | 第8位出错 |
1 0 0 1 | 第9位出错 |
1 0 1 0 | 第10位出错 |
1 0 1 1 | 第11位出错 |
1 1 0 0 | 第12位出错 |
哪一位出错了,然后将其数值取反,就能让其正确输出啦!
第二种求法
我们来举一个例子
设8位有效信息为 :0 1 1 0 1 1 0 1
一样,海明码为12位,校验位4位,原码8位
确定位置
位置 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
内容 | P1 | P2 | 1 | P3 | 0 | 1 | 1 | P4 | 0 | 1 | 1 | 0 |
将位置换成二进制
位置 | 0001 | 0010 | 0011 | 0100 | 0101 | 0110 | 0111 | 1000 | 1001 | 1010 | 1011 | 1100 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
内容 | P1 | P2 | 1 | P3 | 0 | 1 | 1 | P4 | 0 | 1 | 1 | 0 |
为了求出P1,要使所有位置的第二位是1的数据(即形如xxx1的位置的数据)的异或值为0。
P1 ⊕1 (0011) ⊕ 0 (0101) ⊕ 1 (0111) ⊕ 0 (1001) ⊕ 1 (1011) =0
解得:P1=1
为了求出P2,要使所有位置的第二位是1的数据(即形如xx1x的位置的数据)的异或值为0。
P2⊕ 1 (0011) ⊕ 1 (0110) ⊕ 1 (0111) ⊕ 1 (1010) ⊕ 1 (1011) =0
解得:P2=1
为了求出P3,要使所有位置的第二位是1的数据(即形如x1xx的位置的数据)的异或值为0。
P3⊕0⊕1⊕1⊕0=0
解得:P3=0
为了求出P4,要使所有位置的第二位是1的数据(即形如1xxx的位置的数据)的异或值为0。
P4⊕0⊕1⊕1⊕0=0
解得:P4=0
海明码:1 1 1 0 0 1 1 0 0 1 1 0
然后再求S4 S3 S2 S1判断是哪一位出错了,就ok啦
循环冗余校验码
这个还没有看,等以后复习的时候再回过头来写!!!!
@转载请注明出处~~