一  汉明码的编解码说明
	(一)编码
	  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,可知是在接收数据的最低位发生错误
原文:http://www.cnblogs.com/MAQI/p/7641416.html