1. 程式人生 > >漢明碼(Hamming)編碼與糾錯原理

漢明碼(Hamming)編碼與糾錯原理

長度 錯誤 推導 發生 方法 ... 編解碼 x11 code


一 漢明碼的編解碼說明
(一)編碼
  Hamming(12,8)
  N=12,表示編碼後的比特長度
  K=8,待編碼數據的比特長度
  R=N-K=4,校驗位的比特長度
  D=3 漢明距離:相鄰行之間不同比特數據的最小值
  (D-1)/2=1 糾錯能力

  表格1:
  ----------------------------------------------------------------------------------------------------
          單位矩陣(I) 生成校驗位的矩陣(P)
  ----------------------------------------------------------------------------------------------------
  標號   11 10 9 8 7 6 5 4 3 2 1 0
  編號 x^7 x^6 x^5 x^4 x^3 x^2 x^1 1 c3 c2 c1 c0
  7    1 0 0 0 0 0 0 0 1 1 1 0
  6 0 1 0 0 0 0 0 0 0 1 1 1
  5 0 0 1 0 0 0 0 0 1 0 1 0
  4 0 0 0 1 0 0 0 0 0 1 0 1
  3 0 0 0 0 1 0 0 0 1 0 1 1
  2 0 0 0 0 0 1 0 0 1 1 0 0
  1 0 0 0 0 0 0 1 0 0 1 1 0
  0 0 0 0 0 0 0 0 1 0 0 1 1
  ---------------------------------------------------------------------------------------------------

  G是生成矩陣見表格1
  A[7:0]
  CODE=G x A
  CODE[11]=A[7]
  CODE[10]=A[6]
    ...
  CODE[4]=A[0]
  CODE[3]=A[7]^A[5]^A[3]^A[2] (^為異或)
  CODE[2]=A[7]^A[6]^A[4]^A[2]^A[1]
  CODE[1]=A[7]^A[6]^A[5]^A[3]^A[1]^A[0]
  CODE[0]=A[6]^A[4]^A[3]^A[0]


  (二)解碼
    1.求校驗矩陣H
      H = {P^T,I(N-K)} (^T表示轉置; I(N-K)=I(4)表示4x4單位矩陣)
      H為4x11矩陣

      表2:
      ----------------------------------------------------------------------------------------------------------
        11    10   9   8   7   6   5   4   3   2   1   0
      -----------------------------------------------------------------------------------------------------------
         p7   p6   p5 p4  p3  p2  p1   P0  I3  I2   I1  I0
      -----------------------------------------------------------------------------------------------------------
      3 1    0   1   0   1   1   0   0   1   0   0   0
      2 1    1   0   1   0   1   1   0   0   1   0   0
      1 1    1   1   0   1   0   1   1   0   0   1   0
      0 0    1   0   1   1   0   0   1   0   0   0   1
      ----------------------------------------------------------------------------------------------------------
    2.求校正子S
        S = H^T * U (U為待解碼的數據)
        S[3] = U[11]^U[9]^U[7]^U[6]^U[3]
        S[2] = U[11]^U[10]^U[8]^U[6]^U[5]^U[2]
        S[1] = U[11]^U[10]^U[9]^U[7]^U[5]^U[4]^U[1]
        S[0] = U[10]^U[8]^U[7]^U[4]^U[0]
    3.根據假設錯誤模式定位錯誤比特
      通過錯誤模式推導校正子Si,i是index指的是錯誤模式的種類,因為我們漢明碼解碼數據有12bit,
    所以錯誤模式有12種,還包括一種全部正確的模式。
      Si = H^T * Ei

      表3:
      -----------------------------------------------------------------------------
      Ei              H^T    Si   編號
      ----------------------------------------------------------------------------
      12‘b0000_0000_0000   1110     0000
      12‘b0000_0000_0001   0111     0001   0
      12‘b0000_0000_0010   1010     0010    1
      12‘b0000_0000_0100   0101     0100    2
      12‘b0000_0000_1000   1011     1000    3
      12‘b0000_0001_0000   1100     0011    4
      12‘b0000_0010_0000   0110     0110    5
      12‘b0000_0100_0000   0011     1100    6
      12‘b0000_1000_0000   1000     1011    7
      12‘b0001_0000_0000   0100     0101    8
      12‘b0010_0000_0000   0010     1010    9
      12‘b0100_0000_0000   0001     0111    10
      12‘b1000_0000_0000         1110   11
      ----------------------------------------------------------------------------
    4.優化數據修正方法
      C[11] = U[11]^(S[3]&S[2]&S[1]&(~S[0]))
      C[10] = U[10]^(~S[3]&S[2]&S[1]&S[0])
      C[9] = U[9]^(S[3]&(~S[2])&S[1]&(~S[0]))
      C[8] = U[8]^(S[3]&(~S[2])&S[1]&S[0])
      C[7] = U[7]^(S[3]&(~S[2])&S[1]&S[0])
      C[6] = U[6]^(S[3]&S[2]&(~S[1])&(~S[0]))
      C[5] = U[5]^((~S[3])&S[2]&S[1]&(~S[0]))
      C[4] = U[4]^((~S[3])&(~S[2])&S[1]&S[0])
      C[3] = U[3]^(S[3]&(~S[2])&(~S[1])&(~S[0]))
      C[2] = U[2]^((~S[3])&S[2]&(~S[1])&(~S[0]))
      C[1] = U[1]^((~S[3])&(~S[2])&S[1]&(~S[0]))
      C[0] = U[0]^((~S[3])&(~S[2])&(~S[1])&S[0])




      例如:
        待編碼數據:8‘b0011_0101
        編碼後數據:CODE[11:4] = 0011_0101
              CODE[3:0] = 0000
              CODE[11:0] = 12‘b0011_0101_0000
        經過信道,假設接收到的數據:
              U[11:0] = 12‘b0011_0101_0001
        校正子:
            S[3] = 0
            S[2] = 0
            S[1] = 0
            S[0] = 1
            S[3:0] = 4‘b0001
        根據表3,可知是在接收數據的最低位發生錯誤

漢明碼(Hamming)編碼與糾錯原理