信道編碼之認識線性分組碼

在傳輸信息時,可能會產生隨機的錯誤,影響信息的可靠性。由於產生的錯誤時隨機不可控也不可避免的,因此就需要對傳遞的信息加工,使其能適應這一特性,所以在這裏引入信道編碼:線性分組碼


假設現在又3位二進制信息需要發送,如果不加變動的發送,雖然說這樣的編碼效率最高,完全沒有多餘的信息被傳輸,但是相對的,一旦出錯也無從得知,所以這樣是不可取的。
那現在在發送端對這個3bit的信息組(c1,c2,c3)(c_1,c_2,c_3)進行加工,令這3位按照一定的規則排列1得到檢校位如下,再將信息位和檢校位共同發送
{c4=c1+c3c5=c1+c2+c3c6=c1+c2c7=c2+c3(1) \begin{cases} c_4=c_1+c_3 \\ c_5=c_1+c_2+c_3 \\ c_6=c_1+c_2 \\ c_7=c_2+c_3 \end{cases} \tag{1}

那麼在接受端只需要將信息位按照同樣的規則排列,就可以檢校這組信息在傳輸的過程中有沒有出錯了
很明顯,在經過編碼之後,有用信息的佔比下降了,信息位在碼字中的佔比,也就是編碼效率降到了370.4286\frac 37 \approx 0.4286

在上面的例子中不難看出,我們在傳輸的過程中增加了冗餘,也就是多發送了4位沒有用的信息,換來在接受端可以檢校,簡而言之:提高傳輸的可靠性降低了傳輸的有效性
這一點也正是信道編碼的一個本質,信道編碼是爲了提高傳輸的可靠性,但是可靠性與有效性不可兼得,只能傾向一點而不能二者兼顧

上面給出的例子就是線性分組碼.編碼後碼長n=7,編碼前碼長k=3,添加檢校位r=4.其最明顯的特徵就是檢校位由信息位線性組合構成,根據這個套用一下線性代數的知識,將上面的方程組(1)變成矩陣的形式

[c1c2c3][111001111101]=[c4c5c6c7] \begin{bmatrix} c_1 & c_2 & c_3 \end{bmatrix} \cdot \begin{bmatrix} 1&1&1&0\\0&1&1&1\\1&1&0&1 \end{bmatrix}= \begin{bmatrix} c_4&c_5&c_6&c_7 \end{bmatrix}

加上信息位則有
[c1c2c3][100111001001110011101]=[c1c2c3c4c5c6c7] \begin{bmatrix} c_1 & c_2 & c_3 \end{bmatrix} \cdot \begin{bmatrix} 1&0&0&1&1&1&0\\0&1&0&0&1&1&1\\0&0&1&1&1&0&1 \end{bmatrix}= \begin{bmatrix} c_1 & c_2 & c_3&c_4&c_5&c_6&c_7 \end{bmatrix}

在上式中,中間的係數矩陣就是線性分組碼的生成矩陣G
[100111001001110011101] \begin{bmatrix} 1&0&0&1&1&1&0\\0&1&0&0&1&1&1\\0&0&1&1&1&0&1 \end{bmatrix}

對於上述生成矩陣G,可以大致分爲兩部分
[IP](2) \begin{bmatrix} I|P \end{bmatrix} \tag{2}
這樣生成的碼字,左側爲信息位,也就是要傳送的信息,右側爲檢校位。
但不是所有線性分組碼的生成矩陣都具有如此簡潔的形式,我們將生成矩陣能劃分爲(2)的線性分組碼稱爲系統碼,而不具備這種形式的則稱爲非系統碼。關於非系統碼將會在循環碼中出現,這裏不作詳細說明,僅說明一點:系統碼和非系統碼的關係
對矩陣僅作初等行變換或列變換,變換前後的矩陣是等價的,那麼對於每一個非系統碼的生成矩陣,便一定對應一個系統碼的生成矩陣。也就是說,我們一定可以通過初等行變換或列變換將非系統碼轉換爲系統碼

在生成矩陣的描述下,我們又多了一種新的理解方式
將生成矩陣G寫爲行向量的形式
[g1g2g3] \begin{bmatrix} g_1 \\ g_2 \\g_3 \end{bmatrix}

那麼不難看出我們所得到碼字c實際上是行向量的線性組合
c=c1g1+c2g2+c3g3(3) c=c_1 g_1+c_2g_2+c_3g_3 \tag{3}

所以生成矩陣中的每個行向量就是一個碼字。那麼我們所得到的碼字也就是其中三個基本碼字的線性組合,或者說,這三個碼字作爲基底描述了一個碼字空間,就這一點我們得知如下特點:

  1. 碼字具有封閉性
    由於是定義在GF{2}上的運算,對於任意兩碼字ci,cjc_i,c_j,都可分解後相加
    ci+cj=(c1i+c1j)g1+(c2i+c2j)g2+(c3i+c3j)g3 c_i+c_j=(c_{1i}+c_{1j})g_1+(c_{2i}+c_{2j})g_2+(c_{3i}+c_{3j})g_3
    根據GF{2}上運算的封閉性,必定存在ckc_k使得
    {c1k=c1i+c1jc2k=c2i+c2jc3k=c3i+c3j \begin{cases} c_{1k}=c_{1i}+c_{1j} \\ c_{2k}=c_{2i}+c_{2j} \\ c_{3k}=c_{3i}+c_{3j} \end{cases}
    進而ck=ci+cjc_k=c_i+c_j
    所以碼字具有封閉性

  2. 線性分組碼一定包含全零序列

  3. 各行向量線性無關

現在再來看接受端的情況:
在經過信道之後,可能產生一個隨機錯誤,同樣可以用矩陣去描述,仍以上述(7,3)碼爲例,假設傳輸過程中產生的錯誤
e=[0100000](4) e=[0 \quad 1 \quad 0 \quad 0\quad 0 \quad0 \quad0 ] \tag{4}

因此接受端接收到的是隨機錯誤e和碼字c的疊加
r=e+c r=e+c

此時根據編碼規則(1)在接受端的檢校排列
{r1+r3+r4=0r1+r2+r3+r5=0r1+r2+r6=0r2+r3+r7=0(5) \begin{cases} r_1+r_3+r_4=0 \\ r_1+r_2+r_3+r_5=0 \\ r_1+r_2+r_6=0 \\ r_2+r_3+r_7=0 \end{cases} \tag{5}
對應的檢校矩陣HTH^T如下:
[1110011111011000010000100001] \begin{bmatrix} 1&1&1&0\\0&1&1&1\\1&1&0&1\\1&0&0&0\\0&1&0&0\\0&0&1&0\\0&0&0&1 \end{bmatrix}

對於滿足編碼規則的碼字c同樣也滿足檢校規則,所以
cHT=0 c \cdot H^T =0

而隨機錯誤不具備這一特點,就會出現一不爲零的行向量,記爲伴隨式S
eHT=S e\cdot H^T =S

綜上,我們在接受端對接收碼字的檢校得到是隨機錯誤e的伴隨式S
rHT=S r\cdot H^T =S

接下來着重探討一下這個伴隨式S,隨即錯誤爲(4)中單錯誤形式。可以看到
e[h1h2h3h3h4h5h6h7]T=h2T e\cdot \begin{bmatrix} h_1&h_2&h_3&h_3&h_4&h_5&h_6&h_7\end{bmatrix}^T = h^T_2
得到的伴隨式S就是檢校矩陣HTH^T的行向量,而各行均不相同,因此可以根據得到的伴隨式S進行糾錯。
同樣我們可以推廣到t個錯誤的情況,此時的伴隨式S變爲多個HTH^T行向量的線性組合,只要能保證2t個行向量之間線性無關,那麼就可以糾正這t個錯誤,關於糾錯能力將在另一篇文章中說明,這裏不進一步深入。

結合關於伴隨式S的說明,接收端的譯碼步驟如下:
首先得到該接收碼字的伴隨式S,再由伴隨式S對應得知可能的錯誤形式e^\hat{e},最後消除錯誤c=r+e^c=r+\hat{e}恢復碼字

這裏爲什麼說得到的是可能的錯誤?
因爲在信道中發生的錯誤不可控的,一個碼字可能發生多個錯誤變成另一個碼字,但因爲同時發生多個錯誤的概率要遠遠小於發生一個錯誤的概率,因此我們選擇概率上可能最大的情況。雖然發生多個錯誤的概率非常小,但是也有可能發生,按照上述選擇方案,就出現了傳輸過程中的誤碼。
此外如果發生錯誤超過糾錯能力,在判決時也無法正確抉擇,同樣近似選擇可能性最大的,這裏不詳細說明。

得到碼字進行譯碼。現在系統碼的優勢就體現出來了,直接截取前3位就是傳輸信息組;如果是非系統碼,則需要額外譯碼運算

仿真演示程序-> 德莉莎世界第一可愛


  1. 這裏的運算法則均爲定義在GF{2}上的運算。通俗的說,就是 結果 mod 2 ↩︎

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章