「通信原理」格雷码的生成与破译

news2024/11/26 6:20:31

「通信原理」格雷码的生成与破译

格雷码,gray code,相邻两数之间只有一个bit发生了改变,因此相比于自然编码的二进制系统,格雷编码的更不容易出错。使用卡诺图化简布尔代数式的时候,也会用到格雷码。本文将介绍三种格雷码的生成与破译方法,即格雷码和自然编码的相互转换。格雷码的顺序不是唯一的。

1、直接排列

根据定义直接排列,适用于十分简单的情形。

十进制二进制(自然编码)格雷码
00000
10101
21011
31110

2、镜射法

n位的格雷码可以直接由n-1位的格雷码“镜面反射”之后,在前面添加0或者1直接得到。其过程如下图所示:

请添加图片描述

第二列的[0 1 1 0]即是1位格雷码“镜面反射”得到的,然后在前面添加[0 0 1 1]则得到2位的格雷码[00, 01, 11, 10]。同理可得3位的格雷码。

3、公式法:

(1)二进制数转格雷码

前面两种方法都是适用于位元数较小的二进制数,当n很大时(一张纸写不下的时候),就不适合列举出所有的对应关系,再去编解码了。

符号规定:G:格雷码,B:二进制码,k:正在计算的位

生成公式:G(k) = B(k+1) ⊕ B(k)或者G(k) = B(k+1) +B(k)

文字解释:第k位的格雷码🟰自然编码的第k位 异或 第k+1位。

注意:

  1. 异或:相异为1,相同为0;或称为模2加、二进制加法。
  2. n+1位:对于n位的自然编码,第n+1位为0。
  3. 从低位向高位运算。
举例:求6对应的格雷码。
6的自然二进制编码为110。格雷码也将有3bit,G(1) = B(2)+B(1)=1, G(2) = B(3)+B(2) = 0, G(3) = B(4)+B(3) = 1
则格雷编码为101。

(2)格雷码转二进制数

反过来:B(k) = G(k) - B(k+1) ,或者B(k) = G(k) + B(k+1) 、B(k) = G(k) ⊕ B(k+1)

注意:

  1. 模2减的运算规则和模2加一模一样。
  2. 从高位向低位运算。
举例:求101对应的自然编码。
格雷码为101,B(3) = G(3)+B(4)=1, B(2) = G(2)+B(3) = 1, B(1) = G(1)+B(2) = 0。
则自然编码为110。

4、线性变换法

(1)二进制数转格雷码

二进制码转换为格雷码,可以看成是一种线性变换T: V n ( B ) → V n ( B ) V_n(B)\to V_n(B) Vn(B)Vn(B)。(假设用B来表示0和1)

对于一个4bit的二进制空间,所有坐标为:{0000, 0001, 0010, 0011, 0100, 0101, 0110, 0111, 1000, 1001, 1010, 1011, 1100, 1101, 1110, 1111}。基为(e1, e2, e3, e4)。e1 = [1,0,0,0]T,e2 = [0,1,0,0]T,e3 = [0,0,1,0]T,e4 = [0,0,0,1]T。任何一个二进制数B = (e1, e2, e3, e4)x。x是这个二进制数的坐标,是一个列向量。

对于一个4bit的格雷编码的空间。基为(g1, g2, g3, g4)。g1 = [1,1,0,0]T,g2 = [0,1,1,0]T,g3 = [0,0,1,1]T,g4 = [0,0,0,1]T

根据线性变换的规则,T(e1) = g1 = e1+e2, T(e2) = g2 = e2+e3, T(e3) = g3 = e3+e4, T(e4) = g4 = e4。

写成矩阵的形式:T(e1, e2, e3, e4) = (g1, g2, g3, g4) = (e1, e2, e3, e4)A

A = array([[1, 0, 0, 0],

​ [1, 1, 0, 0],

​ [0, 1, 1, 0],

​ [0, 0, 1, 1]])

所有的4bit格雷码,都可以通过A来生成。

举例:12的格雷码。
12的坐标为x=[1,1,0,0]T
Ax = [1,0,1,0]T
注意:这里是二进制乘法。

(2)格雷码转二进制数

反过来,只需要求出线性变换的逆矩阵,A-1即可。用A-1乘以格雷码向量,即可转换为相应的自然编码。

举例:[1,0,1,0]T的自然编码。
A- = array([[ 1.,  0.,  0.,  0.],
       [-1.,  1.,  0.,  0.],
       [ 1., -1.,  1.,  0.],
       [-1.,  1., -1.,  1.]])
注意这里是二进制乘法,因此-1应该写成1,2应该写成0
所以,A- =array([[ 1,  0,  0,  0],
       [ 1,  1, 0,  0],
       [ 1,  1, 1,  0],
       [ 1,  1, 1,  1]]) 
np.dot(A-,[1,0,1,0]) = array([1, 1, 2, 2]) = [1,1,0,0]T

总结:本文一共用了四种方法来构造格雷码,其中前三种都是在传统的通信专业课程里面会学习到,第四种是在研究生课程矩阵理论当中会学到(数学专业可能在本科就会学习到)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/980180.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AggregateFunction结合自定义触发器实现点击率计算

背景: 接上一篇文章,ProcessWindowFunction 结合自定义触发器会有状态过大的问题,本文就使用AggregateFunction结合自定义触发器来实现,这样就不会导致状态过大的问题了 AggregateFunction结合自定义触发器实现 flink对于每个窗…

前端使用elementui开发后台管理系统的常用功能(持续更新)

前言:本次的文章完全是自己开发中遇到的一些问题,经过不断的修改终于完成的一些功能,当个快捷的查看手册吧~ elementui开发后台管理系统常用功能 高级筛选的封装elementui的表格elementui的表格实现跨页多选回显elementui的表单elementui的日…

VIRTIO-BLK代码分析(3)数据流处理

VIRTIO-BLK整个过程数据流如下所示: IO请求发送过程 虚拟机中通过FIO等下发IO请求,IO请求通过VFS/filesystem,然后到BLOCK层,传递给virtio-blk驱动,virtio-blk驱动通过virtio_queue_rq()下发IO请求,并通过v…

视频过大如何压缩变小?想学的小伙伴不要错过机会

视频过大如何压缩变小?在当今社交媒体和直播平台的时代,视频内容的传播已经广泛而频繁,我们每天不仅刷视频打发无聊的时间,也会向一些自媒体平台分享自己拍摄的视频。如今人们对视频画质的要求不断提高,因此大多数下载…

武汉凯迪正大—断路器特性测试仪

一、凯迪正大高压开关测试仪产品概述 KDGK-F 断路器机械特性测试仪可用于各电压等级的真空、六氟化硫、少油、多油等电力系统高压开关的机械特性参数测试与测量。测量数据稳定,抗干扰性强,可在500KV等级及以下电站做实验,接线方便&#xff0…

知识图谱(2)词汇挖掘与实体识别

实体是指文本中的词汇或者短语(比如"中药"),但不是所有词汇都是实体(比如"新鲜的"),因此,从非结构化的文本构建知识图谱涉及两个基本步骤: 挖掘尽可能多的高质…

初次安装Pytorch过程

第一次安装Pytorch,刚开始安装的时候装错了CUDA的版本号 这里最高支持12.2.138, 但是我装了一个12.2.140的CUDA,导致不兼容我在测试时发现 import torch# if torch.cuda.is_available(): # print("GPU可用") # else: # p…

Xilinx FPGA 超温关机保护

在UG480文档,有关于FPGA芯片热管理的介绍。 首先需要理解XADC中的 Over Temperature(OT)和User Temperature的关系。片上温度测量用于关键温度警告,也支持自动关机,以防止设备被永久损坏。片上温度测量在预配置和自动关…

python flask框架 debug功能

从今天开始,准备整理一些基础知识,分享给需要的人吧 先整理个flask的debug功能,首先列举一下debug加与不加的区别,然后再上代码和图看看差异 区别: (1)加了debug后,修改js&#xf…

【电源专题】接地的类型

在工作和生活中我们往往都会碰到接地的概念,随着社会的发展不同的时期接地有着不同的意义。 其中包括从安全方面看,有物理接地和电气接地,物理接地是为了防雷连接到大地并提供浪涌电流路径,电气接地是为了保护人身安全而将电气设备外壳接接地的一种操作。从参考电位上看,…

异步编程 - 03 线程池ThreadPoolExecutor原理剖析源码详解

文章目录 线程池ThreadPoolExecutor原理剖析线程池类图结构成员变量ctl线程池的主要状态线程池的参数提交任务到线程池原理解析public void execute(Runnable command)public Future<?>submit(Runnable task)public Future submit(Runnable task&#xff0c;T result) 线…

【精品】商品规格 数据库表 设计

特点 同一类商品的规格项分组一样同一类商品的规格项一样不同商品的规格值是不同的 规格参数规格组规格项&#xff1a;规格值本博客对应的SQL文件下载地址&#xff1a;https://download.csdn.net/download/lianghecai52171314/88306884 方案一 数据库设计 查询17号商品的规…

PY32F003F18的中断线

PY32F003F18的中断线有30条&#xff0c;其中Line20~Line28保留不用&#xff0c;见下图&#xff1a; Line0~Line8需要配置&#xff0c;选择引脚和中断线连接&#xff0c;和GPIO引脚对应&#xff0c;Line9~Line15和PA9~PA15一一对应。见下图&#xff1a; 外部中断选择寄存器1(EXT…

国际慈善日 | 追寻大爱无疆,拓世科技集团的公益之路

每年的9月5日&#xff0c;是联合国大会正式选定的国际慈善日。这一天的设立&#xff0c;旨在通过提高公众对慈善活动的意识&#xff0c;鼓励慈善公益活动通过各种形式在全球范围内得到增强和发展。这是一个向慈善公益事业致敬的日子&#xff0c;同时也是呼吁全球团结一致共同发…

Swagger简介

一.导语&#xff1a; 相信无论是前端还是后端开发&#xff0c;都或多或少地被接口文档折磨过。前端经常抱怨后端给的接口文档与实际情况不一致。后端又觉得编写及维护接口文档会耗费不少精力&#xff0c;经常来不及更新。其实无论是前端调用后端&#xff0c;还是后端调用后端&…

尼尔森IQ :2023年中国商业养老服务供需洞察白皮书

核心观点 随着我国人口年龄结构发生巨大转变&#xff0c;老龄化问题成为未来较长时间内持续面临的挑战&#xff0c;积极应对老龄化已上升为国家战略&#xff0c;有效的、高质量的养老服务体系亟待建设。本章通过人口数据揭示我国老龄化进程&#xff0c;总结围绕养老领域出台的…

“银河护卫队总部”放大招!Milvus 核心组件再升级,主打就是一个低延迟、高准确度

熟悉我们的朋友都知道&#xff0c;在 Milvus 和 Zilliz Cloud 中&#xff0c;有一个至关重要的组件——Knowhere。 Knowhere 是什么&#xff1f;如果把向量数据库整体看作漫威银河护卫队宇宙&#xff0c;那么 Knowhere 就是名副其实的总部&#xff0c;它的主要功能是对向量精确…

linux 进程管理命令

进程管理命令 查看进程命令 ps命令 显示系统上运行的进程列表 # 查看系统中所有正在运行的系统ps aux# 获取占用内存资源最多的10个进程&#xff0c;可以使用如下命令组合&#xff1a;ps aux|head -1;ps aux|grep -v PID|sort -rn -k 4|head# 获取占用CPU资源最多的10个进程&am…

成本控制与电子元器件采购:实现效益的关键因素

成本控制在电子元器件采购中至关重要&#xff0c;它直接影响了组织的盈利能力和竞争力。以下是实现成本效益的关键因素&#xff1a; 供应商谈判&#xff1a; 成本控制的第一步是与供应商进行有效的谈判。这包括谈判价格、交货条件、质量标准和其他合同条款。有时长期合同可以帮…

【数学建模竞赛】优化类赛题常用算法解析

优化类建模 问题理解和建模&#xff1a;首先&#xff0c;需要深入理解问题&#xff0c;并将问题抽象为数学模型。这包括确定问题的目标函数、约束条件和决策变量。 模型分析和求解方法选择&#xff1a;对建立的数学模型进行分析&#xff0c;可以使用数学工具和方法&#xff0c;…