3. 读出噪声:复位噪声、源跟随器噪声、量化噪声、读出噪声的统计特性与测量方法

读出噪声,说白了就是像素里的信号在变成数字码值之前,被电路“污染”掉的那部分噪声。我经常跟团队里的新人讲:读出噪声决定了你传感器的底噪水平,它直接卡死了暗光下的信噪比天花板。

这一节我们拆开来看。读出噪声不是单一来源,它由三个主要成分叠加而成:复位噪声、源跟随器噪声、量化噪声。再加上它们的统计特性和测量方法,基本就把读出链路讲透了。

3.1 复位噪声(kTC噪声)

复位噪声,也叫kTC噪声。名字就暴露了它的本质——跟电容和温度有关。

先看物理过程。像素里的光电二极管或浮置扩散区(FD),在每次曝光前需要复位到一个已知电位。复位开关导通时,沟道电阻的热噪声会通过开关管,在电容上产生一个随机电压波动。开关断开后,这个波动就被“冻结”在电容上了。

公式很简单:

V_n² = kT / C

其中k是玻尔兹曼常数,T是温度,C是复位节点总电容。

举个例子。FD电容典型值在1~10 fF之间。室温下(300K),1 fF电容对应的复位噪声均方根值约为64 μV。换算成电子数:

n_e = sqrt(kTC) / q ≈ 40 e⁻ rms(C=1 fF时)

40个电子!这个数字在暗光下非常可观。我做过一个项目,客户要求读出噪声低于2 e⁻ rms,结果复位噪声一项就超标20倍。怎么办?

关键认知:复位噪声是读出链路中最大的单点噪声源之一。不处理它,后面所有优化都是白费。

解决方案是相关双采样(CDS)。原理很简单:在复位后和信号读出后各采一次样,两次相减,复位噪声因为是低频相关噪声,被大幅抵消。CDS能把复位噪声从几十个电子压到几个电子甚至更低。

我的经验:CDS不是万能的。如果复位开关存在电荷注入或时钟馈通,CDS反而会引入新的固定模式噪声。我曾经在0.18 μm工艺上踩过这个坑——CDS后图像上出现明显的行方向条纹,排查了两周才发现是复位管尺寸不对称导致的注入失配。

3.2 源跟随器噪声

源跟随器(Source Follower, SF)是像素内的第一级缓冲放大器。它的作用是低阻抗输出,把FD上的电压信号传给列总线。

源跟随器的噪声主要来自两个方面:

  • 热噪声:沟道电阻产生的宽带噪声,与跨导gm成反比。噪声谱密度约为 4kTγ/gm,γ是工艺相关的噪声因子(长沟道器件约2/3,短沟道器件更大)。
  • 1/f噪声:低频段的闪烁噪声,与栅氧化层界面陷阱密度相关。噪声谱密度近似为 Kf/(Cox·W·L·f),Kf是工艺参数。

源跟随器噪声的等效输入参考公式:

Vn_SF² = ∫ [4kTγ/gm + Kf/(Cox·W·L·f)] · |H(f)|² df

其中H(f)是读出链路的带宽传递函数。带宽越宽,积分进来的热噪声越多;带宽越窄,1/f噪声的低频成分被保留。

实际设计中,源跟随器噪声通常在10~30 μV rms量级。换算成电子数,取决于转换增益(CG)。CG越高,同样电压噪声对应的电子数越少。

参数 典型值 对噪声的影响
SF跨导 gm 50~200 μS gm越大,热噪声越小
SF偏置电流 1~10 μA 电流越大,gm越大,但功耗增加
SF尺寸 W/L 几μm / 几μm 面积越大,1/f噪声越小,但寄生电容增大
转换增益 CG 50~200 μV/e⁻ CG越高,等效输入噪声电子数越低

注意:源跟随器噪声与复位噪声不同,它不能被CDS完全消除。CDS主要消除低频相关噪声,而源跟随器的宽带热噪声在两次采样之间是不相关的。所以CDS后,源跟随器热噪声反而会以sqrt(2)倍增加(因为两次采样噪声功率相加)。

3.3 量化噪声

量化噪声是ADC带来的。模拟信号变成数字码值时,必然存在量化误差。

理想ADC的量化噪声均方根值为:

Vn_ADC = LSB / sqrt(12)

LSB = Vref / 2^N,N是ADC位数。

举个例子。12位ADC,参考电压2.8V,LSB ≈ 683 μV。量化噪声 ≈ 197 μV rms。这个值看起来不小,但注意:量化噪声是均匀分布在0~fs/2频带内的,而读出链路的带宽通常远小于采样率,所以实际影响要折合带宽比。

更实际的做法是把量化噪声折算到像素输入端:

n_e_ADC = Vn_ADC / CG

假设CG=100 μV/e⁻,则n_e_ADC ≈ 2 e⁻ rms。这个值在大多数应用中是可以接受的。

设计原则:量化噪声应该小于其他读出噪声总和的1/3到1/5,这样量化噪声对总噪声的贡献可以忽略。换句话说,ADC的分辨率要足够高,不能成为噪声瓶颈。

我见过一个失败的案例。某款安防相机传感器,像素噪声已经优化到3 e⁻ rms,但ADC只用了10位。量化噪声折算回来约8 e⁻ rms,直接把总噪声拉到9 e⁻ rms。客户抱怨暗光下噪点明显,最后不得不换12位ADC,总噪声才降到4 e⁻ rms。

3.4 读出噪声的统计特性

读出噪声的统计特性,决定了你怎么建模、怎么测量、怎么优化。

1. 概率分布

复位噪声和源跟随器热噪声都是高斯分布。量化噪声在LSB远小于噪声时也近似高斯。所以总读出噪声通常服从高斯分布。

但要注意:如果CDS后的残留噪声存在非对称性(比如电荷注入方向固定),分布会偏斜。我遇到过一款传感器,暗场直方图明显左偏,排查发现是复位管关断速度太慢导致的。

2. 时域特性

读出噪声在时间上是白噪声吗?不完全是。

  • 复位噪声:低频相关,CDS后残留部分呈高通特性。
  • 源跟随器1/f噪声:低频成分强,呈粉红噪声特性。
  • 热噪声:宽带白噪声。
  • 量化噪声:近似白噪声。

总读出噪声的功率谱密度是这些成分的叠加。低频段1/f噪声占主导,高频段热噪声占主导。

3. 空间特性

读出噪声在空间上是随机的,像素之间不相关。这是它与固定模式噪声(FPN)的本质区别。FPN是空间固定的,读出噪声是空间随机的。

这个特性很重要:读出噪声可以通过多帧平均来降低(降幅与帧数平方根成反比),而FPN不能。

3.5 读出噪声的测量方法

测量读出噪声,最常用的方法是暗场时序分析法。我把它总结成三步:

  1. 采集暗场数据:盖上镜头盖,或者用快门挡住光路。采集N帧(N≥100)全黑图像。
  2. 计算每像素的时序标准差:对每个像素,计算它在N帧中的灰度值标准差σ_pixel。这个σ_pixel包含了读出噪声和暗电流散粒噪声。
  3. 分离读出噪声:暗电流散粒噪声与曝光时间成正比。采集不同曝光时间下的暗场数据,做线性拟合,截距就是读出噪声的平方。

代码实现(Python伪代码):

import numpy as np

# dark_frames: shape = (N_frames, height, width)
# 采集不同曝光时间 t_list 下的暗场数据

def measure_read_noise(dark_frames, t_list):
    results = []
    for t, frames in zip(t_list, dark_frames):
        # 计算每个像素的时序方差
        var_per_pixel = np.var(frames, axis=0)
        # 取所有像素的平均方差
        mean_var = np.mean(var_per_pixel)
        results.append((t, mean_var))
    
    # 线性拟合: var = read_noise² + dark_current * t
    t_array = np.array([r[0] for r in results])
    var_array = np.array([r[1] for r in results])
    coeffs = np.polyfit(t_array, var_array, 1)
    read_noise_sq = coeffs[1]  # 截距
    read_noise = np.sqrt(read_noise_sq)
    return read_noise

测量注意事项:

  • 暗场环境必须黑暗。我曾经在实验室里测出读出噪声异常大,最后发现是机箱电源指示灯漏光。
  • 帧数N要足够大。N=100时,测量不确定度约7%;N=400时降到3.5%。
  • 注意温度控制。读出噪声与温度相关(kT/C中的T),温度波动会引入额外误差。

另一种方法是光子转移曲线(PTC)法。通过采集均匀光照下的不同光强图像,绘制方差-均值曲线。读出噪声对应曲线在零光强处的截距。这个方法的好处是同时可以标定转换增益CG。

3.6 知识结构图

下面这张图总结了读出噪声的组成、来源和测量方法:

读出噪声知识结构图 读出噪声知识结构 读出噪声(总) 复位噪声(kTC) 源跟随器噪声 量化噪声 来源:开关热噪声 公式:kT/C 抑制:CDS 热噪声:4kTγ/gm 1/f噪声:Kf/(Cox·W·L·f) CDS后热噪声×√2 公式:LSB/√12 与ADC位数N相关 应小于其他噪声1/3 统计特性与测量方法 统计特性:高斯分布、白噪声 测量方法:暗场时序法、PTC法

3.7 小结

读出噪声是CMOS图像传感器最核心的性能指标之一。三个来源各有特点:

  • 复位噪声靠CDS解决,但要注意电荷注入残留。
  • 源跟随器噪声是设计权衡的结果,gm、面积、带宽要一起考虑。
  • 量化噪声只要ADC位数够,通常不是瓶颈。

测量时,暗场时序法最直接,PTC法信息更丰富。我个人习惯两种方法都做,交叉验证。毕竟,噪声测量不准,后面所有优化都是盲人摸象。