存储器的校验:汉明码

科技资讯 投稿 7300 0 评论

存储器的校验:汉明码

前言

奇偶校验

奇偶校验是一种添加一个奇偶位用来指示之前的数据中包含有奇数还是偶数1的检验方式。

s,采取校验,即校验位使新数据中的1的个数为偶数。

即 \(b_n \oplus b_{n-1} \oplus ... \oplus b_2 \oplus b_1 \oplus s = 0\,则\(s = b_n \oplus b_{n-1} \oplus ... \oplus b_2 \oplus b_1\。

1位(奇数个位)发生了改变(包括校验位),那么将可以检测出来错误。但是如果有偶数个位发生了改变,那么校验位将是正确的,因此不能检测错误。而且,即使出现了错误,也不知道是哪一位出现了错误,数据必须整体丢弃并且重新传输。

汉明码

简介

多重奇偶校验,通过巧妙的分组,实现了校验并纠正一位错误的能力。

编码纠错理论

根据纠错理论得:

即编码最小距离L越大,则其检测错误的位数D越大,纠正错误的位数C也越大,且纠错能力恒小于或等于检错能力。

L,显然便能提高检错和纠错能力。汉明码就是根据这一理论提出的具有一位纠错能力的编码。

关于编码最小距离

例1.1

编码系统是所有的3位二进制数,即\(设集合 S =\left\{ 000,001,010,011,100,101,110,111 \right\}\。

    第一位0变为1:\(110\
  1. 第二位1变为0:\(000\
  2. 第三位0变为1:\(011\

显然,这三种数据都在集合当中,我们检验不出错误。

例1.2

\(设集合 S =\left\{ 001,010,100 \right\}\。

比如,我们传输数据\(010\:

    第一位0变为1:\(110\
  1. 第二位1变为0:\(000\
  2. 第三位0变为1:\(011\

对于出错数据\(110\,它的可能正确数据:

    第一位0变为1:\(010\
  1. 第二位0变为1:\(100\
  2. 第三位1变为0:\(111\(不存在S中)

例1.3

\(设集合 S =\left\{ 000,111 \right\}\。

核心公式

设欲检测的二进制代码为n位,为使其具有纠错能力,需增添k位检测位,组成 n + k 位的代码。为了能准确对错误定位以及指出代码没错,新增添的检测位数 k应满足:

变换一下:

k位检测位可以提供\(2^k\种状态,减去一种正确的状态,即,所有错误的状态应该包括分别每一位出错的情况,这里每一位出错包括检测位,所以就是\(n + k\。

由此求出不同代码长度 n,所需检测位的位数 k:

编程笔记 » 存储器的校验:汉明码

赞同 (34) or 分享 (0)
游客 发表我的评论   换个身份
取消评论

表情
(0)个小伙伴在吐槽