海明码
- 海明码是一种多重奇偶检错码,具有检错和纠错的功能。
- 码距(海明码距):两个码元对应位不同的个数。如10101101和10011101的码距为2,因为它们只有两个位不同。
一、海明码的求解过程
1.准备
题目给定原始信息,设m为原始信息长度,根据公式,求出校验位长度k的最小值。在纸上画出m+k个格子(从1开始编号),设校验位为(i从1开始),将校验位从左至右填入的位置上,剩下的为原始信息位,从左至右将原始信息填入。表格如下图,黄色区域为校验位,蓝色区域为原始信息位。
2.计算校验位(也叫冗余位)
将原始信息位的位置编号值转换为二进制,则等于满足“二进制位第i位为1”的所有信息位进行异或操作后得到的值。将算出后就得到了加入校验位后的信息。
3.校验
将所有位置(包括原始信息位和校验位)的位置编号值转换为二进制,则(i从0开始)等于满足“二进制位第i位为1”的所有信息位进行异或操作后得到的值,将X按下标从大到小排列,得到一个形如的二进制串,将其转换为十进制后,若结果为0,则未发生差错;若不为0(假设为Y),则错误发生在第Y位。
二、海明码求解示例
以原始信息101101为例。
1.准备
原始信息长度m=6,根据公式求得校验位长度k=4。则信息位加校验位总长度为10位。信息填入如下。
2.计算校验位
将原始信息位的位置编号值转换为二进制,如下表。则
将校验位填入表格,就得到了加入校验位后的信息。
3.校验
假设发送方发送了上述校验码信息后,接收端收到的信息为0010111101,如下图
将所有位置(包括原始信息位和校验位)的位置编号值转换为二进制,如下表,则
将的二进制转换为十进制为5,结果非0,则错误发生在第5位。
循环冗余码
一、循环冗余码的求解过程
1.准备
给定原始信息串和生成多项式G(x)
2.原始信息后“添0”
设G(x)的最高阶数为r,则在原始信息后添上r个0,得F(x)。
3.计算r位校验码
将F(x)与G(x)逐位异或,得到r位校验码。
4.校验
在G(x)后加上得到的r位校验码,记为P(x),将P(x)与G(x)逐位异或,若结果为0,则信息无错;否则,信息有错,要求发送方进行重传。
二、循环冗余码求解示例
以原始信息串为10110,生成多项式为为例。
1.原始信息后“添0”
G(x)的最高阶数为4,则在原始信息后添上4个0,得到F(x)=101100000。
2.计算r位校验码
将F(x)与G(x)逐位异或,得到r位校验码,结果如下图,r位校验码为1111,则P(x)=101101111。
3.校验
将P(x)与G(x)逐位异或,若结果为0,则信息无错;否则,信息有错,要求发送方进行重传。结果如下图,结果为0,信息无错。
至此,海明码和循环冗余码的求解过程就结束了。为查阅方便,做个整理,供大家参考学习。