【学习笔记之计算机组成原理篇】海明码校验码的编码与解码
1.编码确定校验码的位数确定校验码中信息位D与校验位P的位置确定校验位与信息位的关系例题:①确定校验码的位数:设海明码N位数据位 k=16 位(可从图中,输入:16位知)校验位 r 位海明码公式如下N= k + r ≤ 2r-1根据公式可以算出校验位 r=5,海明码位 N=21②确定校验码中 信息位D 与 校验位P 的位置: (第 i 个校验位在校验码中的位置为 2i-1 )根据①可知有5个校验位
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
确定校验位
H21 | H20 | H19 | H18 | H17 | H16 | H15 | H14 | H13 | H12 | H11 | H10 | H9 | H8 | H7 | H6 | H5 | H4 | H3 | H2 | H1 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
P5 | P4 | P3 | P2 | P1 |
确定好 校验位,数据位 插空依次填好就好了
H21 | H20 | H19 | H18 | H17 | H16 | H15 | H14 | H13 | H12 | H11 | H10 | H9 | H8 | H7 | H6 | H5 | H4 | H3 | H2 | H1 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
D16 | D15 | D14 | D13 | D12 | P5 | D11 | D10 | D9 | D8 | D7 | D6 | D5 | P4 | D4 | D3 | D2 | P3 | D1 | P2 | P1 |
③确定校验位与信息位的关系 ( 信息位在校验码中位号 = 校验它的校验位位号之和 )
例如:D1所在海明校验码位号为H3,所以就要在P1(位号为H1),P2(位号为H2)对应处画 √,因此D1由P1与P2共同校验
海明校验码 | H21 | H20 | H19 | H18 | H17 | H16 | H15 | H14 | H13 | H12 | H11 | H10 | H9 | H8 | H7 | H6 | H5 | H4 | H3 | H2 | H1 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
对应位 | D16 | D15 | D14 | D13 | D12 | P5 | D11 | D10 | D9 | D8 | D7 | D6 | D5 | P4 | D4 | D3 | D2 | P3 | D1 | P2 | P1 |
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,表示校验位错;
小知识:
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)