尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

数据采集卡从入门到精通(4):量化与编码——1LSB、Δ²/12噪声底与6.02N+1.76dB

数据采集卡从入门到精通(4):量化与编码——1LSB、Δ²/12噪声底与6.02N+1.76dB 采样解决什么时候看量化解决看到多少。本文完整拆解A/D转换的后半程分层电平怎么划分、四舍五入还是只舍不入、量化误差为什么是Δ²/12、1LSB到底怎么算、16位的SNR上限为什么恰好是98.08dB。全部配有数值实例与图表。全文约4500字。一、量化编码的六步标准流程A/D转换中的量化是指采样-保持电路的输出电压按某种方式划分到相应的离散电平上编码则是将量化后的数值按规则用代码表示。一个完整的量化编码过程可以拆为六步根据CLK时钟频率划分时间单位Ts 1/ff为ADC采样时钟频率确定ADC位数比如3位ADC可以表示000~111共8个代码获得模拟信号的最大/最小值之差设差值为A计算分层电平V A/TT2^N级数并确定每个代码对应的电平值量化通过四舍五入或只舍不入的方式把实际电压归到最近的层级编码将量化后的电平与对应代码匹配完成转换。下面用一个经典教材例题走一遍全程。二、经典实例0~7.5V信号的3位量化设模拟信号经采样保持后电压变化范围为07.5V用3位二进制编码。3位只有2³8个数值所以把07.5V分成8份电压区间基准值二进制代码0~0.5V0V0000.5~1.5V1V0011.5~2.5V2V0102.5~3.5V3V0113.5~4.5V4V1004.5~5.5V5V1015.5~6.5V6V1106.5~7.5V7V111比如某时刻采样电压为4.8V落在4.5~5.5V区间量化为5V编码101。一串采样电压 4.8V, 2.1V, 6.4V, 7.2V, 6.9V, 5.3V, 3.1V, 1.2V, 0.2V, 0.7V, 4.4V 就被转换成数字序列 100 010 110 111 111 101 011 001 000 001 100——A/D转换完成。这个例子里有两个重要细节值得放大。细节一分层电平与1LSB量化过程中所取的最小数量单位称为量化单位记作Δ或D、1LSB——即数字信号最低位为1时所对应的模拟量。上例中Δ 7.5V/8 ≈ 0.9375V。分辨率N位的ADC满量程FSR与1LSB的关系1LSB FSR / 2^N实际产品的速算16位、±10V满量程跨度20V的采集卡1LSB 20V/65536 ≈ 305μV能分辨0.3mV的电压变化12位同样量程下1LSB 20V/4096 ≈ 4.88mV只能分辨约5mV的变化——四倍的位数差距意味着十六倍的分辨率差距。细节二四舍五入 vs 只舍不入上表的划分方式是只舍不入型0~0.5V都当0V。它的量化误差范围是 -Δ0或0Δ取决于定义存在系统性偏差。更优的方案是四舍五入mid-rise型划分把边界放在0.25V、0.75V、1.25V……这样任何电压到最近层级的距离都不超过±Δ/2量化误差为±0.5LSB且正负误差对称、均值为零——这是无偏估计的理想特性。优质ADC的转移函数都采用四舍五入型划分。三、量化误差原理性的税无论工艺多么精湛模拟信号电压不一定被Δ整除量化前后必然存在误差e。量化误差属于原理误差它是无法消除的——这是A/D转换的宿命。唯一的缓解办法是增加位数A/D转换器的位数越多各离散电平之间的差值越小量化误差越小。把量化误差看作落在±Δ/2四舍五入型内的随机变量均匀分布其方差为σ² (1/Δ)·∫[-Δ/2 → Δ/2] e² de Δ²/12这就是著名的Δ²/12量化噪声公式。它说明量化噪声功率只与步长有关每把1LSB减半位数1噪声功率降为1/4噪声幅度降为1/2。四、SNR上限6.02N 1.76dB若输入满幅正弦信号峰峰值恰好占满量程信号功率与量化噪声功率之比的理论最大值为SNR_max 6.02·N 1.76 dB推导思路满幅正弦的功率为(Δ·2^N/2√2)²量化噪声为Δ²/12两者相除取对数即得。几个典型值位数N理想SNR上限8位49.92 dB12位74.00 dB16位98.08 dB24位146.24 dB这组数字给出了三条工程直觉每加1位SNR改善约6dB——分辨率是拿钱换信噪比datasheet上标注的位数是理想值实际器件的热噪声、谐波失真会让真实SNR更低由此引出有效位数ENOB的概念本系列第10篇详解24位的146dB在现实中几乎不可达——那需要噪声底低到纳伏级地球环境的电磁噪声都不允许。所以24位卡的实际有效位通常在19~22位之间。五、编码方式同样的数不同的写法量化后的数值用什么二进制形式表达常见三种二进制原码/偏移二进制适合单极性0~FSR或双极性信号的半量程偏置编码二进制补码±5V双极性信号的标准编码——正电压对应正数、负电压对应负数加减运算直接进行。AD7606等工业ADC即采用补码输出采集卡上传的16位数据常以补码解析格雷码相邻代码只有一位变化用于某些计数器场景避免瞬态错码。数据链路中的大小端问题也属于编码层面多字节数据在传输时高字节在前大端还是低字节在前小端必须约定一致否则读出的数值面目全非。实际采集卡固件常用SWAP16之类的宏做集中转换保证传输字节序统一、入库后再转成本机序。六、分辨率不足的两种症状分辨率选低了会出现两种典型症状学会识别它们能少走很多弯路台阶效应缓变信号如温度的曲线变成一段段水平线拼接的阶梯——相邻两个采样的码值相同跳变时一次跳一格。这就是1LSB大于信号变化量的视觉证据低位乱跳直流信号的读数在±几个码之间随机抖动——这不是量化误差大而是系统噪声接近或超过1LSB把量化台阶填平了。此时增加位数已经无益噪声才是瓶颈应优先治理前端噪声或利用过采样。七、位数的冗余哲学传感器手册里有一个容易被忽略的忠告由于电压曲线时常会有不可预见的尖峰选用ADC时通常需要多冗余一些位数。举例输入电压范围02V偶尔有高达8V的尖峰。若把检测范围设为08V8位ADC最小分辨率约31mV小于它的变化被过滤掉若范围设为0~2V分辨率提高到约8mV但8V尖峰会超出量程。冗余位数就是用来化解这种精度与保护的两难高位卡用宽量程高分辨率同时兼顾两者。八、动手实验量化你的信号importnumpyasnp fs1000tnp.arange(2000)/fs x1.5*np.sin(2*np.pi*5*t)2.5# 0~4V信号forNin(3,8,16):q(2**N-1)# 级数codenp.round(x/4*q)# 量化vcode/q*4# 还原电压errv-x snr10*np.log10(x.var()/err.var())print(f{N}位: 最大误差{np.abs(err).max()*1000:.2f}mV, f实测SNR{snr:.1f}dB, 理论{6.02*N1.76:.1f}dB)运行结果会直观显示3位时误差高达百毫伏级、波形呈明显台阶16位时误差在亚毫伏级、SNR逼近98dB理论上限。亲手跑一遍6.02N1.76dB就不再是纸面公式。九、常见问题FAQQ116位卡的最后一个字有意义吗静态测量下若噪声超过1LSB末位就是噪声但过采样平均可以榨出有效信息第10篇。Q2量化误差能通过标定消除吗不能。标定消除的是失调与增益误差系统性量化误差是随机性的原理误差。Q3为什么有的卡标16位无丢码无丢码no missing code表示所有65536个码值都能出现。劣质器件可能丢失某些码等效于局部分辨率下降。Q4ENOB和标称位数差多少算正常一般1~3位差距都正常差5位以上说明系统噪声严重超标应查前端而非怪芯片。十、总结量化编码六步走定时、定位、算差、分层、归整、贴码。核心公式三条1LSBFSR/2^N量化噪声Δ²/12SNR上限6.02N1.76dB。位数是分辨率的货币每多1位花的是硅片面积和价格买到的是2倍幅度精度和6dB信噪比。下一篇我们打开ADC的心脏看六大架构中最主流的一位主角——SAR逐次逼近型。下一篇预告《SAR逐次逼近型ADCN次问答定乾坤》
返回列表