关于后端:海明校验码

30次阅读

共计 1817 个字符,预计需要花费 5 分钟才能阅读完成。

二进制数据在 传送、存取等环节,可能会产生 误码 (1 变成 0 或 0 变成 1). 如何发现并纠正 误码 ? 解决此类问题的思路是在原始数据(数码位) 根底上减少几位校验位。常应用的检验码有三种. 别离是 奇偶校验码、海明校验码和循环冗余校验码(CRC)”)

其中 奇偶校验码 只能查是否有谬误而无奈纠错,且要求只能有一位呈现谬误。

为了能找到产生谬误的地位,而有了 海明校验码

<font size=1 color=”#3CB371″>

实际上实质来说, 海明码是降级款的奇偶校验码, 其采纳了一种十分奇妙的形式, 把这串数字 (即要传输的内容) 分了组, 通过分组校验来确定哪一位呈现了谬误

相似 KMP 算法, 形容起来很麻烦, 实际上应用起来却很简略

“ 海明 ” 也被译为 ” 汉明 ”

</font>


实例

数据位为 8 的数据 $D_7D_6D_5D_4D_3D_2D_1D_0=01101001$, 求海明码

1. 计算 校验位 的个数

设数据位为 n 位,校验位 P 为 k 位,则 n 和 k 必须满足以下关系:

$$2^k – 1 ≥ n + k$$

此例中有 $2^k – 1 ≥ 8 + k$,可得 k 最小应为 4,即 16 – 1 ≥ 8 + 4。

(奇偶校验称为 Parity Check,Parity Bit 即奇偶校验位, 故用 P 示意校验位)

2. 计算 校验位 的地位

2.1 海明码的总位数

设校验位为 P, 数据位为 D, 海明码为 H, 则海明码 H 的位数为 数据的位数 校验码的位数 相加,

在此即为 8+4 = 12 位

2.2 校验码的地位

校验位 P 在海明码的第 $2^{i-1}$ 位,即 $H_j = P_i,j=2^{i-1}$,i 从 1 开始计数。

无论是海明码、校验位还是数据位,均从右向左排列,即从低位向高位排列。

可先填入校验码的地位,再将数据位顺次从低位到高位填入

如此例,i 即为 1,2,3,4, 故有:


3. 确定每个数据位 都由哪些校验码进行校验

依据 $2^{i-1}$ 的公式, 可知 $P_4、P_3、P_2、P_1$ 的下标别离为 8、4、2、1

确定 $D_0-D_7$ 每个数据位都是由哪些校验码 (P) 进行校验的

数据位 D 的下标, 等于其校验位的下标之和


4. 计算校验码的值

校验码的值 为有参加校验的数据顺次从低到高 异或 的值。

(异或: 雷同为 0, 相异为 1)

因为 $D_7D_6D_5D_4D_3D_2D_1D_0=01101001$

$P_1$ 参加了 $D_0、D_1、D_3、D_4、D_6$ 等数据位的校验。

$P_2$ 参加了 $D_0、D_2、D_3、D_5、D_6$ 等数据位的校验。

$P_3$ 参加了 $D_1、D_2、D_3、D_7$ 等数据位的校验。

$P_4$ 参加了 $D_4、D_5、D_6、D_7$ 等数据位的校验。

所以:($D_7D_6D_5D_4D_3D_2D_1D_0=01101001$)

$$P_1 = D_0⊕D_1⊕D_3⊕D_4⊕D_6 = 1⊕0⊕1⊕0⊕1 = 1$$

$$P_2 = D_0⊕D_2⊕D_3⊕D_5⊕D_6 = 1⊕0⊕1⊕1⊕1 = 0$$

$$P_3 = D_1⊕D_2⊕D_3⊕D_7 = 0⊕0⊕1⊕0 = 1$$

$$P_4 = D_4⊕D_5⊕D_6⊕D_7 = 0⊕1⊕1⊕0 = 0$$


5. 谬误校验

确定谬误校验 $G_4G_3G_2G_1$,校验码有几位,谬误校验就有几位。

如果采纳 偶校验 则后果全为 0 时没有谬误,如果采纳 奇校验 则后果全为 1 时没有谬误

$$G_1 = P_1D_0⊕D_1⊕D_3⊕D_4⊕D_6 = 1⊕1⊕0⊕1⊕0⊕1 = 0$$

$$G_2 = P_2D_0、D_2、D_3、D_5、D_6 = 0⊕1⊕0⊕1⊕1⊕1 = 0$$

$$G_3 = P_3D_1、D_2、D_3、D_7 = 1⊕0⊕0⊕1⊕0 = 0$$

$$G_4 = P_4D_4、D_5、D_6、D_7 = 0⊕0⊕1⊕1⊕0 = 0$$

则 $G_4G_3G_2G_1 = 00004$,示意没有异样。如果后果为 0100 则转为十进制为 8,示意第八位存在异样。


海明码是一种纠错码,其办法是为须要校验的数据位减少若干校验位,使得校验位的值决定于某些被校位的数据,当被校数据出错时,可依据校验位的值的变动找到出错位,从而纠正错误。对于 32 位的数据,至多须要减少()个校验位能力形成海明码。

以 10 位数据为例,其海明码示意为 D(0≤i≤9)示意数据位,P
(1 ≤j≤4)示意校验位,数据位 D 由()进行校验。


参考:

软考笔记 – 海明码

简略了解海明校验码

hamming code 通俗易懂的解释

软考 - 计算机系统常识之海明码

文言——海明校验码及编码过程

了解海明校验法

【软考】校验码之具体总结

软考 - 海明码 - 单位错 - 冗余位数

本文由 mdnice 多平台公布

正文完
 0