海明码是一种利用奇偶性来检错和纠错的校验方法。海明码的构成方法是在数据位之间特定的位置上插入k个校验位,通过扩大码距来实现检错和纠错。所以要得到海明码需要1.数据位 2.校验位 3.合并数据位和校验位。
海明码的求解步骤:
- 根据数据位位数确定校验位有几位。
- 确定校验位的位置。
- 求出校验位。
- 合并数据位和校验位得到海明码。
- 检测和纠错原理
下面通过例题:求信息1011的海明码。 来具体的实现海明码的求解步骤。
1.根据数据位位数确定校验位有几位。
海明码的数据位(n)和校验位(k)的公式是n+k<=-1 (k=0,1,2......)可以采取带值法试出满足条件的最小的k值就是校验位的位数。
根据数据位有4位,n=4,根据公式n+k<=-1,算出满足公式最小的k值为3即校验位的位数为3位,所以海明码的长度是数据位+校验位=7位。
2.确定校验位的位置。
校验位的位置在2的n(n=0,1,2....)次方中,即处于第1,2,4,8,16......位上,其余位为数据位。本题海明码长度为7为,所以校验位处于第1,2,4位上。
如下图,用表示数据1011,表示校验位。
3.求出校验位。
校验位:被校验的所有数据位异或。
1.分别列出每个数据位需要的校验位,如下图。
数据位对应位数为7,7=++,即数据位由校验位2,1,0共同校验(看2的次方数)。
数据位对应位数为6,6=+,即数据位由校验位2,1共同校验。
数据位对应位数为5,5=+,即数据位由校验位2,0共同校验。
数据位对应位数为3,3=+,即数据位由校验位1,0共同校验。
2.每个校验位需要校验的数据位(根据上图推导)
校验位2需要校验数据位;
校验位1需要校验数据位;
校验位0需要校验数据位;
3.求出各个校验位的值
为校验位需要校验的数据位的数值进行异或如下图。
4.合并数据位和校验位得到海明码。
5.检测和纠错原理
将每一位校验码与其校验的位数分别异或,如下图。如果是偶校验,运算结果全为0,如果是奇校验,运算结果全为1。
eg:此时收到的数据为1010001(第3位出错),运算结果如下图
算出结果按照 排列为二进制011这里指出的就是错的位数,转化为十进制为3即第三位出错,纠错方法就是将该位取反。