什么是格雷碼
格雷碼(Gray code),又叫循環(huán)二進(jìn)制碼或反射二進(jìn)制碼 在數(shù)字系統(tǒng)中只能識別0和1,各種數(shù)據(jù)要轉(zhuǎn)換為二進(jìn)制代碼才能進(jìn)行處理,格雷碼是一種無權(quán)碼,采用絕對編碼方式,典型格雷碼是一種具有反射特性和循環(huán)特性的單步自補(bǔ)碼,它的循環(huán)、單步特性消除了隨機(jī)取數(shù)時出現(xiàn)重大誤差的可能,它的反射、自補(bǔ)特性使得求反非常方便。格雷碼屬于可靠性編碼,是一種錯誤最小化的編碼方式
簡介
因?yàn)?,自然二進(jìn)制碼可以直接由數(shù)/模轉(zhuǎn)換器轉(zhuǎn)換成模擬信號,但某些情況,例如從十進(jìn)制的3轉(zhuǎn)換成4時二進(jìn)制碼的每一位都要變,使數(shù)字電路產(chǎn)生很大的尖峰電流脈沖。而格雷碼則沒有這一缺點(diǎn),它是一種數(shù)字排序系統(tǒng),其中的所有相鄰整數(shù)在它們的數(shù)字表示中只有一個數(shù)字不同。它在任意兩個相鄰的數(shù)之間轉(zhuǎn)換時,只有一個數(shù)位發(fā)生變化。它大大地減少了由一個狀態(tài)到下一個狀態(tài)時邏輯的混淆。另外由于最大數(shù)與最小數(shù)之間也僅一個數(shù)不同,故通常又叫格雷反射碼或循環(huán)碼。
二、格雷碼對照表
下表為幾種自然二進(jìn)制碼與格雷碼的對照表:
一般的,普通二進(jìn)制碼與格雷碼可以按以下方法互相轉(zhuǎn)換:
二進(jìn)制碼->格雷碼(編碼):從最右邊一位起,依次將每一位與左邊一位異或(XOR),作為對應(yīng)格雷碼該位的值,最左邊一位不變(相當(dāng)于左邊是0);
格雷碼-〉二進(jìn)制碼(解碼):從左邊第二位起,將每位與左邊一位解碼后的值異或,作為該位解碼后的值(最左邊一位依然不變).
數(shù)學(xué)(計算機(jī))描述:
原碼:p[n:0];格雷碼:c[n:0](n∈N);編碼:c=G(p);解碼:p=F(c);
書寫時按從左向右標(biāo)號依次減小,即MSB->LSB,編解碼也按此順序進(jìn)行
編碼:
...................c[n]=p[n],
...................c[i]=p[i] XOR p[i+1] (i∈N,n-1≥i≥0);
解碼:
...................p[n]=c[n],
...................P[i]=c[i] XOR p[i+1] (i∈N, n-1≥i≥0)。
Gray Code是由貝爾實(shí)驗(yàn)室的Frank Gray在20世紀(jì)40年代提出的(是1880年由法國工程師Jean-Maurice-Emlle
Baudot發(fā)明的),用來在使用PCM(Pusle Code Modulation)方法傳送訊號時避免出錯,并于1953年3月17日取得美國專利。由定義可知,Gray Code的編碼方式不是唯一的,這里討論的是最常用的一種。
用異或乘除法實(shí)現(xiàn)二進(jìn)制碼與格雷碼互相轉(zhuǎn)換
如果在二進(jìn)制運(yùn)算中忽略進(jìn)位、退位,那么加減運(yùn)算都變成了異或(XOR)。
用異或代替加減進(jìn)行二進(jìn)制豎式乘除,稱為異或乘除,它的特點(diǎn)是無進(jìn)退位。
由于沒有退位,異或除法將變得更像多項式除法。
如:10101除以11將變成1100余1,而不是111。
二進(jìn)制轉(zhuǎn)格雷碼:
只要異或乘以二分之三,即二進(jìn)制的1.1,然后忽略小數(shù)部分;也可以理解成異或乘以三(即11),再右移一位。
格雷碼轉(zhuǎn)二進(jìn)制:
異或乘以三分之二,即除以1.1,忽略余數(shù);或者左移一位,再異或除以三,忽略余數(shù)。
評論