• 【计算机组成原理】海明校验码


    将信息位分组进行偶校验,多个校验位,多个校验位标注出错位置。

    1、确定海明码的位数

    若有n个信息位,和k个校验位,为了保证可以标注错误。

    2k种状态可以表示n+k位的状态,以及一种正确的状态。

    2k>=n+k+1

    n和k的对应关系。

    n12~45~1112~2627~5758~120
    k234567

    2、确定校验位的分布

    信息位:1010

    设信息位D1D2D3D4,共四位,校验位P1P2P3。共三位。加起来共七位。

    校验位Pi应放在海明号为2i-1的位置上。

    即上面的海明码应为:

    D4D3D2P3D1P2P1

    H7H6H5H4H3H2H1
    D4D3D2P3D1P2P1
    1011

    3、求校验位的值

    H3: 3-> 0 1 1

    H5: 5-> 1 0 1

    H6: 6-> 1 1 0

    H7: 7-> 1 1 1

    然后Pi的值为所有海明码位二进制值的第i位的值为1的信息位的异或值。

    三个分组分别进行偶校验。

    P1等于:H3异或H5异或H7=0

    P2等于:H3异或H6异或H7=1

    P3等于:H5异或H6异或H7=0

    则海明码为:

    H7H6H5H4H3H2H1
    D4D3D2P3D1P2P1
    1010010

    4、纠错

    对各个分组进行检验,若分组内的校验位和信息位的异或值为0,无错。

    S1 = P1异或D1异或H2异或D4

    S2 = P2异或D1异或D3异或D4

    S3 = P3异或D2异或D3异或D4

    若接收到:1010010

    S1 = P1异或D1异或H2异或D4 = 0011异或值为0

    S2 = P2异或D1异或D3异或D4 = 1001异或值为0

    S3 = P3异或D2异或D3异或D4 = 0101异或值为0

    若出现错误得:S3S2S1=110,则第110位出错。D3出错。

    补充

    纠错能力:1位。检错能力:2位 。

    但是若P1和P2发生错误,S3S2S1为011,表示第三位发生错误,这样是不对的。

    因此需要加入全校验位。加上全校验位的海明码进行偶校验。

    加入全校验位前提是加上P,整体有偶数个1。即P为整体海明码的异或值。

    H8H7H6H5H4H3H2H1
    PD4D3D2P3D1P2P1
    11010010

    若S3S2S1= 000 且全体偶校验成功 无错误

    若S3S2S1≠ 000 且全体偶校验失败 有一位错误,纠正即可。

    若S3S2S1≠ 000 且全体偶校验成功 两位错误需要重新传

  • 相关阅读:
    【leetcode】【2022/8/15】641. 设计循环双端队列
    调度器/调度程序
    备战2024秋招面试题-最左匹配原则、索引失效情况、算法(最长回文子串)
    牛客月赛55 至至子的长链剖分
    日入过万的粗暴玩法
    【Django】RESTful API接口设计风格
    学校教务管理系统的设计与实现--Word文档可在最后链接处下载,无code
    Docker(一) ----初始Docker
    Mybatis-plus的介绍与使用
    Android 线程和线程池核心技术-走进线程世界 (一)
  • 原文地址:https://blog.csdn.net/weixin_45755831/article/details/127635676