漢明碼和擴展漢明碼

糾錯編碼的基本原理

  3位二進制數字構成的碼組,共有8種不同的組合。任一碼組在傳輸中若發生一個或多個錯碼,將變成另一信息碼組,此時無法發現錯誤。若如下所示,使用部分碼字,則接收端在某一位發生錯誤時,可以發現一個錯碼。但是這種碼不能發現兩個錯碼,因爲發生兩個錯碼後產生的是許用碼字。該碼只能檢測錯誤,不能糾正錯誤,當收到的碼組爲禁用碼字100時,無法判斷時哪一位碼發生了錯誤,如000、101、110都可能變成100。要想能糾正錯誤,還要增加冗餘度。
  000
  001(不可用)
  010(不可用)
  011
  100(不可用)
  101
  110

分組碼和線性分組碼

  信息碼分組,每組信碼附加若干監督碼,稱爲分組碼。(n, k)表示分組碼,n爲碼組長度(碼長),k爲信息碼長,m=n-k爲監督碼長。
  碼重:“1”的數量稱爲碼重。
  碼距:兩個碼字對應位置上數字不同的位數稱爲碼字的距離,又稱漢明距離。
  最小碼距:某種編碼中各個碼字間距離的最小值稱爲最小碼距d。(即校驗矩陣H中任意(d-1)列線性無關)
  最小碼距與碼的糾錯能力有以下關係:
(1) 檢測e個隨機錯誤,要求d≥e+1;
(2) 糾t個隨機錯誤,要求d≥2t+1;
(3) 糾t個隨機錯誤,同時檢測e(e≥t+1)個隨機錯誤,要求d≥e+t+1。
  奇偶監督碼的編碼原理利用了代數關係式,這類建立在代數學基礎上的編碼稱爲代數碼,在代數碼中常見的是線性碼。線性碼中信息位和監督位是由一些線性代數方程聯繫起來的,或者說線性碼是按一組線性方程構成的。

漢明碼

  漢明碼(Hamming Code)是由Richard Hamming於1950年提出的,屬於線性分組碼的範疇,其基本原理是將信息碼元與監督碼元通過線性方程式聯繫起來的,每一個監督位被編在傳輸碼字的特定比特位置上。系統對於錯誤的數位,無論是原有信息位中的,還是附加監督位中的都能把它分離出來。各種碼之間的大致關係如下:
這裏寫圖片描述
  標準漢明碼的碼長n=2^m-1,監督位數爲m,信息位數爲k=n-m,最小碼距d=3,因此它的糾錯能力t=1,是一種常用糾單個位錯誤的編碼方式。還可以根據需要對標準漢明碼進行擴展,增加1個校驗位對所有位進行監測,就得到擴展漢明碼。1個(n,k)漢明碼經過擴展以後,就變成了(n+1,k)漢明碼。擴展以後的漢明碼d=4,t=2,e=1,可以糾正單個位錯誤,並檢測出雙位的錯誤。
  Hamming Rule
  m個監督位構造出m個監督關係式,指示一種錯碼的n種可能位置,則
2^m≥n+1=k+m+1

(7,4)漢明碼示例

  設信息位4位,校正子3位,(7,4)漢明碼用a6,a5,…a0表示這7個碼元,用S1,S2,S3表示三個監督關係式中的校正子,校正子與錯碼位置的對應關係如下規定(這個規定是任意的):

S1 S2 S3 錯碼位置
001 a0
010 a1
100 a2
011 a3
101 a4
110 a5
111 a6
000 無錯

  按照表中的規定可知,僅當一個錯碼位置在a2,a4,a5或a6時校正子S1爲1,否則S1爲0。這就意味着a2,a4,a5,a6四個碼元構成偶校驗關係:
    S1 = a6⊕a5⊕a4⊕a2
  同理,可以得到:
    S2 = a6⊕a5⊕a3⊕a1
    S3 = a6⊕a4⊕a3⊕a0
  在發送信號時,信息位a6,a5,a4,a3的值取決於輸入信號,是隨機的。監督爲a2,a1,a0應該根據信息位的取值按照監督關係決定,即監督位的取值應該使上述(1)(2)(3)式中的S1,S2,S3爲0,這表示初始情況下沒有錯碼。即
    S1=a6⊕a5⊕a4⊕a2 = 0
    S2=a6⊕a5⊕a3⊕a1 = 0
    S3=a6⊕a4⊕a3⊕a0 = 0
  由上式進行移項運算,得到:
    a2 = a6⊕a5⊕a4
    a1 = a6⊕a5⊕a3
    a0 = a6⊕a4⊕a3
  已知信息位後,根據上式即可計算出a2,a1,a0三個監督位的值。
  接收端收到每個碼組後,先按監督方程計算出S1, S2, S3,再按表格判斷錯碼情況。

線性分組碼的一般原理

  上述信息位和監督位滿足的線性方程可以表示爲:
這裏寫圖片描述
  記爲這裏寫圖片描述
  H=[P Ir]稱爲監督矩陣,H矩陣各行是線性無關的,行數=監督位數,列數=碼字長度
這裏寫圖片描述
  轉置得
這裏寫圖片描述
  G = [Ik Q]稱爲生成矩陣,生成矩陣G的每一行都是一個碼字。
這裏寫圖片描述
  (n,k)線性分組碼的生成矩陣G和校驗矩陣H分別爲k×n和(n-k) ×n維矩陣,其中校驗矩陣H決定信息位與校驗位的關係,在編碼和譯碼中都要用到。
這裏寫圖片描述

譯碼

  若發送碼組爲A,接收碼組爲B,二者之差E=B-A,E稱爲錯誤圖樣。
這裏寫圖片描述
  當接收碼組無錯時,S=0,有錯但不超過檢錯能力時,S不等於0,當錯碼超過檢錯能力時,S仍等於0,這樣的錯碼是不可檢測的。S稱爲校正子(伴隨式),S只與E有關,而與A無關,S與E有線性變換關係,與E一一對應,可指示錯碼位置。
  伴隨式譯碼,是由接收碼B和校驗矩陣H算出伴隨式S,再根據S就可以算出E,判斷哪一位發生了錯誤並糾正。標準陣列譯碼法是一種非常直觀的方法,標準陣列有2^m行,2^k列,包含了所有2^n種可能的n維二元向量。

校驗算法設計

  首先根據原始信息碼長確定需要多少個監督位。
  再確定監督位和信息位的碼字位置,確定伴隨式(監督位)和錯碼位置的關係。
  根據偶監督測試原理,可知監督位參與了哪幾個碼位上的計算,得到生成矩陣/生成方程。
  接收碼後,由校驗矩陣計算出伴隨式,根據伴隨式計算出錯誤圖樣,哪一位發生了錯誤並糾正。

(72, 64)擴展漢明碼

這裏寫圖片描述
  矩陣中的值代表伴隨式P7P6P5P4P3P2P1P0,d5d4d3d2d1d0指示0~63位哪一位數據發生了錯誤。根據發送和接收數據,計算出8 bit ECC(PSEND和PRECV)。伴隨式S=PSEND^PRECV。如果沒有錯誤,S=0;出現單比特錯誤時,S爲上表中某一數值;如果S只有1bit爲1,則錯誤位在ECC中;如果S不在上表中,說明出現2位或以上錯誤。
  下表是ECC編碼規則:
這裏寫圖片描述
這裏寫圖片描述
這裏寫圖片描述

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