首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >为测量基准源 uV 级别跳动设计信号链(YUNSWJ 仿真版)

为测量基准源 uV 级别跳动设计信号链(YUNSWJ 仿真版)

作者头像
云深无际
发布2026-01-07 13:55:43
发布2026-01-07 13:55:43
1120
举报
文章被收录于专栏:云深之无迹云深之无迹

昨天有个读者问了这样一个问题:

也是上海的
也是上海的

也是上海的

看似是一个简单的 ADC 推荐问题,其实也是一个计算问题。

我们信号链最重要的问题就是,信号源是什么样的?(这个读者还好,基本上把话说明白了),可以先需求“翻译成工程指标”,再看一下这个信号链到底有多难、要做到什么级别。

把需求参数化

被测量:基准电压

典型值:

抖动(上面说的 Jitter 40 µV,我先理解为低频随机波动量级 ≈ 40 µV)

测量目标:

希望 ADC 能分辨 ≈ 10 µV 级别 的变化(否则 40 µV 的抖动也看不清)

测量范围:1.15~1.25 V(总跨度 100 mV)

所以本质需求可以写成:

在 1.2 V 直流附近,测量 100 mV 范围内的电压,要求系统总噪声 量级,能够看清 ~40 µV 波动。

(先不管读者测到没有,我先摸你一下这个抖动的样子)

先用一个简单模型,把“1.20000 V 基准 + 40 µV 抖动”的信号源模拟出来,并画出了波形:

上图:20 s 内的整体偏移(纵轴是相对于 1.20000 V 的偏移,单位 µV)

下图:前 1 s 的放大细节,能看到样本点在几十 µV 范围内乱跳。

三类成分:

DC: 1.20000 V

慢变化:

0.05 Hz 的很慢正弦(模拟温漂/慢变);

一个小步长的随机游走(模拟长期漂移)。

高频抖动:高斯白噪声,RMS ≈ 40 µV。

运行结果的统计:

代码语言:javascript
复制
=== Simulated reference source statistics ===
Nominal value: 1.20000 V
Simulated mean: 1.199993 V (offset -6.56 µV)
Simulated RMS jitter (total): 42.09 µV

也就是说,这个“虚拟基准源”:

长时间平均值几乎就是 1.20000 V(偏差只有几 µV)

总 RMS 抖动 ≈ 42 µV,和设定的 40 µV 很接近

可以把纵轴理解为:如果 ADC 的输入参考噪声是 10 µV_rms 级别,那它测到的每个点都会在图上的曲线周围再“抖”一圈;如果 ADC 自身噪声 ≈ 40 µV_rms,那曲线会被“糊掉”,你几乎分不清是参考在抖,还是 ADC 自己在抖。

现在我们把“参考源 + 不同级别 ADC”叠加到一起,看测出来是什么样子

代码语言:javascript
复制
=== 各种 ADC 情况的测量误差 (相对于真实参考) ===
高性能 ADC(2 µV_rms 噪声): 名义 24 bit, LSB ≈ 0.15 µV, 测量误差 RMS ≈ 1.94 µV
目标水平 ADC(10 µV_rms 噪声): 名义 22 bit, LSB ≈ 0.60 µV, 测量误差 RMS ≈ 10.08 µV
一般 ADC(40 µV_rms 噪声): 名义 18 bit, LSB ≈ 9.54 µV, 测量误差 RMS ≈ 40.73 µV

上面这张图,有三行子图(我简单解读一下):

参考源:

DC:1.20000 V

低频漂移:0.05 Hz 的慢正弦 + 一个很慢的随机游走

高频抖动:RMS ≈ 40 µV 的白噪声

ADC 模型:

先按给定满量程 2.5 V 和名义位数做量化

再叠加额外的测量噪声(代表 ADC + 前端链路的总输入参考噪声)

三种情况:

高性能 ADC

名义 24 bit

LSB ≈ 0.15 µV

额外测量噪声:2 µV_rms

目标水平 ADC

名义 22 bit

LSB ≈ 0.60 µV

额外测量噪声:10 µV_rms(就是你想要的大致目标)

一般 ADC

名义 18 bit

LSB ≈ 9.54 µV

额外测量噪声:40 µV_rms

每个子图里:

实线:真实参考的偏移(相对 1.20000 V,单位 µV)

带圆点的虚线:对应 ADC 的测量值

只展示了前 1 秒,便于看清微小变化。

高性能 ADC(2 µV_rms)

测量曲线几乎贴着真实曲线,只是轻微抖动。

统计结果:

代码语言:javascript
复制
高性能 ADC: LSB ≈ 0.15 µV, 测量误差 RMS ≈ 1.94 µV

换句话说:参考本身抖 40 µV,你的测量误差只有 ~2 µV, 可以非常清楚地“看清真实抖动的细节”

目标水平 ADC(10 µV_rms)

测量曲线明显比真实曲线更“毛糙”,但大趋势仍然跟得上。

统计结果:

代码语言:javascript
复制
目标水平 ADC: LSB ≈ 0.60 µV, 测量误差 RMS ≈ 10.08 µV

这就对应我们前面算过的:

信号(参考抖动):40 µV

噪声(测量误差):10 µV

信噪比 ≈ 12 dB

你能看出来“有 40 µV 级的抖动”,但如果想对抖动的形状/分布做精细统计,需要进一步平均或再提升精度。

一般 ADC(40 µV_rms)

测量曲线几乎看不出“真实曲线”的样子,完全是一坨抖动。

统计结果:

代码语言:javascript
复制
一般 ADC: LSB ≈ 9.54 µV, 测量误差 RMS ≈ 40.73 µV

这时ADC 噪声已经和参考自身的 40 µV 抖动同级别,你看到的波动是“参考抖动 + ADC 自己乱跳”的混合,很难分辨。

“10 µV 级别”这个指标是合理的:在 10 µV_rms 测量噪声下,确实可以区分 40 µV 的参考抖动;进一步平均(降低带宽)可以提升观测信噪比。

ENOB/LSB 只要足够细,量化误差不是主矛盾:22 bit 时 LSB≈0.6 µV,远小于 10 µV,真正主导的是“模拟噪声”(那 10 µV_rms)。

如果 ADC 噪声也在 40 µV 级别,就没有分析参考抖动的意义了:系统测到的是“参考 + 自己”的叠加,很难分离。

看看频域的结果

我这一步做了两件事:从频域看“参考源 + 各种 ADC”的样子,在“目标水平 ADC(10 µV_rms 噪声)”上做了一个时间平均实验

代码语言:javascript
复制
=== 目标水平 ADC(10 µV_rms 噪声)在 1 s 平均前后的误差 ===
平均前测量误差 RMS ≈ 10.11 µV
1 s 移动平均后误差 RMS ≈ 38.78 µV

第一张图是参考源偏移和三种 ADC 测量结果的单边幅度谱(纵轴是 µV 级幅度,log 坐标):

参考源那条曲线:

在低频(<1 Hz)有比较明显的能量(慢漂移 + 随机游走)

高频段更多是 40 µV 抖动带来的白噪感

高性能 ADC(2 µV_rms):在 0~10 Hz 内,频谱几乎和参考源重叠,说明 ADC 的噪声远低于参考源,基本没有把自己的“声”加上去。

目标 ADC(10 µV_rms):谱线明显在参考源之上,但差距不算离谱,说明 ADC 自己的噪声开始显著贡献,但仍然能看出参考源的低频成分

一般 ADC(40 µV_rms):整条频谱都被“抬高”了,特别是中高频部分几乎完全是 ADC 噪声主导。此时你看到的“波动”,已经很难说是参考的抖动还是 ADC 自己在抖。

这个频谱图基本验证了我们之前的直觉:

如果想分析 40 µV 抖动,ADC 这条链路最好压到 10 µV 甚至更低,否则频谱会被抬得太高。

在目标 ADC 上做“1 s 移动平均”

我选了“目标水平 ADC(10 µV_rms 噪声,名义 22bit)”,对它做了一个 1 s(100 点)的移动平均滤波,然后对比:

真正参考(蓝色)

原始测量(虚线 + 圆点)

1 s 平均后的结果(虚线 + 方块)

并计算“平均前后”的测量误差 RMS:

代码语言:javascript
复制
=== 目标水平 ADC(10 µV_rms 噪声)在 1 s 平均前后的误差 ===
平均前测量误差 RMS ≈ 10.11 µV
1 s 移动平均后误差 RMS ≈ 38.78 µV

注意:这个结果看起来有点“反直觉”(平均后噪声变大),这其实是因为我这里用的是最简单的 “滑动平均 + 在同一条真实参考上做差”,随机游走 / 非平稳分量在窗口里被引入了额外误差;真实设计中,我们会用更规范的数字滤波设计 + 在严格定义的带宽上计算噪声,而不是这样粗暴地对齐逐点误差。

所以这个部分可以先当“形态直观演示”看:

图上可以看到 1 s 平均后,曲线更跟随慢变化,而把高频抖动抹平了;真正的噪声改善,需要在严格定义的窄带(比如 0.1~1 Hz)内重新计算 RMS

算完的样子大概是这样

需要多少位分辨率?

只看“码宽”层面

假设 ADC 满量程就是 1.15~1.25 V 这一段 100 mV(相当于做了很高的放大或量程匹配),那么:

码数

对应位数:

所以在“最佳量程匹配”的理想情况下,只从量化步长看,大约 14 bit 就够分辨 10 µV;但这只是“理想 LSB”,没有考虑噪声和误差。

真实情况:ADC 一般满量程是几伏,而不是 100 mV

更现实一些:很多 ADC 满量程是:

1.25 V

2.5 V

4.096 V

我们刚才用 Python 算了一下,在这些满量程下,要让 LSB = 10 µV,需要多少“名义位数”:

代码语言:javascript
复制
Required nominal resolution (bits) for different full-scale ranges:
FS = 1.250 V -> levels =    125000, bits ≈ 16.93
FS = 2.500 V -> levels =    250000, bits ≈ 17.93
FS = 4.096 V -> levels =    409600, bits ≈ 18.64

满量程 1.25 V → 约 17 bit

满量程 2.50 V → 约 18 bit

满量程 4.096 V → 接近 19 bit

所以如果你用 2.5 V 或 4.096 V 参考,想在电压轴上达到 10 µV 一格,名义上至少要 18~19 bit。

从“噪声”和 ENOB 角度再算一遍

仅仅“有这么多位”还不代表有这份“精度”,关键是有效位数(ENOB)和总噪声

假设:

ADC 满量程 为 2.5 V

希望 系统总输入参考噪声 ≤ 10 µV

等效 SNR(相对于满量程):

然后:

Python 算的结果(对 1.25/2.5/4.096 V 三种满量程):

代码语言:javascript
复制
Required ENOB if total input-referred noise_rms ≤ 10 uV:
FS = 1.250 V -> SNR ≈   98.9 dB, ENOB ≈ 16.14 bits
FS = 2.500 V -> SNR ≈  104.9 dB, ENOB ≈ 17.14 bits
FS = 4.096 V -> SNR ≈  109.2 dB, ENOB ≈ 17.85 bits

也就是说:

满量程 2.5 V 时,要做到 10 µV rms 噪声,对应 约 105 dB SNR,≈17.1 bit ENOB

满量程 4.096 V 时,要 ≈109 dB SNR,≈17.9 bit ENOB

而市面上“24 bit ΔΣ ADC”在低速采样、数字滤波打开、OSR 很高的情况下,能在几十 Hz 甚至更低带宽内给你 18~20 bit ENOB 是有可能的,但需要:低噪前端,干净参考,非常好的 PCB 和屏蔽,合理的采样率和数字滤波(平均)

40 µV 抖动 vs 10 µV 噪声:信噪比够不够?

如果参考源本身有 ~40 µV 的随机波动,你的测量噪声如果控制在 ~10 µV:

参考抖动:信号量级 ≈ 40 µV

测量噪声:10 µV

简单看 SNR:

12 dB 可以看出趋势和波动,但如果你想定量分析 jitter 分布(比如标准差)、对比不同器件小差别,更理想是:

测量噪声 ≤ 5 µV → 对 40 µV 信号有 18 dB 左右 SNR

甚至 ≤ 2 µV → SNR > 26 dB

这就把对 ADC 和信号链的要求再往上抬了一档:要么进一步提高 ENOB,要么用时间平均(降低带宽,从而降低等效噪声)。

带宽和噪声密度的视角

你说“Jitter 40 µV”,没给频带,我假设你关注的是非常低频(比如 0.1~10 Hz 或几十 Hz 内)的漂移和抖动。

如果目标是:

在带宽 内,**总噪声 **,

把它看作白噪声(先忽略 1/f),那噪声密度需求是:

这个指标从纯“µV/√Hz”角度看其实不算变态,真正难的是低频 1/f 噪声和长期漂移

运放/ADC 的 0.1–10 Hz 低频噪声动不动就是几十 µVpp,等效 RMS 也很容易跟 10 µV 同级甚至更大;要选 零漂移/斩波运放、低 1/f 的 ADC,并且尽可能把测量做成“差分 + 拍频/调制”形式,绕开低频 1/f 噪声。

对整个信号链难度的评价

综合来看:

从纯 ADC 指标角度:

需要 名义分辨率 ≥ 18–19 bit(取决于满量程);需要 有效位数 ENOB ≥ 17–18 bit,在你关心的带宽内(可能是 0.1~10 Hz 或几十 Hz)→ 这属于 高端精密 ΔΣ ADC + 高 OSR + 数字滤波 才能搞定的等级,但不是科幻。

从系统噪声和漂移角度:

需要 极低噪声/低漂移的参考源(你测的就是它本身),测量系统对它的额外引入误差要远小于 40 µV;需要 极低 1/f 噪声的前端运放或干脆不用运放直接驱动 ADC(如果 ADC 输入结构允许);需要 极好的地线、屏蔽、滤波,优先差分测量。

从观测目标角度:40 µV 抖动本身不算“极限小”,但你想用 10 µV 噪声去看它,其实是要观测到约 4 倍的 SNR,属于“高精度实验测量”,而不是普通应用。

实现手段:

选一颗高性能 24/32 bit ΔΣ ADC,配置合适的 OSR 和数字滤波,使得在低频带宽内 ENOB ≥ 18 bit;通过 前端增益 把你关注的 100 mV 范围尽量撑满 ADC 量程(比如放大 10 倍变成 1 V 范围),这样可以进一步提高等效分辨率;使用 长时间平均 / 低通滤波 降低测量噪声,更清晰地看出 40 µV 级别的抖动。

做完整的噪声预算模型(ADC 量化+ADC 内部噪声+参考噪声+运放低频噪声+热噪声)

代码语言:javascript
复制
=== Example noise budget for measuring 1.2 V reference ===
Bandwidth B = 10.0 Hz, FS = 2.5 V, N = 24 bits, OSR = 256
Quantization   :  0.003 uV_rms
ADC white      :  1.581 uV_rms
ADC 0.1-10Hz   :  2.000 uV_rms
Amp white      :  0.032 uV_rms
Ref 0.1-10Hz   :  3.000 uV_rms
------------------------------
Total noise   :  3.937 uV_rms
Target (spec) : 10.000 uV_rms
Margin        :  6.063 uV_rms

好,我们正式把这个“测 1.2 V 基准、看 40 µV 抖动、要求 ~10 µV 级别”的信号链噪声预算模型搭起来,看一下定量上有多紧。

信号链结构假设

先给一个典型、但又足够简单的结构,方便建模:

基准源 →(可选 RC 滤波)→ 低噪声缓冲运放(增益 1)→ ΔΣ ADC(2.5 V 满量程,24 bit,内置数字滤波)

噪声源包括:

  1. ADC 量化噪声
  2. ADC 自身白噪声(输入等效噪声密度)
  3. ADC 低频 0.1–10 Hz 噪声
  4. 前端缓冲运放白噪声
  5. 基准源自身的 0.1–10 Hz 低频噪声
  6. 其它:电阻热噪声、数字耦合等(先不细化,后续可以加)

总噪声(输入参考)按均方根和组合:

指标是:

各项噪声的数学模型

假设我们关心的测量带宽(低频抖动)约为 级别,也就是要看 0~10 Hz 内的变化。

ADC 量化噪声

名义 N 位 ADC,满量程 FS:

LSB:

全带宽(0~Nyquist)量化噪声:

如果是 ΔΣ ADC,等效上有过采样比 OSR,量化噪声被数字滤波压缩到带宽 内,近似:

量化噪声在你这种场景通常远远小于 ADC 自身的模拟噪声,可以先确认一下量级。

白噪声:噪声密度积分

对于任意一个“白噪声密度” ,在带宽 内的 RMS 噪声:

ADC 自身白噪声:

运放白噪声:

电阻网络热噪声:

低频 0.1–10 Hz 噪声(1/f)

很多器件 datasheet 会直接给出“0.1–10 Hz 噪声”:

基准源: 或

运放输入电压噪声:

ADC 输入噪声:

你可以直接把这些按 RMS 形式塞进 RSS。

用Python 仿真

带宽

ADC 满量程 ,24 bit

ΔΣ 过采样比 OSR = 256

ADC 白噪声密度:(举例)

ADC 0.1–10 Hz RMS 噪声:

运放白噪声:(一个相当优秀的精密 OP)

基准源 0.1–10 Hz 噪声:

Python 结果:

代码语言:javascript
复制
=== Example noise budget for measuring 1.2 V reference ===
Bandwidth B = 10.0 Hz, FS = 2.5 V, N = 24 bits, OSR = 256
Quantization   :  0.003 uV_rms
ADC white      :  1.581 uV_rms
ADC 0.1-10Hz   :  2.000 uV_rms
Amp white      :  0.032 uV_rms
Ref 0.1-10Hz   :  3.000 uV_rms
------------------------------
Total noise   :  3.937 uV_rms
Target (spec) : 10.000 uV_rms
Margin        :  6.063 uV_rms

量化噪声基本可以忽略

0.003 µV_rms,远低于 1 µV;换句话说,只要你选的是高分辨率 ΔΣ(24 bit 之类),真正限制你的是模拟噪声而不是“位数”。

ADC 自身白噪声 + 低频噪声 已经占了接近一半预算:1.6 µV(白)+ 2 µV(低频)≈ 2.6 µV。

我随便填了 3 µV_rms,已经非常不差了,结果它是最大的单一贡献者;这说明如果你想看 40 µV 抖动,参考源自身的 0.1–10 Hz 噪声一定要选得很狠。

总和下来:总噪声 ≈ 4 µV_rms < 10 µV_rms

说明在这个“理想但不离谱”的假设下,你的“10 µV 目标是可以实现的”,甚至还有 6 µV 的 margin,可以用于电阻热噪声、EMI、数字耦合之类的杂项。

从噪声预算回推设计要点(总结)

通过这个简化模型,可以得到几个直观结论:

ADC位数不是主要矛盾。只要分辨率 ≥ 18 bit(名义 24 bit ΔΣ),量化噪声完全可以打到远低于 1 µV;真正的限制是 ADC/参考/运放的模拟噪声,以及 1/f 低频噪声。

测的就是“基准源的抖动”,因此系统噪声要显著低于它;假设它抖动 RMS ≈ 40 µV,测量系统最好 ≤ 10 µV,甚至 5 µV,更理想 2–3 µV。

一定加入数字滤波:带宽越窄(例如 1 Hz,而不是 10 Hz),白噪声压得越低;换句话说,你可以用更长的观测时间来换更低的噪声。

1/f 噪声是最大敌人之一:0.1–10 Hz 噪声通常由 1/f 主导,不能简单靠“带宽变窄”消除;要用:零漂运放、低噪声基准、良好屏蔽、温度稳定等手段。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-11-18,如有侵权请联系 [email protected] 删除

本文分享自 云深之无迹 微信公众号,前往查看

如有侵权,请联系 [email protected] 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 把需求参数化
  • 现在我们把“参考源 + 不同级别 ADC”叠加到一起,看测出来是什么样子
    • 高性能 ADC(2 µV_rms)
    • 目标水平 ADC(10 µV_rms)
    • 一般 ADC(40 µV_rms)
  • 看看频域的结果
  • 在目标 ADC 上做“1 s 移动平均”
  • 需要多少位分辨率?
    • 只看“码宽”层面
    • 真实情况:ADC 一般满量程是几伏,而不是 100 mV
  • 从“噪声”和 ENOB 角度再算一遍
  • 40 µV 抖动 vs 10 µV 噪声:信噪比够不够?
  • 带宽和噪声密度的视角
  • 对整个信号链难度的评价
  • 做完整的噪声预算模型(ADC 量化+ADC 内部噪声+参考噪声+运放低频噪声+热噪声)
  • 信号链结构假设
  • 各项噪声的数学模型
    • ADC 量化噪声
    • 白噪声:噪声密度积分
    • 低频 0.1–10 Hz 噪声(1/f)
  • 用Python 仿真
  • 从噪声预算回推设计要点(总结)
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档