做图像传感器调试这几年,HDR Sensor的动态范围方案始终是绕不开的话题。尤其是DCG、DAG、linear这三种模式,项目里几乎每次都要被拿出来对比一轮,很多刚接触CIS(CMOS Image Sensor)的同学也经常被这几个缩写绕晕。这篇内容我打算把三种模式从原理、像素结构、读出链路、噪声表现到实际工程中的坑,完整梳理一遍。单项对比看起来都很简单,但真正选型、调参、做系统集成的时候,里面藏着不少细节,这篇先讲清楚原理和设计取舍,下一篇再放实测数据和具体调试过程。
这篇内容适合正在做摄像头模组、ISP算法、嵌入式视觉,或者在做安防、车载、工业相机方案的同学参考。哪怕你只是刚接触Sensor选型,看完之后至少能分辨清楚DCG和DAG到底改的是像素哪个节点的参数,也能明白为什么标称动态范围很高的Sensor,在实际场景里有时候还是打不过一颗老老实实的linear模式Sensor。
1. 三种模式到底在比什么:动态范围的本质与实现差异
动态范围这个东西,说白了就是Sensor能同时看清最暗和最亮区域的能力。工程上的定义是满阱电荷量与传感器总噪声之比:DR = 20 × log10(满阱电荷 / 总噪声),单位是dB。满阱电荷决定了你能存住的最大信号,总噪声决定了你能分辨的最小信号,两者一除再取对数,就是动态范围。
传统linear模式其实就是一条固定增益路径。光生电子在光电二极管里积累,通过传输管转移到浮置扩散节点(FD节点),FD节点的电容把电荷变成电压,再经过列级放大器、AD转换输出。这条链路看起来简单,但恰恰是“固定增益”这个特点限制了动态范围:增益调高了,弱光信号能看清,但是强光很容易超过满阱饱和;增益调低了,高光保住了但暗部噪声变大、细节丢失。所以linear模式一般只能做到60到75dB左右的实际动态范围,户外大光比场景很容易顾此失彼。
DCG和DAG本质上都在尝试打破这个限制,但两者的实现位置完全不同。DCG的全称是Dual Conversion Gain,双转换增益,核心动作发生在像素内部的FD节点上,通过切换FD节点的电容大小来改变电荷到电压的转换系数。DAG的全称是Dual Analog Gain,双模拟增益,它的核心动作发生在像素外部的模拟读出链路上,通过并行两路不同的增益放大器来实现。一个改的是“转换系数”,一个改的是“模拟增益”,这就是两者最本质的区别。
还有一个容易混淆的细节:有些文档里会把DAG写成Dual Gain,也有的把DCG写成Dual Gain HDR或者iHDR,命名在不同厂商之间并不完全统一。遇到项目资料的时候,最好先看清楚对方说的到底是改FD电容,还是改列级放大器的增益,不要只看名字。
1.1 linear模式:为什么它依然是很多项目的基准
先别急着否定linear。虽然标题里是三种模式对比,但linear其实是理解另外两种模式的基础。在我做过的多个项目里,凡是涉及HDR Sensor评估,第一步一定是先把这颗Sensor切到linear模式,测满阱、测噪声、测线性度、测PRNU(光子响应非均匀性)。这些基础数据没测准,后面DCG和DAG的合成实验基本没法做。
linear模式的DR计算很简单:假如满阱电子数是eFullWell,噪声是nNoise,那么DR ≈ 20 × log10(eFullWell / nNoise)。举个例子,假设满阱是30000个电子,读出噪声是6个电子,那么DR ≈ 20 × log10(5000) ≈ 74dB。这个数字看起来不算低,但要注意这是理想条件,实际暗电流、PRNU、温度影响都会把这个数字往下拉。
linear最大的好处是简单、稳定、可预期。没有合成,没有双路径拼接,不存在运动伪影,也没有切换增益时的delay问题。对于光线可控的工业检测、医疗影像、部分机器视觉场景,linear依然是首选。但凡是户外逆光、夜晚车灯、室内窗口这种场景,单帧linear就真的不够用,高光区域一片惨白,暗部全是噪点,这时候就必须考虑DCG或DAG了。
1.2 DCG:在像素内部做“切换”的双转换增益
DCG的设计核心在像素的FD节点。FD节点那里有一个可以切换的电容,通常通过一个控制开关(一般是DCG管或者叫CFG管)来改变等效电容大小。当开关关闭时,FD节点只有基础电容,电荷到电压的转换系数高,也就是高转换增益HCG(High Conversion Gain),这个状态适合暗光环境,因为同样的电荷量能产生更高的电压,代价是更容易饱和;当开关打开时,FD节点并联了大电容,转换系数被拉低,也就是低转换增益LCG(Low Conversion Gain),这个状态适合高光环境,因为能存住更多的电荷而不饱和。
一个典型的DCG Sensor曝光过程是这样的:同一帧时间里,像素先做一次高转换增益读出(HCG读出),再做一次低转换增益读出(LCG读出),或者反过来,然后由ISP或者Sensor内部逻辑把两幅图像合成。合成时,暗部主要取高增益帧的数据(信噪比高),亮部主要取低增益帧的数据(不饱和、线性度好),中间过渡区做融合。
DCG的优点是直接在像素层面扩展动态范围,理论上同一曝光时间内就能完成两次采样,对运动场景相对友好,扩展的DR可以达到20到30dB。但代价也很明显:像素结构变复杂,填充因子下降,FD节点电容切换本身会引入额外的kTC噪声和固定模式噪声(FPN),而且两帧合成之后在过渡区容易出现SNR的“坑”,这个后面专门讲。
1.3 DAG:在模拟链路上做“并行”的双模拟增益
DAG的思路和DCG不同。DAG不会改动像素内部的FD电容,而是在像素读出之后,通过列级的两条模拟信号通路,分别用不同的增益进行放大。比如一条通路放大1倍,另一条放大16倍,然后两条通路分别做AD转换,最后在数字域合成。
这个设计有个明显的好处:像素本身保持原有的结构,填充因子几乎没有损失,而且两条通路是并行读出的,不需要像DCG那样“先切一次增益再切一次增益”的时序,在帧率上有优势。高增益路径提供暗部细节,低增益路径保住高光信息,合成算法和DCG在数字域的处理非常相似。
DAG的难点在于两条并行通路的匹配性。模拟放大器的增益误差、偏置差异、时序延迟差,都会在合成拼接处留下痕迹。我见过一些早期DAG方案,高增益和低增益两条通路的dark signal差异明显,合成后画面中间出现一条亮度跳变的“拼接缝”,后来通过逐列校准才压下去。此外,因为DAG需要两套列级放大器和两路AD通道,芯片面积和功耗比DCG要大,在功耗敏感的移动设备上需要仔细权衡。
2. 核心参数与“为什么”解读:增益比、噪声、合成点的取舍
这一节单独讲参数是有原因的。我看过很多人在选型阶段只对比标称DR数字,结果拿回来一测根本不是那么回事。DCG、DAG这类双增益方案,真正决定效果的是增益比、噪声匹配和合成策略这三个环节。
2.1 增益比:决定了动态范围能扩多大
不管DCG还是DAG,原理上都是靠两个不同增益状态来并行或者串行读出,然后合成。动态范围扩展量的计算公式很简单:DR扩展 ≈ 20 × log10(高增益 / 低增益)。这个比值,在DCG里就是HCG转换系数除以LCG转换系数,在DAG里就是高模拟增益除以低模拟增益。
如果高低增益比是4倍,扩展量大约是12dB;如果是16倍,扩展量大约是24dB;如果是64倍,可以扩展到36dB。看起来只要把增益比做大就完事了,但实际没那么简单。更大的增益比意味着高增益路径极其容易饱和,两帧之间的有效重叠区间非常窄,合成点很难找。而且高增益路径的读出噪声也会被放大,如果Sensor面板的本底噪声不够低,暗部信噪比反而会变差。
我自己的经验是,增益比设计在8到32倍之间是比较实用的区间。小于8倍,DR扩展有限,高光区域还是容易爆;大于32倍,合成过渡区容易出问题,特别是在光照突变明显的场景里,需要非常精细的曲线标定。设计阶段一定要结合Sensor的噪声模型去算,而不是拍脑袋定一个倍数。
2.2 噪声匹配与SNR的“坑”:只盯着DR数字的人迟早踩雷
很多Sensor的标称动态范围很好看,但实际使用中在高光到暗部的过渡区域会出现一段信噪比突然下降的区间,这就是所谓的SNR坑。原因是两个增益状态的本底噪声不同,合成算法切换的时候,如果高增益帧已经接近饱和但低增益帧噪声又偏大,中间就会有一段两边都不讨好的区域。
举个例子说明:假设HCG路径的噪声是2个电子,LCG路径的噪声是6个电子,增益比是16倍。在暗部,HCG信号占主导,SNR跟着HCG走,很高;在亮部,LCG信号占主导,SNR虽然比HCG弱一点但也能保持。问题出在中间区域,HCG信号开始接近饱和,线性度变差,而LCG信号还处于比较小的水平,噪声占比明显,这时候SNR会出现一个明显的“谷底”。如果Sensor在合成点附近没有做好两条路径的噪声匹配,画面就会出现一条肉眼可见的噪点带。
处理办法通常是让合成过渡区尽量平滑,不要让两个增益之间发生硬切换。有些Sensor支持可编程的合成曲线,可以在亮度跨越两个增益的区间内做一个渐变权重,让SNR坑变得不那么明显。但这个渐变权重不是随便给的,太宽了会让高光区域混入HCG的饱和信息,反而导致高光发紫、发粉;太窄了SNR坑又会露出来。这个值要靠实拍灰阶图去标。
2.3 合成域的选择:DCG/DAG的数字域合成要点
DCG和DAG最终都要面临同一个问题:两路信号在哪里合成。目前主流的方式是数字域合成,就是两路信号分别经过AD转换后,在ISP或者Sensor内置逻辑里做像素级的融合。数字域合成的优点是灵活,可以随时调整合成曲线,方便做降噪和均衡;缺点是数据量翻倍,对带宽和处理资源有压力。
还有一种模拟域合成的方式,在两路信号数字化之前就通过模拟开关选路,只对其中一路做AD转换。这种方式省带宽,但灵活性差,基本只能做硬切换,合成效果看不太行。现在的新方案里很少看到纯模拟域合成了,大多数是Sensor输出两路数据,由下游ISP做最终融合。
提到合成,就不得不说一下“单帧HDR”和“多帧HDR”的区别。DCG和DAG这类在同一帧时间内完成多路径采样的方案,能做到单帧HDR,对运动场景友好;而传统的Staggered HDR或者DOL HDR,是靠连续拍多帧不同曝光时间再合成,运动物体容易出鬼影。所以DCG和DAG在车载、运动相机这类场景有明显的帧同步优势。不过单帧HDR也不是没缺点,它会牺牲一部分快门组合的灵活性,在极端低照度下,单帧内的最短曝光时间可能不够用,还得靠多帧长曝光来补。
3. 实操过程与核心环节实现:从选Sensor到标定合成
这一节讲的是我在实际项目里完整走一遍DCG/DAG流程的经验。Sensor选型、寄存器配置、图像采集、灰阶标定、合成参数调试,这一步一步都是踩过坑总结出来的。
3.1 Sensor选型阶段:先列需求,千万别先看DR数字
第一步不是翻Sensor的datasheet看DR,而是先列的你的应用需求:最大光照范围是多少lux、最低照度是多少、曝光时间范围是多少、运动场景多不多、功耗上限多少、模组尺寸有没有限制、ISP平台对双增益合成的支持程度如何。这些因素一个没理清楚,后面一定会翻车。
我遇到过好几个项目,客户上来就说要100dB动态范围Sensor,结果等模组做出来,发现ISP端根本不支持双增益合成,只拿到了两路原始数据,又没有足够的算力做软件融合,最后只能临时改成linear模式,白白浪费两个月的开发周期。所以选型之前,一定要和ISP平台厂商确认清楚,Sensor输出的双增益数据在你们平台的pipeline里是怎么走的,是Sensor内部已经合成好只输出一帧,还是需要下游再合一次。这个问题的答案,直接决定了你们系统方案的复杂度。
3.2 寄存器配置与采集流程:暗电流、噪声、增益比一个都不能少
拿到Sensor之后,我会先按下面的顺序做一轮基础配置和数据采集,确保后面所有对比都有可靠的数据支撑:
第一步,把Sensor设在linear模式,用无光条件下曝光时间递增,测暗电流。方法很简单:盖上镜头盖,分别拍几十帧暗场,取平均像素值随曝光时间的变化曲线,斜率就是暗电流。暗电流数据很重要,它决定了低照度长曝光时暗部噪点有多大。
第二步,测读出噪声。同样是暗场,但曝光时间设最短,拍几十帧取标准差,读出噪声的单位是LSB,再通过Sensor的增益换算成电子数。这一步要分别在HCG/高增益和LCG/低增益两个状态下各测一次,因为这两种状态下读出噪声差异很大,会直接影响合成的SNR坑位置。
第三步,测增益比。拍摄一张均匀亮度图(可以用积分球或者亮度均匀的白墙),分别在两种增益状态下读出信号值,用信号值的比值反推实际增益比。为什么不用datasheet标称值?因为实际PCB布局、供电电压、温度都会让准确值偏离理论值,而合成算法里用的增益比必须准确到小数点后两位,否则合成后亮度会跳变。
第四步,采集灰阶图。用灰阶卡从暗到亮拍几十个亮度等级,每个等级记录两份数据:高增益路径的灰值和低增益路径的灰值。这张灰阶曲线是后边设置合成权重、找合成点的核心依据。
3.3 合成参数调试:找合成点、设过渡权重、验伪影
拿到以上数据之后,才开始真正调合成。合成点的选择逻辑是:在低增益曲线还没饱和、且信噪比还能接受的亮度区间,尽量让高增益信号先交棒。怎么判断信噪比还能不能接受?可以参考前面测到的噪声模型,算一下该亮度下高增益帧的SNR是否仍然高于预设阈值,比如30dB,如果低于这个值,就该考虑提前交棒了。
过渡权重的设置没有标准答案。我在调试中会用一段3到5度的亮度区间做渐变,温度和场景不同会有调整。太窄会看到一条“亮度线”横穿均匀墙面;太宽又会在高光边缘出现光晕。调完之后,一定要在几种典型场景里实拍验证:强逆光窗户、夜晚车灯、树荫下的斑驳光斑、有轻微闪烁的室内灯光。这些场景最容易暴露合成过渡区的瑕疵。
伪影问题也是这个阶段的高发区。运动物体边缘的鬼影、闪烁灯光下的亮度跳跃、灰度图上的横向条纹,都要一遍遍拍、一遍遍调。其中网格现象(mura)特别容易被忽视,因为它在单帧上不明显,但视频模式下非常容易让人感觉画面“脏”。如果发现mura比以前用的Sensor严重,大概率是两种增益状态下的FPN模式不一致导致的,需要通过减暗场或FPN校准来处理。
4. 常见问题与排查技巧实录:三套方案的坑位地图
这部分是实战排查经验。下面这些坑不是从书上看来的,是我这几年调试Sensor时真实遇到并解决的,列出来供参考。
4.1 DCG模式下的高光偏色与饱和度丢失
DCG模式下,高光区域经常出现红色或粉色偏色。最常见的原因是Bayer阵列不同颜色通道的饱和点不一致,或者高增益帧在高光区域提前饱和,合成算法没有正确切换到低增益帧,导致高光颜色通道信息丢失。排查时先用灰阶卡拍一组不同亮度的图,分别查看R、Gr、Gb、B四个通道的饱和亮度点,找到差异之后,要么调整合成权重让高光区更早依赖低增益帧,要么在ISP里对高光区做一次色彩校正。这里要特别注意蓝色通道的响应通常比较弱,最容易先饱和。
4.2 DAG模式的列级拼接痕迹与亮度跳变
DAG因为两条模拟通路并行,列级放大器和AD通道的offset差异会直接导致合成后出现垂直的亮度条纹。这种条纹在低灰阶背景上尤其明显。解决办法是先采集完全均匀的灰图(亮度分别取低、中、高三个值),计算每个像素列的平均亮度偏差,生成列级校准表,在合成前做一次列级校正。校准表的精度要能到半个LSB以下,否则条纹只是变淡,不会消失。
4.3 linear模式在极端光照下彻底失效,要不要切HDR?
很多项目在低照度场景下对画面细节要求极高,一测linear达不到要求,马上想着切DCG/DAG。但有时候问题根本不是动态范围不够,而是曝光策略不对。比如环境光从3lux切到30000lux,如果还是用同一个曝光时间,那再好的HDR方案也救不回来。先检查AE(自动曝光)算法有没有覆盖完整的光照范围,再做HDR切换的判断,不然复杂度白白上去了,效果提升却有限。
4.4 常用模式对比速查表
我整理了一张速查表,方便大家在不同项目阶段用来做初步判断:
| 对比维度 | linear | DCG | DAG |
|---|---|---|---|
| 改动的电路位置 | 无 | 像素FD节点电容 | 列级模拟增益通路 |
| 像素填充因子影响 | 无 | 有轻微损失 | 几乎没有 |
| 动态范围扩展量 | 基准(60~75dB) | 可扩展20~30dB | 可扩展20~30dB |
| 单帧HDR能力 | 不支持 | 支持 | 支持 |
| 芯片面积/功耗开销 | 最低 | 中等 | 较高 |
| 暗光噪声表现 | 增益固定,受限 | 高增益状态好 | 高增益路径好 |
| 高光保护能力 | 弱 | 强 | 强 |
| 合成过渡区风险 | 无 | 有SNR坑 | 有拼接条纹风险 |
| 典型应用 | 工业检测、医疗、机器视觉 | 安防、车载、运动相机 | 部分手机CIS、低功耗HDR场景 |
这张表只是参考,真正的选型还得结合具体Sensor的实现细节和ISP平台能力。同一颗Sensor的DCG和DAG寄存器配置、合成策略不同,最终画质表现可能差距不小。
4.5 关于“标称动态范围”的最后提醒
最后想说说标称DR数字这件事。Sensor厂商给的DR,往往是在特定曝光时间、特定温度、特定增益下测到的极限值。你拿到手稍微改一下工作温度,或者让高增益路径承担更多暗部责任,数字就会明显变化。所以别被“标称100dB”糊住,一定要基于自己的使用场景实测。
我个人经历里最典型的一次,是某颗Sensor标称DR很高,但实际在夜景模式里为了压制暗部噪点,把高增益路径的噪声抑制全开,结果整条高光曲线被强制拉平,过渡区出现了明显的色阶断层,最后只能把增益比调低一档,DR数字降了不少但画面观感反而正常了。所以标称值永远是参考,场景观感才是最终评判标准。
5. 小结与后续预告
这篇先写到原理、选型和调试框架。说实话,DCG和DAG在实际工程中最难的不是原理,而是两路信号“合在一起”那一下该怎么处理。SNR坑、拼接缝、色彩过渡、运动伪影,每一个问题背后都是光电信号和噪声模型的博弈。
下一篇我打算直接用一颗实际Sensor的采集数据,把HCG/LCG的噪声曲线、灰阶响应曲线、合成前后对比图都贴出来,把这篇里提到的几个关键数值怎么算、合成点怎么找,一步一步过一遍。如果你正在做Sensor选型或者ISP调试,拿这篇做参考,下一篇再照着数据走一遍,基本能把DCG和DAG的调试思路理清楚。
有任何具体场景或者问题,欢迎在评论里聊。