• 汉明码(Hamming)编码与纠错原理



    一 汉明码的编解码说明
    (一)编码
      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,可知是在接收数据的最低位发生错误

  • 相关阅读:
    js 闭包范式概述
    [置顶] 学习JDK源码:编程习惯和设计模式
    第七届蓝桥杯JavaB组国(决)赛部分真题
    第七届蓝桥杯JavaA组国(决)赛部分真题
    第七届蓝桥杯JavaA组国(决)赛部分真题
    第七届蓝桥杯JavaA组国(决)赛部分真题
    第七届蓝桥杯JavaA组国(决)赛部分真题
    第七届蓝桥杯JavaA组国(决)赛部分真题
    Java实现蓝桥杯历届真题国王的遗产
    Java实现蓝桥杯历届真题国王的遗产
  • 原文地址:https://www.cnblogs.com/MAQI/p/7641416.html
Copyright © 2020-2023  润新知