ADC广泛用于各种应用中,尤其是需要处理模 拟传感器信号的测量系统,比如测量压力、流量、速度和温度的 数据采集系统(仅举数例)。在任何设计中,理解这些类型应用的总系统精度始终都是非常重 要的,尤其是那些需要对波形中极小的灵敏度和变化进行量化的系统。理想情况下,施加于信号链输入端的每一个伏特都由ADC 以数字表示一个伏特的输出。但是,事实并非如此。所有转换器 和信号链都存在与此相关的有限数量误差。
今天为大家分享的文章描述了与模数转换器本身相关的误差,还揭示了转换器内部的不精确性累积到何种程度即会导致这些误差。
无论何种信号链,转换器都是系统的基本要素。为设计选择的任 何ADC都会决定系统的总精度。换言之,系统精度不可能高于转换器的最低有效位(LSB)大小。为了表明这一点,让我们来看一个 简短的ADC不精确性指南。
首先,注意到由于ADC不是理想的,并且分辨率有限,因此它们 在输出端只能显示有限数量的信息表示。表示的信息数量由转换 器满量程输入除以2N 表示,N为转换器的理想位数。

例如,假设选择一个12 bit ADC,则它可在输出端以4096个数字表示施加于转换器输入端的任何信号。这些表示信息确实存在有限量的误差。因此,如果12位ADC的输入满量程(VFS)为10 V p-p,那么其理想情况下的LSB大小为2.44 mV p-p,精度为±1.22 mV。
而实际上,ADC是非理想的。在转换器内部存在一定噪声, KT/C
甚至直流中也有噪声。记住,1 kΩ电阻等效于4 nV∙Hz (1 Hz带 宽,25°C)。注意,查看12位ADC数据手册时,SNR通常为大 约70 dB到72 dB。但是,根据下列公式,一个12位ADC理想情 况下应当具有74 dB:
SNR (dB) = 6.02 × N + 1.76 (公式2 )
因此,实际上12位分辨率是无法达到的,因为转换器本身存在一 定的不精确性,如图2所示。

这些不精确性或误差决定了转换器表示信号的效率,并最终为信号链所接收。失调误差定义为传递函数无法通过零点的模拟值。 增益误差是失调误差为零时理想与实际传递函数之间的满量程数 值之差。通常意义上的线性度误差或非线性度是指零电平与满量 程之间的直线偏差,如图1所示。
对最基本的模数转换器误差进行定义并有所了解后,再说明这些误差的区别会有些帮助。大部分ADC的失调和增益都存在这种小误差,通常可以忽略或通过外部模拟电路调节(消除),或者采用数字技术校正。然而,诸如线性度、量化和温度系数等其他误差无法轻易调节或消除。
模数转换器线性度只与转换器自身有关,即取决于架构和工艺变化。有很多方法可以校正,但都很昂贵。设计人员有两种选择: 购买更好、成本更高的转换器,或采用数字手段校正线性度。数字校正的成本也十分高昂。这意味着可能需要更多资源来指定 DSP或FPGA,因为线性度会随温度和工艺的变化而改变。根据采样速率、IF和分辨率,数字校正可能需要广泛的特性表述和查找表,以便即时校正或调节ADC的性能。
线性度有两种类型的误差:它们是差分非线性和积分非线性, 通常分别称为DNL和INL。DNL定义为偏离理想值的一切误差或偏 差。换言之,它表示两个相邻代码的模拟差与理想代码值VFS/2^N 之间的偏差。可将其看作与ADC的SNR性能相关的因素。随着代码的偏差越来越大,转换数也随之下降。该误差在温度范围内的界限为±0.5 LSB,可保证无失码。
INL定义为零电平和满量程之间的理想直线近似曲率偏差。多数情况下,INL决定了ADC的SFDR性能。INL总偏差形状可以决定最主要的谐波性能。比如,INL曲线呈弓形会相应产生更差的偶次谐 波,而INL曲线呈S弓形则通常产生奇次谐波。该误差本质上与频 率有关,并与这类误差分析无关。
哪怕可以消除静态失调和增益误差,与失调和增益误差有关的温度系数将会依然存在。
例如,一个12位ADC具有10 ppm增益误差,或FSR/°C = 0.001%/°C。 12位系统中的1 LSB为¼096,或者近似等于0.024%。
因此,若125°C ∆ (–40°C至+85°C),则产生±2.5 LSB增益温度系数误差,或0.001% × 125 = 0.125%。
其中,0.125/0.024 = 5.1或±2.55 LSB。
对于失调温度系数,5 ppm失调误差或FSR/°C = 0.0005%/°C。
这将产生±1.3 LSB失调温度系数误差,或 0.0005% × 125 = 0.0625。其中,0.0625/0.024 = 2.6或±1.3 LSB。
ADC误差分析影响转换器性能的其它误差来源有:CMRR、时钟抖动、固有电 路板噪声、耦合等等。所有这些误差最终都决定了ADC如何有效 地表示信号;通常在频率域内ADC能更高效地表示自身。 从时域角度来看,分析转换器的总精度需要了解下面五个误差:
只需进行方和根(RSS)运算,所有这些误差源构成±3.5 LSB总转换器 误差。这个结果可能过于悲观了。然而,统计容差结果可能过于 乐观了,或者总误差之和除以误差数,即(0.5 + 2.5 + 1.3 + 2)/4 = ±1.58 LSB。ADC实际容差应当介于这两种思路或方法之间。 因此,当在转换器中加入精度误差的时候,或者进行任何系统 精度分析的时候,设计人员应当使用加权误差源法,然后对这 些误差源进行RSS计算。这是确定ADC总误差的最佳方法。因 此,±0.5 LSB的相对精度应当保持在100%。然而,±2.5 LSB增益 温度系数误差应当是总误差的66%,或2.5/(0.5 + 1.3 + 2) × 100。 ±1.3 LSB的失调温度系数误差将为总误差的26%,或 1.3/(0.5 + 2.5 + 2) × 100。±2 LSB的电源灵敏度误差将为总误差的47%,或2/(0.5 + 1.3 + 2.5) × 100。将这些加权误差以RSS方式相加,或者进行平方根计算:

则总误差为±2.0 LSB,这是一个更接近实际的结果,介于上文乐观方法和悲观方法得出的结果之间。
ADC带宽精度 ADC还有建立时间精度。转换器的内部前端需要具有足够的带宽(BW),才能精确地对信号进行采样。否则,累积误差将大 于上文讨论的结果。 一般而言,一个ADC的内部前端需要在半个周期或采样时钟周期内建立(0.5/Fs),这样才能提供对内模拟信号捕捉的精确表达。因 此,对于一个12位ADC(采样速率为2.5 GSPS,满量程输入范围为 1.3 V p-p)来说,全功率带宽(FPBW)可通过下列瞬态公式推导: 1 LSB = VFS × e^(-t/τ) 求解t: t = −τ × ln(1 LSB/VFS) 代入τ = 1/(2 × π × FPBW),一个时间常数,求解FPBW: FPBW = −(1/(2 × π × t)) × ln(1 LSB/VFS) 现在,令t = 0.5/Fs,则样本建立所需的时间如下(样本周期为1/Fs): FPBW = −(Fs/π × ln(1 LSB/VFS) = –(2.5G/π) × ln(317 mV p-p/1.3)) = 6.62 GHz. 这样会使ADC内部前端所需的带宽或FPBW最小。这是转换器内部 前端建立至1 LSB以内并正确采样模拟信号所需的带宽。为了满 足这类ADC的1 LSB精度要求,这将会需要花费数个时间常数。 一个时间常数为24 ps或τ = 1/(2 × π × FPBW)。要了解ADC满量程 范围内达到LSB尺寸要求所需的时间常数数量,就需要找出满量 程误差或%FS。或者1 LSB = FS/(2N),其中N = 位数,或1.3 V p-p/ (212) = 317 mV p-p,且%FS = (LSB/FS) × 100 = 0.0244。 通过描绘欧拉数或eτ ,可以绘出一条曲线,以便每次通过常数都 能方便地看出相对误差。如图3可见,12位ADC样本建立至大约 1 LSB以内需时8.4个时间常数。

设计人员便能估算用于转换器的最大模拟输入频率或采样 带宽,并依旧建立至1 LSB误差以内。超出这个范围,则ADC无法 精确表示信号。这可以简单定义为:FMAX = 1/(τ × 时间常数数量)或 1/(24 ps × 8.4) = 4.96 GHz。 记住,这里表示的是最佳情形,并假定采用单极点ADC前端。并 非所有现实中的转换器都以这种方式工作,但这是一个很好的开 端。例如,上文描述的模型最高可适用至12位,但针对14/16位 以及更高位则需要根据这些细微影响采用二阶模型,以使建立时 间扩展至预测的一阶模型以外。 关于ADC带宽的简要说明 记住,ADC全功率带宽不同于上文定义的转换器可用带宽或采 样带宽。它可以当成是模拟信号输入运算放大器的全功率带 宽(FPBW),信号更像是三角波信号,并且输出端存在大量失 真。FPBW是ADC精确捕捉信号并使内部前端正确建立所需的带 宽(前文示例中为6.62 GHz)。选择一个IF并在该范围内使用转换器 不是一个好主意,因为系统的性能结果会大幅改变;在大约 5 GHz处,如上文示例所示,根据转换器数据手册中的额定分辨率 和性能指标,满量程带宽远高于转换器自身的最大采样带宽。设 计是围绕采样带宽而展开的。所有设计都应当避免使用额定全功 率带宽的某一或全部最高频率部分,否则动态性能(SNR/SFDR)会 下降并大幅改变。为了确定高速ADC的采样带宽,应当使用上文 中的示例,因为这些数据并非总能从数据手册中获取。通常,数 据手册会规定甚至列出转换器采样带宽内经过生产测试、能够保 证额定性能的频率。然而,在较老的ADC产品中这些测试频率在 数据手册中并不总是以FMAX来定义。今后还需要对行业中的这些 带宽术语做出更好的说明、定义和测试。 结论 本文给出了有关如何查看一般静态ADC的不精确性误差和涉及带 宽的ADC不精确性误差的指导说明。还提供了针对ADC误差以及 这些误差如何影响信号链的更深入解释。请记住,并非所有的元 件都采用相同的方式构建,这对于有源和无源器件来说都是正确 的。创建囊括所有这些误差的电子表是插入不同信号链元件的简 便方法,可更快进行评估并决定元件的权衡取舍。这在元件之间 进行成本、尺寸和功耗的权衡取舍以及衡量信号链性能差异方面 尤为如此。
📢博客主页:https://blog.csdn.net/weixin_43197380📢欢迎点赞👍收藏⭐留言📝如有错误敬请指正!📢本文由Loewen丶原创,首发于CSDN,转载注明出处🙉📢现在的付出,都会是一种沉淀,只为让你成为更好的人✨文章预览:一.分辨率(Resolution)1、工业相机的分辨率是如何定义的?2、工业相机的分辨率是如何选择的?二.精度(Accuracy)1、像素精度(PixelAccuracy)2、定位精度和重复定位精度(RepeatPrecision)三.公差(Tolerance)四.课后作业(Post-ClassExercises)视觉行业的初学者,甚至是做了1~2年
我正在尝试使用正则表达式验证美元金额:^[0-9]+\.[0-9]{2}$这工作正常,但每当用户提交表单并且美元金额以0(零)结尾时,ruby(或rails?)将0砍掉。所以500.00变成500.0,因此正则表达式验证失败。有没有办法让ruby/rails保持用户输入的格式,而不管尾随零? 最佳答案 我假设您的美元金额是小数类型。因此,用户在字段中输入的任何值在保存到数据库之前都会从字符串转换为适当的类型。验证适用于已转换为数字类型的值,因此在您的情况下,正则表达式并不是真正合适的验证过滤器。不过,您有几种可能性可以解决这个问
目录0专栏介绍1平面2R机器人概述2运动学建模2.1正运动学模型2.2逆运动学模型2.3机器人运动学仿真3动力学建模3.1计算动能3.2势能计算与动力学方程3.3动力学仿真0专栏介绍?附C++/Python/Matlab全套代码?课程设计、毕业设计、创新竞赛必备!详细介绍全局规划(图搜索、采样法、智能算法等);局部规划(DWA、APF等);曲线优化(贝塞尔曲线、B样条曲线等)。?详情:图解自动驾驶中的运动规划(MotionPlanning),附几十种规划算法1平面2R机器人概述如图1所示为本文的研究本体——平面2R机器人。对参数进行如下定义:机器人广义坐标
网站的日志分析,是seo优化不可忽视的一门功课,但网站越大,每天产生的日志就越大,大站一天都可以产生几个G的网站日志,如果光靠肉眼去分析,那可能看到猴年马月都看不完,因此借助网站日志分析工具去分析网站日志,那将会使网站日志分析工作变得更简单。下面推荐两款网站日志分析软件。第一款:逆火网站日志分析器逆火网站日志分析器是一款功能全面的网站服务器日志分析软件。通过分析网站的日志文件,不仅能够精准的知道网站的访问量、网站的访问来源,网站的广告点击,访客的地区统计,搜索引擎关键字查询等,还能够一次性分析多个网站的日志文件,让你轻松管理网站。逆火网站日志分析器下载地址:https://pan.baidu.
一、机器人介绍 此处是基于MATLABRVC工具箱,对ABB-IRB-1200型号的微型机械臂进行正逆向运动学分析,并利Simulink工具实现对机械臂进行具有动力学参数的末端轨迹规划仿真,最后根据机械模型设计Simulink-Adams联合仿真。 图1.ABBIRB 1200尺寸参数示意图ABBIRB 1200提供的两种型号广泛适用于各作业,且两者间零部件通用,两种型号的工作范围分别为700 mm 和 900 mm,大有效负载分别为 7 kg 和5 kg。 IRB 1200 能够在狭小空间内能发挥其工作范围与性能优势,具有全新的设计、小型化的体积、高效的性能、易于集成、便捷的接
目录一.大致如下常见问题:(1)找不到程序所依赖的Qt库version`Qt_5'notfound(requiredby(2)CouldnotLoadtheQtplatformplugin"xcb"in""eventhoughitwasfound(3)打包到在不同的linux系统下,或者打包到高版本的相同系统下,运行程序时,直接提示段错误即segmentationfault,或者Illegalinstruction(coredumped)非法指令(4)ldd应用程序或者库,查看运行所依赖的库时,直接报段错误二.问题逐个分析,得出解决方法:(1)找不到程序所依赖的Qt库version`Qt_5'
Ruby到底是怎么做到的?Jörg或其他人是否知道幕后发生的事情?不幸的是,我不太了解C,所以bignum.c对我帮助不大。我只是有点好奇有人可以解释(用简单的英语)它使用的任何神奇算法背后的理论。irb(main):001:0>999**99936806348825922326789470084006052186583833823203735320465595962143702560930047223153010387361450517521869134525758989639113039318944796977164583238219236607653663113200177617
我想使用ruby-prof和JMeter分析Rails应用程序。我对分析特定Controller/操作/或模型方法的建议方法不感兴趣,我想分析完整堆栈,从上到下。所以我运行这样的东西:RAILS_ENV=productionruby-prof-fprof.outscript/server>/dev/null然后我在上面运行我的JMeter测试计划。然而,问题是使用CTRL+C或SIGKILL中断它也会在ruby-prof可以写入任何输出之前杀死它。如何在不中断ruby-prof的情况下停止mongrel服务器? 最佳答案
我目前有一个运行Ruby1.8.7和Rails2.3.2的RubyonRails项目我有一些从数据库中读取数据的单元测试,特别是两个连续项目的日期时间列,这两个项目应该相隔24小时。在一项测试中,我将项目2的日期时间设置为与项目1的日期时间相同。当我执行断言以确保两个值相等时,测试在rails2.3.2下工作正常。当我升级到rails2.3.11时,测试失败显示两次之间的差异将关闭并出现以下错误:expectedbutwas.这两个版本的rails中似乎存在浮点转换问题。如何解决float问题? 最佳答案 这也发生在我身上,我最终这
文章目录认识unity打包目录结构游戏逆向流程Unity游戏攻击面可被攻击原因mono的打包建议方案锁血飞天无限金币攻击力翻倍以上统称内存挂透视自瞄压枪瞬移内购破解Unity游戏防御开发时注意数据安全接入第三方反作弊系统外挂检测思路狠人自爆实战查看目录结构用il2cppdumper例子2-森林whoishe后记认识unity打包目录结构dll一般很大,因为里面是所有的游戏功能编译成的二进制码游戏逆向流程开发人员代码被编译打包到GameAssembly.dll中使用il2ppDumper工具,并借助游戏名_Data\il2cpp_data\Metadata\global-metadata.dat