2.2 汉明码

本节的目标是给出一系列线性完全码, 叫做汉明码 $(Hamming~code)$.

首先,我们有两类平凡的完全线性码:
\((1)\) \(q\) 元线性码 \([n, n, 1]\), 即 \(C=\mathrm{F}_q^n\) 。易知这是完全码。
\((2)\) 对于 \(n=2 l+1, q=2, C\) 由码长为 \(2 l+1\) 的零向量和全 \(1\) 向量 \((1,1, \cdots, 1)\) \(\in \mathrm{F}_2^{2 l+1}\) 两个码字组成的二元线性码, 参数为 \([n, k, d]=[2 l+1,1,2 l+1]\) 。由于

\[\begin{aligned} \sum_{i=0}^l\binom{n}{i} & =\frac{1}{2}\left[\sum_{i=0}^l\binom{n}{i}+\sum_{i=0}^l\binom{n}{n-i}\right] \\ & =\frac{1}{2}\left[\sum_{i=0}^l\binom{n}{i}+\sum_{i=l+ 1}^n\binom{n}{i}\right]=\frac{1}{2} \sum_{i=0}^n\binom{n}{i}=2^{n-1}=2^{n-k}, \end{aligned} \]

可知它们为完全码。

\(2.1\) 节知道,给了线性码的一个生成矩阵 \(\boldsymbol{G}\) 或者一个校验矩阵 \(\boldsymbol{H}\), 可以决定这个线性码的参数 \([n, k]\). 因为 \(n\)\(k\) 分别是 \(\boldsymbol{G}\) 的列数和行数, 而 \(\boldsymbol{H}\) 的列数和行数分别是 \(n\)\(n-k\).一个重要的问题是: 如何由 \(\boldsymbol{G}\) 或者 \(\boldsymbol{H}\) 来决定这个线性码的最小距离? 已经知道, 校验矩阵可以判别一个向量 \(\boldsymbol{a} \in F_p^n\) 是否为码字 (即 \(\boldsymbol{H a}^{\mathrm{T}}\) 是否为零向量). 现在给出校验矩阵 \(\boldsymbol{H}\) 的另一个功能, 由 \(\boldsymbol{H}\) 可决定最小距离. 为此, 将 \(\boldsymbol{H}\) 表成列向量的形式

\[\begin{aligned} & \boldsymbol{H}=\left[\boldsymbol{u}_1^{\mathrm{T}}, \boldsymbol{u}_2^{\mathrm{T}}, \cdots, \boldsymbol{u}_n^{\mathrm{T}}\right], \\ & \boldsymbol{u}_i=\left(u_{i 1}, u_{i 2}, \cdots, u_{i, n-k}\right) \in F_p^{n-k}, \\ & 1 \leqslant i \leqslant n . \end{aligned} \]

定理 1\(C\) 是参数为 \([n, k, d]\)\(p\) 元线性码, 则
\((1)\) \(\boldsymbol{H}\) 的任意 \(d-1\) 个不同的列都是 \(F_p\) 上线性无关的;
\((2)\) \(\boldsymbol{H}\) 中存在 \(d\) 个不同的列, 它们在 \(F_p\) 上线性相关.
证明: 设 \(\boldsymbol{c}=\left(c_1, \cdots, c_n\right)\)\(C\) 中一个非零码字, \(w(\boldsymbol{c})=\) \(l \geqslant 1\), 则 \(\boldsymbol{H} \boldsymbol{c}^{\mathrm{T}}=0\). 为了符号简单, 不妨设 \(\boldsymbol{c}\) 的前 \(l\) 个分量不为零, 而其余分量为零, 即 \(c=\) \(\left(c_1, \cdots, c_l, 0, \cdots, 0\right)\), 其中 \(c_i \neq 0(1 \leqslant i \leqslant l)\). 于是

\[\begin{aligned} \mathbf{0} & =\boldsymbol{H} \boldsymbol{c}^{\mathrm{T}}=\left(\boldsymbol{u}_1^{\mathrm{T}}, \cdots, \boldsymbol{u}_n^{\mathrm{T}}\right)\left(\begin{array}{c} c_1 \\ \vdots \\ c_l \\ 0 \\ \vdots \\ 0 \end{array}\right) \\ = & c_1 \boldsymbol{u}_1^{\mathrm{T}}+\cdots+c_l \boldsymbol{u}_l^{\mathrm{T}} . \end{aligned} \]

这就表示 \(\boldsymbol{u}_1, \cdots, \boldsymbol{u}_l\) 是线性相关的. 所以设 \(C\) 中有非零码字, 汉明重量为 \(l \geqslant 1\), 若第 \(i_1, \cdots, i_l\) 个分量不为零而其余分量为零, 就得到 \(\boldsymbol{H}\) 中第 \(i_1, \cdots, i_l\) 列是线性相关的. 反过来推理可知, 如果 \(C\) 中不存在汉明重量 \(\leqslant l\) 的非零码字,那么 \(\boldsymbol{H}\)中任意 \(l\) 列都是线性无关的. 由于 \(d\) 是线性码 \(C\) 中非零码字汉明重量的最小值, 便可知道定理中的性质(1)和 (2)成立. 因为 \(C\) 中不存在非零码字 \(\boldsymbol{c}\) 使得 \(w(\boldsymbol{c}) \leqslant d-1\), 这相当于说 \(\boldsymbol{H}\) 的任何 \(d-1\) 列都线性无关. 而 \(C\) 中存在汉明重量为 \(d\) 的码字, 这相当于说 \(\boldsymbol{H}\) 中存在线性相关的 \(d\) 个列. 证毕.

定理 $1$ 表明如何由校验矩阵来决定一个线性码的最小距离. 可以换一个思考方式,即设法构造一个校验矩阵 $\boldsymbol{H}$, 使得线性码具有任意给定的最小距离 $d$, 这只需要将 $\boldsymbol{H}$ 构造成满足定理 $1$ 中的条件 $(1)$ 和 $(2)$, 即使得 $\boldsymbol{H}$中任意 $d-1$ 列都线性无关 (从而最小距离 $\geqslant$ $d$ ), 并且 $\boldsymbol{H}$ 中有线性相关的 $d$ 个列 (于是最小距离为 $d)$.

例如, 如果使线性码的最小距离 \(d \geqslant 2\), 它的校验矩阵的每列都不能线性相关, 即每列都不能是零向量. 进而, \(d=2\) 当且仅当 \(\boldsymbol{H}\) 有两个不同的 (非零)列向量 \(\boldsymbol{u}\)\(\boldsymbol{u}^{\prime}\) 是线性相关的, 即存在 \(0 \neq a \in F_p\), 使得 \(\boldsymbol{u}=a \boldsymbol{u}^{\prime}\) (两个非零列向量成比例).

现在用这个想法来构造一批最小距离为 \(3\) 的二元码. 取 \(m\) 为正整数, \(m \geqslant 2\), 把长为 \(m\)\(F_2^m\) 中所有非零列向量 (共 \(2^m-1\) 个) 组成一个 \(F_2\)\(m\)\(2^m-1\) 列的矩阵

\[\begin{gathered} \boldsymbol{H}_m=\left[\boldsymbol{u}_1^{\mathrm{T}}, \cdots, \boldsymbol{u}_n^{\mathrm{T}}\right], \\ n=2^m-1, \boldsymbol{u}_i \in F_2^m, \boldsymbol{u}_i \neq 0,1 \leqslant i \leqslant n . \end{gathered} \]

例如, \(m=3\) 时可取

\[\boldsymbol{H}_3=\left[\begin{array}{lllllll} 1 & 0 & 1 & 1 & 1 & 0 & 0 \\ 1 & 1 & 1 & 0 & 0 & 1 & 0 \\ 0 & 1 & 1 & 1 & 0 & 0 & 1 \end{array}\right] . \]

\(C_m\) 是以 \(\boldsymbol{H}_m\) 为校验矩阵的二元线性码 (注意 \(\boldsymbol{H}_m\) 有单位阵 \(\boldsymbol{I}_m\) 为它的子阵, 从而 \(\operatorname{rank}\left(\boldsymbol{H}_m\right)=\) \(m)\). 于是 \(C_m\) 的码长为 \(n=2^m-1\), 而 \(\boldsymbol{H}_m\) 的行数 \(m\) 等于 \(n-k\), 所以 \(C_m\) 的信息位数为 \(k=n-\) \(m=2^m-1-m . \boldsymbol{H}_m\) 的每列都是非零向量, 并且任意两个不同列的向量都不相等, 所以在 \(F_2\)\(\boldsymbol{H}\) 的任意两列都线性无关. 于是 \(C_m\) 的最小距离 \(d \geqslant 3\). 进而设 \(\boldsymbol{u}\)\(\boldsymbol{u}^{\prime}\)\(\boldsymbol{H}\) 中两个不同列的向量, 则 \(\boldsymbol{u}+\boldsymbol{u}^{\prime} \neq \mathbf{0}\), 所以 \(\boldsymbol{u}+\boldsymbol{u}^{\prime}\)\(\boldsymbol{H}\) 中某个列 \(\boldsymbol{u}^{\prime \prime}\)(因为所有非零向量都已列在 \(\boldsymbol{H}\) 之中). 于是 \(\boldsymbol{u}+\boldsymbol{u}^{\prime}+\boldsymbol{u}^{\prime \prime}=\mathbf{0}\). 这表明 \(\boldsymbol{H}\) 中有 3 列是线性相关的. 由定理 1 可知 \(d=3\). 于是证明了二元线性码 \(C_m\) 的参数为 \([n, k, d]=\left[2^m-1,2^m-1\right.\) \(-m, 3]\).
这些码 \(C_m(m \geqslant 2)\) 都是完全码, 因为

\[\sum_{i=0}^{\left[\frac{d-1}{2}\right]}\binom{n}{i}=\sum_{i=0}^1\binom{n}{i}=1+n=2^m=2^{n-k} . \]

于是给出了一批二元完全码 \(C_m(m \geqslant 2)\). 它们叫做二元汉明码.

可以把 \((10 \cdots 0),(010 \cdots 0), \cdots,(0 \cdots 01)\) 的转置放在 \(\boldsymbol{H}_m\) 的最后 \(m\) 列, 从而有形式 \(\boldsymbol{H}_m=\) \([\boldsymbol{P I}_m]\). 于是 \(C_m\) 的生成阵为 \(\boldsymbol{G}_m=\left[\boldsymbol{I}_k \boldsymbol{P}^{\mathrm{T}}\right]\). 例如, 对于前面给出的 \(\boldsymbol{H}_3=\left[\mathrm{PI}_3\right]\), 其中

\[\boldsymbol{P}=\left[\begin{array}{llll} 1 & 0 & 1 & 1 \\ 1 & 1 & 1 & 0 \\ 0 & 1 & 1 & 1 \end{array}\right] \text {. } \]

于是参数为 \([n, k, d]=[7,4,3]\) 的二元汉明码 \(C_3\) 有生成矩阵

\[\boldsymbol{G}_3=\left[\boldsymbol{I}_4 \boldsymbol{P}^{\mathrm{T}}\right]=\left[\begin{array}{lllllll} 1 & 0 & 0 & 0 & 1 & 1 & 0 \\ 0 & 1 & 0 & 0 & 0 & 1 & 1 \\ 0 & 0 & 1 & 0 & 1 & 1 & 1 \\ 0 & 0 & 0 & 1 & 1 & 0 & 1 \end{array}\right] \]

由这个生成阵不难看出, \(C_3\) 就是例 \(1.2.6\) 中的那个二元码.

现在,试图将 \(2\) 元情形推广到一般的 \(p\) 元情形,其中 \(p\) 是任意素数. 仍希望构造 \(d=3\)\(p\) 元线性码, 所以校验矩阵的每列都应当是非零向量,并且任意两个不同的列都应当线性无关,即彼此不能相差一个非零常数因子. 对于 \(m \geqslant 2\), 若 \(u\)\(F_p^m\) 中一个非零向量,则 \(p-1\) 个向量 \(\alpha u(1 \leqslant \alpha \leqslant p-1)\) 当中只能取一个代表作为校验矩阵 \(\boldsymbol{H}\) 的一列. \(F_p^m\) 中非零向量共有 \(p^m-1\) 个,每 \(p-1\) 个彼此相差常数倍的向量当中取一个代表,一共有 \(n=\frac{p^m-1}{p-1}\) 个代表向量. 把这 \(n\) 个代表向量作为列向量, 得到一个矩阵 \(H_m\), 这是 \(F_p\) 上一个 \(m\)\(n\) 列的矩阵. 与 \(2\) 元情形类似, \(\boldsymbol{H}_m\) 的秩为 \(m\). 用 \(C_m\) 表示以 \(\boldsymbol{H}_m\) 为校验矩阵的 \(p\) 元线性码, 它的参数为 \([n, k, d]=\left[\frac{p^m-1}{p-1}, \frac{p^m-1}{p-1}-m, 3\right]\). 这些 \(p\) 元线性码都叫做p元汉明码. 它们都是完全码, 因为

\[\begin{aligned} \sum_{i=0}^1(p-1)^i\binom{n}{i} & =1+(p-1) n=1+p^m-1 \\ & =p^m=p^{n-k} . \end{aligned} \]

再谈定理 \(1\) 的一个简单的应用. 已经知道一个纠错码满足 \(Singleton\) 界: \(n \geqslant k+d-\) 1. 如果 \(C\) 是线性码, 参数为 \([n, k, d]\), 可以给出定理 \(1.3.2\) 的另一种证明: 由于 \(\boldsymbol{C}\) 的校验矩阵 \(\boldsymbol{H}\) 的秩为 \(n-k\), 可知 \(\boldsymbol{H}\) 的任意 \(n-k+1\) 列都是线性相关的. 由定理 1 便知 \(d \leqslant n-k+1\), 即 \(n \geqslant k+d-1\) .

习题

\(1.\) 对于 \(n \geqslant 3,0 \leqslant k < n\), 证明 : \(q\) 元线性码 \([n, k, 3]\) 存在, 当且仅当 \(Hamming\) 界成立, 即 \(q^{n-k} \geqslant 1+n(q-1)\) 。(提示 \(1\)\(q^{n-k} = 1+n(q-1)\) 的整数解只有 \([n,k]=\left[\frac{p^m-1}{p-1}, \frac{p^m-1}{p-1}-m\right]\) 这种形式,随着 \(m\) 增大 \(n,k\rightarrow \infty\))(提示 \(2\):已知参数为 \([n,k,d]\) 的线性码,可以容易的造出参数为 \([n,k-1,d]\)\([n+1,k+1,d]\) 的线性码)

posted @ 2024-07-01 17:45  沙棘数学社  阅读(109)  评论(0)    收藏  举报