一 汉明码的编解码说明
(一)编码
  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)编码与纠错原理的更多相关文章

  1. Atitit 视频编码与动画原理attilax总结

    Atitit 视频编码与动画原理attilax总结 1.1. 第一步:实现有损图像压缩和解压1 1.2. 接着将其量化,所谓量化,就是信号采样的步长,1 1.3. 第二步:实现宏块误差计算2 1.4. ...

  2. 【转】Unicode utf8等编码类型的原理

    原文地址http://www.cnblogs.com/daxiong2014/p/4768681.html Unicode utf8等编码类型的原理 1.ASCII码  我们知道,在计算机内部,所有的 ...

  3. Java-IO流之转换流的使用和编码与解码原理

    一.理论: 1.字符流和字节流区别是什么? 字符流=字节流+编码集,在实际读取的时候其实字符流还是按照字节来读取,但是会更具编码集进行查找编码集字典解析相应的字节,使得一次读取出一个字符: 2.什么是 ...

  4. Spring第七弹—依赖注入之注解方式注入及编码解析@Resource原理

        注入依赖对象可以采用手工装配或自动装配,在实际应用中建议使用手工装配,因为自动装配会产生未知情况,开发人员无法预见最终的装配结果. 手工装配依赖对象  手工装配依赖对象,在这种方式中又有两种编 ...

  5. 汉明码(hamming code)

    hamming code用于磁盘RAID 2中, 关于汉明码的讲解可以看这篇博文,介绍的很详细.最重要是最后的结论: 汉明码属于分组奇偶校验,P4P2P1=000,说明接收方生成的校验位和收到的校验位 ...

  6. Base64编码与解码原理

    Base64编码是使用64个可打印ASCII字符(A-Z.a-z.0-9.+./)将任意字节序列数据编码成ASCII字符串,另有“=”符号用作后缀用途. base64索引表 base64编码与解码的基 ...

  7. [转]Unicode utf8等编码类型的原理

    FROM:http://www.cnblogs.com/daxiong2014/p/4768681.html 1.ASCII码          我们知道,在计算机内部,所有的信息最终都表示为一个二进 ...

  8. Nand ECC校验和纠错原理及2.6.27内核ECC代码分析

    ECC的全称是Error Checking and Correction,是一种用于Nand的差错检测和修正算法.如果操作时序和电路稳定性不存在问题的话,NAND Flash出错的时候一般不会造成整个 ...

  9. Unicode utf8等编码类型的原理

    1.ASCII码  我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串.每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte). ...

随机推荐

  1. linux下配置zookeeper注册中心及运行dubbo服务

    dubbo和zookeeper的关系 简单来说打个比方:dubbo就是动物园的动物,zookeeper是动物园.如果游客想看动物的话那么就去动物园看.比如你要看老虎,那么动物园有你才能看到.换句话说我 ...

  2. 恢复git reset --hard之前尚未push的commit提交

    1.在.git/logs/refs/heads/下有所有分支的操作记录及commit号,可以找到commit提交所在那个分支名称: 2.搜索commit提交的标题,就可以看到相应的记录,包括id号: ...

  3. 动态生成具有嵌套属性的linq选择(select)

    class SelectItem { public string Item { get; set; } } class SelectList { public int ID { get; set; } ...

  4. C++第三章复习与总结(思维导图分享)

    在完成了第三章的学习后,为了便于日后的复习整理,我制作了一张思维导图,有需要的可以自取. 函数的定义与使用 带默认值的函数 在C++中我们可以为函数添加默认的参数值,在调用时可不传入或部分传入参数,为 ...

  5. IOS高级开发之多线程(五)NSOperation 2

    接着看NSOperation.NSOperationQueue线程间的通信: 应用场景:比如我们经常把一些耗时的操作比如下载图片放在子线程,那么当这个完成之后,我们就需要回到主线程,这个时候就需要用到 ...

  6. InstallShield Limited Edition for Visual Studio 使用

    首先到https://info.flexerasoftware.com/IS-EVAL-InstallShield-Limited-Edition-Visual-Studio填写信息: 完成之后跳转到 ...

  7. loadrunner中组合场景的应用

    进行性能测试的回归测试时,可以设置组合场景,例如: 这时可以以组的形式运行: 运行效果如下: 当login运行完成后,运行goodslist脚本 . 运行时可以查看运行用户数.事务平均响应时间.吞吐量 ...

  8. 分页查询最好加排序(order by)

    昨天,与外部化系统对接时,发现有一个数据一直咩有集成到,双方各自排查了自己系统的代码,都觉得逻辑非常简单,无法就是一个分页查询而已. 问题就出在这个分页查询上. 为了说明当时问题发生的情景,我模拟了一 ...

  9. CDH 报错:UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-11: ordinal not in range

    1.在CDH集群启动Hue服务时,出现了错误,如下图: 2.上图显示得知,是调用python文件(/opt/cloudera/parcels/CDH-5.16.1-1.cdh5.16.1.p0.3/l ...

  10. 如何增加亚马逊listing多个类目节点

    流量是电商销售的必要因素,可以说,任何成功的电商平台都离不开流量.亚马逊listing优化做得好,不仅能提高产品的曝光率,还能提升转换率,而好的类目可以吸引大的流量.帮你快速爬升. 首先我们来了解一下 ...