格雷碼
格雷碼(Gray Code)
是由貝爾實驗室的弗蘭克·格雷(Frank Gray,1887-1969)在20世紀40年代提出,並在1953年取得美國專利“Pulse Code Communication”。最初目的是在使用PCM(Pusle Code Modulation)方法傳輸數字訊號的過程中降低錯誤可能。
如果將
個長為
的二進位制串組成一個序列,使得將序列按圓形排列時一對相鄰的二進位制串只有一位不同,則稱這些序列為
n階格雷碼
或簡稱
格雷碼(Gray code)
。
在格雷碼中,任意兩個相鄰的程式碼只有一位二進位制數不同,最大碼與最小碼之間也僅一位不同,即“首尾相連”,因此又稱
迴圈碼
或
反射碼
。
【例】長度為3的普通二進位制碼為:000、001、010、011、100、101、110、111;而長度為3的格雷碼為:000、001、011、010、110、111、101、100。
例如:在數字系統、機械工具、汽車制動等系統中,有時需要感測器產生的數字值來指示位置。下圖是編碼盤概念圖(此圖中
),它把圓周等分成
個扇形,每個扇形分成
個部分,並且給每個部分賦値,暗的區域與對應的邏輯1的訊號源相連,亮的區域沒有連線,將其解釋為邏輯0。
盤可以旋轉,而觸點(圖中箭頭)將產生一個
n
位二進位制編碼,但當觸點靠近兩個扇形的邊界時,在讀出觸點位置時可能發生錯誤。
圖(a)使用普通二進位制碼,讀出觸點位置時的錯誤可能達到最大化——3位都是錯的;而圖(b)則使用格雷碼對編碼盤上的亮暗區域編碼,使得其連續的碼字之間只有一個數位變化,錯誤的影響可以降到最低。
對
位二進位制的碼字,從右到左以0到
編號,一個
位普通二進位制碼記為
,一個
位格雷碼記為
。普通的
位普通二進位制碼和
n
位格雷碼之間的轉換方法如下所示。
(a) 普通二進位制碼
位格雷碼:
其中
表示異或運算(即模2加法),
,
,
,
。
轉換方法的示意圖為:
例如當
時,3位普通二進位制碼和3位格雷碼之間的對應如下表所示。
(b)
位格雷碼
普通二進位制碼:
轉換方法的示意圖為
例如當
時,3位普通二進位制碼和3位格雷碼之間的對應如表?所示。
之後將慢慢介紹格雷碼的一些有趣應用。