格雷碼( Gray Code,GreyCode,又稱作葛萊碼,二進制循環碼) 是1880 年由法國工程師Jean - Maurice - Emlle Baudot 發明的一種編碼,因Frank Gray 于1953 年申請專利"Pulse CodeCommunicatiON"而得名。當初是為了機械應用,后來在電報上取得了巨大發展,現在則常用于模擬- 數字轉換和轉角- 數字轉換中。
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 出現的次序從高到低正負交替??赡苁且驗闊o數學推導,且在專利中有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) 曾用過Grey Code、葛萊碼、格萊碼、戈萊碼、循環碼、反射二進制碼、最小差錯碼等名字,它們有的不對,有的易與其他名稱混淆,建議不再使用這些曾用名。
(審核編輯: 智匯胡妮)
分享