软考学习--海明码

    求信息1011的海明码.

    求解步骤:

    (1)用k表示信息位数,r为校验位数.根据信息位数求出校验位数,公式是2^r≥k+r+1,满足这个不等式的最小的r,就是校验位数.

    而信息位数则根据信息的长度来确定,如1011,信息位数为4.所以2^r≥4+1+r,可以得出符合条件的最小的r为3,所以校验位数为3.

    (2)根据得出的信息位数k=4和校验位数r=3,可以自己得到一个表.

表是这样的,首先他的列数等于k+r=7,但是还有第一列要用来写说明信息,所以共有8列,行数是3行.从右往左填起,第一列分别是位数(纯数字),信息位数(I),校验位数(r).然后填好第一行位数,从右到左,1-7;如下图所示

7
6
5
4
3
2
1
位数







信息位数







校验位数

    然后我们不先填信息位数,而是先填校验位数,第三行.而检验位不是纯数字,而是r加下标,下标从0开始.而且填的位置根据2的次方来.

    如2^0=1,所以1位下放r₀ ;

      2^1=2,所以2位下放r;

      2^2=4,所以4位下放r₂; 放到2^2=4之后就没得放了.正好校验位是r=3,r₀,r₁,r₂.

7
6
5
4
3
2
1
位数







信息位数



r₂

r₁
r₀
校验位数

    最后剩下的空就补信息位数,信息位数和校验位不同,他的下标是从1开始的.I₁,I₂,I₃,I₄,4个.

7
6
5
4
3
2
1
位数
I₄
I₃
I₂

I₁


信息位数



r₂

r₁
r₀
校验位数
    (3)根据我们的校验位公式,求出校验码.校验位的公式是这样的.
    首先根据4个信息位数,对应的位数,把位数用2的次方的形式表现出来.如 
I₁,3=    2^1+2^0
I₂,5=2^2    +2^0
I₃,6=2^2+2^1
I₄,7=2^2+2^1+2^0
    然后,由于r₀,r₁,r₂,分别对应的2^0,2^1,2^2次方.所以有2^0次方的,就可以列入r₀的表达式中,如I₁,I₂,I₄,都含有2^0次方,所以
r₀=I₁⊕I₂⊕I₄;
    同理I₁,I₃,I₄,都有2^1次方,可以放到r₁中,依次.
r₁=I₁⊕I₃⊕I₄;
r₂=I₂⊕I₃⊕I₄;
    注意一下⊕,这个是异或符号,同1为1,其他为0;
    此时由于信息是1011,所以从右到左,I₄,I₃,I₂,I₁,依次为1,0,1,1.也就是说,除了I₃为0,其他均为1.所以
r₀ =I₁⊕I₂⊕I₄;
r₁=I₁⊕I₃⊕I₄;
r₂=I₂⊕I₃⊕I₄;
    即为
r₀ =1⊕1⊕1=1;
r₁=1⊕0⊕1=0;
r₂=1⊕0⊕1=0;
    求出了校验r₀=1;r₁=0;r₂=0;
    (4)填完上面的表,用1011,代替 I₄,I₃,I₂,I₁ ,用100,代替r₀,r₁,r₂
7
6
5
4
3
2
1
位数
1
0
1

1


信息位数



0

0
1
校验位数
    最后从右到左的读出来,就是海明码.
    1010101.
    最后的最后,说明下,简单的学习了下海明码校验码,过程不算复杂,这篇博客写起来也不难,但是下标用起来费劲死我了.而且我中途把I₁,I₂,I₃,I₄搞错了,我以为还是从右到左填,全部写完之后发现错了,又给改了.要记住表格中的信息位数,是按正常习惯填入的.而校验位是按算出来的值填入的,一般不会错.一定要小心.

你可能感兴趣的:(软考)