信息論與編碼:線性分組碼


線性分組碼

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}\);否則返回譯碼錯誤,此時可以檢測到錯誤,但無法糾正。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM