从本质看海明码——海明码的由来
从本质看海明码——海明码的由来
陈冠斌
1.奇偶校验以及奇偶校验错误率
奇偶校验:每一位(包括校验位)都进行异或运算,结果为0
如x1~x7,y0 (数据位为x1~x7,校验位为y0),则
x1 xor x2 xor ... xor x7 xor y0 = 0。
错误概率:
设共有n位,每一位的错误概率均为x
则错误k位的概率:C(n,k) * xk * (1-x)n-k
总概率:V = C(n,1) * x1 * (1-x)n-1 + C(n,3) * x3 * (1-x)n-3+ ...
而:
S = C(n,0) * x0 * (1-x)n + C(n,1) * x1 * (1-x)n-1 + ... + C(n,n) * xn * (1-x)0 = [x+(1-x)]n = 1
T = C(n,0) * x0 * (1-x)n - C(n,1) * x1 * (1-x)n-1 + C(n,2) * x2 * (1-x)n-2 - ... =[(1-x)-x]n = (1-2x)n
V = (S - T) / 2 = [ 1 - (1-2x)n ] /2 = x - 2*C(n,1)*x2 + 4*C(n,2)*x3 - ...
由于x较小,x后面的项大致可以忽略,值约为x。
这与C(n,1) * x1 * (1-x)n-1 把1-x估计为1时的值时一致的。
如x=0.00001,x2过于小了,所以一般传输错误的话,只考虑一位错误。
2. 设计可以检验错误位数的方法(海明码的由来)
若想知道错误的位置,则通过多个式子共同判断,假设数据位为x1~xn-1,全体域为F,错误位置为xc,第i(0<=i<m-1)个式子的数据位集合为Si,数据位进行异或运算,结果为yi,有:
xor {S0} = y0
xor {S1} = y1
……
xor {Sm-1} = ym-1
这些式子和方程式不一样,它比方程式多了一个约束条件,这个约束条件是x1~xn有且仅有一个值为1,其它值为0。
对于值为1的第k个式子,等价为xc∈Sk,存在错误位;
对于值为0的第k个式子,等价为xc∈`Sk。
m个式子中,每个式子可以把全体域分为两部分,Sk和`Sk(即F-Sk),根据不同的yk值,选择其中一个集合。
错误位属于集合S0(`S0) ∩ S1(`S1) ∩ …∩ Sm-1(`Sm-1)。
如:x1,x2,x3为数据位,y0,y1为检验位。
x1 xor x3 = y0 = 0 (i)
x2 xor x3 = y1 = 1 (ii)
即S0={x1,x3},y0=0 ; S1={x2,x3},y1=1。
错误位属于集合{x2}∩{x2,x3}={x2},即错误位为x2。
设n位二进制数ym-1ym-2…y0为Y。对于任意一个数据位,它要么在Sk中,标记yk=1;要么在`Sk中,标记yk=0。对于数据位x1~xm-1的任意一个数,若它表示m位二进制数zm-1zm-2…z0,则第k个式子对应的值yk为zk。其中数据位x1~xn-1对应的ym-1ym-2…y0的值都不相等,共有2m-1种可能性,其中若ym-1ym-2…y0的值都为0,则代表无错误位。
以下是n=3时的情况:
(4) x4 xor x5 xor x6 xor x7 = y2
(2) x2 xor x3 xor x6 xor x7 = y1
(1) x1 xor x3 xor x5 xor x7 = y0
y2 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
y1 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
1 |
y0 |
0 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
Y |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
Error |
None |
x1 |
x2 |
x3 |
x4 |
x5 |
x6 |
x7 |
对于上述方式,ym-1,ym-2,…,y0的位置还没确定下来。可以把ym-1,ym-2,…,y0放在第2m-1,2m-2,…,20位,所有yk所在位置的值加起来,就是Y的值,即XY数据位发生错误(如果XY=0,则没有数据位发生错误)。其中第2m-1,2m-2,…,20位有且只有一次参与了运算,把它们当作校验位,可认为x2^(m-1),x2^(m-2),…,x0的值为0。把x1,x2,x4…用x1+2^n,x2+2^n,x4+2^n…替代。如上文:
数据位为x3,x5,x6,x7,x9,x10,x11,x12。
(4) x12 xor x5 xor x6 xor x7 = y2
(2) x10 xor x11 xor x6 xor x7 = y1
(1) x9 xor x3 xor x5 xor x7 = y0
此时的这个方式称为海明码校验。
针对计算,比较有规律,可以通过硬件电路提高速度。
数据位:
从1开始,检验1位,跳转1位;[1,3,5,7,9,11……]
从2开始,检验2位,跳转2位;[2,3,6,7,10,11,……]
从4开始,检验4位,跳转4位;[4,5,6,7,12,13,14,15,……]
……
检验位:
每次乘以2,即二进制数每次左移一位。
方式 |
检验码 |
检验位数 |
总位数 |
参与运算总次数 |
海明码校验 |
n |
2n -1 |
2n -1+n |
n*2n-1 |
转载于:https://www.cnblogs.com/cmyg/p/8877515.html
从本质看海明码——海明码的由来相关推荐
- 校验码(海明校验,CRC冗余校验,奇偶校验)
循环冗余校验码 CRC码利用生成多项式为k个数据位产生r个校验位进行编码,其编码长度为n=k+r所以又称 (n,k)码. CRC码广泛应用于数据通信领域和磁介质存储系统中. CRC理论非常复杂,一般书 ...
- 校验码——海明码及码距,码距
相关文章: 校验码--码距 https://blog.csdn.net/weixin_44330072/article/details/106860286 校验码--奇偶校验码 https:/ ...
- 一文搞定校验码(奇偶校验,海明,CRC 码)
文章目录 效验码 计算码距方法 奇偶校验码 校验原理 奇偶校验 异或法制 总结 海明校验码 海明校验码的分布规律 海明码纠错以及定位 实现原理 海明码完善 总结 循环冗余校验码(CRC) 模2除算法 ...
- java 偶校验_一文搞定校验码(奇偶校验,海明,CRC 码)
效验码 校验码:指能够发现或能够自动纠正错误的数据编码,也称检错纠错编码. 实现原理:通过加一冗余码,来检验或纠错编码 码字 : 由若干位代码组成的一个字 码距:将两个码字逐位进行对比,具有不同的位的 ...
- java 奇偶校验_校验码(海明校验,CRC冗余校验,奇偶校验)
循环冗余校验码 CRC码利用生成多项式为k个数据位产生r个校验位进行编码,其编码长度为n=k+r所以又称 (n,k)码. CRC码广泛应用于数据通信领域和磁介质存储系统中. CRC理论非常复杂,一般书 ...
- [动态代理三部曲:下] - 从动态代理,看Retrofit的源码实现
前言 关于动态代理的系列文章,到此便进入了最后的"一出好戏".前俩篇内容分别展开了:从源码上,了解JDK实现动态代理的原理:以及从动态代理切入,学会看class文件结构的含义. 如 ...
- 看不见的Unicode码让敏感词轻松逃过审核,谷歌IBM都中招
丰色 发自 凹非寺 量子位 报道 | 公众号 QbitAI Unicode码作为全世界文字的统一编码,使用范围广,用它去对NLP模型做对抗攻击,可谓中招一大片. 就比如下面这个谷歌翻译: 文字部分都没 ...
- 从一道面试题,到“我可能看了假源码[2]
上一篇从一道面试题,到"我可能看了假源码"中,由浅入深介绍了关于一篇经典面试题的解法. 最后在皆大欢喜的结尾中,突生变化,悬念又起.这一篇,就是为了解开这个悬念. 如果你还没有看过 ...
- 字节跳动面试官问我看过哪些源码,然后就没有然后了
最近,我的一位朋友在找工作,已经拿到了美团.快手等公司的Offer,准备选择其中一家入职了. 后来他又接到了字节跳动的电话,通知他去参加三面.从二面到三面之间隔了挺久的,他以为都没戏了,结果就收到了通 ...
最新文章
- 企业/团队如何实行绩效管理,促进团队智慧高效办事?
- 开发管理 (2) -规划项目
- 活久见!一美国大爷发明了永不掉链子的自行车,垂直踩踏即可驱动
- B-TREE、B+TREE、数据库索引
- 口译分类词汇:上海景点名集锦
- 微信语音遥控Windows Azure云虚拟机
- java中成绩转换_成绩转换
- 国二office计算机基础知识,国二office计算机基础知识选择题
- 吴恩达深度学习作业之deepleraning_L1W2_h2
- uniapp手机定位或者uniapp结合原生安卓定位
- 用Python爬取某网中小说内容代码分享
- 全国计算机专业评估结果出炉;编程错误导致俄罗斯卫星发射失败
- BUCK电路输入电容计算
- 关于adsl宽带猫的一个奇怪问题
- 真正的通过手机控制PPT播放
- esp分区创建 linux_EFI引导Ubuntu。分区如何手动创建
- 服务器内存 知乎_内存的差距——服务器内存和普通PC内存的区别
- 5个超好用的在线抠图网站,告别繁琐的PS,快马住!
- 在html中显示本地图片
- 【BZOJ2246】[SDOI2011]迷宫探险(搜索,动态规划)