在[7,4]海明码中,奇偶校验位放在1,2,4位,即2^n位。
当我们把2^n用二进制展开,就能理解放在此处的用意了:
1=001
2=010
4=100
8=1000
16=10000
etc.
即:
P1对 xxxx1 的数进行奇偶校验。
P2对 xxx1x 的数进行奇偶校验。
P3对 xx1xx 的数进行奇偶校验。
.......
前面我们通过图得到表,当我们把表的数据拿下来做成一个矩阵,我们就能得到奇偶校验矩阵H:
然后我们能发现H的每一列都是位置的二进制表示,即
利用这一点,我们只要得到海明码的总长度,就能得到H:
用python举例:
输入任意长度的信息
计算之后得到编码的总长度
就可以得到 H(1-总长) 的奇偶校验矩阵H。
如果此时把H矩阵里代表奇偶校验位的列即2^n列删除
我们就能得到一个新的矩阵h
此时矩阵的每一行代表着一位奇偶校验位,因为P1对D1,D2,D4做偶校验,P2对D1,D3,D4做偶校验,P3对D2,D3,D4做偶校验。
所以此时h矩阵如果与代表原信息的矩阵相乘并余2的话,就相当让每个奇偶校验位对自己“管辖范围”里的数进行一次奇偶校验。
如:
P1=1*1+1*1+0*0+1*1=3, 余2位1(3个1)
P2=1*1+0*1+1*0+1*1=2, 余2位0(2个1)
P3=0*1+1*1+1*0+1*1=2, 余2位0(2个1)
此时把P放入2^n处
即可得到经过海明码编码后的数据:
也可以生成一个大矩阵G
先将奇偶校验位和信息位排列好,与信息相乘并余2后可直接得出结果
值得注意的是,这些矩阵都是动态的,可以随着输入的数据不同而进行拓展。