diff --git a/408/计算机网络/笔记/差错控制(纠错编码).md b/408/计算机网络/笔记/差错控制(纠错编码).md new file mode 100644 index 0000000..088adf4 --- /dev/null +++ b/408/计算机网络/笔记/差错控制(纠错编码).md @@ -0,0 +1,77 @@ +# 差错控制(纠错编码) + +## 纠错编码——海明码 + +**海明距离**:两个合法编码(码字)的对应比特取值不同的比特数称为这两个码字的 **海明距离(码距)**,一个有效编码集中,任意两个合法编码(码字)的海明距离的最小值称为该编码集的 **海明距离(码距)**。 + +> 码距为 1:`000 001 010 011 100 101 110 111` +> +> 码距为 2:`0000 1001 1010 0011 1100 0101 0110 1111` +> 可检测出 1 位错,但不可被纠正 + +现以数据码 `1010` 为例讲述海明码的编码原理和过程。 + +### 1. 确定海明码的位数 $k$ + +设 $n$ 为有效信息的位数,$k$ 为校验位的位数,则信息位 $n$ 和校验位 $k$ 应满足 **海明不等式**: + +$$ +n + k \le 2^k - 1(若要检测两位错,则需再增加 1 位校验位,即 k + 1 位) +$$ + +海明码位数为 $n + k = 7 \le 2^3 - 1$ 成立,则 $n$、$k$ 有效,设信息位为 $D_4 D_3 D_2 D_1$(`1010`),共 4 位,校验位为 $P_3 P_2 P_1$,共 3 位,对应的海明码为 $H_7 H_6 H_5 H_4 H_3 H_2 H_1$。 + +### 2. 确定校验位的分布 + +规定校验位 $P_i$ 在海明位号为 $2^{i - 1}$ 的位置上,其余各位为信息位,因此有: + +- $P_1$ 的海明位号为 $2^{i - 1} = 2^0 = 1$,即 $H_1$ 为 $P_1$。 +- $P_2$ 的海明位号为 $2^{i - 1} = 2^1 = 2$,即 $H_2$ 为 $P_2$。 +- $P_3$ 的海明位号为 $2^{i - 1} = 2^2 = 4$,即 $H_4$ 为 $P_3$。 + +将信息位按原来的顺序插入,则海明码各位的分布如下: + +$H_7$ | $H_6$ | $H_5$ | $H_4$ | $H_3$ | $H_2$ | $H_1$ | +:---: | :---: | :---: | :---: | :---: | :---: | :---: | +$D_4$ | $D_3$ | $D_2$ | $P_3$ | $D_1$ | $P_2$ | $P_1$ | + +### 3. 分组以形成校验关系 + +每个数据位用多个校验位进行校验,但要满足条件:被校验数据位的海明位号等于校验造据位的各校验位海明位号之和。另外,校验位不需要再被校验。分组形成的校验关系如下。 + +$$ +\begin{array}{cccc} + & & P_1(H_1) & & P_2(H_2) & & P_3(H_4)\\ +D_1 放在 H_3 上,由 P_2 P_1 校验: & 3 = & 1 & + & 2\\ +D_2 放在 H_5 上,由 P_3 P_1 校验: & 5 = & 1 & + & & & 4\\ +D_3 放在 H_6 上,由 P_3 P_2 校验: & 6 = & & & 2 & + & 4\\ +D_4 放在 H_7 上,由 P_3 P_2 P_1 校验: & 7 = & 1 & + & 2 & + & 4\\ + & & 第 1 组 & & 第 2 组 & & 第 3 组 +\end{array} +$$ + +### 4. 校验位取值 + +校验位 $P_i$ 的值为第 $i$ 组(由该校验位校验的数据位)所有位求异或。 + +根据 3 中的分组有 + +$$ +P_1 = D_1 \oplus D_2 \oplus D_4 = 0 \oplus 1 \oplus 1 = 0\\ +P_2 = D_1 \oplus D_3 \oplus D_4 = 0 \oplus 0 \oplus 1 = 1\\ +P_3 = D_2 \oplus D_3 \oplus D_4 = 1 \oplus 0 \oplus 1 = 0 +$$ + +所以,$1010$ 对应的海明码为 $101\underline{0}0\underline{10}$(下画线为校验位,其他为信息位)。 + +### 5. 海明码的校验原理 + +每个校验组分别利用校验位和参与形成该校验位的信息位进行奇偶校验险查,构成 $k$ 个校验方程: + +$$ +S_1 = P_1 \oplus D_1 \oplus D_2 \oplus D_4\\ +S_2 = P_2 \oplus D_1 \oplus D_3 \oplus D_4\\ +S_3 = P_3 \oplus D_2 \oplus D_3 \oplus D_4 +$$ + +若 $S_3 S_2 S_1$ 的值为 「000」,则说明无错;否则说明出错,且这个数就是错误位的位号,如 $S_3 S_2 S_1 = 001$,则说明第 1 位出错,即 $H_1$ 出错,直接将该位取反就达到了纠错的目的。 \ No newline at end of file diff --git a/408/计算机网络/笔记/差错控制(纠错编码).pdf b/408/计算机网络/笔记/差错控制(纠错编码).pdf new file mode 100644 index 0000000..4fb780f Binary files /dev/null and b/408/计算机网络/笔记/差错控制(纠错编码).pdf differ