在设计高位表的时候知道知道要搞一个非常稳的基准源,但是有没有通过定量计算这个影响的呢?没有!那我自己写。
在设计高位表的时候知道知道要搞一个非常稳的基准源,但是有没有通过定量计算这个影响的呢?没有!那我自己写。
高频 + 高 ENOB 采样 → 需滤除参考源噪声 → 要求 RC 滤波 + 参考源自身 SNR ≥ 140 dB
你用了一个非常牛的 ADC,比如 24-bit、速度又快,想测得又准又细(比如微伏、皮安级别的信号)。
但你有没有想过:“这个 ADC 是参照哪一个电压做比较的?”
答案是:参考电压(REF)!
也就是说即使你有世界上最灵敏的尺子(ADC),但如果你“拿的基准点”在抖动(参考源有噪声),那也没用!
想实现高频率下高精度采样(比如 ENOB > 22,SNR > 140 dB),那么参考源必须非常非常稳定,也就是说,它的噪声必须极低!
要想压低参考源的噪声,就得:
选一颗低噪声的参考芯片(比如 LTC6655、ADR1000 等);在输出端加一个 RC 滤波器(像是减震器,阻挡高频噪声);
整体要做到:
噪声滤波器处理之后的总噪声
假设参考源输出有 5 µV 的 RMS 噪声,那么对于 ±2.5 V 满量程 ADC:
不够!你必须再降噪,靠滤波器或换更好的 REF
参考电压(REF)直接参与 ADC 量化:
对于 24-bit 输出(如 LTC2500 SDOB):
LSB ≈ 0.6 µV(@ 5 V REF)
如果 REF 自身噪声超过 1–2 LSB(即几 µV RMS),会直接破坏有效位数(ENOB)
若目标 ENOB = 21 bit,对应:
理论
加上 margin(滤波余量、谐波、PSRR):
参考源需
当然了这个是有点苛刻的,贵死了:
ADR1000
实际上就算啥这颗都噪音有点超!
参数 | 数值 | 说明 |
---|---|---|
输出电压噪声密度(typ.) | 32 nV/√Hz @ 1 kHz | 中频段的典型噪声密度 |
0.1 Hz – 10 Hz 低频噪声 | 0.25 µV p-p typ. | 超低频 flicker 区间,总体漂移范围 |
长时间稳定性 | < 2 ppm/1000 hrs | 用于精密 ADC 时非常重要 |
32 nV/√Hz 在业界属于非常低噪声等级,与 LTZ1000、ADR1000A 同等级;
假设带宽为 10 kHz 时,总噪声为:
比如连接 24-bit ADC(LSB ≈ 0.15 µV)时会造成约 20 个码抖动,因此建议搭配 RC 滤波器衰减。
ADR1000 是目前顶级的电压参考,适合 ≥ 20-bit 精密 ADC 应用;若用于高 ENOB(如 22-bit+)的 ADC,仍建议加 >20 dB 的低通滤波器。
我们想要的数据是这样的:
参数 | 推荐值 |
---|---|
噪声密度 | < 0.1 µV/√Hz |
RMS 噪声 | < 2–5 µV |
温漂 | < 2 ppm/°C |
器件 | LTC6655-5、LM399、ADR1000、LT1236A |
目标:带宽限制在 ADC 输出带宽之下;
若 fBW = 10 kHz,则:
REF: SNR ≥ 135–140 dB
REF :噪声密度 < 0.1 µV/√Hz
滤波器带宽: < ADC 带宽(≈ 0.45 × fout)
参考源 + RC 滤波器(10 Ω + 10 µF) 的输出噪声频谱(PSD)及其总噪声影响
RC 滤波器 10 Ω + 10 µF
RC 截止频率
模拟 ADC 带宽 10 kHz
橙色线:滤波后参考电压的等效噪声密度(单位 µV/√Hz);
灰色虚线:RC 滤波器的 −3dB 截止频率;
橙色虚线:ADC 等效带宽(如 DF = 64 时);
面积的平方根 = 总 RMS 噪声 ≈ 5.00 µV。
这说明:即使使用 非常低噪声的 0.1 µV/√Hz 参考源;如果 RC 滤波器截止频率仍高于 ADC 带宽;那么噪声仍有 5 µV 量级,会限制高 ENOB 表现(< 22bit);
若目标是:ENOB ≥ 23bit(SNR ≥ 140 dB);则总 RMS 噪声需 < 2.5 µV。
还可以使用这些方法,但是我觉得是降不下去了:
LTC6655
方式 | 效果 |
---|---|
提高电容(如 100 µF) | 降低带宽,进一步压低噪声 |
降低噪声密度(如 0.05 µV/√Hz) | 降低整个 PSD |
使用 π 滤波器(R-C-R) | 增强高频衰减 |
使用带限 REF 芯片(如 LTC6655) | 限制 1/f 噪声影响 |
参考电压输出的总噪声大约是:5 µV RMS
这意味着你的 ADC 最多能保持大约 22–23 位有效位(ENOB),再高就容易被参考源本身的噪声拖后腿。
import numpy as np
import matplotlib.pyplot as plt
def compute_snr_enob_for_ref(
ref_psd_uv_per_sqrtHz=0.1,
r_ohm=10,
c_f=10e-6,
adc_vref=2.5,
adc_bw_hz=10e3,
full_scale=True,
plot=True,
):
"""
计算 REF+RC 滤波器组合下的总噪声、SNR 和 ENOB
参数:
- ref_psd_uv_per_sqrtHz: 参考源噪声密度(单位 µV/√Hz)
- r_ohm: 滤波器电阻 R(Ω)
- c_f: 滤波器电容 C(F)
- adc_vref: ADC 满量程电压(V)
- adc_bw_hz: ADC 带宽(Hz)
- full_scale: 输入是否占满满量程
- plot: 是否绘图显示 PSD
返回:
- total_noise_uv: 总输出 RMS 噪声(µV)
- snr_db: 信噪比(dB)
- enob: 有效位数(bit)
"""
psd_v2_per_Hz = (ref_psd_uv_per_sqrtHz * 1e-6) ** 2
f = np.logspace(0, 6, 2000)
omega = 2 * np.pi * f
# RC 滤波器增益
h_rc = 1 / np.sqrt(1 + (omega * r_ohm * c_f) ** 2)
psd_filtered = psd_v2_per_Hz * h_rc**2
# 在 ADC 有效带宽内积分噪声
df = np.diff(f)
psd_mid = (psd_filtered[1:] + psd_filtered[:-1]) / 2
valid = f[1:] <= adc_bw_hz
noise_power = np.sum(psd_mid[valid] * df[valid])
noise_rms_v = np.sqrt(noise_power)
noise_rms_uv = noise_rms_v * 1e6
# 满量程信号电压(RMS)
v_signal_rms = (
adc_vref / np.sqrt(2) if full_scale else adc_vref / 4
) # conservatively 25%
snr_db = 20 * np.log10(v_signal_rms / noise_rms_v)
enob = (snr_db - 1.76) / 6.02
if plot:
plt.figure(figsize=(8, 5))
plt.loglog(f, np.sqrt(psd_filtered) * 1e6, label="Filtered REF Noise (µV/√Hz)")
plt.axvline(
adc_bw_hz,
color="orange",
linestyle="--",
label=f"ADC BW = {adc_bw_hz/1e3:.0f} kHz",
)
plt.axvline(
1 / (2 * np.pi * r_ohm * c_f), color="gray", linestyle="--", label="RC -3dB"
)
plt.grid(True, which="both")
plt.xlabel("Frequency (Hz)")
plt.ylabel("Noise Density (µV/√Hz)")
plt.title(
f"REF + RC Filtered Noise → SNR = {snr_db:.1f} dB, ENOB = {enob:.2f} bits"
)
plt.legend()
plt.tight_layout()
plt.show()
return noise_rms_uv, snr_db, enob
compute_snr_enob_for_ref(
ref_psd_uv_per_sqrtHz=0.1, # 参考源噪声密度
r_ohm=10, # RC 电阻
c_f=10e-6, # RC 电容
adc_vref=2.5, # ADC 满量程
adc_bw_hz=10e3, # ADC 有效带宽
)
https://www.analog.com/media/en/technical-documentation/data-sheets/ltc6655-6655ln.pdf
高频 + 高 ENOB 采样 → 需滤除参考源噪声 → 要求 RC 滤波 + 参考源自身 SNR ≥ 140 dB
你用了一个非常牛的 ADC,比如 24-bit、速度又快,想测得又准又细(比如微伏、皮安级别的信号)。
但你有没有想过:“这个 ADC 是参照哪一个电压做比较的?”
答案是:参考电压(REF)!
也就是说即使你有世界上最灵敏的尺子(ADC),但如果你“拿的基准点”在抖动(参考源有噪声),那也没用!
想实现高频率下高精度采样(比如 ENOB > 22,SNR > 140 dB),那么参考源必须非常非常稳定,也就是说,它的噪声必须极低!
要想压低参考源的噪声,就得:
选一颗低噪声的参考芯片(比如 LTC6655、ADR1000 等);在输出端加一个 RC 滤波器(像是减震器,阻挡高频噪声);
整体要做到:
噪声滤波器处理之后的总噪声
假设参考源输出有 5 µV 的 RMS 噪声,那么对于 ±2.5 V 满量程 ADC:
不够!你必须再降噪,靠滤波器或换更好的 REF
参考电压(REF)直接参与 ADC 量化:
对于 24-bit 输出(如 LTC2500 SDOB):
LSB ≈ 0.6 µV(@ 5 V REF)
如果 REF 自身噪声超过 1–2 LSB(即几 µV RMS),会直接破坏有效位数(ENOB)
若目标 ENOB = 21 bit,对应:
理论
加上 margin(滤波余量、谐波、PSRR):
参考源需
当然了这个是有点苛刻的,贵死了:
ADR1000
实际上就算啥这颗都噪音有点超!
参数 | 数值 | 说明 |
---|---|---|
输出电压噪声密度(typ.) | 32 nV/√Hz @ 1 kHz | 中频段的典型噪声密度 |
0.1 Hz – 10 Hz 低频噪声 | 0.25 µV p-p typ. | 超低频 flicker 区间,总体漂移范围 |
长时间稳定性 | < 2 ppm/1000 hrs | 用于精密 ADC 时非常重要 |
32 nV/√Hz 在业界属于非常低噪声等级,与 LTZ1000、ADR1000A 同等级;
假设带宽为 10 kHz 时,总噪声为:
比如连接 24-bit ADC(LSB ≈ 0.15 µV)时会造成约 20 个码抖动,因此建议搭配 RC 滤波器衰减。
ADR1000 是目前顶级的电压参考,适合 ≥ 20-bit 精密 ADC 应用;若用于高 ENOB(如 22-bit+)的 ADC,仍建议加 >20 dB 的低通滤波器。
我们想要的数据是这样的:
参数 | 推荐值 |
---|---|
噪声密度 | < 0.1 µV/√Hz |
RMS 噪声 | < 2–5 µV |
温漂 | < 2 ppm/°C |
器件 | LTC6655-5、LM399、ADR1000、LT1236A |
目标:带宽限制在 ADC 输出带宽之下;
若 fBW = 10 kHz,则:
REF: SNR ≥ 135–140 dB
REF :噪声密度 < 0.1 µV/√Hz
滤波器带宽: < ADC 带宽(≈ 0.45 × fout)
参考源 + RC 滤波器(10 Ω + 10 µF) 的输出噪声频谱(PSD)及其总噪声影响
RC 滤波器 10 Ω + 10 µF
RC 截止频率
模拟 ADC 带宽 10 kHz
橙色线:滤波后参考电压的等效噪声密度(单位 µV/√Hz);
灰色虚线:RC 滤波器的 −3dB 截止频率;
橙色虚线:ADC 等效带宽(如 DF = 64 时);
面积的平方根 = 总 RMS 噪声 ≈ 5.00 µV。
这说明:即使使用 非常低噪声的 0.1 µV/√Hz 参考源;如果 RC 滤波器截止频率仍高于 ADC 带宽;那么噪声仍有 5 µV 量级,会限制高 ENOB 表现(< 22bit);
若目标是:ENOB ≥ 23bit(SNR ≥ 140 dB);则总 RMS 噪声需 < 2.5 µV。
还可以使用这些方法,但是我觉得是降不下去了:
LTC6655
方式 | 效果 |
---|---|
提高电容(如 100 µF) | 降低带宽,进一步压低噪声 |
降低噪声密度(如 0.05 µV/√Hz) | 降低整个 PSD |
使用 π 滤波器(R-C-R) | 增强高频衰减 |
使用带限 REF 芯片(如 LTC6655) | 限制 1/f 噪声影响 |
参考电压输出的总噪声大约是:5 µV RMS
这意味着你的 ADC 最多能保持大约 22–23 位有效位(ENOB),再高就容易被参考源本身的噪声拖后腿。
import numpy as np
import matplotlib.pyplot as plt
def compute_snr_enob_for_ref(
ref_psd_uv_per_sqrtHz=0.1,
r_ohm=10,
c_f=10e-6,
adc_vref=2.5,
adc_bw_hz=10e3,
full_scale=True,
plot=True,
):
"""
计算 REF+RC 滤波器组合下的总噪声、SNR 和 ENOB
参数:
- ref_psd_uv_per_sqrtHz: 参考源噪声密度(单位 µV/√Hz)
- r_ohm: 滤波器电阻 R(Ω)
- c_f: 滤波器电容 C(F)
- adc_vref: ADC 满量程电压(V)
- adc_bw_hz: ADC 带宽(Hz)
- full_scale: 输入是否占满满量程
- plot: 是否绘图显示 PSD
返回:
- total_noise_uv: 总输出 RMS 噪声(µV)
- snr_db: 信噪比(dB)
- enob: 有效位数(bit)
"""
psd_v2_per_Hz = (ref_psd_uv_per_sqrtHz * 1e-6) ** 2
f = np.logspace(0, 6, 2000)
omega = 2 * np.pi * f
# RC 滤波器增益
h_rc = 1 / np.sqrt(1 + (omega * r_ohm * c_f) ** 2)
psd_filtered = psd_v2_per_Hz * h_rc**2
# 在 ADC 有效带宽内积分噪声
df = np.diff(f)
psd_mid = (psd_filtered[1:] + psd_filtered[:-1]) / 2
valid = f[1:] <= adc_bw_hz
noise_power = np.sum(psd_mid[valid] * df[valid])
noise_rms_v = np.sqrt(noise_power)
noise_rms_uv = noise_rms_v * 1e6
# 满量程信号电压(RMS)
v_signal_rms = (
adc_vref / np.sqrt(2) if full_scale else adc_vref / 4
) # conservatively 25%
snr_db = 20 * np.log10(v_signal_rms / noise_rms_v)
enob = (snr_db - 1.76) / 6.02
if plot:
plt.figure(figsize=(8, 5))
plt.loglog(f, np.sqrt(psd_filtered) * 1e6, label="Filtered REF Noise (µV/√Hz)")
plt.axvline(
adc_bw_hz,
color="orange",
linestyle="--",
label=f"ADC BW = {adc_bw_hz/1e3:.0f} kHz",
)
plt.axvline(
1 / (2 * np.pi * r_ohm * c_f), color="gray", linestyle="--", label="RC -3dB"
)
plt.grid(True, which="both")
plt.xlabel("Frequency (Hz)")
plt.ylabel("Noise Density (µV/√Hz)")
plt.title(
f"REF + RC Filtered Noise → SNR = {snr_db:.1f} dB, ENOB = {enob:.2f} bits"
)
plt.legend()
plt.tight_layout()
plt.show()
return noise_rms_uv, snr_db, enob
compute_snr_enob_for_ref(
ref_psd_uv_per_sqrtHz=0.1, # 参考源噪声密度
r_ohm=10, # RC 电阻
c_f=10e-6, # RC 电容
adc_vref=2.5, # ADC 满量程
adc_bw_hz=10e3, # ADC 有效带宽
)
https://www.analog.com/media/en/technical-documentation/data-sheets/ltc6655-6655ln.pdf
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有