如何用adc的芯片来强化学习——二进制的补码

部分参考了https://www.cnblogs.com/songdechiu/p/5397070.html

一、补码的优点

1、可以将减法转化为加法,在计算机中只保留加法

2、将符号位参与运算

二、如何实现?

我们先以钟表为例子,假设现在的标准时间为4点整,而有一个钟的时间为7点整。我们可以将时针逆时针旋转3格,或者将时针顺时针旋转9格,如图。

7-3=7+9=4  mod(12)

上述式子为一个同余式,同余式的标准定义为

a ≡b (mod n)

即同余式两边的数值,对n进行取余后的数值相等。

从上述例子我们可以得到灵感,即用一个正数来替代负数(上述例子中用9替代-3)从而将减法转化为加法。

在计算机中,我们应该如何进行这种替换?

我们应先明确一些概念,如原码表示,加法器的溢出,负数取余。

原码表示:最高位为符号位

正数:符号位为0,剩余的为数值

如用8位表示一个数,则+8为 0000 1000(2)

负数:符号位为1,剩余的为数值

如用8位表示一个数,则-8为 1000 1000(2)

采用原码来进行计算机的运算,将会非常复杂,因为将会有很多逻辑判断。

如两数相加时,同好则数值相加;不同号则相减,而且还要比较数值部分的绝对值的大小。

所以人们找到了补码的表示方法。

加法器的溢出:

假如一个加法器为8位的加法器,当和的值超过了 1111 1111(2),那么高位将被丢弃。

如 1111 1111(2)+ 1111 1111(2)= 1111 1110(2)

也就是说这个加法器只能表示0-255,即256为一个轮回,从我们的角度来看的话,这个加法器对结果进行取余,其模为256。

让我们推广到一般情况,n位加法器

xnxn-1……x0,即只能表示0-2n-1,即2n为一个轮回,从我们的角度来看的话,这个加法器对结果进行取余,其模为2n

(原文有错误,因此标红颜色,这里已经修改)及256一个轮回,即2的8次为一个轮回,而不是

负数的取模:

我们应该先探讨一下负数的取模操作,我们知道取模公式如下所示:

x mod y = x - y* [x/y]

注:[x/y]为下取整符号

上边我们说到要用正数来取代负数从而达到,将减法转化为加法,那么应该怎么取代,关系式是怎么样的?

对于一般二进制数xnxn-1……x0进行探讨,从上边的讨论我们知道,对这个二进制数进行加减操作时,最终的结果都将进行模为2n的取余操作。我们假设这个二进制数值为[x]补,其代表的真值为x。

1、当xn为0时,[x]=x,范围为0 - 2n-1;即0~127是整数

2、当xn为1时,其代表的为负数x,我们知道这里应该用一个正数[x]来取代负数x,并且使模为2n的同余式相等。

让我们先来讨论-1,-1对2n进行取余,即

-1 mod 2= -1 - 2n*(-1) = 2n- 1

[2n - 1]补 = -1

所以我们用2n - 1替代-1 举例2^8-1=255,11111111 代表-1,可以从ads1259的datasheet中看出端倪

则,对负数x为,

x mod 2= x - 2n*(-1) = 2n + x

[2n + x]补 = x

x的范围为-1至-2n-1

,即-1到-128

所以我们用2n - 1替代x

——以补码定义式为基础,沿数轴列出典型的真值原码与补码表示,可清楚了解补码的有关性质——

这就是为什么8位二进制, 使用原码或反码表示的范围为[-127, +127], 而使用补码表示的范围为[-128, 127].

因为机器使用补码, 所以对于编程中常用到的32位int类型, 可以表示范围是: [-231, 231-1] 因为第一位表示的是符号位.而使用补码表示时又可以多保存一个最小值.

总结:这里可以根据很多adc的芯片来进行学习二进制的补码,很多能够采集正负电压的adc芯片都采用二进制的补码来表示。

比如在ti的ads1118中,有如下温度传感器的采集数据说明

以及

很简单,如何得到负数的温度(LSB),可以这么计算,因为这个温度传感器adc的精度是14位,最高位是符号位,假如采集得到寄存器是0x3ce0,那么,我们可以这么计算真正的负数大小:0x4000-0x3ce0=0x320,说明有这么多付的LSB,因此,还是比较简单的,

同样,ads1259上面,-1是用ffffff来表示的,那么0x1000000-0xFFFFFF=1,说明是一个LSB。

原文地址:https://www.cnblogs.com/CodeWorkerLiMing/p/12272390.html

时间: 2024-10-10 18:32:57

如何用adc的芯片来强化学习——二进制的补码的相关文章

强化学习 相关资源

最近因为某个不可描述的原因需要迅速用强化学习完成一个小实例,但是之前完全不懂强化学习啊,虽然用了人家的代码但是在找代码的过程中还是发现了很多不错的强化学习资源,决定mark下来以后学习用 [1]如何用简单例子讲解 Q - learning 的具体过程? https://www.zhihu.com/question/26408259 [2]最简单的讲解Q-Learning过程的例子 http://mnemstudio.org/path-finding-q-learning-tutorial.htm

Hulu机器学习问题与解答系列 | 第八弹:强化学习 (二)

答应你们的解答部分来啦! "视频游戏里的强化学习" 场景描述 游戏是强化学习最有代表性也是最合适的应用领域之一,其几乎涵盖了强化学习所有的要素,例如环境:游戏本身的状态,动作:用户操作,机器人:程序,回馈:得分.输赢等.通过输入原始像素来玩视频游戏,是人工智能成熟的标志之一.雅达利(Atari)是20世纪七八十年代红极一时的电脑游戏,类似于国内的红白机游戏,但是画面元素要更简单一些.它的模拟器相对成熟简单,使用雅达利游戏来测试强化学习,是非常合适的.应用场景可以描述为:在离散的时间轴上

深度强化学习Deep Reinforcement Learning 学习过程流水账

2016/10/23 这篇文章和那篇三维重建的流水账一样,用来记录一些关键资料来源和发牢骚. Python怎么学上手快,够用? 神经网络怎么上手? 强化学习怎么上手? 目标驱动,先去看用Python写的强化学习的代码,再去看一些实现各种神经网络的Python代码.再看两种融合的代码. 熟悉工作环境和工作所用工具,比如Tensorflow之类的.

【基础知识十六】强化学习

一.任务与奖赏 我们执行某个操作a时,仅能得到一个当前的反馈r(可以假设服从某种分布),这个过程抽象出来就是“强化学习”. 强化学习任务通常用马尔可夫决策过程MDP来描述: 强化学习任务的四要素 E = <X, A, P, R> E:机器处于的环境 X:状态空间 A:动作空间 P:状态转移概率 R:奖赏函数 学习目的: “策略”:机器要做的是不断尝试学得一个“策略” π,根据状态x就能得到要执行的动作 a = π(x) 策略的评价: 长期累积奖赏,常用的有“T步累积奖赏” 强化学习与监督学习的

深度强化学习(Deep Reinforcement Learning)入门:RL base &amp; DQN-DDPG-A3C introduction

转自https://zhuanlan.zhihu.com/p/25239682 过去的一段时间在深度强化学习领域投入了不少精力,工作中也在应用DRL解决业务问题.子曰:温故而知新,在进一步深入研究和应用DRL前,阶段性的整理下相关知识点.本文集中在DRL的model-free方法的Value-based和Policy-base方法,详细介绍下RL的基本概念和Value-based DQN,Policy-based DDPG两个主要算法,对目前state-of-art的算法(A3C)详细介绍,其他

深度强化学习(Deep Reinforcement Learning)的资源

来源:http://wanghaitao8118.blog.163.com/blog/static/13986977220153811210319/ Google的Deep Mind团队2013年在NIPS上发表了一篇牛x闪闪的文章,亮瞎了好多人眼睛,不幸的是我也在其中.前一段时间收集了好多关于这方面的资料,一直躺在收藏夹中,目前正在做一些相关的工作(希望有小伙伴一起交流). 一.相关文章 关于DRL,这方面的工作基本应该是随着深度学习的爆红最近才兴起的,做这方面的研究的一般都是人工智能领域的大

机器学习之非监督学习与强化学习

非监督式学习: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMzQ3NjQ2NA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" > 在此学习方式下.输入数据部分被标识,部分没有被标识,这样的学习模型能够用来进行预測,可是模型首先须要学习数据的内在结构以便合理的组织数据来进行预測.应用场景包含分类和回归,算法包含一些对经常使用监督

C++强化学习规划表

第一阶段 C语言加强以及C++语言详解(29天) 课程名称 课程内容 学习目标 C语言强化 · C语言基础复习(数据类型.变量.内存布局.指针基础) · C语言基础强化提高(C语言中的字符串.一维数组.二维数组) · C语言基础强化提高(一级指针,二级指针,三级指针实战,N级指针概念,指针数组和数组指针) · C语言基础强化提高(结构体.文件的使用) · 动态库的封装和设计 · 函数指针回调函数 · C语言面试题强化与提高 在基础班C语言知识点之上,掌握C语言深入技巧,为日后 做更大的项目打下坚

什么是强化学习?

Reinforcement learning 是机器学习里面的一个分支,特别善於控制一只能够在某个环境下 自主行动 的个体 (autonomous agent),透过和 环境 之间的互动,例如 sensory perception 和 rewards,而不断改进它的 行为 . 听到强化学习,你脑里应该浮现一只曱甴那样的小昆虫,那就是 autonomous agent 的形象: 对「环境」(environment) 这概念,你应该想到像以下这经典游戏的迷宫: 包括有追捕你的怪物.和吃了会加分的食物