我是靠谱客的博主 迅速猫咪,这篇文章主要介绍汉明码详解,现在分享给大家,希望可以做个参考。

汉明码

        • 1.首先确定汉明码的位数
            • 如何标注
        • 2、求出校验位的值
        • 3、纠错过程

1.首先确定汉明码的位数

公式: 2 k ≥ n + k + 1 2^kgeq n+k+1 2k≥n+k+1
字母含义: k k k表示检验位数, n n n表示传送的信息位数
简单解释一下这个公式怎么来的,因为我们要检验传送的信息中到底是哪一位出错了,所以首先会有传送的信息位数 n n n,然后我们的校验位数 k k k也插入到传送的信息当中去了,所以总位数变成 n + k n+k n+k,最后还要留出一个正确状态位,所以最后加 1 1 1,而校验码所能检错的总位数为 2 k 2^k 2k,当 2 k ≥ n + k + 1 2^kgeq n+k+1 2k≥n+k+1时,才能把所有位置标注出来。
下面有个表格

n12-45-1112-2627-5758-120
k234567

简单记一下这个表,一般k=3,4,5用的比较多。

如何标注

在唐朔飞版的教材中用的是 C i C_i Ci​表示校验位, b i b_i bi​表示信息位。
标注方法:校验位应该位于 2 k − 1 2^{k-1} 2k−1序号处,信息位按顺序依次填入
举个例子:欲传送的信息为1010
首先根据 2 k ≥ n + k + 1 2^kgeq n+k+1 2k≥n+k+1求出校验位 k = 3 k=3 k=3
我比较喜欢顺着来就设 b 1 b 2 b 3 b 4 = 1010 b_1b_2b_3b_4=1010 b1​b2​b3​b4​=1010, C 1 C 2 C 4 C_1C_2C_4 C1​C2​C4​分别表示三个校验码。

二进制序号 H 1 H_1 H1​ H 2 H_2 H2​ H 3 H_3 H3​ H 4 H_4 H4​ H 5 H_5 H5​ H 6 H_6 H6​ H 7 H_7 H7​
名称 C 1 C_1 C1​C_2 b 1 b_1 b1​ C 4 C_4 C4​ b 2 b_2 b2​ b 3 b_3 b3​ b 4 b_4 b4​
1010

根据此表,以 C 4 C_4 C4​为例, C 4 C_4 C4​应填到第 2 k − 1 = 2 3 − 1 = 4 2^{k-1}=2^{3-1}=4 2k−1=23−1=4位处,其他两个也是如此,然后将 b i b_i bi​依次填入(k表示 C i C_i Ci​是第几个校验位)。

2、求出校验位的值

H 3 = 3 = 011 H_3=3=011 H3​=3=011
H 5 = 5 = 101 H_5=5=101 H5​=5=101
H 6 = 6 = 110 H_6=6=110 H6​=6=110
H 7 = 7 = 111 H_7=7=111 H7​=7=111
这里的等于说的是 H 3 H_3 H3​为第三位,只不过使用二进制表示
其中 H 3 = b 1 H_3=b_1 H3​=b1​ , H 5 = b 2 H_5=b2 H5​=b2 , H 6 = b 3 H_6 =b3 H6​=b3 , H 7 = b 4 H_7=b_4 H7​=b4​
H 3 = H 5 = H 6 = H 7 = [ 0 1 1 1 ] [ 1 0 1 1 ] [ 1 1 0 1 ] begin{matrix} H_3=\H_5 = \ H_6= \ H_7= end{matrix} begin{bmatrix} 0\1 \ 1 \ 1 end{bmatrix}begin{bmatrix} 1\0 \ 1 \ 1 end{bmatrix}begin{bmatrix} 1\1 \ 0 \ 1 end{bmatrix} H3​=H5​=H6​=H7​=​⎣⎢⎢⎡​0111​⎦⎥⎥⎤​⎣⎢⎢⎡​1011​⎦⎥⎥⎤​⎣⎢⎢⎡​1101​⎦⎥⎥⎤​
最后一列表示 C 1 = H 3 ⨁ H 5 ⨁ H 7 = b 1 ⨁ b 2 ⨁ b 4 C_1=H_3bigoplus H_5bigoplus H_7=b_1bigoplus b_2bigoplus b_4 C1​=H3​⨁H5​⨁H7​=b1​⨁b2​⨁b4​(注意这里 C i C_i Ci​的位置正好和列的位置相反)
其中 ⨁ bigoplus ⨁表示异或。
取值规则为:
C 1 C_1 C1​取用二进制表示的位置最后一列为一所对应的信息位。
C 2 C_2 C2​取用二进制表示的位置倒数第二列为一所对应的信息位。
C 4 C_4 C4​取用二进制表示的位置倒数第三列为一所对应的信息位。
依次类推。
还有一种就是按照定义方式,先分小组。
有三个要求:
(1) g i g_i gi​小组独占第 2 i − 1 2^{i-1} 2i−1位(i=1,2,3,…)
(2) g i , g j g_i,g_j gi​,gj​共同占有第 2 i − 1 + 2 j − 1 2^{i-1}+2^{j-1} 2i−1+2j−1位(i,j=1,2,3,…)
(3) g i , g j , g l g_i,g_j,g_l gi​,gj​,gl​共同占有第 2 i − 1 + 2 j − 1 + 2 l − 1 2^{i-1}+2^{j-1}+2^{l-1} 2i−1+2j−1+2l−1位(i,j,l=1,2,3,…),是其他小组没有的

C i C_i Ci​ g g g检测的 g i g_i gi​小组包含的位
C 1 C_1 C1​ g 1 g_1 g1​1,3,5,7,9,11,…
C 2 C_2 C2​ g 2 g_2 g2​2,3,6,7,10,11,14,15,…
C 4 C_4 C4​ g 3 g_3 g3​4,5,6,7,12,13,14,15,…
C 8 C_8 C8​ g 4 g_4 g4​8,9,10,11,12,13,14,15,24,…

如何理解这几个要求呢,以 C 2 C_2 C2​为例说明一下。
C 2 , i = 2 C_2,i=2 C2​,i=2,根据(1)知,包含 2 2 − 1 = 2 2^{2-1}=2 22−1=2;根据(2)知,包含 2 2 − 1 + 2 j − 1 , ( j = 1 , 2 , 3 , . . ) 所 以 可 以 的 到 3 , 6 , 10 , . . . ( i ≠ j ) 2^{2-1}+2^{j-1},(j=1,2,3,..)所以可以的到3,6,10,...(ineq j) 22−1+2j−1,(j=1,2,3,..)所以可以的到3,6,10,...(i̸​=j);根据(3)知,包含 2 2 − 1 + 2 j − 1 + 2 l − 1 , ( j , l = 1 , 2 , 3 , . . ) 2^{2-1}+2^{j-1}+2^{l-1},(j,l=1,2,3,..) 22−1+2j−1+2l−1,(j,l=1,2,3,..),所以有7,11,14,…。我感觉这种方法不如上面那种方法好用。

继续求 C i C_i Ci​:
C 1 = H 3 ⨁ H 5 ⨁ H 7 = b 1 ⨁ b 2 ⨁ b 4 = 1 ⨁ 0 ⨁ 0 = 1 C_1=H_3bigoplus H_5bigoplus H_7=b_1bigoplus b_2bigoplus b_4= 1bigoplus 0bigoplus0=1 C1​=H3​⨁H5​⨁H7​=b1​⨁b2​⨁b4​=1⨁0⨁0=1
C 2 = H 3 ⨁ H 6 ⨁ H 7 = b 1 ⨁ b 3 ⨁ b 4 = 1 ⨁ 1 ⨁ 0 = 0 C_2=H_3bigoplus H_6bigoplus H_7=b_1bigoplus b_3bigoplus b_4= 1bigoplus 1bigoplus0=0 C2​=H3​⨁H6​⨁H7​=b1​⨁b3​⨁b4​=1⨁1⨁0=0
C 4 = H 5 ⨁ H 6 ⨁ H 7 = b 2 ⨁ b 3 ⨁ b 4 = 0 ⨁ 1 ⨁ 0 = 1 C_4=H_5bigoplus H_6bigoplus H_7=b_2bigoplus b_3bigoplus b_4= 0bigoplus 1bigoplus0=1 C4​=H5​⨁H6​⨁H7​=b2​⨁b3​⨁b4​=0⨁1⨁0=1
如果不懂异或直接数一的个数,奇数个就等于1,偶数个等于0。

3、纠错过程

P 1 = H 1 ⨁ H 3 ⨁ H 5 ⨁ H 7 = C 1 ⨁ b 1 ⨁ b 2 ⨁ b 4 = 1 ⨁ 1 ⨁ 0 ⨁ 0 = 0 P_1=H_1bigoplus H_3bigoplus H_5bigoplus H_7=C_1bigoplus b_1bigoplus b_2bigoplus b_4=1bigoplus 1bigoplus 0bigoplus 0=0 P1​=H1​⨁H3​⨁H5​⨁H7​=C1​⨁b1​⨁b2​⨁b4​=1⨁1⨁0⨁0=0
P 2 = H 2 ⨁ H 3 ⨁ H 6 ⨁ H 7 = C 2 ⨁ b 1 ⨁ b 3 ⨁ b 4 = 0 ⨁ 1 ⨁ 1 ⨁ 0 = 0 P_2=H_2bigoplus H_3bigoplus H_6bigoplus H_7=C_2bigoplus b_1bigoplus b_3bigoplus b_4=0bigoplus 1bigoplus 1bigoplus 0=0 P2​=H2​⨁H3​⨁H6​⨁H7​=C2​⨁b1​⨁b3​⨁b4​=0⨁1⨁1⨁0=0
P 4 = H 4 ⨁ H 5 ⨁ H 6 ⨁ H 7 = C 4 ⨁ b 2 ⨁ b 3 ⨁ b 4 = 1 ⨁ 0 ⨁ 1 ⨁ 0 = 0 P_4=H_4bigoplus H_5bigoplus H_6bigoplus H_7=C_4bigoplus b_2bigoplus b_3bigoplus b_4=1bigoplus 0bigoplus 1bigoplus 0=0 P4​=H4​⨁H5​⨁H6​⨁H7​=C4​⨁b2​⨁b3​⨁b4​=1⨁0⨁1⨁0=0
P i P_i Pi​的取值规则,通过上面的事例应该能看出来,是 P i P_i Pi​对应的 C i C_i Ci​,再加上 C i C_i Ci​对应的 b i b_i bi​。
P 4 P 2 P 1 = 000 P_4P_2P_1=000 P4​P2​P1​=000,表示没有错。
错误实例:传递信息还是1010,加上检错码为1011010,但是在传输过程中,出现一位错误,变成1011011,。
P 1 = H 1 ⨁ H 3 ⨁ H 5 ⨁ H 7 = 1 ⨁ 1 ⨁ 0 ⨁ 1 = 1 P_1=H_1bigoplus H_3bigoplus H_5bigoplus H_7=1bigoplus 1bigoplus 0bigoplus 1=1 P1​=H1​⨁H3​⨁H5​⨁H7​=1⨁1⨁0⨁1=1
P 2 = H 2 ⨁ H 3 ⨁ H 6 ⨁ H 7 = 0 ⨁ 1 ⨁ 1 ⨁ 1 = 1 P_2=H_2bigoplus H_3bigoplus H_6bigoplus H_7=0bigoplus 1bigoplus 1bigoplus 1=1 P2​=H2​⨁H3​⨁H6​⨁H7​=0⨁1⨁1⨁1=1
P 4 = H 4 ⨁ H 5 ⨁ H 6 ⨁ H 7 = 1 ⨁ 0 ⨁ 1 ⨁ 1 = 1 P_4=H_4bigoplus H_5bigoplus H_6bigoplus H_7=1bigoplus 0bigoplus 1bigoplus 1=1 P4​=H4​⨁H5​⨁H6​⨁H7​=1⨁0⨁1⨁1=1
则 P 4 P 2 P 1 = 111 = 7 P_4P_2P_1=111=7 P4​P2​P1​=111=7,表示第七位出错。

最后

以上就是迅速猫咪最近收集整理的关于汉明码详解的全部内容,更多相关汉明码详解内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(265)

评论列表共有 0 条评论

立即
投稿
返回
顶部