[转]“格雷码”的研究。 点击:0 | 回复:6



ranranplay

    
  • 精华:1帖
  • 求助:0帖
  • 帖子:18帖 | 382回
  • 年度积分:0
  • 历史总积分:772
  • 注册:2005年9月27日
发表于:2007-12-28 17:43:00
楼主
[b]格雷码[/b]
在数字系统中只能识别0和1,各种数据要转换为二进制代码才能进行处理,格雷码是一种无权码,采用绝对编码方式,典型格雷码是一种具有反射特性和循环特性的单步自补码,它的循环、单步特性消除了随机取数时出现重大误差的可能,它的反射、自补特性使得求反非常方便。格雷码属于可靠性编码,是一种错误最小化的编码方式,因为,自然二进制码可以直接由数/模转换器转换成模拟信号,但某些情况,例如从十进制的3转换成4时二进制码的每一位都要变,使数字电路产生很大的尖峰电流脉冲。而格雷码则没有这一缺点,它是一种数字排序系统,其中的所有相邻整数在它们的数字表示中只有一个数字不同。它在任意两个相邻的数之间转换时,只有一个数位发生变化。它大大地减少了由一个状态到下一个状态时逻辑的混淆。另外由于最大数与最小数之间也仅一个数不同,故通常又叫格雷反射码或循环码。下表为几种自然二进制码与格雷码的对照表:

一般的,普通二进制码与格雷码可以按以下方法互相转换:
二进制码->格雷码(编码):从最右边一位起,依次将每一位与左边一位异或(XOR),作为对应格雷码该位的值,最左边一位不变(相当于左边是0);
格雷码-〉二进制码(解码):从左边第二位起,将每位与左边一位解码后的值异或,作为该位解码后的值(最左边一位依然不变).
数学(计算机)描述:
原码:p[0~n];格雷码:c[0~n](n∈N);编码:c=G(p);解码:p=F(c);书写时从左向右标号依次减小.
编码: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世纪40年代提出的(是1880年由法国工程师Jean-Maurice-Emlle 
Baudot发明的),用来在使用PCM(Pusle Code Modulation)方法传送讯号时避免出错,并于1953年3月17日取得美国专利。由定义可知,Gray Code的编码方式不是唯一的,这里讨论的是最常用的一种。

[color=#FF0000]格雷码是中国人的老祖先发现的[/color]
九连环与格雷码 
分析解九连环的完全记法,由于每次只动一个环,故两步的表示也只有一个数字不同。下面以五个环为例分析。左边起第一列的五位数是5个环的状态,依次由第一环到第五环。第二列是把这个表示反转次序的五位数,似乎是二进制数,但是与第四列比较就可以看出这不是步数的二进制数表示。第三列是从初始状态到这个状态所用的步数。最右边一列才是步数的二进制表示。 

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 

我们发现,右边一列数恰好是十进制数0到21的二进制数的格雷码! 这当然需要21步。如果把5位二进制数依次写完,就是 

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个环的五连环,从初始到状态11111用的不是并不是最多,到状态00001才是最多,用31步。类似,对于九连环,从初始到状态111111111用的不是并不是最多,到状态000000001才是最多,用511步。由于格雷码111111111表示二进制数101010101,表示十进制数341,故从初始状态到9个环全部上去用341步。 这就是九连环中蕴涵的数学内涵。 

注 由二进制数转换为格雷码:从右到左检查,如果某一数字左边是0,该数字不变;如果是1,该数字改变(0变为1,1变为0)。例,二进制数11011的格雷码是10110。 

由格雷码表示变为二进制数:从右到左检查,如果某一数字的左边数字和是偶数,该数字不变;如果是奇数,该数字改变。 

例 格雷码11011表示为二进制数是10010。 

以上可以用口诀帮助记忆: 2G一改零不改,G2奇变偶不变。 

这样,我们不但可以知道从任何一个状态到另一个状态用完整解法需要多少步,用简单解法又需要多少步,而且可以知道下一步的动作是什么。(除去两个状态000000000和111111111,任何状态下都可以转变为两个状态,即有两个动作。)

例 设九连环的初始状态是 110100110 ,要求终止状态是 001001111 ,简单解法与完整解法各需要多少步?第一步是什么动作? 

解 (1)初始状态 110100110 ,格雷码是011001011,转换为二进制数是010001101,相应十进制数是141。终止状态是001001111,格雷码是111100100,转换为二进制数是101000111,相应十进制数是327。二者差326-141=186,完整解法需要186步。 

(2)由于初始状况141小于终止状况327,第一步应成为142,相应二进制是010001110,转换为格雷码是011001001,状态是100100110,与原状态比较,第一步应上第2环。

(3)简单解法步数,我们由141,327分别求相应的简单步数, 

对于N=141,得到N0=103;对于 N=327,N0=242。二者差139,故简单步数139



ranranplay

  • 精华:1帖
  • 求助:0帖
  • 帖子:18帖 | 382回
  • 年度积分:0
  • 历史总积分:772
  • 注册:2005年9月27日
发表于:2007-12-28 17:52:00
1楼
希望多多支持!!!

千山独步

  • 精华:0帖
  • 求助:0帖
  • 帖子:165帖 | 3097回
  • 年度积分:244
  • 历史总积分:21070
  • 注册:2007年2月02日
发表于:2007-12-28 21:58:00
2楼
谢谢楼主!,已收藏.

ranranplay

  • 精华:1帖
  • 求助:0帖
  • 帖子:18帖 | 382回
  • 年度积分:0
  • 历史总积分:772
  • 注册:2005年9月27日
发表于:2008-01-09 18:11:00
3楼
自己顶起来

ranranplay

  • 精华:1帖
  • 求助:0帖
  • 帖子:18帖 | 382回
  • 年度积分:0
  • 历史总积分:772
  • 注册:2005年9月27日
发表于:2008-03-08 11:25:00
4楼
没有人看??

电工学徒

  • 精华:0帖
  • 求助:0帖
  • 帖子:10帖 | 946回
  • 年度积分:0
  • 历史总积分:1127
  • 注册:2002年9月20日
发表于:2008-03-08 11:46:00
5楼
有意思!
值得学习!

ranranplay

  • 精华:1帖
  • 求助:0帖
  • 帖子:18帖 | 382回
  • 年度积分:0
  • 历史总积分:772
  • 注册:2005年9月27日
发表于:2008-04-30 15:34:57
6楼

没有人用到啊?不是把??


相关主题

官方公众号

智造工程师