关于海明码 卢湾电大 邵祖铭 在本科计算机科学技术专业有一门课程《计算机组成原理》 ,在讲述“3.1.3 检错纠错 码”一节的海明码时,学生多有疑惑,但常有考题出于斯,因此整理了一个讲稿。基于学生 主要是使用海明码,而不是研究海明码,所以重点讲清使用方法。 数据经过传送、存取等环节,就会发生误码——1 变成 0 或 0 变成 1,这就引出如何发 现及纠正误码的问题, 称为检错与纠错。 为了检错与纠错必须在原始数据位的基础上增加几 位校验(冗余)位。 一、码距 一个编码系统中任意两个合法编码之间不同的二进制位数叫这两个码字的码距,而整 个编码系统中任意两个码字的最小码距就是该编码系统的码距。 如图 1 所示的一个编码系统,用三位二进制来表示八个不同信息。在这个系统中,两 个码字之间不同的位数从 1 到 3 不等,但最小值为 1,故这个系统的码距为 1。如果任何码 字中一位或多位出了差错, 结果这个码字就不能与其它码字区分。 例如, 如果传送信息 001, 而被误收为 011,因 011 仍是表中的合法码字,接收方仍将认为 011 是正确的信息。 但是,如果用四个二进数字来编 8 个码字,那么在码字间的最小距离可以增加到 2,如 图 2 的表中所示。 信息序号 0 1 2 3 4 5 6 7 二进码字 a2 0 0 0 0 1 1 1 1 图 1 注意, 2 的 8 个码字相互间最少有两位的差异。 图 因此,如果任何码字的一个数位出差错,就成为一个 不用的码字,就能检查出来。例如信息是 1001,误收 为 1011, 接收方知道发生了一个差错, 因为 1011 表中 没有,不是一个码字。然而,差错不能被纠正。因为, 正确码字可以是 1001,1111,0011 或 1010。接收方不 能确定原来到底是这 4 个码字中的哪一个。同时, 在 这个系统中,偶数个(2 位或 4 位)差错也无法发现。 为了使一个系统能纠正一位差错,码距最小是 3。 最小距离为 3 时,或能纠正一位错,或能检测二位错, 但不能同时纠正一位错并检测二位错。