格雷碼運算研究
格雷碼運算研究
在數(shù)字系統(tǒng)中只能識別0和1,各種數(shù)據(jù)要轉(zhuǎn)換為二進制代碼才能進行處理,格雷碼是一種無權(quán)碼,采用絕對編碼方式,典型格雷碼是一種具有反射特性和循環(huán)特性的單步自補碼,它的循環(huán)、單步特性消除了隨機取數(shù)時出現(xiàn)重大誤差的可能,它的反射、自補特性使得求反非常方便。格雷碼屬于可靠性編碼,是一種錯誤最小化的編碼方式,因為,自然二進制碼可以直接由數(shù)/模轉(zhuǎn)換器轉(zhuǎn)換成模擬信號,但某些情況,例如從十進制的3轉(zhuǎn)換成4時二進制碼的每一位都要變,使數(shù)字電路產(chǎn)生很大的尖峰電流脈沖。而格雷碼則沒有這一缺點,它是一種數(shù)字排序系統(tǒng),其中的所有相鄰整數(shù)在它們的數(shù)字表示中只有一個數(shù)字不同。它在任意兩個相鄰的數(shù)之間轉(zhuǎn)換時,只有一個數(shù)位發(fā)生變化。它大大地減少了由一個狀態(tài)到下一個狀態(tài)時邏輯的混淆。另外由于最大數(shù)與最小數(shù)之間也僅一個數(shù)不同,故通常又叫格雷反射碼或循環(huán)碼。下表為幾種自然二進制碼與格雷碼的對照表:
一般的,普通二進制碼與格雷碼可以按以下方法互相轉(zhuǎn)換:
二進制碼->格雷碼(編碼):從最右邊一位起,依次將每一位與左邊一位異或(XOR),作為對應(yīng)格雷碼該位的值,最左邊一位不變(相當(dāng)于左邊是0);
格雷碼-〉二進制碼(解碼):從左邊第二位起,將每位與左邊一位解碼后的值異或,作為該位解碼后的值(最左邊一位依然不變).
數(shù)學(xué)(計算機)描述:
原碼:p[0~n];格雷碼:c[0~n](n∈N);編碼:c=G(p);解碼:p=F(c);書寫時從左向右標(biāo)號依次減小.
編碼:c=p?XOR?p[i+1](i∈N,0≤i≤n-1),c[n]=p[n];
解碼:p[n]=c[n],p=c?XOR?p[i+1](i∈N,0≤i≤n-1).
Gray?Code是由貝爾實驗室的Frank?Gray在20世紀(jì)40年代提出的(是1880年由法國工程師Jean-Maurice-Emlle?
Baudot發(fā)明的),用來在使用PCM(Pusle?Code?Modulation)方法傳送訊號時避免出錯,并于1953年3月17日取得美國專利。由定義可知,Gray?Code的編碼方式不是唯一的,這里討論的是最常用的一種。
[color=#FF0000]格雷碼是中國人的老祖先發(fā)現(xiàn)的[/color]
九連環(huán)與格雷碼?
分析解九連環(huán)的完全記法,由于每次只動一個環(huán),故兩步的表示也只有一個數(shù)字不同。下面以五個環(huán)為例分析。左邊起第一列的五位數(shù)是5個環(huán)的狀態(tài),依次由第一環(huán)到第五環(huán)。第二列是把這個表示反轉(zhuǎn)次序的五位數(shù),似乎是二進制數(shù),但是與第四列比較就可以看出這不是步數(shù)的二進制數(shù)表示。第三列是從初始狀態(tài)到這個狀態(tài)所用的步數(shù)。最右邊一列才是步數(shù)的二進制表示。?
00000-00000-0-00000?
10000-00001-1-00001?
11000-00011-2-00010?
01000-00010-3-00011?
01100-00110-4-00100?
11100-00111-5-00101?
10100-00101-6-00110?
00100-00100-7-00111?
00110-01100-8-01000?
10110-01101-9-01001?
11110-01111-10-01010?
01110-01110-11-01011?
01010-01010-12-01100?
11010-01011-13-01101?
10010-01001-14-01110?
00010-01000-15-01111?
00011-11000-16-10000?
10011-11001-17-10001?
11011-11011-18-10010?
01011-11010-19-10011?
01111-11110-20-10100?
11111-11111-21-10101?
我們發(fā)現(xiàn),右邊一列數(shù)恰好是十進制數(shù)0到21的二進制數(shù)的格雷碼!?這當(dāng)然需要21步。如果把5位二進制數(shù)依次寫完,就是?
10111-11101-22-10110?
00111-11100-23-10111?
00101-10100-24-11000?
10101-10101-25-11001?
11101-10111-26-11010?
01101-10110-27-11011?
01001-10010-28-11100?
11001-10011-29-11101?
10001-10001-30-11110?
00001-10000-31-11111?
這說明,對于只有5個環(huán)的五連環(huán),從初始到狀態(tài)11111用的不是并不是最多,到狀態(tài)00001才是最多,用31步。類似,對于九連環(huán),從初始到狀態(tài)111111111用的不是并不是最多,到狀態(tài)000000001才是最多,用511步。由于格雷碼111111111表示二進制數(shù)101010101,表示十進制數(shù)341,故從初始狀態(tài)到9個環(huán)全部上去用341步。?這就是九連環(huán)中蘊涵的數(shù)學(xué)內(nèi)涵。?
注?由二進制數(shù)轉(zhuǎn)換為格雷碼:從右到左檢查,如果某一數(shù)字左邊是0,該數(shù)字不變;如果是1,該數(shù)字改變(0變?yōu)?,1變?yōu)?)。例,二進制數(shù)11011的格雷碼是10110。?
由格雷碼表示變?yōu)槎M制數(shù):從右到左檢查,如果某一數(shù)字的左邊數(shù)字和是偶數(shù),該數(shù)字不變;如果是奇數(shù),該數(shù)字改變。?
例?格雷碼11011表示為二進制數(shù)是10010。?
以上可以用口訣幫助記憶:?2G一改零不改,G2奇變偶不變。?
這樣,我們不但可以知道從任何一個狀態(tài)到另一個狀態(tài)用完整解法需要多少步,用簡單解法又需要多少步,而且可以知道下一步的動作是什么。(除去兩個狀態(tài)000000000和111111111,任何狀態(tài)下都可以轉(zhuǎn)變?yōu)閮蓚€狀態(tài),即有兩個動作。)
例?設(shè)九連環(huán)的初始狀態(tài)是?110100110?,要求終止?fàn)顟B(tài)是?001001111?,簡單解法與完整解法各需要多少步?第一步是什么動作??
解?(1)初始狀態(tài)?110100110?,格雷碼是011001011,轉(zhuǎn)換為二進制數(shù)是010001101,相應(yīng)十進制數(shù)是141。終止?fàn)顟B(tài)是001001111,格雷碼是111100100,轉(zhuǎn)換為二進制數(shù)是101000111,相應(yīng)十進制數(shù)是327。二者差326-141=186,完整解法需要186步。?
(2)由于初始狀況141小于終止?fàn)顩r327,第一步應(yīng)成為142,相應(yīng)二進制是010001110,轉(zhuǎn)換為格雷碼是011001001,狀態(tài)是100100110,與原狀態(tài)比較,第一步應(yīng)上第2環(huán)。
(3)簡單解法步數(shù),我們由141,327分別求相應(yīng)的簡單步數(shù),?
對于N=141,得到N0=103;對于?N=327,N0=242。二者差139,故簡單步數(shù)139
非常好我支持^.^
(0) 0%
不好我反對
(0) 0%
相關(guān)閱讀:
- [測量儀表] 結(jié)構(gòu)光相位展開技術(shù)的基本原理是什么 2023-09-16
- [電子說] 采用格雷碼異步FIFO跟標(biāo)準(zhǔn)FIFO有什么區(qū)別 2023-09-14
- [電子說] 異步FIFO-格雷碼 2023-08-26
- [光電顯示] 常見的三維測量方法有哪些(結(jié)構(gòu)光編碼原理) 2023-08-18
- [電子說] FPGA多bit跨時鐘域之格雷碼(二) 2023-05-25
- [電子說] FPGA多bit跨時鐘域之格雷碼(一) 2023-05-25
- [電子說] FPGA中有限狀態(tài)機的狀態(tài)編碼采用格雷碼還是獨熱碼? 2023-04-07
- [電子說] 格雷碼與二進制轉(zhuǎn)換 2023-01-17
( 發(fā)表人:admin )