软考笔记(2)--校验码(海明码)

概念

海明码(Hamming Code)是一种利用奇偶性来检错和纠错的校验方法。海明码的构成方法是在数据位之间的特定位置上插入k个校验位,通过扩大码距来实现检错和纠错。

要点

现在举个例子,以下均以该例子说明。
例子:
有个数据位为8的数据D7D6D5D4D3D2D1D0=01101001,求海明码。
先上结果:

H12 H11 H10 H9 H8 H7 H6 H5 H4 H3 H2 H1
D7 D6 D5 D4 P4 D3 D2 D1 P3 D0 P2 P1

↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓

H12 H11 H10 H9 H8 H7 H6 H5 H4 H3 H2 H1
0 1 1 0 P4 1 0 0 P3 1 P2 P1

↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓

H12 H11 H10 H9 H8 H7 H6 H5 H4 H3 H2 H1
0 1 1 0 0 1 0 0 1 1 0 1

要点1(计算校验位个数)

设数据位是n位,校验位是k位,则n和k必须满足以下关系:
2k - 1 ≥ n + k
例如一个数据的数据位为8位,求需要多少位校验码,则有2k - 1 ≥ 8 + k,可以得到k最小应该为4,即24 - 1 ≥ 8 + 4

要点2(计算校验位位置)

2-1 (海明码总位数)

设校验位为P,数据位为D,海明码为H,则海明码H的位数为校验码和数据的位数相加。

2-2 (校验码位置)

校验位P在海明码的第2i-1位,即Hj = Pi,j=2i-1,i从1开始计数。无论是海明码、校验位还是数据位,均从右向左排列,即从低位向高位排列。
可先填入校验码的位置,再将数据位依次从低位到高位填入。
例如:

H12 H11 H10 H9 H8 H7 H6 H5 H4 H3 H2 H1
D7 D6 D5 D4 P4(24-1位) D3 D2 D1 P3(23-1位) D0 P2(22-1位) P1(21-1位)

要点3 (数据由哪些校验码进行校验)

根据上面求出的校验码的位置或者2i-1的公式,即可知道P4、P3、P2、P1的下标分别为8、4、2、1。
现在要确定一下每位数据均由哪些校验码进行校验的。
方法:数据为的下标等于校验位的下标之和。
D0=H3,3=2+1,即用H2、H1进行校验,即P2、P1
D1=H5,5=4+1,即用H4、H1进行校验,即P3、P1
D2=H6,6=4+2,即用H4、H2进行校验,即P3、P2
D3=H7,7=4+2+1,即用H4、H2、H1进行校验,即P3、P2、P1
D4=H9,9=8+1,即用H8、H1进行校验,即P4、P1
D5=H10,10=8+2,即用H8、H2进行校验,即P4、P2
D6=H11,11=8+2+1,即用H8、H2、H1进行校验,即P4、P2、P1
D7=H12,12=8+4,即用H8、H4进行校验,即P4、P3

要点4 (计算校验码的值)

校验码的值为有参与校验的数据依次从低到高异或的值。
要点3可以看出以下规律:
P1参与了D0、D1、D3、D4、D6等数据位的校验。
P2参与了D0、D2、D3、D5、D6等数据位的校验。
P3参与了D1、D2、D3、D7等数据位的校验。
P4参与了D4、D5、D6、D7等数据位的校验。
所以:(D7D6D5D4D3D2D1D0=01101001)
P1 = D0⊕D1⊕D3⊕D4⊕D6 = 1⊕0⊕1⊕0⊕1 = 1
P2 = D0⊕D2⊕D3⊕D5⊕D6 = 1⊕0⊕1⊕1⊕1 = 0
P3 = D1⊕D2⊕D3⊕D7 = 0⊕0⊕1⊕0 = 1
P4 = D4⊕D5⊕D6⊕D7 = 0⊕1⊕1⊕0 = 0

要点5(错误校验)

确定错误校验G4G3G2G1,校验码有几位,错误校验就有几位。
如果采用偶校验则结果全为0时没有错误,如果采用奇校验则结果全为1时没有错误
G1 = P1D0⊕D1⊕D3⊕D4⊕D6 = 1⊕1⊕0⊕1⊕0⊕1 = 0
G2 = P2D0、D2、D3、D5、D6 = 0⊕1⊕0⊕1⊕1⊕1 = 0
G3 = P3D1、D2、D3、D7 = 1⊕0⊕0⊕1⊕0 = 0
G4 = P4D4、D5、D6、D7 = 0⊕0⊕1⊕1⊕0 = 0

则G4G3G2G1 = 0000,表示没有异常。假如结果为0100则转为十进制为8,表示第八位存在异常。

扫描二维码关注公众号,回复: 8921957 查看本文章
发布了62 篇原创文章 · 获赞 106 · 访问量 21万+

猜你喜欢

转载自blog.csdn.net/lang523493505/article/details/101036488