计算机组成与体系结构——汉明码

314 阅读3分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

一、前言

计算机系统在计算、运输、数据传输过程中可能产生错误

  • 硬件原因:辐射、撞击、老化、底噪
  • 软件原因:BUG

在计算或数据存储中,使用汉明码(Hamming Code)不仅可以能判断是否出错,还能修正错误

二、最小汉明距离

任意两个等长数字中,不同位的总数称为汉明距离(Hamming Distance),记为D

例如:
1 0 0 0 1 0 0 1
1 0 1 1 0 0 0 1
	* * *
D=3

任意两个合法编码的汉明距离的最小值称为最小汉明距离,记为Dmin。

Dmin决定了汉明码的纠错能力:

例如:假设字长=3,合法编码为c1=000、c2=111,则Dmin=3
	若收到x=001:
		若最多有1位错误,则源数据为c1
		若最多有2位错误,无法判断源数据,只能判定出错
		若最多有3位错误,无法判断源数据,只能判定出错

设最小汉明距离Dmin,最多可以对k位查错/纠错,k=(Dmin-1)/2

假设n位汉明码有m位有效信息r位校验码,可以对k位纠错的前提是:每个合法编码对应了C k/n+k个编码,因此有:

C k/m+r+k ≤ 2^r^C k/n+k +2^m^≤2^n^

例如:(1)设m=7,r=4,是否可以对k=1纠错?(2)设m=4,k=1,最少需要几位进行编码?
(1)C 1/12 =12≤2^4=16,可以
(2)C 1/5+r =5+r≤2^r → r≥3

三、确定汉明码的编码

Ⅰ、校验位和有效位

二进制编码中:除了2的次幂,每个数字至少包含两项

例如:5=4+1,13=8+4+1

约定:2的次幂位是校验位,有效数字由低到高填满剩余位

例如:(星标为校验位)m=8,r=4,k=1
__ __ __ __ __ __ __ __ __ __ __ __
12 11 10  9  8  7  6  5  4  3  2  1
            **          **    ** **

Ⅱ、校验位该填什么值?

第n位是校验位时:采用偶校验,查看可以分解出该位的数值位是否为1,有一位为1就加一,加法是模2加法

例如:
1 1 0 1 __ 0 1 1 __ 0 0 __

记第k位为dk,第2^n位记为校验位pn
由于3=2+1、5=4+1、7=4+2+1、9=8+1、11=8+4+1,d1=p0=d3+d5+d7+d9+d11=1
同理:
d2=p1=d3+d6+d7+d10+d11=0
d4=p2=d5+d6+d7+d12=1
d8=p3=d9+d10+d11+d12=1

结果为
1 1 0 1 1 0 1 1 1 0 0 1
        *       *   * *

三、如何纠错?

通过错误的汉明码可以判断是否出错并给出具体位

例如:
1 1 0 1 1 0 1 0 1 0 0 1
        *       *   * * 
根据有效位计算每一位校验值,核对
p0=d3+d5+d7+d9+d11=0≠1=d1,出错,并且限定了错误范围
p1=d3+d6+d7+d10+d11=0=d2
p2=d5+d6+d7+d12=0≠1=d4,出错,并且限定了错误范围
p3=d9+d10+d11+d12=1=d8

寻找交集元素即可知:d5出错,取非得1完成修正

只要两个位计算结果不相符就能通过交集元素知道错误位,交集有且仅有一个元素才做到了查错