读书人

关于一路广为流传的海明码试题的异或。

发布时间: 2012-08-09 15:59:21 作者: rapoo

关于一道广为流传的海明码试题的异或。海明码的位置为什么不是在2^n?
海明码比较古老的知识了,小弟不才没有搞懂,而且分数所剩无几,还望各位专家谅解。
有一道海明码的题及其求解如下:
例1.已知:信息码为:"0010"。海明码的监督关系式为:
  S2=a2+a4+a5+a6
  S1=a1+a3+a5+a6
  S0=a0+a3+a4+a6
  求:海明码码字。
  解:1)由监督关系式知冗余码为a2a1a0。
  2)冗余码与信息码合成的海明码是:"0010a2a1a0"。
  设S2=S1=S0=0,由监督关系式得:
  异或运算:
  a2=a4+a5+a6=1
  a1=a3+a5+a6=0
  a0=a3+a4+a6=1
  因此,海明码码字为:"0010101"

疑惑是:海明码不是应该在传输信息位(下标从1开始)的第2^n位上?也就是传输的码字不应该是:"0010a2a1a0",而应该是
“001a20a1a0”,这样符合8421码,为什么这道题和无数类似这道题的变种都把海明吧直接加到原信息码的最后了?
PS:这道题和这道题的变种,信息码总是4位,也就是对应海明码总是3位,总码位总是7位。这道题在百度知道里搜索海明码,第一个解释里就可以找到,网上更是流传无数变种。
海明码比较古老的知识了,小弟不才没有搞懂,而且分数所剩无几,还望各位专家谅解。

[解决办法]
你是对的

如何计算海明码(Hamming Code )

海明码(Hamming Code )编码的关键是使用多余的奇偶校验位来识别一位错误。

码字(Code Word) 按如下方法构建:

1、把所有2的幂次方的数据位标记为奇偶校验位(编号为1, 2, 4, 8, 16, 32, 64等的位置)

2、其他数据位用于待编码数据. (编号为3, 5, 6, 7, 9, 10, 11, 12, 13, 14, 15, 17等的位置)

3、每个奇偶校验位的值代表了代码字中部分数据位的奇偶性,其所在位置决定了要校验和跳过的比特位顺序。

位置1:校验1位,跳过1位,校验1位,跳过1位(1,3,5,7,9,11,13,15,…)

位置2:校验2位,跳过2位,校验2位,跳过2位 (2,3,6,7,10,11,14,15,…)

位置4:校验4位,跳过4位,校验4位,跳过4位 (4,5,6,7,12,13,14,15,20,21,22,23,…)

位置8:校验8位,跳过8位,校验8位,跳过8位(8-15,24-31,40-47,…)



如果全部校验的位置中有奇数个1,把该奇偶校验位置为1;如果全部校验的位置中有偶数个1,把该奇偶校验位置为0.


[解决办法]
8421只是其中的方法之一,实际上监督表达式只要能区分开不同的错误即可。
从  S2=a2+a4+a5+a6 a1=a1+a3+a5+a6 S0=a0+a3+a4+a6 可以得到下表:

-----------------------
| a0 | a1 | a2 | a3 | a4 | a5 | a6
-----|------|------|-------|-------|------|------|---------
s2 | | | v | | v | v | v
-----|------|------|-------|-------|------|------|---------
s1 | | v | | v | | v | v
-----|------|------|-------|-------|------|------|---------
s0 | v | | | v | v | | v
-----------------------

由于a0=s0,a1=s1,a2=s2(都是只有1对1的关系),可以认为“由监督关系式知冗余码为a2a1a0”,
由于信息为0010(高位在左),因此得到:“冗余码与信息码合成的海明码是:"0010a2a1a0”
也就是a6=0,a5=0,a4=1,a3=0。
“设S2=S1=S0=0”,表示如果传输无错,则监督码应该全为0。

根据监督关系
S2=a2+a4+a5+a6   S1=a1+a3+a5+a6   S0=a0+a3+a4+a6 可以得到

  0=S2=a2+a4+a5+a6=a2+1+0+0--->a2=1
  0=S1=a1+a3+a5+a6=a1+0+0+0--->a1=0
  0=S0=a0+a3+a4+a6=a0+0+1+0--->a0=1

可以得到“海明码码字为:0010101”




读书人网 >软件架构设计

热点推荐