1.2 纠错码的基本概念和主要数学问题
通过 1.1 节对纠错进行的直观描述, 现在给出纠错码的确切数学定义.
定义 1 向量空间 \(F_p^n\) 中的任何非空子集 \(C\) 都叫做一个 \(p\) 元纠错码, 其中 \(n\) 叫做码长, \(C\) 中向量叫做码字, \(C\) 中码字个数 \(|C|\) 表示成 \(K\), 而 \(k=\log _p K\) 叫做纠错码 \(C\) 的信息位数.
如果不考虑纠错, \(C\) 中码字表示的 \(K\) 个信息:在 \(F_p\) 上用 \(k=\log _p K\) 位即可, 现在由于要纠错,采用了 \(n\) 位向量. 由于 \(1 \leqslant K=|C| \leqslant\left|F_p^n\right|=\) \(p^n\), 可知 \(0 \leqslant k=\log _p K \leqslant \log _p p^n=n\). 比值 \(k / n\) 叫做纠错码 \(C\) 的信息率或效率.
码长 \(n\) 和信息位数 \(k\) (或用 \(K\) ) 是纠错码的两个基本参数. 还应当有一个重要的参数来反映纠错能力. 从 1.1 节看到,一个纠错码有好的纠错能力, 是要求不同码字都有很多的位是不一样的. 对于 \(F_p^n\) 中任意两个不同的向量 \(\boldsymbol{a}=\) \(\left(a_1, \cdots, a_n\right)\) 和 \(\boldsymbol{b}=\left(b_1, \cdots, b_n\right)\). 如果 \(a_i \neq b_i\), 称 \(i\) 是它们的相异位. 所以,要求不同码字都有很多的相异位. 这就给出如下的概念:
定义 2 设 \(\boldsymbol{a}=\left(a_1, \cdots, a_n\right)\) 和 \(\boldsymbol{b}=\) \(\left(b_1, \cdots, b_n\right)\) 为 \(F_p^n\) 中两个向量. 定义 \(\boldsymbol{a}\) 的汉明 (Hamming) 重量 \(w_H(a)\) 为 \(\boldsymbol{a}\) 的非零分量的个数, 即
而 \(\boldsymbol{a}\) 和 \(\boldsymbol{b}\) 之间的汉明距离 \(d_H(\boldsymbol{a}, \boldsymbol{b})\) 是指它们的相异位个数,即
由上述定义可知
今后汉明重量 \(w_H(\boldsymbol{a})\) 和汉明距离 \(d_H(\boldsymbol{a}, \boldsymbol{b})\)分别简写为 \(w(\boldsymbol{a})\) 和 \(d(\boldsymbol{a}, \boldsymbol{b})\).
定义 3 设 \(C\) 是码长为 \(n\) 的 \(p\) 元纠错码(即 \(C\) 是 \(F_p^n\) 的一个子集合, 至少包含两个码字). \(C\) 的最小距离 \(d=d(C)\) 定义为 \(C\) 中所有不同码字之间汉明距离的最小值,即
例如, 在例 1.1 .2 中, 纠错码 \(C\) 为重复码 \(C=\left\{\left(a_1 a_2 a_3 a_1 a_2 a_3 a_1 a_2 a_3\right) \mid a_1, a_2, a_3 \in F_2\right\}\).
任意两个不同码字至少有 3 个相异位, 即汉明距 离均 \(\geqslant 3\). 而码 字 (000000000) 和 (100100100)的汉明距离为 3 , 所以这个重复码的最小距离为 3.
汉明距离给出有限域上两个向量“远近”的一个衡量标准. 任意两个向量之间的汉明距离都是非负整数,这和通常熟知的欧氏平面或欧氏空间中两点距离不同. 但是汉明距离也有以下性质和通常的距离是一样的:
性质 4 设 \(a, b, c \in F_p^n\), 则
\((1)\) \(d(\boldsymbol{a}, \boldsymbol{b}) \geqslant 0\), 并且 \(d(\boldsymbol{a}, \boldsymbol{b})=0\) 当且仅当 \(\boldsymbol{a}=\boldsymbol{b}\). 换句话说,每个向量和自身的汉明距离为 0 ,而任意两个不同向量的汉明距离为正整数.
\((2)\) 对称性: \(d(\boldsymbol{a}, \boldsymbol{b})=d(\boldsymbol{b}, \boldsymbol{a})\). 于是可以谈 \(\boldsymbol{a}\) 和 \(\boldsymbol{b}\) 彼此之间的汉明距离.
\((3)\) 三角形不等式: \(d(\boldsymbol{a}, \boldsymbol{c}) \leqslant d(\boldsymbol{a}, \boldsymbol{b})+\) \(d(\boldsymbol{b}, \boldsymbol{c})\), 即三角形两边之和大于 (等于) 第三边.
证明:\((1)\) 和 \((2)\) 是显然的,仅需证明 \((3)\).仅需证 \(w(a+b)\leq w(a)+w(b)\),这是显然的。
有了性质 4 给出的汉明距离性质, 现在给出纠错码理论的第一个基本结果. 这个结果表明汉明距离确实是反映纠错能力的恰当概念.
定理 5 设 \(C\) 是码长为 \(n\) 的 \(p\) 元纠错码, \(d=d(C)\) 是 \(C\) 的最小距离,则 \(C\) 可以检查 \(\leqslant d-1\) 位错, 也可以纠正 \(\leqslant\) \(\left[\frac{d-1}{2}\right]\) 位错. 这里对每个实数 \(\alpha \geqslant 0,[\alpha]\) 表示 \(\alpha\)的整数部分, 即
证明:显然。
在这里, 读者可能会提出一个问题: 纠错码能够纠正 \(\leqslant\) \(\left[\frac{d-1}{2}\right]\) 位错的前提是信道的错误本身不超过 \(\left[\frac{d-1}{2}\right]\) 个,在这个前提下我们才能够正确的进行纠错,纠错码才具有 \(\left[\frac{d-1}{2}\right]\) 位的纠错能力。如果信道出现的错位多于 \(l=\left[\frac{d-1}{2}\right]\) 个时怎么办? 一般来说,信道在工程设计上要比较可靠. 假设信道传输时每位出错的概率为 \(q(0<q<1)\), 则不出错的概率为 \(q^1=1-q\). 通常 \(q\) 很小 (如果 \(q=\frac{1}{2}\), 这个通信系统不能用, 要在技术上加以改进). 如果 \(q=0.01\), 那么有两位同时出错的概率为 \(q^2=0.0001\). 若码长为 \(n\), 那么在 \(n\) 位当中有 \(l\) 位出错的概率为 \(q^l\binom{n}{l}\), 这里 \(\binom{n}{l}\) 是 \(n\) 位中取 \(l\) 位的组合数, 即
于是一个 \(n\) 位的码字出现错位 \(\geqslant l\) 的概率为
当 \(l\) 较大时, \(P_l\) 的值很小. 换句话说,一个好的通信系统 (即 \(q\) 很小时), 信道中发生多位错误的概率 \(P_l\) 很小. 这时即使译错也关系不大, 就像一封信中, 大部分字都写对了, 极少数字看不清, 根据上下文的意义,通常可以把看不清的字猜出来.
以上介绍了纠错码 \(C\) 的 3 个基本参数: 码长 \(n\) 、码字个数 \(K=|C|\) (或者用信息位数 \(k=\) \(\log _p K\) 和最小距离 \(d\)). 这样参数的纠错码今后表示成 \((n, K, d)\) 或者 \([n, k, d]\).
纠错码的基本数学问题有如下 2 个:
\((1)\) 构造好的纠错码. 也就是说, 希望有大的 \(k / n\) 值 (效率高) 和大的 \(d\) 值 (好的纠错能力).
\((2)\) 要有可以实用的纠错译码算法.
对于问题(1), 要注意 3 个基本参数 \(n, k\) 和 \(d\) 是相互制约的. 例如, 对于固定的码长 \(n\), 当 \(k\)很大时(即码字很多时), 一般来说, 最小距离 \(d\)不能很大. 类似地, 当 \(n\) 和 \(d\) 固定时, 码字个数也不会太多, 即 \(K\) 值(或 \(k\) 值)也不会太大. 例如, 对于一个极端情形, 当 \(k=n\) 时,即 \(K=p^k=\) \(p^n\) 从而 \(C=F_p^n\), 即所有向量都是码字, 这时 \(k / n\)达到最大值, 但是 \(d=1\) 达到最小值, 这个码完全没有纠错能力. 反过来, 如果 \(d\) 达到最大值 \(n\), 则码字个数 \(K \leqslant p\) (习题), 即 \(k \leqslant 1\). 在 1.3 节将要给出纠错码 3 个基本参数和 \(p\) 之间的一些相互制约的不等式关系, 叫做纠错码的界.如果一个纠错码 \(C\) 的参数使这些不等式变成为等式, 那么 \(C\) 就是某种意义上的好的纠错码. 构做好的纠错码是第 1 个重要问题. 举一个例子.
例 6 考虑以下 16 个码字构成的二元码 (码长 \(n=7, p=2\), 码字个数 \(K=16\), 信息位数 \(k=\log _2 K=4\)):
可以验证这个码的最小距离为 \(d=3\). 从而此二元码为 \([n, k, d]=[7,4,3]\). 例 1.1.2 中给出的重复码, 其参数为 \([n, k, d]=[9,3,3]\). 二者的纠错能力一样, 但是这里的效率 \(4 / 7\) 比重复码的效率 \(1 / 3\) 要好. 所以例 1.2.6 中的纠错码比例 1.1.2 中的重复码要好. 事实上,在第 2 章中可以知道例 1.2.6 中的码是一种性能最好的纠错码, 构造好的纠错码是很有学问的.
一个性能良好的纠错码要在实际中被采用, 还需要纠错编码和纠错译码能够在工程上容易实现. 否则, 即使在数学上构造了好的纠错码也不被采用. 一般来说, 纠错编码是容易实现的 (关于线性码的纠错编码见 2.1 节), 而纠错译码常常比较困难. 当信道出错位数不超过 \(\left[\frac{d-1}{2}\right]\) 时,定理 1.2.5 给出了一个译码算法. 这个方法是说: 收方收到 \(\boldsymbol{y}\) 之后, 要计算 \(\boldsymbol{y}\) 和所有 \(\boldsymbol{K}\) 个码字之间的汉明距离, 然后找到和 \(\boldsymbol{y}\) 距离最近的一个码字 \(\boldsymbol{c}\), 把 \(\boldsymbol{y}\) 纠正成 \(\boldsymbol{c}\).收到每个 \(\boldsymbol{y}\) 都要这样做一遍, 这是很花时间的.对于工程师来说, 这个译码算法不能令人满意.因此, 寻求好的译码算法也是纠错码理论的一个重要课题. 从历史上看, 在 1960 年前后人们用抽象代数方法构造了一种好码, 叫 BCH 码,这种码的最小距离可以很大, 即纠错能力很强.不久, 美国数学家 Berlekamp 和瑞士数学家 Massey 各自独立地给出 \(\mathrm{BCH}\) 码好的译码算法, 所以 \(\mathrm{BCH}\) 码在工程上一直应用至今. 在 1980 年前后, 人们用更高深的数学 (代数几何)构造出来性能比 BCH 码还要好的纠错码, 叫代数几何码. 但是到目前仍没有完全满意的译码算法, 所以代数几何码至今还没有到完全实用的阶段.
构造好的纠错码和发现好的译码算法, 都需要采用更多的数学工具. 这就需要考虑纠错码 \(C\) 不仅是 \(F_p^n\) 的一个子集合, 而要赋予它更多的代数性质, 在第 2 章考虑 \(C\) 为 \(F_p^n\) 的向量子空间,从而可以使用线性代数工具. 将向读者展示如何用线性代数的基本知识构造好的纠错码,并且用简单的矩阵计算给出好的纠错编码和译码算法.
习题
\(1.\) 能否构造一个参数为 \([8,4,4]\) 的二元码? (提示:将例 1.2.6 中的码 \([7,4,3]\) 的每个码字适当地加上 1 位).
\(2.\) 设 \(C\) 和 \(C^{\prime}\) 分别是参数为 \((n, K, d)\) 和 \(\left(n^{\prime}\right.\) \(\left.K^{\prime}, d^{\prime}\right)\) 的 \(p\) 元码, 将 \(C\) 中每个码字和 \(C^{\prime}\) 中每个码字相连而得到新的 \(p\) 元码
证明此码的参数为 \(\left(n+n^{\prime}, K K^{\prime}, \min \left(d, d^{\prime}\right)\right)\).
关于码的等价
\(3.\) 设 \(C\) 是 \(p\) 元码 \((n, K, d)\). 对于集合 \(\{1\), \(2, \cdots, n\}\) 的每个置换 \(\sigma\), 把 \(C\) 中每个码字 \(\boldsymbol{c}=\) \(\left(c_1, \cdots, c_n\right)\) 变成 \(\sigma(\boldsymbol{c})=\left(c_{\sigma(1)}, \cdots, c_{\sigma(n)}\right)\), 从而给出一个新的码 \(\sigma(C)=\{\sigma(\boldsymbol{c}) \mid \boldsymbol{c} \in C\}\). 证明纠错码 \(\sigma(C)\) 具有和 \(C\) 同样的参数 \((n, K, d)\), 称 \(\sigma(C)\) 为 \(C\) 的码字 \(n\) 个分量进行了置换 \(\sigma\).
\(4.\) 设 \(C\) 是 \(p\) 元码 \((n, K, d)\). 对于 \(F_p^n\) 中任意一个固定向量 \(v\), 考虑新的子集合
证明纠错码 \(C+v\) 和 \(C\) 有同样的参数 \((n, K, d)\). \(C+v\) 叫做码 \(C\) 的平移.
\(5.\) 设 \(f: F_p \rightarrow F_p\) 是一一映射, 并且 \(f(0)= 0\) (从而当 \(a \in F_p, a \neq 0\) 时, \(f(a) \neq 0\) ). 设 \(C\) 是 \(p\)元码 \((n, K, d)\), 将 \(C\) 中每个码字 \(\boldsymbol{c}=\left(c_1, c_2, \cdots\right.\), \(\left.c_n\right)\) 变成 \(f(\boldsymbol{c})=\left(f\left(c_1\right), \cdots, f\left(c_n\right)\right)\). 证明新的码 \(f(C)=\{f(c) \mid c \in C\}\) 和 \(C\) 有同样的参数 \((n, K ,d)\). \(f(C)\) 叫做对 \(C\) 中码字作元素置换.
注: 两个 \(p\) 元码 \(C\) 和 \(C^{\prime}\) 叫做等价的, 是指通过有限次的前 3 种变换 (即分量置换、平移或元素置换) 可以将 \(C\) 变成 \(C^{\prime}\). 由习题 3〜5 可知, 等价的纠错码具有相同的参数 \((n, K, d)\) 或 (\([n, k, d]\)).
\(6.\) 证明存在参数为 \((n, K, d)=(5,4,3)\) 的二元码, 并且所有这种参数的二元码均彼此等价.
证明:我们构造这个二元码 \(C\)。由习题 3 和 4,可不妨设 \(C\) 的前两个码字为
考察第三个码字的最后两个位置的可能情况,由于第三个码字的前三个位置无论如何选取,其与第一个码字和第二个码字的前三个位置的汉明距离之和总是 3.由此可知,\(C\) 一定具有如下形式:
再考虑第三个码字和第四个码字间的汉明距离,可知他们的前三个对应位置都是不同的,所以在码的等价的意义下,\(C\) 只有一种可能的形式:
经验证,\(C\) 确实具有参数 \((n, K, d)=(5,4,3)\)。
\(7.\) 如果 \(p\) 元纠错码 \(C\) 满足 \(n=d\), 证明 \(K \leqslant\) \(p\) (即码字最多有 \(p\) 个).
证明:若有 \(p+1\) 个码字,观测每个码字的第一个位置,由于是 \(p\) 元域,由鸽笼原理必有两个码字的第一位置是相同的,此时这两个码字的汉明距离严格小于 \(n\),矛盾。取等容易构造验证。
\(8.\) 对于 \(F_p^n\) 中 3 个向量 \(\boldsymbol{a}, \boldsymbol{b}, \boldsymbol{c}\), 试问何时 \(d(\boldsymbol{a}, \boldsymbol{c})=d(\boldsymbol{a}, \boldsymbol{b})+d(\boldsymbol{b}, \boldsymbol{c}) ?\)
解:等价于问何时 \(w(\boldsymbol{a})+w(\boldsymbol{b})=w(\boldsymbol{a}+\boldsymbol{b})\),显然当且仅当向量 \(\boldsymbol{a}\) 和 \(\boldsymbol{b}\) 的非零分量所在位置不重合时取等。回到原问题即 \(a_i\not ={b_i}\) 和 \(b_i\not ={c_i}\) 不能同时发生,即 \(b_i=a_i~or~ c_i,\forall 1 \leq i \leq n\).

浙公网安备 33010602011771号