思路

冗余校验

冗余校验:原数据信息+若干校验位编码

  • 输入的数据 M 经过特定函数 F 的运算,产生校验位 P:P=F(M),得以存储或传输;
  • 数据读出或传递到目标部件时,校验位同时也得以传递,用于检错和纠错。M’ 代表读出的数据,同样对 M’经过同一函数运算得到新的校验位 P’:P'=F(M'),而随着 M’同时取出的校验位为 P”,通过对 P’和 P”的特定比较,可以确定是否发生错误:
    • 没有检测到错误,则直接传送得到的数据;
    • 检测到差错并纠错;
    • 检测到错误但无法纠错,则报告之;

海明距离

码字:数据+校验位+特定规律排列 海明距离:两个码字逐位比较,具有不同位的个数 码距:同一码制下,各码字之间的最小海明距离

合理地增加校验位、增大码距,就能提高检错/纠错的能力。

码距与纠错能力的关系

码距 d4 时,有如下关系:

  1. 如果码距 d 为奇数(1,3),则能发现 d-1 位错(0,2),或者能纠正 (d-1)/2 位错(0,1)。
  2. 如果码距 d 为偶数(2,4),则能发现 d/2 位错(1,2),并能纠正 (d/2-1)位错(0,1)。

奇偶校验吗

只能发现奇数位出错,不能发现偶数位出错,也不能确定发生错误位置的能力,不具有纠错能力。

海明校验码

实质是多重奇偶校验码:将数据按规律分组,每组进行奇偶检测,提供多位校验信息。

故障字:上图中 P'P'' 进行按位异或操作,得到的结果。

  • 故障字与校验位,在位数上相同。

校验位的位数确定

n 位数据,k 位校验,则有 k 位故障字,故障字能够表示的状态最多有 种。对于最多一位出错的情况,可能结果有无错、数据出错、校验位出错,因此要正确表示所有一位错的情况,需要满足

  • ,用 k-1 位校验码为出错位编码,再单独设一位用以区分 1 位还是 2 位同时出错,更实用。

海明码分组方式

基本思路:

  1. 故障字各位都是 0,则没有错误;
  2. 故障字有且仅有一位 1,则表示校验位中有一位错,不必纠错;
  3. 故障字有多位 1,则表示有一个数据位出错,其在码字中的出错位置由故障字的数值确定。

循环冗余校验码