理解 blanking
复制本地路径 | 在线编辑
讲一下 blanking
初步介绍
👉 传感器在输出一帧图像时,并不是:
像素 像素 像素 像素 像素(一直连续)
而是:
像素 像素 像素 [空白] 像素 像素 [空白]
这些“空白时间”就是 blanking。
详细说明
分为两种 blanking。
1️⃣ 水平 blanking(HBLANK)
👉 每一行结束后的一段“空时间”
一行数据:
[有效像素][空白][下一行]
2️⃣ 垂直 blanking(VBLANK)
👉 一帧结束后的一段“空时间”
一帧:
[第 1 行]
[第 2 行]
...
[最后一行]
[空白很多行] ← 这就是 VBLANK
为什么要有 blanking,没有这些空白帧率会高很多
这是你最容易疑惑的点:
❓ “既然没用,为什么不干掉?”
👉 因为硬件需要时间喘气
1. 行与行之间要重置
- 列电路需要恢复(防止电荷残留)
- ADC 需要准备下一行
- 信号需要稳定
2. 帧与帧之间要准备
- Sensor 重新曝光
- 数据路径清空
- ISP / FPGA 同步
3. 兼容历史接口(视频标准)
很多设计继承自:
- CRT 显示器(真的需要回扫时间)
👉 所以 blanking 被保留下来了
blanking 对帧率的影响
还记得刚才那个公式吗:
FrameRate = PCLK / (HTOTAL × VTOTAL)
关键点:
HTOTAL = 有效像素 + HBLANK
VTOTAL = 有效行数 + VBLANK
👉 所以:
❗ blanking 越大 → 总数据越多 → 帧率越低
为什么工业上更喜欢减 blanking
相比提高采样频率:
- 不改变信号频率
- 不增加带宽压力
- 不增加噪声
但 blanking 不能无限减少(重点)
上一个问题进行了说明
理论上第 n 行输出之后,然后 n+1 行曝光,之后可以立刻输出 n+1 行
对 rolling shutter 的理解不深刻,第二行曝光开始时:✅ 第一行不必等完全读出结束。
举例
| 时间轴 | 行 1 | 行 2 | 行 3 |
|---|---|---|---|
| t0 | 开始曝光 | ||
| t1 | 曝光中 | 开始曝光 | |
| t2 | 读出 | 曝光中 | 开始曝光 |
所以对于理想模型而言,n 行输出结束的时候,n+1 行也曝光结束,此时不能立刻输出 n+1 行。因为他们复用一个列 ADC,所以还是和上面的问题一样,列 ADC 要有喘息的时间。