《逻辑与计算机设计基础(原书第5版)》——1.7 格雷码

简介: 本节书摘来自华章计算机《逻辑与计算机设计基础(原书第5版)》一书中的第1章,第1.7节,作者:(美)M.莫里斯·马诺(M. Morris Mano)著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

1.7 格雷码

当我们采用二进制编码进行向上或向下计数时,每次计数会导致二进制值向下一个值变化,而每次变化时,二进制编码中需要翻转的位的个数是不一样的。如表1-7所示,表左边列出的是二进制编码的八进制数字,当我们从000到111计数再回到000,每次计数值变化时,二进制编码中需要翻转的位数为1~3。image

对于很多应用,多个二进制位同时发生变化并不是问题。但在某些应用中,计数时如果有多个位同时发生变化会导致很严重的问题,图1-6a所示的光学轴角编码器就可以用来说明这种情况。这种编码器用一个加装在一根轴上的圆盘来测量轴的转动角度,圆盘表面被分成很多区域,透明的表示二进制1,不透明的则表示二进制0。在圆盘的一侧有一个光源,另一侧有多个光学传感器,每个传感器用来感知对应位置的光,并转换为对应的二进制值0(黑暗)或1(有光)。当圆盘的透明区域处于光源和传感器之间时,传感器输出二进制1,当不透明区域处于光源和传感器之间时,传感器输出二进制0。
但是,轴本身可以旋转到任何角度。例如,轴和圆盘可能会转到某一角度,传感器正好处于011和100区域间的边界上。这时,在B2、B1和B0的传感器所接收的光被部分遮挡,在这种情况下,很难判定这3个传感器是否接收到光,每个传感器既可以产生二进制0也可以产生二进制1信号。这样,在3与4之间,可能会出现的编码就会有000、001、010、011、100、101、110或111,其中只有011和100是符合要求的,其他的都是错误的编码。
看看有什么其他方法可以解决这一问题。我们注意到当二进制值向下一个或上一个值进行变化时,如果只有一个二进制位发生翻转,这个问题就不会出现。例如,当传感器位于2与3的区域边界时,传感器能产生的二进制信号只可能是010或011,它们都符合要求。因此,如果我们改变从0到7的编码方式,使得在进行加计数或减计数(从7回到0)时只有一个二进制位需要翻转,则轴处于任何角度传感器都能产生正确的信号。计数过程中相邻编码之间只有一位不同的编码称为格雷码(Gray code),以Frank Gray的名字命名,他在1953年申请了这种编码用于转轴编码的专利。对于n(n为偶数)个连续整数的集合,可以有多种格雷编码。
表1-7右侧列出的是一种八进制数字的格雷码,称为二进制反射格雷码(binary reflected Gray code)。注意,二进制编码的计数顺序现在是:000、001、011、010、110、111、101、100和000。如果我们需要对编码表示的数字信息进行进一步处理,可以采用专用的硬件电路或软件将格雷码转换为它所对应的二进制值。
图1-6b给出的就是采用表1-7中的格雷码做的光学轴角编码器。可以看到盘中任意相邻的两个编码分块区域只有一个部分是不同的(透明或不透明)。

image

光学轴角编码器充分展现了格雷码的作用。其实在其他类似的应用领域,需要将某些连续变化的物理量,比如位置或电压转换成数字信号,格雷码也同样有用,格雷码在低功耗CMOS(Complementary Metal Oxide Semiconductor)逻辑电路中的应用则更为特别。在CMOS电路中,仅仅当二进制位发生变化时才消耗功率。如果按表1-7中的两种编码进行顺序计数(向上或向下),完成一个8次计数的循环,二进制编码总共有14个位发生了翻转,而格雷码则只需要翻转8位。由此可见,采用格雷码的计数电路的动态功耗只有二进制编码计数电路的57%。
n(n必须为偶数)位二进制计数序列数值的格雷码可以通过以下方法编制:首先对于序列的前n/2个二进制编码,我们设目的格雷码的左边最高位为0,然后往右的各位由原二进制编码的每一位与它左边相邻位的偶校验构成,如二进制编码0100的格雷码的构成是这样的:0,偶校验(0, 1),偶校验(1, 0),偶校验(0, 0)=0110;接着,将已构成的格雷码序列按逆序排列,并将左边最高位设为1,这样就构成原序列中的后n/2个二进制编码所对应的格雷码序列。例如,对于BCD码而言,对应的前5个格雷码为0000、0001、0011、0010和0110,将这个编码序列逆序排列,并将左边最高位置1,就可得到最后5个格雷码:1110、1010、1011、1001和1000。对于数值在0~2n―1范围内顺序变化的特殊二进制编码,其格雷码编制方法是:保留原二进制码的左边最高位,剩下的位由原二进制码的各位与其左边相邻位的偶校验构成。

相关文章
|
机器学习/深度学习 数据采集 算法
【Python机器学习】过拟合及其抑制方法讲解及实战(图文解释 附源码)
【Python机器学习】过拟合及其抑制方法讲解及实战(图文解释 附源码)
353 0
【Python机器学习】过拟合及其抑制方法讲解及实战(图文解释 附源码)
|
Linux 索引
在Linux中,符号链接与硬链接有何区别?
在Linux中,符号链接与硬链接有何区别?
|
人工智能 数据安全/隐私保护
深度揭秘CoT!普林斯顿耶鲁发布最新报告:大模型既有记忆推理、也有概率推理
普林斯顿大学和耶鲁大学研究人员发布报告,探讨链式思维(CoT)提示对大型语言模型(LLM)推理能力的影响。研究通过移位密码任务,揭示了三个关键因素:任务输出概率、预训练阶段的隐性学习及中间操作数量(噪声推理)。实验使用GPT-4、Claude 3和Llama 3.1模型,发现CoT提示可显著提升模型准确性,但也存在局限性。论文地址:https://arxiv.org/abs/2407.01687。
541 29
|
Dart 索引
鸿蒙应用开发从入门到入行 - 篇8:Tabs选项卡页签视图切换
在本篇文章里,您将掌握使用Tabs选项卡做栏目分类,这是未来应用开发中极为常用的组件
624 7
鸿蒙应用开发从入门到入行 - 篇8:Tabs选项卡页签视图切换
|
Go vr&ar 图形学
重塑体验:AR/VR技术在游戏与娱乐行业的创新应用
【10月更文挑战第29天】本文探讨了AR/VR技术如何改变游戏与娱乐行业,介绍了AR和VR的基本概念及其在游戏和娱乐中的应用实例,包括《精灵宝可梦GO》的AR开发和VR视频播放器的实现代码,并展望了未来的发展趋势。
1009 2
|
存储 安全 数据安全/隐私保护
CRISPR技术:基因编辑的伦理与应用
【9月更文挑战第27天】CRISPR/Cas9基因编辑技术以其高精度和效率革新了生命科学,应用于基因功能研究、遗传病治疗及作物改良,同时引发伦理争议。本文探讨其原理、人类胚胎编辑的伦理议题、个人基因隐私保护及生态影响,并展望其在医学、农业和科研领域的潜力。
|
算法 机器人 数据挖掘
LeetCode题目54:螺旋矩阵【python4种算法实现】
LeetCode题目54:螺旋矩阵【python4种算法实现】
|
监控 安全 Linux
虚拟专用网络(VPN):远程访问与点对点连接及其在Linux中的IPSec实现与日志管理
虚拟专用网络(VPN):远程访问与点对点连接及其在Linux中的IPSec实现与日志管理
795 0
|
SQL 关系型数据库 MySQL
MySQL数据库——触发器-介绍、语法(创建,查看,删除)
MySQL数据库——触发器-介绍、语法(创建,查看,删除)
1170 0
|
小程序 前端开发 定位技术
微信小程序-常用的视图容器类组件
该内容是关于微信小程序组件的分类和部分具体组件的介绍。主要分为9大类:视图容器、基础内容、表单组件、导航组件、媒体组件、地图组件、画布组件、开放能力和无障碍访问。其中详细讲解了`view`、`scroll-view`、`swiper`及`swiper-item`等组件的用途和示例。`view`用于构建页面布局,`scroll-view`支持滚动效果,`swiper`则用于创建轮播图。此外,还提到了`root-portal`、`page-container`等其他特殊用途的组件。
449 0