信息论与编码:线性分组码

线性分组码

1. 线性分组码

分组码:信息划分成固定长度\(k\)的分组,各个分组依次编码。

\(\boldsymbol{u} = (u_0, \dots, u_{k-1})\)编码为\(\boldsymbol{v} = (v_0, \dots, v_{n-1})\),其中\(n \gt k\)\(\boldsymbol{v}\)称为码字(codeword),码字两两不同。

\((n, k)\)分组码(block code):\(2^{k}\)个码字构成的集合称作一个\((n, k)\)分组码。

编码率(code rate):\(R = k / n\)

线性分组码:设\(V\)\(\text{GF}(2)\)上所有\(n\)元组构成的向量空间,若一个\((n, k)\)分组码包含的\(2^{k}\)个码字构成\(V\)的一个\(k\)维子空间,则称之为线性分组码。

1.1 生成矩阵和校验矩阵

一个\((n, k)\)分组码\(\mathcal{C}\)中有\(k\)个线性无关的码字:\(\boldsymbol{g}_{0}, \dots, \boldsymbol{g}_{k-1}\),我们可以构造矩阵:
\[ \bold{G} = \begin{bmatrix} \boldsymbol{g}_0\\ \boldsymbol{g}_1\\ \vdots\\ \boldsymbol{g}_{k-1}\\ \end{bmatrix} = \begin{bmatrix} g_{0,0} & g_{0,1} & \cdots & g_{0, n-1}\\ g_{1,0} & g_{1,1} & \cdots & g_{1, n-1}\\ \vdots & \vdots & \ddots & \vdots\\ g_{k-1,0} & g_{k-1,1} & \cdots & g_{k-1, n-1}\\ \end{bmatrix} \]
对于任何一个信息\(\boldsymbol{u} = (u_0, \dots, u_{k-1})\),其对应的码字为\(\boldsymbol{v} = \boldsymbol{u} \cdot \bold{G}\)

\(\bold{G}\)称为\(\mathcal{C}\)的生成矩阵(generator matrix),\(\mathcal{C}\)\(\bold{G}\)的行空间。

\(\bold{G}\)的零空间(null space)是一个\(n - k\)维子空间,同时也是\(\mathcal{C}\)的对偶空间,用\(\mathcal{C}_d\)表示。\(\mathcal{C}_{d}\)本身也是一个线性分组码,\(\mathcal{C}_{d}\)的生成矩阵为:
\[ \bold{H} = \begin{bmatrix} \boldsymbol{h}_0\\ \vdots\\ \boldsymbol{h}_{n-k-1}\\ \end{bmatrix} \]
\(\bold{H}\)也称作\(\mathcal{C}\)的校验矩阵(parity matrix)。

线性系统分组码:
\[ \begin{array}{|c|c|} \hline \text{Redundant check part} & \text{Message part}\\ \hline n - k \text{ digits} & k \text{ digits}\\ \hline \end{array} \]
如果分组线性码的码字可以分为两个部分,前\(n - k\)比特为冗余比特(用于纠错和检错),后\(k\)个比特是消息比特,与原始消息完全相同,则称这种线性分组码为线性系统分组码(linear systematic block code)。

生成矩阵为:
\[ \bold{G} = \begin{bmatrix} \boldsymbol{g}_{0}\\ \boldsymbol{g}_{1}\\ \vdots\\ \boldsymbol{g}_{k-1} \end{bmatrix} = \begin{bmatrix} p_{0,0} & p_{0,1} & \cdots & p_{0, n-k-1} & 1 & 0 & \cdots & 0 \\ p_{1,0} & p_{1,1} & \cdots & p_{1, n-k-1} & 0 & 1 & \cdots & 0 \\ \vdots & \vdots & \ddots & \vdots & \vdots & \vdots & \ddots & \vdots\\ p_{k-1,0} & p_{k-1,1} & \cdots & p_{k-1, n-k-1} & 0 & 0 & \cdots & 1 \\ \end{bmatrix} = \begin{bmatrix} \bold{P}, \bold{I}_{k} \end{bmatrix} \]
\(\boldsymbol{u} = (u_{0}, \dots, u_{k-1})\)\(\boldsymbol{v} = \boldsymbol{u}\cdot \bold{G} = (v_{0}, \dots, v_{n-1})\),其中\((v_{0}, \dots, v_{n-k-1}) = \boldsymbol{u} \cdot \bold{P}\)\((v_{n-k}, \dots, v_{n-1}) = \boldsymbol{u}\)

任何一个生成矩阵\(\bold{G}'\)都可以通过先做行变换,再做列置换得到上述形式的\(\bold{G}\),称\(\bold{G}\)\(\bold{G}'\)的组合等价矩阵(combinatorially equivalent matrix),设\(\bold{G}'\)\(\bold{G}\)对应的线性分组码分别是\(\mathcal{C}\)\(\mathcal{C}'\),称\(\mathcal{C}'\)\(\mathcal{C}\)的组合等价码(combinatorially equivalent code)。

\(\bold{G}\)对应的校验矩阵是\(\bold{H} = \begin{bmatrix}\bold{I}_{n-k}, \bold{P}^{T}\end{bmatrix}\)

1.2 线性分组码的差错检测

\(\boldsymbol{v} = (v_{0}, \dots, v_{n-1})\):发送端的码字

\(\boldsymbol{r} = (r_{0}, \dots, r_{n-1})\):接收端的“码字”

\(\boldsymbol{e} = \boldsymbol{v} + \boldsymbol{r}\):差错模式(error pattern),\(\boldsymbol{e}\)\(1\)的位置就是发生差错的位置,可能的非零差错模式有\(2^{n}-1\)个。

\(\boldsymbol{s} = \boldsymbol{r} \cdot \bold{H}^{T} = \boldsymbol{e} \cdot \bold{H}^{T}\):syndrome

\(\boldsymbol{s} = \boldsymbol{0}\)当且仅当\(\boldsymbol{r} \in \mathcal{C}\),所以

  • \(\boldsymbol{s} \neq \boldsymbol{0}\)\(\boldsymbol{r}\)不是码字,传输过程必然发生了差错
  • \(\boldsymbol{s} = \boldsymbol{0}\),接收\(\boldsymbol{r}\)。实际上传输过程可能发生差错也可能没有发生差错,如果发生差错,即\(\boldsymbol{e} \neq \boldsymbol{0}\),则\(\boldsymbol{e}\)必定是一个非零的码字。也就是说,发生差错当且仅当\(\boldsymbol{e}\)等于某一个非零的码字,这样的\(\boldsymbol{e}\)一共有\(2^{k} - 1\)个,称之为不可检测差错模式(undetectable error pattern)

1.3 线性分组码的汉明重量、汉明距离

汉明重量(Hamming weight):\(\boldsymbol{v} = (v_0, \dots, v_{n-1})\)\(\text{GF}(2)\)上的\(n\)元组,\(\boldsymbol{v}\)的重量\(w(\boldsymbol{v})\)定义为\(\boldsymbol{v}\)\(1\)的数量

重量分布(weight distribution):\(\mathcal{C}\)是一个\((n, k)\)线性分组码,对于\(0 \le i \le n\),令\(A_{i}\)\(\mathcal{C}\)中汉明重量为\(i\)的码字的数量,称\(A_{0}, \dots, A_{n}\)\(\mathcal{C}\)的重量分布

最小重量(minimum weight):\(w_{\min}(\mathcal{C}) = \min \left\{w(\boldsymbol{v}): \boldsymbol{v} \in \mathcal{C}, \boldsymbol{v} \neq \boldsymbol{0}\right\}\)

对于一个离散无记忆的二元对称信道,假设单个比特的差错概率是\(p\),出现不可检测差错模式的概率是:
\[ P_{u}(E) = \sum_{i=1}^{n}A_{i}p^{i}(1-p)^{n-i} \]
所以重量分布唯一决定了出现不可检测差错模式的概率,也就是线性分组码本身决定了这一概率。

汉明距离(Hamming distance):\(\boldsymbol{u}, \boldsymbol{v}\)\(\text{GF}(2)\)上的\(n\)元组,\(\boldsymbol{u}, \boldsymbol{v}\)之间的距离\(d(\boldsymbol{u}, \boldsymbol{v})\)定义为\(\boldsymbol{u}\)\(\boldsymbol{v}\)上不同的位置的数量,\(d(\boldsymbol{u}, \boldsymbol{v}) = w(\boldsymbol{u} + \boldsymbol{v})\)

汉明距离满足三角不等式。

最小距离(minimum distance):\(d_{\min}(\mathcal{C}) = \min\left\{d(\boldsymbol{v}, \boldsymbol{w}): \boldsymbol{v}, \boldsymbol{w} \in \mathcal{C}, \boldsymbol{v} \neq \boldsymbol{w} \right\}\)

最小距离等于最小重量:
\[ \begin{align*} d_{\min}(\mathcal{C}) &= \min\left\{d(\boldsymbol{v}, \boldsymbol{w}): \boldsymbol{v}, \boldsymbol{w} \in \mathcal{C}, \boldsymbol{v} \neq \boldsymbol{w} \right\}\\ &= \min\left\{w(\boldsymbol{v}+\boldsymbol{w}): \boldsymbol{v}, \boldsymbol{w} \in \mathcal{C}, \boldsymbol{v} \neq \boldsymbol{w} \right\}\\ &= \min\left\{w(\boldsymbol{x}): \boldsymbol{x} \in \mathcal{C}, \boldsymbol{x} \neq \boldsymbol{0} \right\}\\ &= w_{\min}(\mathcal{C}) \end{align*} \]
\(\mathcal{C}\)的重量分布与\(\mathcal{C}\)的校验矩阵\(\bold{H}\)的关系:

定理\(\mathcal{C}\)是一个\((n, k)\)线性分组码,其校验矩阵是\(\bold{H}\)。若\(\mathcal{C}\)中存在重量为\(i\)的码字,则\(\bold{H}\)中存在\(i\)列,它们的和为\(\bold{0}\);若\(\bold{H}\)中存在\(i\)列,它们的和为\(\bold{0}\),则\(\mathcal{C}\)中存在重量为\(i\)的码字。

定理\(\mathcal{C}\)是一个\((n, k)\)线性分组码,其校验矩阵是\(\bold{H}\)\(\mathcal{C}\)的最小重量等于\(\bold{H}\)中最小的满足和为\(\bold{0}\)的列的数量。

定理\(\mathcal{C}\)是一个\((n, k)\)线性分组码,其校验矩阵是\(\bold{H}\)。若\(\bold{H}\)中不存在\(d-1\)或更少的列,使得这些列的和为\(\bold{0}\),则\(\mathcal{C}\)的最小重量至少是\(d\)

第三个定理给出了线性分组码的最小重量的一个下界。

\(\mathcal{C}\)是一个线性分组码,对于任意的\(\boldsymbol{v} \in \mathcal{C}\)\(\mathcal{C} + \boldsymbol{v} = \left\{\boldsymbol{u} + \boldsymbol{v}: \boldsymbol{u} \in \mathcal{C} \right\} = \mathcal{C}\),所以\(\mathcal{C}\)的重量分布也是关于\(\mathcal{C}\)中任意一个码字的距离的分布。

检错能力:线性分组码\(\mathcal{C}\)的最小距离是\(d_{\min}(\mathcal{C})\),差错数量小于\(d_{\min}(\mathcal{C})\)的差错模式\(\boldsymbol{e}\)保证可以被检测出来,差错数量大于或等于\(d_{\min}(\mathcal{C})\)的差错模式\(\boldsymbol{e}\)不保证被检测出来,所以称\(d_{\min}(\mathcal{C}) - 1\)\(\mathcal{C}\)的检错能力(error-detecting capability)。

保证被检测出来的非零差错模式的数量是:
\[ \binom{n}{1} + \binom{n}{2} + \cdots + \binom{n}{d_{\min}(\mathcal{C})-1} \]

1.4 线性分组码的译码

对于一个\((n,k)\)线性分组码\(\mathcal{C}\),在译码端接收到的\(n\)元组\(\boldsymbol{r}\)\(2^{n}\)种(即\(\text{GF}(2)\)上的所有\(n\)元组中构成的向量空间\(V\)的大小),而\(\mathcal{C}\)中的码字只有\(2^{k}\)个,所以译码就是将\(V\)划分成\(2^{k}\)个部分,每个部分包含恰好一个码字。

下面是一种代数译码方案:

  1. 构造一个\(2^{n-k} \times 2^{k}\)的二维阵列(array)
  2. \(2^{k}\)个码字\(\boldsymbol{v}_{0}, \cdots, \boldsymbol{v}_{2^{k}-1}\)填入第\(0\)行,其中\(\boldsymbol{v}_{0} = \boldsymbol{0}\)
  3. 对于\(1 \le j \lt 2^{n-k}\),任意选择一个没有在第\(0\)\(j-1\)行出现过的\(\boldsymbol{e}_{j} \in V\),在第\(j\)行的各个位置填入\(\boldsymbol{e}_j + \boldsymbol{v}_{i}\)

下图展示了这个二维阵列的构成:
\[ \begin{array}{c | c c c c c} \hline \text{Cosets} & \text{Coset leaders}\\ \hline \mathcal{C} & \boldsymbol{e}_{0} = \boldsymbol{v}_{0} = \boldsymbol{0} & \cdots & \boldsymbol{v}_{i} & \cdots & \boldsymbol{v}_{2^{k}-1}\\ \boldsymbol{e}_1 + \mathcal{C} & \boldsymbol{e}_{1} & \cdots & e_{1} + \boldsymbol{v}_{i} & \cdots & \boldsymbol{e}_1 + \boldsymbol{v}_{2^{k}-1}\\ \vdots & \vdots & \cdots & \vdots & \cdots & \vdots \\ \boldsymbol{e}_{2^{n-k}-1} + \mathcal{C} & \boldsymbol{e}_{2^{n-k}-1} & \cdots & e_{2^{n-k}-1} + \boldsymbol{v}_{i} & \cdots & \boldsymbol{e}_{2^{n-k}-1} + \boldsymbol{v}_{2^{k}-1}\\ \hline \end{array} \]

这样得到的二维阵列称为\(\mathcal{C}\)的标准阵列(standard array),每一行都是\(\mathcal{C}\)的一个陪集,\(\boldsymbol{e}_{j}\)是第\(j\)行的陪集首(coset leader)。标准阵列满足以下性质:

  1. 每一行的任何两个向量的和都是一个码字
  2. \(V\)中的每个向量都在标准阵列中出现恰好一次
  3. 每一行的向量都具有相同的syndrome
  4. 不同行的syndrome不同

标准阵列的\(2^{k}\)列是\(V\)的一个划分,每个部分恰好有一个码字,当接收到\(\boldsymbol{r}\)时,若\(\boldsymbol{r}\)在第\(i\)列,则将其译码为\(\boldsymbol{v}_{i}\)

对于一个码字\(\boldsymbol{v}_{i}\)

  • 若差错模式为某一个陪集首\(\boldsymbol{e}_{j}\),则\(\boldsymbol{r}\)在第\(i\)
  • 若差错模式不是陪集首,则\(\boldsymbol{r}\)不在第\(i\)

所以,使用标准阵列译码,译码正确当且仅当差错模式是一个陪集首。

为了减少译码错误的概率,陪集首应该选择最可能出现的差错模式。对于离散无记忆的二元对称信道,差错模式的重量越小,出现的概率越大,所以,在构建标准阵列时,每次选择陪集首,都从\(V\)中剩下的\(n\)元组中选择重量最小的,这样得到的标准阵列称为最优标准阵列(optimal standard array),基于最有标准阵列的译码是最小距离译码。

纠错能力:

对于线性分组码\(\mathcal{C}\),令\(t = \lfloor(d_{\min}(\mathcal{C}) - 1) / 2\rfloor\)。对于一个最优标准阵列,所有重量小于或等于\(t\)\(n\)元组都会被选作陪集首,且至少有一个重量为\(t+1\)\(n\)元组不能称为陪集首。所以,所有差错数量小于或等于\(t\)的差错模式都能被纠正,差错大于\(t\)的错误不保证能纠正,我们称\(t\)\(\mathcal{C}\)的纠错能力(error-correction capability)

伴随式译码(syndrome decoding):

得到标准矩阵后,仅保留一个\(2^{n-k} \times 2\)的阵列,第一列是各个陪集首,第二列是各个陪集首对应的syndrome。接收到\(\boldsymbol{r}\)后,译码过程为:

  1. 计算\(\boldsymbol{s} = \boldsymbol{r} \cdot \bold{H}^{T}\)
  2. 遍历陪集首,找到满足syndrome等于\(\boldsymbol{s}\)\(\boldsymbol{e}\)
  3. \(\boldsymbol{s}\)译码为\(\boldsymbol{r} = \boldsymbol{s} + \boldsymbol{e}\)

若只考虑重量小于\(t\)的差错模式,则维护的表的大小为:
\[ N_{t} = \binom{n}{0} + \binom{n}{1} + \cdots + \binom{n}{t} \]
译码过程为:

  1. 计算\(\boldsymbol{s} = \boldsymbol{r} \cdot \bold{H}^{T}\)
  2. 遍历陪集首,找满足syndrome等于\(\boldsymbol{s}\)\(\boldsymbol{e}\)。若能找到,则译码为\(\boldsymbol{r} = \boldsymbol{s} + \boldsymbol{e}\);否则返回译码错误,此时可以检测到错误,但无法纠正。

猜你喜欢

转载自www.cnblogs.com/hitgxz/p/12130980.html
今日推荐