在傳輸信息時,可能會產生隨機的錯誤,影響信息的可靠性。由於產生的錯誤時隨機不可控也不可避免的,因此就需要對傳遞的信息加工,使其能適應這一特性,所以在這裏引入信道編碼:線性分組碼
假設現在又3位二進制信息需要發送,如果不加變動的發送,雖然說這樣的編碼效率最高,完全沒有多餘的信息被傳輸,但是相對的,一旦出錯也無從得知,所以這樣是不可取的。
那現在在發送端對這個3bit的信息組(c1,c2,c3)進行加工,令這3位按照一定的規則排列得到檢校位如下,再將信息位和檢校位共同發送
⎩⎪⎪⎪⎨⎪⎪⎪⎧c4=c1+c3c5=c1+c2+c3c6=c1+c2c7=c2+c3(1)
那麼在接受端只需要將信息位按照同樣的規則排列,就可以檢校這組信息在傳輸的過程中有沒有出錯了
很明顯,在經過編碼之後,有用信息的佔比下降了,信息位在碼字中的佔比,也就是編碼效率降到了73≈0.4286
在上面的例子中不難看出,我們在傳輸的過程中增加了冗餘,也就是多發送了4位沒有用的信息,換來在接受端可以檢校,簡而言之:提高傳輸的可靠性降低了傳輸的有效性
這一點也正是信道編碼的一個本質,信道編碼是爲了提高傳輸的可靠性,但是可靠性與有效性不可兼得,只能傾向一點而不能二者兼顧
上面給出的例子就是線性分組碼.編碼後碼長n=7,編碼前碼長k=3,添加檢校位r=4.其最明顯的特徵就是檢校位由信息位線性組合構成,根據這個套用一下線性代數的知識,將上面的方程組(1)變成矩陣的形式
[c1c2c3]⋅⎣⎡101111110011⎦⎤=[c4c5c6c7]
加上信息位則有
[c1c2c3]⋅⎣⎡100010001101111110011⎦⎤=[c1c2c3c4c5c6c7]
在上式中,中間的係數矩陣就是線性分組碼的生成矩陣G
⎣⎡100010001101111110011⎦⎤
對於上述生成矩陣G,可以大致分爲兩部分
[I∣P](2)
這樣生成的碼字,左側爲信息位,也就是要傳送的信息,右側爲檢校位。
但不是所有線性分組碼的生成矩陣都具有如此簡潔的形式,我們將生成矩陣能劃分爲(2)的線性分組碼稱爲系統碼,而不具備這種形式的則稱爲非系統碼。關於非系統碼將會在循環碼中出現,這裏不作詳細說明,僅說明一點:系統碼和非系統碼的關係
對矩陣僅作初等行變換或列變換,變換前後的矩陣是等價的,那麼對於每一個非系統碼的生成矩陣,便一定對應一個系統碼的生成矩陣。也就是說,我們一定可以通過初等行變換或列變換將非系統碼轉換爲系統碼
在生成矩陣的描述下,我們又多了一種新的理解方式
將生成矩陣G寫爲行向量的形式
⎣⎡g1g2g3⎦⎤
那麼不難看出我們所得到碼字c實際上是行向量的線性組合
c=c1g1+c2g2+c3g3(3)
所以生成矩陣中的每個行向量就是一個碼字。那麼我們所得到的碼字也就是其中三個基本碼字的線性組合,或者說,這三個碼字作爲基底描述了一個碼字空間,就這一點我們得知如下特點:
-
碼字具有封閉性
由於是定義在GF{2}上的運算,對於任意兩碼字ci,cj,都可分解後相加
ci+cj=(c1i+c1j)g1+(c2i+c2j)g2+(c3i+c3j)g3
根據GF{2}上運算的封閉性,必定存在ck使得
⎩⎪⎨⎪⎧c1k=c1i+c1jc2k=c2i+c2jc3k=c3i+c3j
進而ck=ci+cj
所以碼字具有封閉性
-
線性分組碼一定包含全零序列
-
各行向量線性無關
現在再來看接受端的情況:
在經過信道之後,可能產生一個隨機錯誤,同樣可以用矩陣去描述,仍以上述(7,3)碼爲例,假設傳輸過程中產生的錯誤
e=[0100000](4)
因此接受端接收到的是隨機錯誤e和碼字c的疊加
r=e+c
此時根據編碼規則(1)在接受端的檢校排列
⎩⎪⎪⎪⎨⎪⎪⎪⎧r1+r3+r4=0r1+r2+r3+r5=0r1+r2+r6=0r2+r3+r7=0(5)
對應的檢校矩陣HT如下:
⎣⎢⎢⎢⎢⎢⎢⎢⎢⎡1011000111010011000100110001⎦⎥⎥⎥⎥⎥⎥⎥⎥⎤
對於滿足編碼規則的碼字c同樣也滿足檢校規則,所以
c⋅HT=0
而隨機錯誤不具備這一特點,就會出現一不爲零的行向量,記爲伴隨式S
e⋅HT=S
綜上,我們在接受端對接收碼字的檢校得到是隨機錯誤e的伴隨式S
r⋅HT=S
接下來着重探討一下這個伴隨式S,隨即錯誤爲(4)中單錯誤形式。可以看到
e⋅[h1h2h3h3h4h5h6h7]T=h2T
得到的伴隨式S就是檢校矩陣HT的行向量,而各行均不相同,因此可以根據得到的伴隨式S進行糾錯。
同樣我們可以推廣到t個錯誤的情況,此時的伴隨式S變爲多個HT行向量的線性組合,只要能保證2t個行向量之間線性無關,那麼就可以糾正這t個錯誤,關於糾錯能力將在另一篇文章中說明,這裏不進一步深入。
結合關於伴隨式S的說明,接收端的譯碼步驟如下:
首先得到該接收碼字的伴隨式S,再由伴隨式S對應得知可能的錯誤形式e^,最後消除錯誤c=r+e^恢復碼字
這裏爲什麼說得到的是可能的錯誤?
因爲在信道中發生的錯誤不可控的,一個碼字可能發生多個錯誤變成另一個碼字,但因爲同時發生多個錯誤的概率要遠遠小於發生一個錯誤的概率,因此我們選擇概率上可能最大的情況。雖然發生多個錯誤的概率非常小,但是也有可能發生,按照上述選擇方案,就出現了傳輸過程中的誤碼。
此外如果發生錯誤超過糾錯能力,在判決時也無法正確抉擇,同樣近似選擇可能性最大的,這裏不詳細說明。
得到碼字進行譯碼。現在系統碼的優勢就體現出來了,直接截取前3位就是傳輸信息組;如果是非系統碼,則需要額外譯碼運算
仿真演示程序-> 德莉莎世界第一可愛