1.编码

确定校验码的位数

确定校验码中信息位D与校验位P的位置

确定校验位与信息位的关系



例题:

在这里插入图片描述
①确定校验码的位数:
设海明码N位
数据位 k=16 位(可从图中,输入:16位知)
校验位 r 位

海明码公式如下
N= k + r ≤ 2r-1

根据公式可以算出
校验位 r=5,海明码位 N=21


②确定校验码中 信息位D 与 校验位P 的位置 : (第 i 个校验位在校验码中的位置为 2i-1 )

根据①可知有5个校验位21个海明码16个数据位(信息位):
P1=21-1=1
P2=22-1=2
P3=23-1=4
P4=24-1=8
P5=25-1=16

确定校验位

H21H20H19H18H17H16H15H14H13H12H11H10H9H8H7H6H5H4H3H2H1
P5P4P3P2P1

确定好 校验位数据位 插空依次填好就好了

H21H20H19H18H17H16H15H14H13H12H11H10H9H8H7H6H5H4H3H2H1
D16D15D14D13D12P5D11D10D9D8D7D6D5P4D4D3D2P3D1P2P1

③确定校验位与信息位的关系 ( 信息位在校验码中位号 = 校验它的校验位位号之和 )
例如:D1所在海明校验码位号为H3,所以就要在P1(位号为H1),P2(位号为H2)对应处画 √,因此D1由P1与P2共同校验

海明校验码H21H20H19H18H17H16H15H14H13H12H11H10H9H8H7H6H5H4H3H2H1
对应位D16D15D14D13D12P5D11D10D9D8D7D6D5P4D4D3D2P3D1P2P1
P5
P4
P3
P2
P1

全部弄完后就可以写出下面这个表达式
P5=D16⊕D15⊕D14⊕D13⊕D12
P4=D11⊕D10⊕D9⊕D8⊕D7⊕D6⊕D5
P3=D16⊕D15⊕D11⊕D10⊕D9⊕D8⊕D4⊕D3⊕D2
P2=D14⊕D13⊕D11⊕D10⊕D7⊕D6⊕D4⊕D3⊕D1
P1=D16⊕D14⊕D12⊕D11⊕D9⊕D7⊕D5⊕D4⊕D2⊕D1

将其用画出来就实现了海明编码

在这里插入图片描述

在这里插入图片描述

2.解码

G5=P5⊕D16⊕D15⊕D14⊕D13⊕D12
G4=P4⊕D11⊕D10⊕D9⊕D8⊕D7⊕D6⊕D5
G3=P3⊕D16⊕D15⊕D11⊕D10⊕D9⊕D8⊕D4⊕D3⊕D2
G2=P2⊕D14⊕D13⊕D11⊕D10⊕D7⊕D6⊕D4⊕D3⊕D1
G1=P1⊕D16⊕D14⊕D12⊕D11⊕D9⊕D7⊕D5⊕D4⊕D2⊕D1

检查情况
G6=0且G5G4G3G2G1=00000,表示无错;
G6=0且G5G4G3G2G1≠00000,表示两位错;
G6=1且G5G4G3G2G1≠00000,表示一位错;
G6=1且G5G4G3G2G1=00000,表示校验位错;

在这里插入图片描述
在这里插入图片描述
小知识:
在这里插入图片描述

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐