2.1 生成矩阵和校验矩阵
定义 1 一个码长为 \(n\) 的 \(p\) 元码 \(C\) 叫做线性码, 是指 \(C\) 是向量空间 \(F_p^n\) 的向量子空间,即 \(C\) 满足如下的性质: 对于 \(F_p\) 中任意元素 \(\alpha\)和 \(\beta\), 如果 \(\boldsymbol{c}_1\) 和 \(\boldsymbol{c}_2\) 属于 \(C\), 则 \(\alpha \boldsymbol{c}_1+\beta \boldsymbol{c}_2\) 也属于 \(C\).如果 \(C\) 不是 \(F_p^n\) 的向量子空间, 则 \(C\) 叫做非线性码.
例如, 例 1.1.1 (奇偶校验码) 和例 1.1.2 (重复码) 都是二元线性码. 这两个例子改造的前身也是二元线性码. 如果 \(C\) 是码长为 \(n\) 的 \(p\) 元线性码, \(C \neq\) \(F_p^n\). 取 \(v \in F_p^n, v \notin C\). 考虑码
由 \(C^{\prime}\) 和 \(C\) 有相同的参数 \((n, K, d)\) (1.2节习题 4). 但是 \(C^{\prime}\) 是非线性码,因为线性码一定包含零向量, 而 \(C^{\prime}\) 中没有零向量 (若 \(c-v=\mathbf{0}\), 则 \(\boldsymbol{c}=\) \(v\), 但是已假定 \(v \notin C\), 而 \(c \in C\), 矛盾).
现在开始用线性代数工具来研究线性码.首先给出两个简单的结论. 第一个是关于线性码 \(C\) 的最小距离. 根据定义, \(C\) 的最小距离 \(d\)是 \(C\) 中任意不同码字的汉明距离的最小值, 即
现在考察两个集合 \(S_1=\left\{d\left(\boldsymbol{c}, \boldsymbol{c}^{\prime}\right) \mid \boldsymbol{c}, \boldsymbol{c}^{\prime} \in C, \boldsymbol{c} \neq \boldsymbol{c}^{\prime}\right\}\),\(S_2=\{w(\boldsymbol{c}) \mid \boldsymbol{c} \in C, \boldsymbol{c} \neq \mathbf{0}\}\).由于 \(d\left(c, c^{\prime}\right)=w\left(c-c^{\prime}\right)\) 且 \(C\) 是线性码, \(c-\) \({c}^{\prime}\) 是 \(C\) 中的非零码字. 所以 \(S_1\subseteq S_2\) 反过来, 对于 \(C\) 中每个非零码字 \(c(c \in C, c \neq \mathbf{0})\), 由于零向量 \(\mathbf{0}\) 必为线性码 \(C\) 中的码字 , 因此 \(w(\boldsymbol{c})=d(\boldsymbol{c}, \mathbf{0})\), 即每个非零码字 \(\boldsymbol{c}\) 的汉明重量也是 \(C\) 中两个不同码字 \(\boldsymbol{c}\)和 0 的汉明距离. 所以 \(S_2\subseteq S_1\),综上 \(S_1=S_2\),所以线性码 \(C\) 的最小距离 \(d\) 等于 \(C\) 中所有非零码字汉明重量的最小值, 即
性质 2 对于线性码而言
对于非线性码, 需要计算 \(\binom{K}{2}=\frac{K(K-1)}{2}\)对不同码字 \(c\) 和 \(c^{\prime}\) 之间的汉明距离 \(d\left(c, c^{\prime}\right)\), 它们的最小值才决定码的最小距离. 但是对线性码, 只需计算 \(K-1\) 个非零码字 \(\boldsymbol{c}\) 的汉明重量 \(w(\boldsymbol{c})\), 它们的最小值就是线性码的最小距离.例如, 对于例 1.2.6 中的线性码(自行验证是线性码,或者继续往下看), 容易看出其中 15 个非零码字的汉明重量最小值为 3 , 从而最小距离为 3 .
第二个简单结论是关于线性码 (作为向量子空间)的维数. 设 \(p\) 元线性码 \(C\) 的维数是 \(l\),于是 \(C\) 有一组基 \(v_1, v_2, \cdots, v_l\). 从而每个码字 \(\boldsymbol{c}\)都唯一地表示成这组基向量在 \(F_p\) 上的线性组合
由于每个 \(a_i\) 在 \(F_p\) 中都有 \(p\) 个选取可能, 所以系数 \(a_1, \cdots, a_l\) 共有 \(p^l\) 个选取方式. 这就表明 \(C\)中共有 \(p^l\) 个码字, 从而码字个数为 \(K=p^l\), 即 \(l=\log _p K\). 但是 \(\log _p K\) 恰好是线性码 \(C\) 的信息位数 \(k\). 这就表明:
性质 3
例 4 对于例 1.2.6, 这是 16 个码字的二元线性码, 从而是 \(F_2^7\) 的一个 4 维向量子空间 \((k=4)\). 请读者验证 \(\{(0010111),(1001011), (1100101), (1111111)\}\) 是这个线性码的一组基,即所有 16 个码字恰好是它们的线性组合.
下面讲讲怎么看出来这四个向量是一组基,如下是例 1.2.6 的码,主要的原因是左列 5 行等于 2 行和 4 行的和,由对称性我们可以不必计算而得知 6 行等于 3 行和 5 行的和,从而左列 5 行及以下均为前 2~4 行的线性组合。所以这种有“循环”特征的二元码的基是很容易找的——首先至少得“接龙”(如本例的码的基的前三个向量,刚好循环到首尾的 1 相接),其次开始判断下一个向量(本例码左列 5 行)是否能表为这些“接龙”向量(本例前三个基)的线性组合(判断也是容易的,因为系数只有两种选择 0 或 1).若不能则将其纳入基,继续考虑下一个。
\[\begin{array}{ll} (0000000) & (1111111) \\ (0010111) & (1101000) \\ (1001011) & (0110100) \\ (1100101) & (0011010) \\ (1110010) & (0001101) \\ (0111001) & (1000110) \\ (1011100) & (0100011) \\ (0101110) & (1010001) \end{array} \]
由于线性码的信息位数 \(k\) 是维数, 从而 \(k\)是整数. 而对于非线性码, \(k=\log _p K\) 不一定为整数. 因此今后常采用 \([n, k, d]\) 表示线性码的基本参数,而不用 \((n, K, d)\). 由于 \(K=p^k\), 所以定理 1.3.1 中的汉明界对于线性码可以写成
现在开始系统地采用线性代数工具来讲述线性码. 设 \(C\) 是参数为 \([n, k, d]\) 的 \(p\) 元线性码.由于 \(C\) 的维数是 \(k\), 可以取 \(C\) 的一组基 \(\left\{v_1\right.\), \(\left.v_2, \cdots, v_k\right\}\), 其中,
于是 \(C\) 中每个码字 \(\boldsymbol{c}=\left(c_1, \cdots, c_n\right)\) 可唯一地表示成
这里
是 \(k\) 行 \(n\) 列的矩阵, 由 \(k\) 个基向量组成它的 \(k\)行,元素属于 \(F_p\).
定义 5 \(G\) 叫做线性码 \(C\) 的一个生成矩阵. 由于 \(k \leqslant n\)(至多 \(p^n\) 个码), 并且基向量 \(\boldsymbol{v}_1, \cdots, \boldsymbol{v}_k\) 是线性无关的,可知矩阵 \(\boldsymbol{G}\) 的秩 \(\operatorname{rank} \boldsymbol{G}\) 等于 \(k\).
例 6 例 1.2.6 中的二元线性码, 已知 \(\{(0010111),(1001011),(1100101),(1111111)\}\)是一组基, 所以给出此线性码的一个生成矩阵
线性码 \(C\) 可以有不同的基, 从而可以有不同的生成矩阵. 根据不同基之间的线性变换是可逆的,设 \(\boldsymbol{G}\) 是 \(p\) 元线性码 \(C\) 的一个生成矩阵, 则对于一个 \(F_p\) 上的 \(k\) 行 \(n\) 列矩阵 \(\boldsymbol{G}^{\prime}, \boldsymbol{G}^{\prime}\) 是 \(C\) 的生成矩阵当且仅当存在 \(F_p\) 上的一个 \(k\) 阶可逆方阵 \(\boldsymbol{A}\) (即 \(\boldsymbol{A}\) 的行列式 \(\operatorname{det} \boldsymbol{A}\) 为 \(F_p\) 中非零元素), 使得 \(\boldsymbol{G}^{\prime}=\boldsymbol{A G}\).
由于每个码字都可以唯一表示成
所以给出从向量空间 \(F_p^k\) 到 \(F_p^n\) 的一个映射
这是 \(F_p\) 线性映射,并且是单射. 像集合
就是 \(C\) 中全部 \(p^k=K\) 个码字, 即 \(I_m(\varphi)=C\). 所以映射 \(\varphi\) 可以看成是纠错编码, 它将 \(F_p^k\) 中全部 \(p^k\) 个向量 (原始信息)通过映射 \(\varphi\) 对应成码长为 \(n\) 的 \(C\) 中 \(p^k\) 个码字, 使得具有纠错能力. 所以,生成矩阵可用来对信息进行纠错编码.
另一方面, 由线性代数知道, \(F_p^n\) 的一个 \(k\)维子空间 \(C\) 还可以看成是 \(n-k\) 个线性无关齐次线性方程组
的全部解 \(\left(x_1, x_2, \cdots, x_n\right) \in F_p^n\). 这个线性方程组的系数矩阵
是 \(F_p\) 上 \((n-k)\) 行 \(n\) 列的矩阵。
定义 7 \(H\) 叫做线性码 \(C\) 的一个校验矩阵. 由于上面 \(n-k\) 个方程是线性无关的, 可知矩阵 \(\boldsymbol{H}\) 的秩 \(\operatorname{rank}(\boldsymbol{H})\) 为 \(n-k\).
利用校验矩阵 \(\boldsymbol{H}\), 前面的方程组可以表成 \(\boldsymbol{H}\left(x_1, \cdots, x_n\right)^{\mathrm{T}}=\mathbf{0}^{\mathrm{T}}\) (长为 \(n-k\) 的全零列向量),而线性码的码字恰好是这个齐次线性方程组的解. 所以在收到一个向量 \(\boldsymbol{y}=\left(\boldsymbol{y}_1, \cdots, \boldsymbol{y}_n\right) \in F_p^n\)之后, 收方判别 \(\boldsymbol{y}\) 是否为 \(C\) 中码字, 只需计算 \(\boldsymbol{H} \boldsymbol{y}^{\mathrm{T}}\), 因为 \(\boldsymbol{y}\) 为码字当且仅当 \(\boldsymbol{H} \boldsymbol{y}^{\mathrm{T}}=\mathbf{0}^{\mathrm{T}}\) (或者 \(\left.\boldsymbol{y} \boldsymbol{H}^{\mathrm{T}}=\mathbf{0}\right)\). 这就是为什么 \(\boldsymbol{H}\) 叫做校验矩阵.
定理 8 设 \(C\) 是参数为 \([n, k]\) 的 \(p\) 元线性码.
\((1)\) 若 \(\boldsymbol{G}\) 是 \(C\) 的一个生成矩阵, 而 \(\boldsymbol{H}\) 是 \(F_p\)上一个 \((n-k)\) 行 \(n\) 列的矩阵. 则 \(\boldsymbol{H}\) 是 \(C\) 的一个校验矩阵当且仅当 \(\operatorname{rank}(\boldsymbol{H})=n-k\), 并且 \(\boldsymbol{H} \boldsymbol{G}^{\mathrm{T}}=\mathbf{0}_{n-k, k}(n-k\) 行 \(k\) 列的零矩阵).
\((2)\) 若 \(\boldsymbol{H}\) 是 \(C\) 的一个校验矩阵, \(\boldsymbol{G}\) 是 \(F_p\) 上一个 \(k\) 行 \(n\) 列的矩阵, 则 \(\boldsymbol{G}\) 是 \(C\) 的一个生成阵当且仅当 \(\operatorname{rank}(\boldsymbol{G})=k\) 并且 \(\boldsymbol{HG}^{\mathrm{T}}=\mathbf{0}_{n-k, k}\).
\((3)\) 若
其中, \(\boldsymbol{P}\) 是 \(F_p\) 上的 \(k\) 行 \(n-k\) 列矩阵, \(\boldsymbol{I}_k\) 和 \(\boldsymbol{I}_{n-k}\)分别是 \(k\) 阶和 \(n-k\) 阶单位方阵. 则 \(\boldsymbol{G}\) 是 \(C\) 的一个生成矩阵当且仅当 \(\boldsymbol{H}\) 是 \(C\) 的一个校验矩阵.
证明 考虑线性映射
\(0 \in F_p^{n-k}\) 的原象叫做 \(f\) 的核, 表示成 \(\operatorname{ker}(f)\), 这是 \(F_p^n\) 的向量子空间,即
由定义可以看出 \(\boldsymbol{H}\) 是 \(C\) 的校验矩阵 \(\Leftrightarrow\) \(\operatorname{ker}(f)=C\).
\((1)\) 如果 \(\boldsymbol{H}\) 是 \(C\) 的校验矩阵, 则 \(\operatorname{rank}(\boldsymbol{H})=\) \(n-k\), 并且由于生成矩阵 \(\boldsymbol{G}\) 的每行都是 \(C\) 中码字, 可知 \(\boldsymbol{HG}^{\mathrm{T}}=\mathbf{0}\). 反之, 若 \(\boldsymbol{G}\) 是 \(C\) 的生成矩阵, \(\boldsymbol{H G}^{\mathrm{T}}=\mathbf{0}\) 并且 \(\operatorname{rank}(\boldsymbol{H})=n-k\). 由 \(\boldsymbol{H} \boldsymbol{G}^{\mathrm{T}}=\mathbf{0}\) 知 \(\boldsymbol{G}\)的每行都属于 \(\operatorname{ker}(f)\), 由于生成矩阵 \(\boldsymbol{G}\) 的 \(k\) 行是线性码的一组基, 从而 \(C \subseteq \operatorname{ker}(f)\). 另一方面,由 \(\operatorname{rank}(f)=n-k\) 等于象空间 \(I_m(f)\) 的维数(为帮助读者回忆线性代数,留作习题) \(\operatorname{dim} I_m(f)\), 而线性代数给出
所以 \(\operatorname{dim} \operatorname{ker}(f)=n-(n-k)=k=\operatorname{dim}(C)\), 这就表明 \(C=\operatorname{ker}(f)\). 从而 \(\boldsymbol{H}\) 是 \(C\) 的校验矩阵.
\((2)\) 设 \(\boldsymbol{H}\) 是 \(C\) 的校验矩阵. 如果 \(\boldsymbol{G}\) 是 \(C\) 的生成矩阵, 则 \(\operatorname{rank}(\boldsymbol{G})=k\) 并且 \(\boldsymbol{H}^{\mathrm{T}}=\mathbf{0}\). 反过来, 设 \(\operatorname{rank}(\boldsymbol{G})=k\) 并且 \(\boldsymbol{H} \boldsymbol{G}^{\mathrm{T}}=\mathbf{0}\), 则 \(\boldsymbol{G}\) 的诸行属于 \(C\), 再由 \(\operatorname{rank}(\boldsymbol{G})=k\) 可知 \(\boldsymbol{G}\) 的 \(k\) 行是线性无关的, 从而它们是线性码 \(C\) 的一组基,所以 \(\boldsymbol{G}\)是 \(C\) 的生成矩阵.
\((3)\) 当 \(\boldsymbol{G}=\left(\boldsymbol{I}_k \boldsymbol{P}\right), \boldsymbol{H}=\left(-\boldsymbol{P}^{\mathrm{T}} \boldsymbol{I}_{n-k}\right)\) 时,易知 \(\operatorname{rank}(\boldsymbol{G})=k, \operatorname{rank}(\boldsymbol{H})=n-k\), 并且
然后由(1)和(2)即得(3)中结论. 证毕.
例 9 对于例 1.1.2 中的重复码
参数为 \([n, k]=[9,3]\). 这是线性码, 纠错编码的映射为 \(\varphi: F_2^3 \rightarrow F_2^9\), 其中,
所以 \(\boldsymbol{G}=\left(\boldsymbol{I}_3 \boldsymbol{I}_3 \boldsymbol{I}_3\right)=\left(\boldsymbol{I}_3 \boldsymbol{P}\right)\) 是 \(C\) 的一个生成矩阵, \(\boldsymbol{P}=\left(\boldsymbol{I}_3 \boldsymbol{I}_3\right)\). 由定理 8(3) 可知
便是 \(C\) 的一个校验矩阵. 换句话说, \(F_2^9\) 中向量 \(v=\left(v_1, \cdots, v_9\right)\) 是 \(C\) 中的码字当且仅当 \(\boldsymbol{H} \boldsymbol{v}^{\mathrm{T}}=\) \(\mathbf{0}\), 即当且仅当 \(v_1=v_4=v_7, v_2=v_5=v_8, v_3=\) \(v_6=v_9\).
例 10 考虑 \(F_2\) 上的矩阵
这是例 1.2.6 中二元线性码 \(C\) 的生成矩阵, \([n\), \(k]=[7,4]\). 现在求 \(C\) 的一个校验矩阵. \(\boldsymbol{G}\) 的 4 个行向量为 \(C\) 的一组基,所以它们的线性组合都是 \(C\) 中码字. 因此 \(C\) 中有如下的码字:
(0100011) ( $G$ 的第 $1,2,4$ 行之和),
(0010111) ( $G$ 的第 $1$ 行),
(0001101) ( $G$ 的第 $1,3,4$ 行之和),
初等行变换即可得到上述矩阵
这 4 个码字是线性无关的, 所以它们也是 \(C\) 的一组基. 从而 \(\boldsymbol{C}\) 又有生成矩阵
所以由定理 8 的 (3),
便是 \(C\) 的一个校验矩阵.
习题
\(1.\) 证明 \(F_p^n\) 中的子集合
是 \(F_p\) 上码长为 \(n\) 的线性码. 求此码的信息位数 \(k\) 和最小距离 \(d\). 给出 \(C\) 的一个生成矩阵和校验矩阵.(提示:问题本身已经给出了一个校验矩阵。)
\(2.\) 设 \(C_1\) 和 \(C_2\) 是 \(p\) 元线性码, 参数分别为 \(\left[n_1, k_1, d_1\right]\) 和 \(\left[n_2, k_2, d_2\right]\). 证明
\((1)\) \(C_1 \oplus C_2=\left\{\left(\boldsymbol{c}_1, \boldsymbol{c}_2\right) \in F_{p_1}^{n_1+n_2} \mid \boldsymbol{c}_1 \in C_1,\boldsymbol{c_2} \in C_2\right\}\) 是 \(p\) 元线性码. 求这个线性码的基本参数 \([n, k, d]\).
\((2)\) 如何由 \(C_1\) 和 \(C_2\) 的生成矩阵 \(\boldsymbol{G}_1\) 和 \(\boldsymbol{G}_2\)来构造 \(C_1 \oplus C_2\) 的一个生成矩阵? 如何由 \(C_1\) 和 \(C_2\) 的校验矩阵 \(\boldsymbol{H}_1\) 和 \(\boldsymbol{H}_2\) 来构造 \(C_1 \oplus C_2\) 的一个校验矩阵?
\(3.\) 设 \(\boldsymbol{G}\) 是线性码 \(C\) 的一个生成矩阵. 将 \(\boldsymbol{G}\)的任意两列交换位置而其余列不变, 得到一个新的矩阵 \(\boldsymbol{G}^{\prime}\). 证明以 \(\boldsymbol{G}^{\prime}\) 为生成矩阵的线性码和 \(C\) 等价 (关于纠错码等价的定义, 见 1.2 节习题 3〜5).
\(4.\) 设 \(\boldsymbol{G}\) 是 \(p\) 元线性码 \(C\) 的一个生成矩阵.将 \(\boldsymbol{G}\) 的某一列乘上 \(F_p\) 中一个非零元素而其余列不变, 得到一个新的矩阵 \(\boldsymbol{G}^{\prime}\). 证明以 \(\boldsymbol{G}^{\prime}\) 为生成矩阵的线性码和 \(C\) 等价.(这题也是冯克勤老师书上的题,笔者没有做出来并且怀疑是打印错误,如果这题是对的,可能要考虑转置操作是不是可以由前面介绍的几种码的等价操作搞出来)
\(5.\) 设 \(C\) 是参数为 \([n, k, d]\) 的二元线性码, \(d\)为奇数.
\((1)\) 证明 \(C\) 的扩充码
是二元线性码, 并且参数为 \([n+1, k, d+1]\).(提示:例 1.1.1 的奇偶校验码的想法)
\((2)\) 如何由 \(C\) 的生成矩阵给出 \(C^{\prime}\) 的生成矩阵? 如何由 \(C\) 的校验矩阵给出 \(C^{\prime}\) 的校验矩阵?(提示:\(H^{\prime}=
\left(\begin{array}{cccc}
\ & \ & \ & 0 \\
\ & {\LARGE H} & \ & 0 \\
\ & \ & \ & \vdots \\
1 & 1 & \cdots & 1
\end{array}\right)
\))
\(6.\) 设 \(C\) 是参数 \([n, k, d]\) 的一个 \(p\) 元线性码, 并且 \(d \geqslant 2\).
(1) 证明 \(C\) 的收缩码
是 \(p\) 元线性码, 并且 \(C^{\prime}\) 的参数为 \([n-1, k-1\), \(\left.d^{\prime}\right]\), (提示:从我们提过的生成矩阵可以看作一个纠错编码这个角度来考虑)其中 \(d^{\prime} \geqslant d\). 如何由 \(C\) 的一个生成矩阵给出 \(C^{\prime}\) 的生成矩阵? (提示:\(g_{11}c_1+\cdots +g_{k1}c_k=0\) 所决定的线性空间的基为 \(k-1\) 个 \(1\times k\) 的向量,用这些向量左乘 \(G\) 删去第一列所得矩阵即得 \(G^{\prime}\))如何由 \(C\) 的一个校验矩阵给出 \(C^{\prime}\) 的校验矩阵?
\((2)\) 证明 \(C\) 的限制码
\(C^{\prime \prime}=\left\{\left(a_1, \cdots, a_{n-1}\right) \in F_2^{n-1} \mid\right.\) 存在 \(a_n \in F_2\),使得 \(\left.\left(a_1, \cdots, a_{n-1}, a_n\right) \in C\right\}\) 是 \(p\) 元线性码, 并且 \(C^{\prime \prime}\) 的参数为 \(\left[n-1, k, d^{\prime \prime}\right]\), 其中 \(d^{\prime \prime} \geqslant d-1\). 如何由 \(C\) 的一个生成矩阵给出 \(C^{\prime \prime}\) 的生成矩阵?
\(7.\) 证明 \(F_2^6\) 中的子集合 \(C=\{(000000), (101010), (010101), (111111) \}\) 是线性码. 求此码的一个生成矩阵和校验矩阵.
\(8.\) 为什么说 \(\operatorname{rank}(f)\) 等于象空间 \(I_m(f)\) 的维数且

浙公网安备 33010602011771号