例:求信息码1011的海明码。
1.确认校验位数。由2^K≥N+K+1(其中N为信息码的位数,K为校验码的位数,例题中N为4位),得校验码的位数为K=3。
2.列表。校验码在二进制串中的位置为2^n(n=0,1,2...)。剩下的位置为数据。
7 | 6 | 5 | 4 | 3 | 2 | 1 | 位置 |
111 | 110 | 101 | 100 | 011 | 010 | 001 | 位置(B) |
1 | 0 | 1 | 1 | 信息位 | |||
k3 | k2 | k1 | 校验位 |
3.计算。
k3所在的位置是4,即100(B),那么找到形如1**的位置的,7、6、5即111、110、101。将他们的信息位异或处理。k3=1^0^1=0
同理k2(形如*1*)是7、6、3,k2=1^0^1=0,k1(形如**1)是7、5、3,k1=1^1^1=1。
所以1011的海明码为1010101
4.检错。假设1010101的第3位发生错误变成了1010001
将所有1**、*1*、**1的位置分别异或。
1**:0^1^0^1=0
*1*:0^0^0^1=1
**1:1^0^1^1=1
出错位置是011,第三位。
例:选择多项式为1011(x^3+x+1),把4位有效信息位1100编成CRC码。
1.把信息位补K个0以便拼装K位个余数。(K=多项式的最高次幂)
1100000
2.计算
1100000/1011=1110------010(异或除法)
3.拼装
把余数010拼装到信息位后面。1100010
所以CRC码是1100010