网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
- 或者换一个角度来说,需要把这些信息被分为三个分组,每个分组分别进行偶校验
- 因此接下来我们应该确定一种规则,就是三个分组当中应该分别包含哪几个信息位
- 当我们确定了如何分组之后,那么与这个分组相对应的偶校验位的值就很好确定了
- 来看一下怎么做,需要把这些信息为他所处的位置的序号用二进制的形式表示
- 比如,对于D1这个信息来说,它所处的位置是3, 那么3的二进制表示应该是011, 每个二进制位的权重是1、2、4(从低到高),011的值就是2+1=3
- 而下一个信息位是D2,它所处的位置是5,那么我们用二进制表示应该是101,此时,4+1=5
- 而D3所处的位置是6,那么6用二进制表示应该是110,此时,4+2=6
- 最后是D4,它处于7这个位置,用二进制表示就是111, 此时,4+2+1=7
- P1、P2、P3 分别把它放到1、2、4这些位置,我们可以把它理解为某一种权重,那么这些权重和刚才提到的这三位二进制的权重是一一对应的
- H3: 3 -> 011
- H5: 5 -> 101
- H6: 6 -> 110
- H7: 7 -> 111
- 所以P1这个偶校验位,它所处的分组当中应该有哪些信息位呢?我们只需要把末位为1的这几个信息未把它归为P1所属的分组就可以了
- 也就是如上:H3、H5、H7这几个位置所对应的信息位归为同一个分组,进行偶校验:
P
1
=
H
3
⊕
H
5
⊕
H
7
=
D
1
⊕
D
2
⊕
D
4
=
0
P_1 = H_3 \oplus H_5 \oplus H_7 = D_1 \oplus D_2 \oplus D_4 = 0
P1=H3⊕H5⊕H7=D1⊕D2⊕D4=0
- 只需要把这个组里面的所有信息位进行异或运算,就可以确定我们的P1应该取0还是取1, 这就是P1的一个计算方式
- 接下来第2个分组,我们应该让它包含H3、H6和H7所对应的这几个信息位, 获得偶校验位:
P
2
=
H
3
⊕
H
6
⊕
H
7
=
D
1
⊕
D
3
⊕
D
4
=
1
P_2 = H_3 \oplus H_6 \oplus H_7 = D_1 \oplus D_3 \oplus D_4 = 1
P2=H3⊕H6⊕H7=D1⊕D3⊕D4=1
- 最后一个分组的确定方法也是一样的:H5、H6、H7, 也就是D2、D3、D4,它们从属于同一个分组,把它们异或可以得到偶校验位的值:
P
3
=
H
5
⊕
H
6
⊕
H
7
=
D
2
⊕
D
3
⊕
D
4
=
0
P_3 = H_5 \oplus H_6 \oplus H_7 = D_2 \oplus D_3 \oplus D_4 = 0
P3=H5⊕H6⊕H7=D2⊕D3⊕D4=0, 这时候我们已经全部确定了海明校验码的值
H7 | H6 | H5 | H4 | H3 | H2 | H1 |
---|---|---|---|---|---|---|
D4 | D3 | D2 | P3 | D1 | P2 | P1 |
1 | 0 | 1 | 0 | 0 | 1 | 0 |
3 ) 检错和纠错
- 怎么检测出错误呢?其实就是把各个分组内的这些二进制比特币进行一个异或运算, 也就是对这个分组进行偶校验
- 如果说这个分组内没有出错的话,那么进行异或运算得到的结果应该是0
- 如果现在接收方接收到的数据没有发生任何一个比特的错误,即:1010010,我们根据刚才确定的这三个分组对每个分组内的这些比特位依次进行异或运算
- 因为每个分组都有偶数个1,所以异或之后肯定都是000,这是没有出错的情况
- S
1
=
P
1
⊕
D
1
⊕
D
2
⊕
D
4
=
0
⊕
0
⊕
1
⊕
1
=
0
S_1 = P_1 \oplus D_1 \oplus D_2 \oplus D_4 = 0 \oplus 0 \oplus 1 \oplus 1 = 0
S1=P1⊕D1⊕D2⊕D4=0⊕0⊕1⊕1=0
- S
2
=
P
2
⊕
D
1
⊕
D
3
⊕
D
4
=
1
⊕
0
⊕
0
⊕
1
=
0
S_2 = P_2 \oplus D_1 \oplus D_3 \oplus D_4 = 1 \oplus 0 \oplus 0 \oplus 1 = 0
S2=P2⊕D1⊕D3⊕D4=1⊕0⊕0⊕1=0
- S
3
=
P
3
⊕
D
2
⊕
D
3
⊕
D
4
=
0
⊕
1
⊕
0
⊕
1
=
0
S_3 = P_3 \oplus D_2 \oplus D_3 \oplus D_4 = 0 \oplus 1 \oplus 0 \oplus 1 = 0
S3=P3⊕D2⊕D3⊕D4=0⊕1⊕0⊕1=0
- 如果说接收方接收到的数据为:1010000,H2这一位发生了错误,也就是P2这个校验位从1变成了0
- 第1个分组进行异或得到了0,第2个分组中由于P2发生了跳变,所以导致第2个分组中,现在只有奇数为1,那么异或出来的结果就是1
- 而第3个分组没有任何一个数据发生跳变,因此异或的结果应该是0
- S
1
=
P
1
⊕
D
1
⊕
D
2
⊕
D
4
=
0
⊕
0
⊕
1
⊕
1
=
0
S_1 = P_1 \oplus D_1 \oplus D_2 \oplus D_4 = 0 \oplus 0 \oplus 1 \oplus 1 = 0
S1=P1⊕D1⊕D2⊕D4=0⊕0⊕1⊕1=0
- S
2
=
P
2
⊕
D
1
⊕
D
3
⊕
D
4
=
0
⊕
0
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
2
⊕
D
4
=
0
⊕
0
⊕
1
⊕
1
=
0
S_1 = P_1 \oplus D_1 \oplus D_2 \oplus D_4 = 0 \oplus 0 \oplus 1 \oplus 1 = 0
S1=P1⊕D1⊕D2⊕D4=0⊕0⊕1⊕1=0
- S
2
=
P
2
⊕
D
1
⊕
D
3
⊕
D
4
=
0
⊕
0
[外链图片转存中…(img-SLQT7Moj-1715734910904)]
[外链图片转存中…(img-PTlYJcMI-1715734910905)]
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!