| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Python知识库 -> 从二进制格雷码到任意进制格雷码(1) -> 正文阅读 |
|
[Python知识库]从二进制格雷码到任意进制格雷码(1) |
目录 1. 概要????????本文介绍几种常用的二进制格雷码生成方法及并给出几种python实现代码。 ????????进一步,将二进制格雷码的基本定义扩展到任意M进制的格雷码,并给出任意M进制的格雷码的一种编码算法及其python代码实现。 1.1 格雷码的定义[1]????????典型的二进制格雷码(Binary Gray Code)简称格雷码,因1953年公开的弗兰克·格雷(Frank Gray,18870913-19690523)专利“Pulse Code Communication”而得名,当初是为了通信,现在则常用于模拟-数字转换和位置-数字转换中。法国电讯工程师波特(Jean-Maurice-émile Baudot,18450911-19030328)在1880年曾用过的波特码相当于它的一种变形。1941年George Stibitz设计的一种8元二进制机械计数器正好符合格雷码计数器的计数规律。 ????????我们通常所说的格雷码一般是指二进制格雷码,其(通俗非严谨)定义为:在一个固定长度的二进制编码中,若任意两个相邻的代码(包括首尾,即最大值与最小值之间)只有一位二进制数不同,则称这种编码为格雷码(Gray Code)。由于最大数与最小数之间也仅一位数不同,即“首尾相连”,因此又称循环码或反射码(???)。 ????????在数字系统中,计数器的设计要求数码按一定顺序变化。例如,4比特二进制数按自然数递增计数,若采用8421码,则数0111变到1000时四位均要变化,而在实际电路中,4位的变化不可能绝对同时发生,则计数中可能出现短暂的其它代码(1100、1111等)。在特定情况下可能导致电路状态错误或输入错误。使用格雷码可以避免这种错误。 ????????格雷码在很多场合都有应用,比如通信系统中的编码,比如数字设计中的状态机的编码,比如数字系统中异步FIFO设计中的计数器的编码等等。 1.2 格雷码的特点[1]
2. 二进制格雷码生成方法2.1 镜像法????????如上图所示,(n+1)比特格雷码可以基于n比特格雷码进行构造,方法如下:
????????实现代码如下:
2.2 异或转换[1]????????二进制码→格雷码(编码): ????????此方法从对应的n位二进制码字中直接得到n位格雷码码字,步骤如下:
????????公式表示(G:格雷码,B:二进制码): ????????如下图所示为4比特2进制的格雷码编码过程示意图([1])。 ?????????实现代码如下:
?????????格雷码→二进制码(解码): ????????从左边第二位起,将每位与左边一位解码后的值异或,作为该位解码后的值(最左边一位依然不变)。依次异或,直到最低位。依次异或转换后的值(二进制数)就是格雷码转换后二进制码的值。 ????????公式表示:(G:格雷码,B:二进制码): ????????实现代码待补充。 ?? 2.3 奇偶项????????从0对应N比特的全零格雷码开始:
? ? ? ? 实现代码如下:
2.4 低位优先更新法????????自己杜撰的方法和名词,不知道有无雷同^-^ ????????由于格雷码的定义要求每两个相邻数字的格雷码最多只能有一个比特不同,因此以下基于深度优先搜索(DFS)的思路来给出二进制格雷码编码方法。 ????????假定0~(k-1)的n比特格雷码已经生成好,接下来考虑k的格雷码的生成:以(k-1)的格雷码为基础,尝试从最右边码元(LSB)开始寻找第一个满足条件的可以翻转的比特。算法流程如下: ????????实现代码如下:
????????这个算法因为是从最根本的角度来考虑的,因此它具有普适性,即可以适用于任意M进制的格雷码生成。而上面几种生成方法都是只能适用于二进制格雷码的生成方法。当然从实际生成结果来看,可以看出以上几种特定的二进制格雷码的生成方法与本算法的生成结果是一致的。从这个算法出发修改搜索策略的话,可以很容易的地生成其它形式的二进制格雷码编码.? ?2.5 验证????????以下以4比特二进制格雷码为例运行以上各函数看看生成结果:
?运行结果: 3.?任意进制格雷码生成方法????????如上所述,2.4节所述算法是一个具有通用性的算法,以下在此基础上给出任意N进制的格雷码生成方法及其python代码实现。 ? ? ? ? 敬请期待。。。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/15 17:20:03- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |