格雷碼( 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 出現的次序從高到低正負交替。可能是因為無數學推導,且在專利中有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、葛萊碼、格萊碼、戈萊碼、循環碼、反射二進位碼、最小差錯碼等名字,它們有的不對,有的易與其他名稱混淆,建議不再使用這些曾用名。
關鍵字:格雷碼 編輯:神話 引用地址:http://news.eeworld.com.cn/mndz/2012/0329/article_15526.html推薦閱讀
卡諾圖是組合邏輯電路設計和分析最常用和有效的數學工具, 格雷碼是特點是任意兩相鄰代碼之間只有一位數不同,其餘各位均相同,正好和卡諾圖循環鄰接特點一致。 格雷碼轉換為二進位碼的51單片機彙編語言子程序如下:;;入口:8位格雷碼存於累加器A,;;返回值:轉換所得8位二進位碼仍存於累加器A。GtoB: MOV R5, #8 ;;R5←循環次數 MOV 22H,  
發表於 2020-12-25
摘 要: 介紹了一種針對音頻解嵌中的音頻幀輸出而採用的特定異步FIFO的設計。重點闡述了針對這一特定情況需要考慮到的FIFO深度及讀寫指針復位控制以及利用讀寫地址格雷碼對FIFO的空、滿標誌信號的產生電路進行邏輯設計,用Verilog HDL硬體描述語言對電路進行RTL級設計,並使用Modelsim進行功能仿真,最後通過FPGA進行驗證。 關鍵詞: 異步FIFO;音頻解嵌;格雷碼;仿真 在視音頻嵌入解嵌系統中,嵌入音頻、音頻解嵌與音頻轉換成音頻幀標準格式輸出都是工作在不同的時鐘頻率下的。多時鐘帶來的問題就是如何設計異步時鐘之間的接口電路。 異步FIFO存儲
發表於 2011-08-27
6 0110 1100 1001 7 0111 1101 1010 8 1000 1110 1011 9 1001 1111 1100 10 0001,0000 0001,0000 0100,0011 3、格雷反射碼(循環碼) 十進位數 二進位數 格雷碼 十進位數 二進位數 格雷碼 0 0000 0000 8 1000 1100
發表於 2011-06-10