📜  计算机网络中的汉明码

📅  最后修改于: 2021-09-28 09:22:03             🧑  作者: Mango

汉明码是一组纠错码,可用于检测和纠正数据从发送方移动或存储到接收方时可能发生的错误。它是由 RW Hamming 开发的用于纠错的技术

冗余位 –

冗余位是额外的二进制位,生成并添加到数据传输的信息承载位中,以确保在数据传输过程中不会丢失任何位。
可以使用以下公式计算冗余位数:

2^r ≥ m + r + 1 
 where, r = redundant bit, m = data bit

假设数据位数为 7,那么冗余位数可以使用以下公式计算:
= 2^4 ≥ 7 + 4 + 1
因此,冗余位数= 4

奇偶校验位 –
奇偶校验位是附加到二进制位数据的位,以确保数据中 1 的总数是偶数或奇数。奇偶校验位用于错误检测。有两种类型的奇偶校验位:

  1. 偶校验位:
    在偶校验的情况下,对于给定的一组位,计算 1 的数量。如果该计数为奇数,则奇偶校验位值设置为 1,使 1 的总出现次数为偶数。如果给定的一组位中 1 的总数已经是偶数,则奇偶校验位的值为 0。
  2. 奇校验位 –
    在奇校验的情况下,对于给定的一组位,计算 1 的数量。如果该计数为偶数,则奇偶校验位值设置为 1,使 1 的总出现次数为奇数。如果给定的一组位中 1 的总数已经是奇数,则奇偶校验位的值为 0。

汉明码的通用算法——
汉明码只是使用额外的奇偶校验位来识别错误。

  1. 以二进制形式(1、10、11、100 等)写入从 1 开始的位位置。
  2. 所有 2 的幂的位位置都标记为奇偶校验位(1、2、4、8 等)。
  3. 所有其他位位置都标记为数据位。
  4. 每个数据位都包含在一组唯一的奇偶校验位中,以二进制形式确定其位位置。
    一种。奇偶校验位 1 涵盖其二进制表示中最低有效位为 1 的所有位位置
    位置(1、3、5、7、9、11 等)。
    奇偶校验位 2 涵盖所有位位置,其二进制表示包括从第二个位置为 1
    最低有效位(2、3、6、7、10、11 等)。
    C。奇偶校验位 4 涵盖所有位位置,其二进制表示在第三个位置包含 1
    最低有效位(4–7、12–15、20–23 等)。
    d.奇偶校验位 8 涵盖所有位位置,其二进制表示在从
    最低有效位(8-15、24-31、40-47 等)。
    e.通常,每个奇偶校验位涵盖奇偶校验位置和位位置的按位与的所有位
    非零。
  5. 由于我们检查偶校验,如果它检查的位置中的 1 总数为 1,则将奇偶校验位设置为 1
    奇怪的。
  6. 如果它检查的位置中 1 的总数是偶数,则将奇偶校验位设置为 0。

确定冗余位的位置——
这些冗余位位于与 2 的幂对应的位置。
如上例所示:

  1. 数据位数 = 7
  2. 冗余位数 = 4
  3. 总位数 = 11
  4. 冗余位放置在对应于 2-1、2、4 和 8 的幂的位置

假设要传输的数据为 1011001,位将如下放置:

确定奇偶校验位 –

  1. R1 位是在所有位位置使用奇偶校验计算的,其二进制表示在最低有效位置包含 1。

    R1:位 1、3、5、7、9、11

    为了找到冗余位 R1,我们检查偶校验。由于与 R1 对应的所有位位置中 1 的总数是偶数,因此 R1 的值(奇偶校验位的值)= 0

  2. R2 位是在所有位位置使用奇偶校验计算的,其二进制表示包括从最低有效位开始的第二个位置中的 1。

    R2:位 2、3、6、7、10、11

    为了找到冗余位 R2,我们检查偶校验。由于与 R2 对应的所有位位置中 1 的总数是奇数,因此 R2 的值(奇偶校验位的值)=1

  3. R4 位是在所有位位置使用奇偶校验计算的,其二进制表示在最低有效位的第三个位置包含 1。

    R4:第 4、5、6、7 位

    为了找到冗余位 R4,我们检查偶校验。由于与 R4 对应的所有位位置中 1 的总数是奇数,因此 R4 的值(奇偶校验位的值)= 1

  4. R8 位是在所有位位置使用奇偶校验计算的,其二进制表示包括从最低有效位开始的第四个位置中的 1。

    R8:位 8、9、10、11

    为了找到冗余位 R8,我们检查偶校验。由于R8对应的所有位位置1的总数是偶数,所以R8的值(奇偶校验位的值)=0。

    因此,传输的数据为:

错误检测和纠正——
假设在上面的例子中,第 6 位在数据传输过程中从 0 变为 1,然后它给出了二进制数中的新奇偶校验值:

这些位给出二进制数为 0110,其十进制表示为 6。因此,位 6 包含错误。为了纠正错误,第 6 位从 1 变为 0。