对于LSB的理解(位的LSB、模数转换的LSB)

2023-05-16

之前对于LSB的理解:

最高有效位(MSB)
指二进制中最高值的比特。在16比特的数字音频中,其第1个比特便对16bit的字的数值有最大的影响。例如,在十进制的15389这一数字中,相当于万数那1行(1)的数字便对数值的影响最大。比较与之相反的“最低有效位”(LSB)。

汇编中,比如,8位2进制数10000001,其中第一个1是MSB,第二个1是LSB。在计算机计算的时候用于判断。比如,如果是整数那么小数点(实际上是没有小数点的,但就把那一位和下一位之间看作有)在LSB后面,如果是小数小数点在MSB后面,其中MSB在有符号数中又是符号位。

LSB(Least Significant Bit)是“最低有效位”。MSB(Most Significant Bit)是“最高有效位”。

如一个地址:

1(MSB)100 0011(LSB)

在网络通信方面,大家说的更多的是:“Big-Endian”和“Small-Endian”的问题。

指的都是对于多字节的数据类型(比如4字节的32位整数),其多个字节的顺序问题,是最高字节在前(Big-Endian)还是最低字节在前(Small-Endian)。
比如对于0x12345678这个数,那么按照Small-Endian的方式,它在网络上传输(或者在内存里存储)的4个字节依次是:12 34 56 78(右为低地址)(地址的增长顺序与值的增长顺序相同,12为千万位),而Big-Endian的顺序正相反,是:78 56 34 12(右为低地址)(地址的增长顺序与值的增长顺序相反)。

MSB和LSB虽然跟这个事情看起来有点相似,但不是一回事。通常,一个芯片的管脚中,对于一个多比特的信号,比如32根的地址线,从低开始按0到31编个号。MSB就是31,LSB就是0。那么如果标记为:ADDR[31:0]就是MSB first的方式,如果标记为ADDR[0:31]就是LSB first的方式。

MSB LSB:起始地址为最高位, 最后地址为最低位。

LSB MSB:起始地址为最低位,最后地址为最高位。

比如AD中,8位,最低有效位指D0

A/D和D/A中的LSB

A/D 是模拟量到数字量的转换,依靠的是模数转换器(Analog to Digital Converter),简称ADC。D/A 是数字量到模拟量的转换,依靠的是数模转换器(Digital to Analog Converter),简称 DAC。它们的道理是完全一样的,只是转换方向不同,因此我们讲解过程主要以 A/D 为例来讲解。

很多同学学到 A/D 这部分的时候,感觉是个难点,概念搞不清楚,掌握不好。我个人认为主要原因不在于技术问题,而是不太会感悟生活。我们生活中有很多很多 A/D 的例子,只是没有在单片机领域里应用而已,下面我带着大家一起感悟一下 A/D 的概念。

什么是模拟量?就是指变量在一定范围内连续变化的量,也就是在一定范围内可以取任意值。比如米尺,从 0 到 1 米之间,可以是任意值。什么是任意值,也就是可以是 1cm,也可以是 1.001cm,当然也可以 10.000„„后边有无限个小数。总之,任何两个数字之间都有无限个中间值,所以称之为连续变化的量,也就是模拟量。

而我们用的米尺上被我们人为的做上了刻度符号,每两个刻度之间的间隔是 1mm,这个刻度实际上就是我们对模拟量的数字化,由于有一定的间隔,不是连续的,所以在专业领域里我们称之为离散的。ADC 就是起到把连续的信号用离散的数字表达出来的作用。那么我们就可以使用米尺这个“ADC”来测量连续的长度或者高度这些模拟量。如图 17-1 一个简单的米尺刻度示意图。

图 17-1  米尺刻度示意图
图 17-1 米尺刻度示意图

我们往杯子里倒水,水位会随着倒入的水量的多少而变化。现在就用这个米尺来测量我们杯子里的水位的高度。水位变化是连续的,而我们只能通过尺子上的刻度来读取水位的高度,获取我们想得到的水位的数字量信息。这个过程,就可以简单理解为我们电路中的 ADC采样。

我们在选取和使用 A/D 的时候,依靠什么指标来判断很重要。由于 AD 的种类很多,分为积分型、逐次逼近型、并行/串行比较型、Σ-Δ型等多种类型。同时指标也比较多,并且有的指标还有轻微差别,在这里我是以同学们便于理解的方法去讲解,如果和某一确定类型A/D 概念和原理有差别,也不会影响实际应用。

ADC 的位数

一个 n 位的 ADC 表示这个 ADC 共有 2 的 n 次方个刻度。8 位的 ADC,输出的是从 0~255 一共 256 个数字量,也就是 2 的 8 次方个数据刻度。

基准源

基准源,也叫基准电压,是 ADC 的一个重要指标,要想把输入 ADC 的信号测量准确,那么基准源首先要准,基准源的偏差会直接导致转换结果的偏差。比如一根米尺,总长度本应该是 1 米,假定这根米尺被火烤了一下,实际变成了 1.2 米,再用这根米尺测物体长度的话自然就有了较大的偏差。假如我们的基准源应该是 5.10V,但是实际上提供的却是 4.5V,这样误把 4.5V 当成了 5.10V 来处理的话,偏差也会比较大。

分辨率

分辨率是数字量变化一个最小刻度时,模拟信号的变化量,定义为满刻度量程与 2n-1 的比值。假定 5.10V 的电压系统,使用 8 位的 ADC 进行测量,那么相当于 0~255 一共 256 个刻度把 5.10V 平均分成了 255 份,那么分辨率就是 5.10/255 = 0.02V。

INL(积分非线性度)和 DNL(差分非线性度)

初学者最容易混淆的两个概念就是“分辨率”和“精度”,认为分辨率越高,则精度越高,而实际上,两者之间是没有必然联系的。分辨率是用来描述刻度划分的,而精度是用来描述准确程度的。同样一根米尺,刻度数相同,分辨率就相当,但是精度却可以相差很大,如图 17-2 所示。

图 17-2  米尺精度对比
图 17-2 米尺精度对比
图 17-2 表示的精度一目了然,不需多说。和 ADC 精度关系重大的两个指标是 INL(Integral NonLiner)和 DNL(Differencial NonLiner)。

INL 指的是 ADC 器件在所有的数值上对应的模拟值,和真实值之间误差最大的那一个点的误差值,是 ADC 最重要的一个精度指标,单位是 LSB。LSB(Least Significant Bit)是最低有效位的意思,那么它实际上对应的就是 ADC 的分辨率。一个基准为 5.10V 的 8 位 ADC,它的分辨率就是 0.02V,用它去测量一个电压信号,得到的结果是 100,就表示它测到的电压值是 100*0.02V=2V,假定它的 INL 是 1LSB,就表示这个电压信号真实的准确值是在1.98V~2.02V 之间的,按理想情况对应得到的数字应该是 99~101,测量误差是一个最低有效位,即 1LSB。

DNL 表示的是 ADC 相邻两个刻度之间最大的差异,单位也是 LSB。一把分辨率是 1 毫米的尺子,相邻的刻度之间并不都刚好是 1 毫米,而总是会存在或大或小的误差。同理,一个 ADC 的两个刻度线之间也不总是准确的等于分辨率,也是存在误差,这个误差就是 DNL。

一个基准为 5.10V 的 8 位 ADC,假定它的 DNL 是 0.5LSB,那么当它的转换结果从 100 增加到 101 时,理想情况下实际电压应该增加 0.02V,但 DNL 为 0.5LSB 的情况下实际电压的增加值是在 0.01~0.03V 之间。值得一提的是 DNL 并非一定小于 1LSB,很多时候它会等于或大于 1LSB,这就相当于是一定程度上的刻度紊乱,当实际电压保持不变时,ADC 得出的结果可能会在几个数值之间跳动,很大程度上就是由于这个原因(但并不完全是,因为还有无时无处不在的干扰的影响)。

转换速率

转换速率,是指 ADC 每秒能进行采样转换的最大次数,单位是 sps(或 s/s、sa/s,即 samples per second),它与 ADC 完成一次从模拟到数字的转换所需要的时间互为倒数关系。ADC 的种类比较多,其中积分型的 ADC 转换时间是毫秒级的,属于低速 ADC;逐次逼近型 ADC转换时间是微妙级的,属于中速 ADC;并行/串行的 ADC 的转换时间可达到纳秒级,属于高速 ADC。

ADC 的这几个主要指标大家先熟悉一下,对于其它的,作为一个入门级别的选手来说,先不着急深入理解。以后使用过程中遇到了,再查找相关资料深入学习,当前重点是在头脑中建立一个 ADC 的基本概念。

分辨率和精度的概念

很多A/D转换器和仪器厂商常拿分辩率来忽悠人, 很多人的确上套, 即使专业人士也常常逃不过. 其实这两者的区别很大, 但有联系.

1, 精度是接近真实值的程度, 即绝对误差或相对误差的大小.精度做到0.01%极其难
2, 分辩率是量化刻度的细度大小,分辩率做到0.00001%不很难(如24位A/D,0.0000056%)
3, 概念理解:
例1:一把1米的软尺,有1000个刻度,分辩率1毫米(分辩率0.1%),用标准尺量下绝对误差+5毫米,精度+0.5%。如果能把尺拉长20毫米,此时绝对误差+25毫米,精度降为2.5%, 可是尺还是1000个刻度,其分辨率还是1毫米(0.1%).
例2:两杆称来称真重1克的物体, 一杆的结果为1.03克, 另一杆的结果为0.8333333333333333333333333克, 哪个准呢?
4, 关系
分辩率高是精度高的必要条件,不是充分条件;分辩率高不等于精度高. 认定精度才是王道.

“精度”是用来描述物理量的准确程度,其反应的是测量值与真实值之间的误差,而“分辨率”是用来描述刻度划分的,其反应的是数值读取过程中所能读取的最小变化值。简比喻:一把常见的量程为10厘米的刻度尺,上面有100个刻度,最小能读出1毫米的有效值。那么我们就说这把尺子的分辨率是1毫米,他只能1、2、3、4……100这样读值;而它的实际精度就不得而知了,因为用这把尺读出来的2毫米,我们并不知道他与真实绝对的2毫米之间的误差值。而当我们用火来烤一下它,并且把它拉长一段,然后再考察一下它。我们不难发现,它还有100个刻度,因而它的“分辨率”还是1毫米,跟原来一样!然而,它的精度显然已经改变了。

对于编码器来说,“分辨率”除了与刻线数有关外,还会因电气信号方面的影响而改变,它是可调的,可控的,它可以随着对信号的细分而改变,细分倍数越高,分辨率越小,但是细分倍数越高,引入加大的误差就越大。而精度,更多的偏向于机械方面,一个产品生产出来后,他的精度基本已经固定(有些高精度的产品可以对信号进行补偿等来提高精度),这个数值是通过检测出来的,它与产品的做工,材料等综合性能息息相关,我们难以通过计算来得出一个具体的数值作为精度的依据,大多只能在使用的过程当中判断出精度的好坏来。

例如,对于13bit的,其码盘上的绝对位置数为:8192,则:计算出的分辨率为158角秒,也就是说,在读取数值的时候,要求数值间的跳动是158角秒,如果要读取的第一个数值是0,则第二个读取的数值要大于158,若要小于158,则我们需要选取更小的分辨率。当要读取158这个数值的时候,由于误差的存在,并不可能得到绝对的158秒,编码器所读取出来的158秒与绝对真实158秒之间的误差,就取决于精度了。所以说,精度,是在分辨率的基础上来谈的。

而并非越细分得到小的分辨率就越好,因为细分会引入误差和扩大误差,过度的细分将无法保证精度!需要多少倍的细分,能做到多少倍的细分,前提必须是在保证精度的基础上进行的,因为精度在使用前的不可见性而高倍细分是不负责任的。码盘质量越高,刻线越好,信号质量信号越好,细分后产生的误差就越小,这受到一台编码器综合性能的影响,这也就是为什么会在相同的参数下,会有不同品牌,不同价位编码器的一个原因。

例如,我们要读取的数值为1、2、4、7、8,我至少要选择1个单位的分辨率,选择2个单位的分辨率是显然不行的,因为我们读出了1这个数值,则2是读不出来的,在选择1个单位分辨率的基础上,我们读出来的1与真实绝对的1的误差就是精度。机床上的数控系统对于直光栅是有分辨率的设定的,需要读取的数值间隔小于分辨率,机床就有可能会抖动或出错等。

对于绝对式带增量信号编码器,能够精确的保持串行传输的绝对位置值与增量值同步,绝对值确切的对应一个增量信号,位置值一定在一个增量信号的正弦周期之内。如13位绝对式,带512线的增量信号,绝对位置间隔158秒,若要读取两个码盘位置中间的一个位置是不合适的,但是,我们可以通过对其所带的1Vpp增量信号进行细分,如细分100倍,则相当于在两个绝对位置之间又引入了几个细分后的位置,我们可以在绝对位置值的基础上,通过计算细分后的增量脉冲数而读取两个绝对位置之间的一个位置值,如:512线细分100倍,绝对位置1数值是0,绝对位置2数值是158,则读取这两个位置间的位置可以在位置1:数值0的基础上多出一个脉冲则是25,两个则是25x2=50……但是,带增量信号的绝对式编码器本身是不带细分的,这就要求用户能自行的对增量信号进行细分处理。

总结

LSB在位序中表示的是最低位,在ADC中对应的是分辨率。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

对于LSB的理解(位的LSB、模数转换的LSB) 的相关文章

随机推荐

  • 不同行业公司工资对比,计算机YYDS

    一 纳税标准 推荐一篇文章 xff1a 扣除社保 公积金年后 社保和公积金的扣除比例是22 左右 xff0c 工资在扣完社保和公积金的基础上再进行个税的扣除 税前19 2w xff0c 税前平均每月1 6w xff0c 扣除社保 公积金后年
  • 对实时操作系统多任务的一些理解

    一 什么是优先级反转 优先级反转 xff0c 是指在使用信号量时 xff0c 可能会出现的这样一种不合理的现象 xff0c 即 xff1a 优先级反转是指一个低优先级的任务持有一个被高优先级任务所需要的共享资源 高优先任务由于因资源缺乏而处
  • 【LeetCode刷题日记】数组和链表性质总结

    一 数据结构的存储方式 数据结构的存储方式只有两种 xff1a 数组 xff08 顺序存储 xff09 和链表 xff08 链式存储 xff09 这句话怎么理解 xff0c 不是还有散列表 栈 队列 堆 树 图等等各种数据结构吗 xff1f
  • C语言面向对象实现滑动均值滤波与平均值滤波

    文章目录 一 背景二 平均值滤波1 算法介绍2 代码实现3 实例 三 滑动均值滤波 xff08 Moving Average xff09 四 C语言面向面向对象实现滑动均值滤波 一 背景 在实际的数据采集中 xff0c 我们经常会取多次数据
  • 【LeetCode刷题日记】常用算法基础和理解及运用

    在我们LeetCode刷题过程中 xff0c 如果我们只是了解数据结构 xff08 数组 xff0c 链表 xff0c 数 xff09 的使用方法 xff0c 那我们在面对复杂的题目时 xff0c 是很难很好的解决问题的 xff0c 因此我
  • 【LeetCode刷题日记】数组类题目常见题型

    文章目录 303 区域和检索 数组不可变 https leetcode cn com problems range sum query immutable 304 二维区域和检索 矩阵不可变 https leetcode cn com pr
  • 【LeetCode刷题日记】队列类题目常见题型

    文章目录 225 用队列实现栈 https leetcode cn com problems implement stack using queues 剑指 Offer 09 用两个栈实现队列 https leetcode cn com p
  • 【LeetCode刷题日记】栈类题目常见题型

    文章目录 20 有效的括号 https leetcode cn com problems valid parentheses 225 用队列实现栈 https leetcode cn com problems implement stack
  • 回顾 nexus maven-snapshots 401 Unauthorized

    1 修改maven settings 文件 私库的用户名和密码 lt server gt lt id gt maven releases lt id gt lt username gt admin lt username gt lt pas
  • 【LeetCode刷题日记】树类题目常见题型

    文章目录 树基础知识 104 二叉树的最大深度 https leetcode cn com problems maximum depth of binary tree 102 二叉树的层序遍历 https leetcode cn com p
  • 【LeetCode刷题日记】常用算法基础和理解及运用

    文章目录 递归和迭代递归迭代迭代和递归的关系和区别 xff08 敲黑板 xff09 二分法典型的二分法二分法的变种找出第一个与key相等的元素的位置找出最后一个与key相等的元素的位置查找第一个等于或者大于Key的元素的位置查找第一个大于k
  • 编程常用快捷键,学完保证和大神一样件字如飞

    每次看到一下大神在编程时 xff0c 那打字的速度简直是恐怖 xff0c 而且几乎不会用到鼠标 xff0c 手不用离开键盘 xff0c 因此打字效率也高 而菜鸡的我 xff0c 每次写代码时 xff0c 有时候要在不同行之间跳动 xff0c
  • Clion中编译C/C++混合代码

    今天在Clion中编译C C 43 43 语言时 xff0c 出现了一个不容易发现的错误 项目文件包括三个文件 三个文件其实都是用C语言写的 xff0c 只是第一个文件的后缀是 cpp 如果在这种情况下直接编译 xff0c 会出现一下报错
  • 【LeetCode刷题日记】[447. 回旋镖的数量](https://leetcode-cn.com/problems/number-of-boomerangs/)

    LeetCode刷题日记 447 回旋镖的数量 题目 给定平面上 n 对 互不相同 的点 points xff0c 其中 points i 61 xi yi 回旋镖 是由点 i j k 表示的元组 xff0c 其中 i 和 j 之间的距离和
  • 【LeetCode刷题日记】[162. 寻找峰值]

    LeetCode刷题日记 162 寻找峰值 题目 峰值元素是指其值严格大于左右相邻值的元素 给你一个整数数组 nums xff0c 找到峰值元素并返回其索引 数组可能包含多个峰值 xff0c 在这种情况下 xff0c 返回 任何一个峰值 所
  • 基于Junit4+Mockito+PowerMock实现Controller+Service的单元测试

    一 导入的依赖 lt test gt lt dependency gt lt groupId gt org mockito lt groupId gt lt artifactId gt mockito core lt artifactId
  • 嵌入式编程之状态机

    文章目录 1 什么是状态机 xff1f 2 状态机编程的优点 1 提高CPU使用效率 2 逻辑完备性 3 程序结构清晰 3 状态机的三种实现方法switch case 法表格驱动法函数指针法小节 摘要 xff1a 不知道大家有没有这样一种感
  • VxWorks几种常用的延时方法

    转载于 xff1a https www vxworks net app 144 time facilities of vxworks 自用 VxWorks系统提供灵活多样的定时器机制 xff0c 有多种接口可以方便地实现延时 xff0c 文
  • 推荐一些嵌入式、C/C++的开源库和项目

    前言 想用代码实现一个功能时 xff0c 我们可以先看看是否有前辈已经实现了该功能 xff0c 并且开源分享在网上 一般我们自己造出来的轮子的可用性基本上是很难和大神们造的轮子相比的 因此多了解一下优秀的开源库的使用 xff0c 可以让我们
  • 对于LSB的理解(位的LSB、模数转换的LSB)

    之前对于LSB的理解 xff1a 最高有效位 xff08 MSB xff09 指二进制中最高值的比特 在16比特的数字音频中 xff0c 其第1个比特便对16bit的字的数值有最大的影响 例如 xff0c 在十进制的15389这一数字中 x