汉明码-Hamming Code学习笔记


汉明码 Hamming code

汉明码是一种线性调试码,可以纠正一位错误;而扩展汉明码可以检测出两位错误。

汉明码编码以及纠错过程

编码

对于给出的一串数码,根据纠错码原理,我们知道对于n位的原串,至少需要使得纠错码位数k满足:\(n+k \le 2^k - 1\)
以长度为11的数码为例,则需要4位纠错码(不选择12位的原因将在扩展汉明码中解释)
汉明码的纠错码位于第\(2^{k},k=1,2,\dots\)
如将11位数码与四位纠错码的最终编码为\(N_1,N_2,N_3,N_4,N_5,N_6,N_7,N_8,N_9,N_{10},N_{11},N_{12},N_{13},N_{14},N_{15}\)
并且在偶校验方法时规则为:设该校验位为\(2^i\),则\(该校验位= \oplus^{n}_{k=1} N_{ 二进制码展开含2^i的数}\)
(注:偶校验即保证该组数据中1的个数为偶数)

\[N_1 = N_3 \oplus N_5 \oplus N_7 \oplus N_9 \oplus N_{11} \oplus N_{13} \oplus N_{15} \\ N_2 = N_3 \oplus N_6 \oplus N_7 \oplus N_{10} \oplus N_{11} \oplus N_{14} \oplus N_{15} \\ N_4 = N_{5} \oplus N_{6} \oplus N_{7} \oplus N_{12} \oplus N_{13} \oplus N_{14} \oplus N_{15}\\ N_8 = N_{9} \oplus N_{10} \oplus N_{11} \oplus N_{12} \oplus N_{13} \oplus N_{14} \oplus N_{15} \\ \]

直观的表示在4*4的方格中则是

最后将0位空出,其余位依次排列,最后就得到了一组共11+4=15位的汉明码。

纠错

当接收到一份信息时,我们只需要4个计算校验和,他们的形式与刚刚计算校验码类似,仅仅是将校验位加入运算而已。

\[G_1 = N_1 \oplus N_3 \oplus N_5 \oplus N_7 \oplus N_9 \oplus N_{11} \oplus N_{13} \oplus N_{15} \\ G_2 = N_2 \oplus N_3 \oplus N_6 \oplus N_7 \oplus N_{10} \oplus N_{11} \oplus N_{14} \oplus N_{15} \\ G_3 = N_{4} \oplus N_{5} \oplus N_{6} \oplus N_{7} \oplus N_{12} \oplus N_{13} \oplus N_{14} \oplus N_{15}\\ G_4 = N_{8} \oplus N_{9} \oplus N_{10} \oplus N_{11} \oplus N_{12} \oplus N_{13} \oplus N_{14} \oplus N_{15} \]

得到一个新的数码{G_4,G_3,G_2,G_1},假定只会出现一位错误,那么校验和为0000则可以认为没有出错。
当出现错误时,任何一位出现时,校验码将等于它的下标。
例如:
$ 100010011011011 $ 他的第三位是错误的

可以得到校验码为0011=3,这样就可以纠正错误了。

汉明码原理

不难看出,汉明码的设计与二进制表示有着密切关系,将汉明码就错位设置在\(2^k\)处并且将每个就错位都分配与之对应的一半的数码,这样就是为了在编码改变时,能够恰好影响对应的校验和,从而校验和的排列最后为\(G_1 2^1+G_2 2^2+ G_3 2^3+G_4 2^4=出错位置下标\)

扩展汉明码

在刚刚的汉明码中,我们只能检查并纠正一位错误,如果同时有两位出错,那么对于已有的汉明编码来说,是无法分辨的。我们只能按照以往的规则,认为是一位出错。
还记得刚刚没有使用的第0位吗,现在我们将这一位当做整个数串的总奇偶校验位,可以达到检测两位错误的作用:
(假设均为偶校验)

  1. 如未发生错误,汉明校验位校验和为0,总校验和为0
  2. 如果发生一位错误,那么总校验和为1
  3. 如果发生两位错误,那么总校验和为0

这样我们就可以发现发生了两位错误,更多的错误就超过了汉明码的检测及纠错能力范围了。

参考资料

三蓝一棕赛高!
https://www.bilibili.com/video/BV1WK411N7kz
https://www.bilibili.com/video/BV1pV411y7E8


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM