《逻辑与计算机设计基础(原书第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范围内顺序变化的特殊二进制编码,其格雷码编制方法是:保留原二进制码的左边最高位,剩下的位由原二进制码的各位与其左边相邻位的偶校验构成。

相关文章
|
存储 人工智能 自然语言处理
DeepSeek R1+Open WebUI实现本地知识库的搭建和局域网访问
本文介绍了使用 DeepSeek R1 和 Open WebUI 搭建本地知识库的详细步骤与注意事项,涵盖核心组件介绍、硬件与软件准备、模型部署、知识库构建及问答功能实现等内容,适用于本地文档存储、向量化与检索增强生成(RAG)场景的应用开发。
4837 0
|
编解码 监控 前端开发
《别盲目做Web3D交互!Three.js和React Three Fiber难点大揭秘》
Web3D交互通过沉浸式体验和视觉呈现,广泛应用于电商、教育和建筑等领域。Three.js与React Three Fiber的结合是实现这一体验的热门技术,但其开发过程面临诸多挑战。模型渲染复杂时会导致性能下降,高分辨率纹理虽提升真实感却增加加载时间;动态场景更新可能引发性能问题,而两者的学习曲线陡峭,集成中也易出现“水土不服”。此外,移动端适配、交互逻辑设计及操作响应性等问题进一步增加了开发难度。尽管如此,随着技术进步与经验积累,这些难点将被逐步解决,推动Web3D交互迈向更精彩的未来。
832 14
|
11月前
|
人工智能 自然语言处理 计算机视觉
CVPR 2024 | 赋能大语言模型以精准理解视频时序瞬间 | LLM | 时序预测
VTimeLLM提出新型时间感知架构,赋能大语言模型精准理解视频时序瞬间。通过时间对齐表征与时序预训练,实现事件定位、时序推理与细粒度视频理解,支持自然语言交互式探索视频内容。
352 0
CVPR 2024 | 赋能大语言模型以精准理解视频时序瞬间 | LLM | 时序预测
|
人工智能 搜索推荐 定位技术
AddressCLIP:一张照片就能准确定位!中科院联合阿里云推出街道级图像地理定位模型
AddressCLIP 是由中科院和阿里云联合开发的端到端图像地理定位模型,通过图像-文本对齐和地理匹配技术,实现街道级精度的定位,适用于城市管理、社交媒体、旅游导航等场景。
2736 30
AddressCLIP:一张照片就能准确定位!中科院联合阿里云推出街道级图像地理定位模型
|
监控 安全 Linux
虚拟专用网络(VPN):远程访问与点对点连接及其在Linux中的IPSec实现与日志管理
虚拟专用网络(VPN):远程访问与点对点连接及其在Linux中的IPSec实现与日志管理
1143 101
|
人工智能 数据安全/隐私保护
深度揭秘CoT!普林斯顿耶鲁发布最新报告:大模型既有记忆推理、也有概率推理
普林斯顿大学和耶鲁大学研究人员发布报告,探讨链式思维(CoT)提示对大型语言模型(LLM)推理能力的影响。研究通过移位密码任务,揭示了三个关键因素:任务输出概率、预训练阶段的隐性学习及中间操作数量(噪声推理)。实验使用GPT-4、Claude 3和Llama 3.1模型,发现CoT提示可显著提升模型准确性,但也存在局限性。论文地址:https://arxiv.org/abs/2407.01687。
700 29
|
Dart 索引
鸿蒙应用开发从入门到入行 - 篇8:Tabs选项卡页签视图切换
在本篇文章里,您将掌握使用Tabs选项卡做栏目分类,这是未来应用开发中极为常用的组件
803 7
鸿蒙应用开发从入门到入行 - 篇8:Tabs选项卡页签视图切换
|
SQL 消息中间件 NoSQL
实时计算 Flink版操作报错合集之部署war包的时候,错误提示 "No ExecutorFactory found to execute the application." 如何解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
713 2
|
容器
Flutter 解决宽度或高度不足而导致的屏幕溢出显示问题
Flutter 解决宽度或高度不足而导致的屏幕溢出显示问题
1518 1
|
Go vr&ar 图形学
重塑体验:AR/VR技术在游戏与娱乐行业的创新应用
【10月更文挑战第29天】本文探讨了AR/VR技术如何改变游戏与娱乐行业,介绍了AR和VR的基本概念及其在游戏和娱乐中的应用实例,包括《精灵宝可梦GO》的AR开发和VR视频播放器的实现代码,并展望了未来的发展趋势。
1180 2