今天上课,老师让我们用matlab进行汉明码编码译码的实现,之前上通信原理课程的时候老师顺带提过一句,现在已然是记不太清了,所以上网搜索了一下关于汉明码的原理。
汉明码(Hamming Code),是在电信领域的一种线性调试码,以发明者理查德·卫斯里·汉明的名字命名。。。。。。
简单来说,汉明码就是一个可以校验和纠错的编码。
首先记住一个公式:, n是你要编码的数组长度,k是验证码字的个数
我们现在以k=4,n=7的实例来说明汉明码的编码原理:
a=[1,0,1,0,1,1,1]
因为n+k=11,我们要编码出来的是一个长度为11的数组,其中四位是校验码
根据k值的不同,我们可以吧原始数组分为k组,将原始数组的下标分别转换为二进制
第一组的分别是末位为1的下标:XXX1
第二组的分别是次末位为1的下标:XX1X
第三组的分别是次位为1的下标:X1XX
第四组的分别是首位为1的下标:1XXX
所以第一组P1的下标分别为:3,5,7,9,11
第二组:3,6,7,10,11
第三组:5,6,7
第四组:9,10,11
每一个校验位的数值是组内每一个元素数值的奇偶数
对于译码:
假设接收到长度为11的数组进行译码,先取出校验码&