[转载]格雷码编码规则及应用
2011-08-08 09:54阅读:
格雷码
(英文:Gray Code, Grey
Code,又称作葛莱码,二进制循环码)是1880年由法国工程师Jean-Maurice-Emlle
Baudot发明的一种编码,是一种绝对编码方式,典型格雷码是一种具有 反射特性和
循环特性的单步自补码,它的循环、单步特性消除了随机取数时出现重大误差的可能,它的反射、自补特性使得求反非常方便。格雷码属于可靠性编码,是一种错误最小化的编码方式,因为,虽然自然二进制码可以直接由数/模转换器转换成模拟信号,但在某些情况,例如从十进制的3转换为4时二进制码的每一位都要变,能使数字电路产生很大的尖峰电流脉冲。而格雷码则没有这一缺点,它在相邻位间转换时,只有一位产生变化。它大大地减少了由一个状态到下一个状态时逻辑的混淆。由于这种编码相邻的两个码组之间只有一位不同,因而在用于风向的转角位移量-数字量的转换中,当风向的转角位移量发生微小变化(而可能引起数字量发生变化时,格雷码仅改变一位,这样与其它编码同时改变两位或多位的情况相比更为可靠,即可减少出错的可能性。
|
仔细观察格雷码的编码方式:如果按顺序将格雷码每四个分为一组,对于格雷码的最后一位,具有折叠反射特性,即:最后一位的顺序为
01 10,01
10,.....如果按顺序将格雷码每8个分为一组,则其倒数第2为的顺序为0011,1100,0011,1100.....同样,倒数第3为的顺序为0001111,1111000.这种特性称为反射特性。
格雷码最重要的性质就是它的稳定性,相邻的两个数的编码总是只有一bit的差异,它在很多地方有都有应用。比如说在生成子集算法中对子集的排序就可以用格雷码来实现挤压序(字典顺序)。
0-7的格雷码如下
000 001 011
010 110 111 101 100
我们就容易理解格雷码的稳定性问题了,因为相邻的两个编码只相差一个bit
但是这个顺序跟我们的二进制编码差异比较大,不能直接进行运算。
下面给出了二进制与格雷码之间的转换算法。
二进制转格雷码
将二进制编码从右往左与左边的bit异或,这样就得到了格雷码。举例如下:
比如说5的二进制101,相应的格雷码的第一位等于1与0异或得1,第二位等于0与1异或得1,最高位不变,得到格雷码111,这就是上面0-7格雷码中111的由来
再如我们求3的格雷码,3的二进制011,格雷码第一位等于1与1异或得到0,第二位等于1与0异或得到1,最高位不变,得到3的格雷码010,我们同样可以算出其他二进制对应的格雷码。
所谓的异或操作就是
相同为0 不同为1
格雷码转二进制
用0和最高位异或,结果保留到最高位,再将异或的值和下一位相异或,结果保留到下一位,依次异或,直到最低位,依次异或转换后的值(二进制数)就是格雷码转换后二进制的值.