首页 > 其他分享 >海明码

海明码

时间:2023-09-06 20:33:23浏览次数:67  
标签:校验位 明码 D2 P1 D4 码距

海明码

海明码是最为常见的纠错码,实现原理就是加入校验位形成海明码。然后根据检验位检验错误、纠正错误。
海明码分为五个步骤

  1. 确定校验位的位数
    如果有 n 位的有效信息位数,k 位的校验位的位数,则信息位 n 和校验位 k 需要满足
    \(n + k \leq 2^k -1\) (这里只能检测一位错误,减去 1 是没有发生错误的情况,而剩下 \(2^k - 1\) 则是对应 n + k 位中哪一位出错的情况)
    例: 有效信息位为 4 位 那么需要的校验位需要满足 \(4 + k \leq 2^k - 1\) 则 k 最小位 3 位
  2. 确定校验位位置
    规定中校验位 Pi 在海明位号为 2^(i-1) 的位置上,上面提到校验位有 3 位:P1 位置为 1,P2位置为 2,P3位置为 4;
    对应为
    D4 D3 D2 P3 D1 P2 P1 => 111 110 101 100 011 010 001
  3. 分组求校验值
    P1(##1): D1 D2 D4
    P2(#1#): D1 D3 D4
    P3(1##): D2 D3 D4
    利用偶检验(默认是偶检验,也就是直接数据位异或操作
    P1 为 P1 分组中奇偶检验的偶校验的值,P1 为校验位,D1 D2 D4 为数据位 => P1 = D1 ⨁ D2 ⨁ D4
    P2,P3同理
  4. 校验
    校验值为分组中所有数据异或
    S1 = P1 ⨁ D1 ⨁ D2 ⨁ D4
    S2 = P2 ⨁ D1 ⨁ D3 ⨁ D4
    S3 = P3 ⨁ D2 ⨁ D3 ⨁ D4
    拼接 S3S2S1,如果 S3S2S1 = 000 则说明没有错误,如果 = 001 则说明第一位出现了错误,也就是 P1 出现错误

码距

两个相同长度的字符串中,把其中一个字符串替换成另一个字符串需要的操作次数
如: 10000 和 10001 的码距为 1,只需要把末尾的 0 换成 1 即可
而: 00000 和 11111 的码距为 5,需要把五个 0 换成 1
编码的海明距是指该种编码中最小的存在的码距

对此引出如下结论
1)海明码“纠错” d 位,需要的编码码距最小为 2d + 1
2)海明码“检错” d 位,需要的编码码距最小为 d + 1

对于 1)
因为只有当码距大于 2d + 1 时,才存在一个码距最接近的值与之对应
例:编码为 A(100000) B(111111) 如果 A 发生了两位错误变成了 100011 则此时这段与 A 的码距为 2,与 B 的码距为 3,所以能推断是 A 发生了错误,并对其进行纠正,相反如果编码为 A(10000) B(11111) ,此时 A 发生了两位错误变成了 10011,此时这段字符串与 A 的码距为 2,与 B 的码距也为 2,无法判断是 A 发生了错误还是 B 发生了错误,所以说需要码距大于 2d + 1
对于 2)
在编码码距为 d + 1 中只改变了 d 位的数据是不可能变为另一个合法值的,所以最小为 d + 1 位

更详细的可以看一下 NR-LDPC编码(一):纠错编码基本原理 - 知乎 (zhihu.com)

标签:校验位,明码,D2,P1,D4,码距
From: https://www.cnblogs.com/pupilxiao/p/17683334.html

相关文章

  • 加速比计算+一致性新的O状态+block大小对cache的影响+BBM和写时复制+伪汇编和嵌入+汉
    加速比计算100个处理器对于程序的并发而言,是100倍的加速。对于程序的顺序执行而言,是1倍的速度。对于该题目,首先明确90倍的加速意味着什么:原始程序量为1,原始执行时间为1,现在加速了90倍,而程序本身不变,则:原始的程序量为1,现在的执行时间是1/90。现在假设x为并行执行的比例,则程序......
  • 系统码的编译码与汉明码
    本专栏包含信息论与编码的核心知识,按知识点组织,可作为教学或学习的参考。markdown版本已归档至【Github仓库:<https://github.com/timerring/information-theory>】或者公众号【AIShareLab】回复信息论获取。系统码的编译码线性分组码的编码器如图硬件实现。生成矩阵为查表。(软......
  • 理查德·汉明和他的汉明码
    作者|Alex技术审校|赵军理查德·汉明声影传奇#005#“计算的目的是洞察,而非数字(Thepurposeofcomputingisinsight,notnumbers.)”——RichardW.Hamming1986年3月7日,在贝尔通信研究系列座谈会的一个研讨会上,加利福尼亚州蒙特雷海军研究生院教授、贝尔实验室退休科学家理查......
  • 关于海明码
    前置知识:海明码:海明码一般只能纠1位错。海明码默认进行偶校验(除非特殊说明使用奇校验)。海明码是一串只由0和1组成的序列奇偶校验:奇校验:一串由0和1组成的序列中1的个数如果为偶数则在前面加个1,使1的个数变成奇数,否则加0。偶校验:一串由0和1组成的序列中1的个数如果为......
  • 海明码的简单运算
    n位数,则其海明码的位数x满足:2的x次方>=n+x+1;得到位数x;将x个数全部插入所给出的数中。列如:位置分别为2的0次方,2的1次方,到2的x次方;后将得出的校验码列出。标入下标,12356置x+n-1号的末尾。此时可以开始验证。随机的下标位数验证:下标数的下标列位置=海明码加入的数的下标之和,则......
  • m基于信道差错概率模型仿真对比RS,汉明码以及卷积编译码性能,仿真输出信道差错概率与
    1.算法仿真效果matlab2022a仿真结果如下:        在数字通信系统中,数字通信系统及其相关部分必须满足误码率的最低规范要求。误码率是一个非常重要的指标,它衡量着系统性能的好坏,因此在数字通信领域中经常会遇到误码率的测试问题。误码率[是二进制比特流经过系统传......
  • 2018年第九届蓝桥杯—B组C/C++程序设计省赛解题-2明码
    .明码汉字的字形存在于字库中,即便在今天,16点阵的字库也仍然使用广泛。16点阵的字库把每个汉字看成是16x16个像素信息。并把这些信息记录在字节中。一个字节可以存储8位信息,用32个字节就可以存一个汉字的字形了。把每个字节转为2进制表示,1表示墨迹,0表示底色。每行2个字节,一共16......
  • 主存储器 -- 存储器的校验(汉明码)
    存储的信息可能会发生翻转等错误。编码的检测能力和纠错能力和任意两组合法代码之间二进制位的最小差异数(编码最小距离)有关汉明码采用奇偶校验采用分组校验汉......
  • 关于海明码的问题(语言-c++)
    提问:   我头都大了,想了半天也没想出这个括号里面是怎么算出来的,有明白的吗,请赐教下。解答: 以下是一个C++编程实现海明码的示例:#include<iostream>#include<strin......
  • 海明码校验法
    首先对于我们所熟知的奇偶校验,对于偶校验来说:   我们往最前面添加一个校验位,但是一个校验位只能表示两种状态,即对或错现在我们希望能够知道更多的信息,即要增加校......