摘要:讨论了gray code 的由来,剖析了关于格雷码的一些不合理说法,明确了其正宗的发明者应该是弗兰克·格雷,正确的英文名称是gray code,规范的中文名称是格雷码。
格雷码是数字电子技术和自动化检测中的一种重要编码,时常见到如下描述: 格雷码( gray code,greycode,又称作葛莱码,二进制循环码) 是1880 年由法国工程师jean - maurice - emlle baudot 发明的一种编码,因frank gray 于1953 年申请"pulse codecommunication"而得名。当初是为了机械应用,后来在电报上取得了巨大发展,现在则常用于模拟- 数字转换和转角- 数字转换中。
这段格雷码简介首次正式出现在1999 年,现在看来有些不太合适。
1 格雷码( gray code) 的由来
无容置疑,迄今为止对典型格雷码( primary graycode) 的权威描述是frank gray的美国"pulsecode communication[8]".该申请于1947 年11 月13 日,申请号为785697; 1953 年3 月17 日获得批准,号为2632058,权归贝尔电话实验室所有。
根据所用编码的镜像反射特性,将其称之为反射二进制码( reflected binary code) .还介绍了几种变形格雷码( gray code variants)。
笔者所见早使用术语"gray code"的文献是earl albert ragland 等人在1953 年10 月16 日申请、1958 年2 月11 日获得批准的2823345 # 美国"direction - sensitive binary code position control system[9]".据此,gray code 出现在1953 年10 月16 日之前在逻辑上是可能的。另一篇使用gray code 的文献是jack breckman 在1953 年10 月31 日申请、1956 年1 月31 日获得批准的2733432 # 美国"encodingcircuit".考虑到公开时的修订问题,graycode 的出现应不晚于1956 年1 月。
2 格雷码的特点和应用
典型的二进制格雷码( binary gray code) 和部分其他数码如表1 所示。
表1 典型二进制格雷码和其他部分数码
典型格雷码是具有反射特性和循环特性的单步二进制自补码( reflected cyclic binary unit - distanceself - complementing code) .与自然二进制码( naturalbinary code) 相比,它的误码率较低,是一种错误化的可靠性编码,又称为差错〔二进制〕码( minimum error [binary]code) ,经常用在数字通信和自动化测控系统中,使用在格雷码计数器中还可以大大降低计数器的动态功耗。格雷码还与pdc( position - to - digital converter) 、tdc、adc、dac、真值表、卡诺图、哈密顿图、九连环、汉诺塔、十六进制难题( hexadecimal puzzle) 、回形滑行难题或疯像跳舞( spinout puzzle or crazy elephant dance) 等数字测控、数理逻辑和人工智能问题有着密切关系。利用格雷码的奇偶性和± 1 规律等数学性质,可以方便地设计出可级联、可预置、可逆计数的三可格雷码计数器,也方便了九连环的套解和汉诺塔的搬移。
3 几个错误说法
尽管有很多学者对格雷码的研究和发展做出了巨大贡献,但难免也会出现一些不太准确的说法。
现归纳如下:
( 1) 将gray code 说成无权码。
在gray 的中可知其权的为2n - 1,其符号按照1 出现的次序从高到低正负交替。可能是因为无数学推导,且在中有3 处误写为2n - 1 而不符合实际情况( 在robert l. carbrey于1948 年2 月10 日申请、1951 年1 月16 日获得批准的2538615#中写法都是正确的) ,致使很多数字电子技术和计算机技术的文献认为格雷码是无权码,仅互动百科称其为准权码,汪蔚霄给出了与gray 类似的权值,j. f. a. thompson 认为可以从格雷码直接转换成十进制数[22].
( 2) 将gray code 写成grey code或gray code.
美语gray 等同于英语grey 是"灰色"的意思,且gray 和grey 的人名音译均为格雷,因而造成错用。但gray code 因frank gray 命名,绝不能写成grey code;可写为gray code,但不能写成gray code.
( 3) 将gray code 译为灰色码
可能由于gray 有灰色的含意,且gray code 的权值不如自然二进制数的权值明显,故有人误认为此码为"灰色码".
( 4) 认为gray code 的发明者是mile baudot
1878 年,根据右撇子手指的巧拙区别,法国工程师jean - maurice - mlle baudot 曾在电报编码中使用了一种后来扩展为一号国际电报码ita1 的波特码( baudot code,又称作五单位博多码)。虽然波特码基本是按法文元音、辅音的顺序以变形格雷码排序的,可以看作格雷码的一个子集,但没必要将gray code 的发明也归于mile baudot.顺便指出,尽管波特率与baudot 有关,但电路、信号与系统和电子技术中说的波特图则是w. h. bode 发明的,其英文是bode diagram,建议按照自动控制领域译成伯德图为好。
同样早于gray,george stibitz 在1941 年11 月26日申请、1943 年1 月12 日获得批准的2307868#美国"binary counter"设计了一种8 元格雷码计数器,给出了5 元格雷码计数器从0 开始计数16 次的状态表。此码表与典型格雷码完全一致,但没有人说格雷码是george stibitz 发明的。
( 5) 认为gray code 的发明者是elisha gray
虽然与贝尔竞争电话权的elisha gray 在电报技术和电话技术中都做出了重要贡献,但他与graycode 无关。
( 6) 认为gray code 的发明者是中国人
如同莱布尼兹重新发现并完善推广的二进制数可以解释邵雍改画的伏羲八卦图[28]只是巧合一样,格雷码与九连环可能是恰巧同构。在没有确凿证据之前,虽然九连环的套解符合格雷码的± 1 规律,但没有必要把格雷码的发明归功于九连环的中国发明者,也没必要将格雷码称为九连环码,汉诺塔亦然。
4 几个易混称呼
( 1) 将gray code 称为循环码或循环码的特例
由于格雷码的头尾两数也具有单位距离的特性,故格雷码又称为循环二进制单位距离码( cyclic binaryunit - distance code) ,循环二进制码( cyclic binarycode[1]) ,也称为循环置换码( cyclic permutationcode) ,有时简称为循环码。
由于将格雷码称为循环码容易与计算机纠错编码中使用的循环码混淆,建议不要再直接用循环码称呼格雷码。
( 2) 将gray code 译为葛莱码或格莱码、戈莱码。
早期,有人将gray code 音译为葛莱码或格莱码、戈莱码,目前在我国的核工业和文件中仍有葛莱码计数器之说。但由于marcel j. e. golay发明的一种纠错用循环码golay code[31]的音译也是格莱码或戈莱码,与葛莱码同音。故为免混淆,建议不要再将格雷码译为葛莱码或格莱码、戈莱码。
当然,将golay code 音译为格雷码或戈雷码也是不合适的。
( 3) 将gray code 称为反射二进制码。
除了格雷码因具有反射特性而称为反射二进制码外,还有一种用于pcm - 24b 方式脉冲编码调制( pulse code modulation,pcm) 的反射二进制码。这种码型以自然二进制码从中间折叠,又称为反卷码或折叠二进制码( folded binary code); 其有符号数向下顺移一半,与原码表示有符号数的反码相同。对于小振幅成分产生频率高的话音信号来说,具有易于同步的优点。为免两种编码的混淆,建议都不要再使用反射二进制码的名字。
5 结束语
根据当前资料,关于格雷码的下述描述是合理的:
格雷码( gray code) 因frank gray 1947 年申请、1953年获得批准的"pulse code communication"而得名,当初是为了通信,现在则常用于模拟- 数字转换中。法国工程师jean - maurice - mlle baudot 在1880年曾用过的波特码是典型格雷码的一种变形。1941年george stibitz 设计过一种8 元格雷码计数器。格雷码( gray code) 曾用过grey code、葛莱码、格莱码、戈莱码、循环码、反射二进制码、差错码等名字,它们有的不对,有的易与其他名称混淆,建议不再使用这些曾用名。