海明码实验

171 阅读2分钟

本文已参与⌈新人创作礼⌋活动,一起开启掘金创作之路。

忽然翻到以前学计组时候的实验,就拿出来做个参考。当时学习的海明码。

【实验目的】

设计出22位的海明编码(16位原始数据+5位海明检验位+1位总的奇偶校验位)。海明码可检两位错同时纠一位错。

【实验原理】

海明码是在k位数据位中加入r个校验位,形成k+r位新码字,K代表其中有效信息位数,r表示添加的校验码位。并且将数据的每一个二进制位分配到几个不同的奇偶校验组中,其中一个发生变化时,会引起有关的几个组出现奇偶校验错。通过这些出错组的不同组合,就能够指明是哪一位主线错误,从而进行纠错。

信息码位数12~45~1112~2627~5758~120121~247
校验码位数2345678

校验码必须是在2的n次方位置,如第1、2、4、8、16、32,……位。信息码的分布位置,也就是非2的n次方位置,如第3、5、6、7、9、10、11、12、13,……位。

eg.现有8位信息码d1 ~ d8 ,根据上表知道要插入4位校验码 p1 ~ p4,校验码放2的次方的位置,得到顺序:

p1 p2 d1 p3 d2 d3 d4 p4 d5 d6 d7 d8

【实验内容】

海明编码

P1=d1⊕d2⊕d4⊕d5⊕d7⊕d9⊕d11⊕d12⊕d14⊕d16

P2=d1⊕d3⊕d4⊕d6⊕d7⊕d10⊕d11⊕d13⊕d14

P3=d2⊕d3⊕d4⊕d8⊕d9⊕d10⊕d11⊕d15⊕d16

P4=d5⊕d6⊕d7⊕d8⊕d9⊕d10⊕d11

P5=d12⊕d13vd14⊕d15⊕d16

P6=d1⊕d2⊕d3⊕d4⊕d5⊕d6⊕d7⊕d8⊕d9⊕d10⊕d11⊕d12⊕d13⊕d14⊕d15⊕d16⊕p1⊕p2⊕p3⊕p4⊕p5

海明解码

G1=d1⊕d2⊕d4⊕d5⊕d7⊕d9⊕d11⊕d12⊕d14⊕d16⊕p1

G2= d1⊕d3⊕d4⊕d6⊕d7⊕d10⊕d11⊕d13⊕d14⊕p2

G3=d2⊕d3⊕d4⊕d8⊕d9⊕d10⊕d11⊕d15⊕d16⊕p3

G4= d5⊕d6⊕d7⊕d8⊕d9⊕d10⊕d11⊕p4

G5= d12⊕d13vd14⊕d15⊕d16⊕p5

G6=d1⊕d2⊕d3⊕d4⊕d5⊕d6⊕d7⊕d8⊕d9⊕d10⊕d11⊕d12⊕d13⊕d14⊕d15⊕d16⊕p1⊕p2⊕p3⊕p4⊕p5⊕p6

G6为1,表示奇数位出错,此时g5g4g3g2g1对应的二进制码就是出错位,通过译码器让该位与1异或,从而纠错,若g6为0,则表示偶数位出错,若g5g4g3g2g1也为0,则无错误