网工干货知识

超全学习笔记
当前位置:首页 > 干货知识

汉明码

更新时间:2026年03月27日   作者:spoto   标签(Tag):

汉明码是一种用于确保数据传输或存储过程中数据准确性的纠错编码方式。汉明码能够检测并纠正在数据从发送方传输到接收方过程中可能出现的错误。这种简单而有效的编码方式有助于提升通信系统和数字存储系统的可靠性。汉明码会在原始数据中添加额外的比特位,从而让系统能够检测并纠正单个比特位的错误。

什么是冗余位?

冗余位是指那些被额外生成的二进制位,它们被添加到数据传输过程中所携带的数据位中。这样做的目的是为了确保在数据传输过程中没有任何位丢失。冗余位的个数可以通过以下公式来计算:

 2r≥ m + r + 1

在何处,

  • m表示输入数据中的位数。
  • r表示冗余比特的数量。

假设数据位数为7,那么冗余位的数量可以计算为:

= 24≥ 7 + 4 + 1

因此,冗余位的数量为4。

奇偶校验位的类型

奇偶校验位是一种附加在二进制数据上的位,其作用在于确保数据中1的个数要么为偶数,要么为奇数。奇偶校验位主要用于错误检测。奇偶校验位有两种类型:

  • 甚至还有奇偶校验位:在偶数位的情况下,对于给定的比特序列,需要计算其中1的个数。如果这个计数为奇数,那么奇偶校验位的数值就设为1,这样1的出现次数就会变成偶数。而如果给定比特序列中1的总数是偶数,那么奇偶校验位的数值就为0。
  • 奇校验位:在奇校验的情况下,对于给定的位集来说,需要计算1的个数。如果这个计数结果是偶数,那么校验位的值就设为1,这样1的累计数量就会变成奇数。而如果给定位集中1的个数是奇数,那么校验位的值就设为0。

汉明码算法

汉明码的本质就是利用额外的奇偶校验位来识别错误。

步骤1:以二进制形式列出所有位的位置,从1开始计数(即1, 10, 11, 100等)。

步骤2:所有为2的幂次的位都被标记为奇偶校验位(即1、2、4、8等)。

步骤3:其余的所有位都被标记为数据位。

步骤4:每个数据位都会被分配到一组独特的奇偶校验位中,这些奇偶校验位的分配方式取决于该数据位在二进制表示中的位置。

  • 奇偶校验位1用于标记那些在二进制表示中最低位为1的所有位位置,这些位置包括1、3、5、7、9、11等。
  • 第2个奇偶校验位涵盖了所有那些在二进制表示中,从最低位开始,第二位为1的位位值(即2、3、6、7、10、11等)。
  • 奇偶校验位4涵盖了所有那些在二进制表示中,从最低有效位开始,第三个位置上为1的位位序(即4-7、12-15、20-23等位置)。
  • 奇偶校验位8涵盖了所有那些在从最低有效位开始数的第四个位置上有1的二进制数位。这些位置包括8–15、24–31、40–47等位置。
  • 一般来说,每个奇偶校验位都涵盖了那些在奇偶校验位与该位对应的位置上进行按位与运算后结果不为零的所有位。

步骤5:由于我们需要检查奇偶性,因此当所检查位置的1的数量为奇数时,将相应的奇偶校验位设置为1。而当所检查位置的1的数量为偶数时,则将相应的奇偶校验位设置为0。

确定冗余比特的位置

冗余位被放置在与2的幂次相对应的位置上。就像上面的例子一样:

  • 数据位的数量 = 7
  • 冗余位的数量 = 4
  • 总位数数为 7 + 4 = 11
  • 那些多余的位被放置在那些为2的幂次的位置上,即1、2、4和8。

  • 假设从发送方到接收方需要传输的数据为1011001,那么这些比特位将被排列如下:

根据偶校验规则来确定奇偶校验位

  • R1比特的計算方式是,对于那些在二进制表示中最低位为1的比特来说,使用奇偶校验来计算R1。具体的计算位置为:比特1、3、5、7、9、11。

  • 为了找到冗余位R1,我们需要检查其奇偶性。由于与R1相对应的所有位上的1的数量都是偶数,因此R1的值(即奇偶校验位的值)为0。
  • R2比特的计算方式是,对于那些在二进制表示中第二个位为1的比特来说,使用奇偶校验来计算R2的值。具体来说,R2包括第2、3、6、7、10和11位。

  • 为了找到多余的位R2,我们需要检查其奇偶性。由于与R2对应的所有位上的1的数量都是奇数,因此R2的奇偶性值等于1。
  • R4位数是通过奇偶校验计算得出的,这种计算方式适用于那些在从最低位开始数的第三个位置上包含1的所有二进制位数。具体来说,R4包括第4、第5、第6和第7位。
  • 为了找到多余的位R4,我们需要检查其奇偶性。由于与R4相对应的所有位上的1的数量都是奇数,因此R4的奇偶性值等于1。
  • R8位数的计算方式是,对于那些二进制表示中第四位为1的位,都会进行奇偶校验处理。也就是说,R8包含的是第8、9、10和11位。
  • 为了找到多余的位R8,我们需要检查其奇偶性。由于与R8对应的所有位上的1的个数都是偶数,因此R8的奇偶性值等于0。所以,传输的数据就是:

错误检测与纠正

假设在上述例子中,第6位在数据传输过程中从0变成了1。那么,此时新的奇偶校验值就会有所不同了。二进制数

对于所有的奇偶校验位,我们将检查它们各自位置上1的个数。

  • 对于R1来说,对应的位是1、3、5、7、9、11。我们可以看到,这些位上1的个数为4,而4是偶数,因此这个位的数值为0。
  • 对于R2来说,第2、3、6、7、10、11位上都是1。可以看出,这些位上1的个数总共有5个,而5是个奇数。因此,对于这个位来说,结果就是1。
  • 对于R4来说,第4、5、6、7位上都是1。可以看出,这些位上的1的数量都是3,而3是一个奇数。因此,对于这个位来说,结果就是1。
  • 对于R8来说,第8、9、10和11位上都是1。可以看出,这些位上的1的数量都是2,而2是偶数,因此这里的数值为0。
  • 这些位表示了二进制数0110,其十进制表示为6。因此,第6位存在错误。为了纠正这个错误,需要将第6位的数值从1改为0。

汉明码的特点

  • 错误检测与纠正:汉明码旨在检测并纠正在数据传输过程中可能出现的单比特错误。这样,接收方就能接收到与发送方发送过来的相同数据。
  • 冗余:汉明码使用冗余位来为传输的数据添加额外的信息。这种冗余性使得接收方能够检测并纠正在传输过程中可能出现的错误。
  • 效率:汉明码是一种相对简单且高效的错误校正技术,它不需要大量的计算资源。因此,这种编码方式非常适合用于低功耗和低带宽的通信网络。
  • 被广泛使用:汉明码是一种被广泛使用的错误校正技术,它被应用于各种领域,包括电信、计算机网络以及数据存储系统等领域。
  • 单个错误修正:汉明码能够纠正单个比特的错误,因此非常适合那些可能因外部因素(如电磁干扰)而导致错误发生的应用场景。
  • 有限的多次错误修正功能:汉明码只能纠正有限数量的多个错误。在可能出现多个错误的应用场景中,可能需要使用更先进的纠错技术。

对于实施方面,您可以参考相关资料。这个文章/条目

关于汉明码的问题

假设一个12位的汉明码字由8位数据部分和4位校验位组成。8d7d6d5c4d4d3d2c3d1c2c1.其中,数据位和校验位的信息分别列在以下表格中:[GATE 2021]

下面哪个选项能够给出正确的x和y的值呢?

(A) x的值为0,y的值也为0。

(B) x的值为0,而y的值为1。

(C) x的值为1,而y的值为0。

(D) x的值为1,y的值也为1。

答案:(A)

首先,我们将按照汉明码的规则来插入我们的编码字。8d7d6d5c4d4d3d2c3d1c2c1,

现在,根据第一个奇偶校验位C1来计算汉明码:d7d5d4d2d1c1. 1x0010,为了使数字为奇数,这里的x必须等于0。

同样地,让我们先计算 y 的值。我们可以从 c 开始计算。8 那么,将其变为110xy的形式吧。在这里,x已经为0了,所以y也应该是0。

因此,x的值为0,y的值也为0。

如需了解更多详细信息,您可以参考相关资料。GATE | GATE CS 2021 | 第1套试题 | 第39题已发布的测验/试题。

              马上抢免费试听资格
意向课程:*必选
姓名:*必填
联系方式:*必填
QQ:
思博SPOTO在线咨询

相关资讯

即刻预约

免费试听-咨询课程-获取免费资料