今天讲校验码。有些问题讲前似乎很清楚,但讲的过程中发现思路还不是那么清楚。此处再回顾一下。
由若干位代码组成的一个字叫做码字。
一种码制是若干种码字的组合。
将两个合法码字逐位比较,不同二进制数的位数成为两个码字间的距离。
一种码制中,各码字间的最小距离称为该码制的“码距”。
例如,8位补码,码字是8位二进制组成的字,不同码字最少1位不同,故码距为1。再如奇偶校验,9位的奇偶校验可以表示的合法码字共28 个,另外28 个为非法码字。一个合法码字要变到另外一个合法码字,至少要有两位同时变化,所以码距为2。
为了增加码制的码距,要加入校验位,校验位和数据位组成“码字”。 如海明码中的码字包括数据位和校验位。
交叉奇偶校验中,如果传输的数据1位发生了错误,则可以定位到错误。可以检测到两个位同时发生错误,无论它们位于同行、同列还是不同行列。但是不能保证发现4位同时出错,如四位构成长方形。
假定海明码为m位,其中信息码n位,校验码k位。k位校验位共2k 个组合,1个用来表示传输信息无误,k个用来表示某个校验位出错,n个用来表示某个数据位出错。
若要求海明码能指出并纠正一位错,则数据位的位数 n 和校验位的位数 k 应满足如下关系(海明不等式):
2 k ≥ k + n+1 ,即 2 k ≥ m +1 , 2 k -1≥ m(海明码位数不超过k个校验位的数据表示范围) 设:海明码 H m H m-1 ……H 2 H 1 的最高位号为 m ,最低位号为 1 。编码规则为: ① 每个校验位 P i 在海明码中被分配在位号 2 i - 1 的位置,其余各位为数据位,并按从低向高逐位依次排列的关系分配。 ② 海明码的每一位码 H i 由多个校验位作校验,被校验的每一位的海明码位号等于校验它的各校验位的海明码位号之和,以便使校验的结 果能正确反映出错位的位号。 ③ 在增大合法码的码距时,尽量使所有码的码距均匀的增大,以保证对所有码的检错能力平衡提高。 因为2 k -1≥ m,海明码的下标用k位2进制数表示,对应位为1的相应校验位将校验该位。例如,如果校验位共4位,则H6 的下标为0110,被P2 和P3 校验;H15 的下标为1111,被P1、 P2、 P3 和P4 校验;数据位至少跟 2 个校验位相关,至多跟 4 个相关,故码距为 3 。 根据校验位对数据位分组,相关数据位和校验位形成奇校验或偶校验(以偶校验为例)。例如,如果信息码16位,校验位5位,则各校验位可以根据在下标中的出现情况找到相关数据并通过异或运算计算得到。 如果要求海明码能检测发现 2 位错并能自动纠正一位错,根据纠错理论,码距必须增加到 4 。可以通过将原海明码中与两个校验位相关的数据位扩展为与 3 个校验位相关,即增加 1 个校验位,使该校验位 Pk+1 为这些校验位的异或值。这样,校验位增加到了 k+1 位,原海明不等式 2 k’ ≥ k’ + n+1(k’=k-1 ,代入海明不等式 ) 变为: 2 k-1 ≥ k+n 。
因为校验位的计算公式通过相关数据位的异或得到,当相关数据位出错时,会引起 Si (相关公式参考课件)变为 1 。因为数据位的海明码下标正好可分解为相关校验位的加权和,通过构成的值可判断出错的数据位。
海明码中,如果仅有一个 Si 为 1 ,除了相应校验位可能出错外,也可能同时三位海明码出错,例如 D1 、 D2 、 P3 错会使 S2 为 1 , D1 、 D5 、 P4 错也会使 S2 为 1 ,虽能检测到错误,但错误位置不确定。
推广海明码中,因为附加校验位的引入,码距变为 4 。当出现两个 Si 为 1 时,肯定是两位海明码出错,但无法定位错误。
相对比较简单,注意出错时余数的循环。