4. 帧率计算模型:理想帧率 vs 实际帧率、帧间隔与曝光时间的关系

帧率抖动排查的核心,在于理解“理想帧率”与“实际帧率”之间的偏差来源。Camera 系统并非一个简单的时钟发生器,帧与帧之间的时间间隔(Frame Interval)受到曝光时间、传感器读出时间、ISP 管线处理延迟以及系统调度抖动的共同影响。本章建立完整的帧率计算模型,从数学定义出发,逐步拆解各环节对帧间隔的贡献。

4.1 理想帧率模型:周期性的完美假设

理想帧率假设 Camera 系统是一个严格的周期性系统,每一帧的起始时间严格等距。其数学表达为:

FrameInterval_ideal = 1 / TargetFramerate
FrameStartTime(n) = FrameStartTime(0) + n × FrameInterval_ideal

例如,目标帧率为 30 fps 时,理想帧间隔为 33.333 ms。第 0 帧起始于 0 ms,第 1 帧起始于 33.333 ms,第 2 帧起始于 66.666 ms,依此类推。这种模型在系统设计阶段用于计算带宽、缓冲区大小和同步时序,但实际系统中几乎无法达到。

关键认知: 理想帧率模型忽略了曝光时间、传感器读出延迟、ISP 管线深度和 CPU/DRAM 调度抖动。它仅作为理论基准线,用于量化实际系统的偏差幅度。

4.2 实际帧率模型:帧间隔的构成要素

实际帧间隔由三个主要阶段串联而成:曝光等待、传感器读出、ISP 管线处理。此外,系统调度抖动作为随机变量叠加在每一阶段。

阶段 符号 典型范围 抖动来源
曝光时间 Texp 1 ms ~ 33 ms AE 算法调整、闪烁检测
传感器读出 Treadout 8 ms ~ 30 ms 行扫描速率、HDR 模式
ISP 管线处理 Tisp 3 ms ~ 16 ms 负载、调频、DDR 带宽
系统调度抖动 Jsched 0.1 ms ~ 5 ms 中断延迟、CPU 频率切换

实际帧间隔的完整表达式为:

FrameInterval_actual = max(T_exp, T_readout) + T_isp + J_sched

注意曝光时间与读出时间存在流水线重叠:当前帧的读出与下一帧的曝光可以并行执行,因此实际帧间隔由两者中的较大者决定,而非简单相加。

4.3 曝光时间与帧间隔的耦合关系

曝光时间对帧间隔的影响取决于曝光模式:

  • 非重叠模式(Non-Overlap): 曝光、读出、ISP 严格串行。帧间隔 = Texp + Treadout + Tisp + Jsched。常见于低帧率或长曝光场景(如夜景模式)。
  • 重叠模式(Overlap / Rolling Shutter): 第 N 帧的读出与第 N+1 帧的曝光在时间上重叠。帧间隔 = max(Texp, Treadout) + Tisp + Jsched。这是 30 fps 以上视频的主流模式。
实战提示: 当曝光时间超过读出时间时,帧间隔由曝光时间主导。此时若 AE 算法因场景变暗而增加曝光时间,帧率会直接下降。排查帧率抖动时,应首先检查曝光时间是否在帧间隔中占比过高。

4.4 帧间隔与帧率的转换关系

实际帧率并非帧间隔的简单倒数,因为帧间隔本身是时变的。正确的统计方法为:

Framerate_instant = 1000 / FrameInterval_ms
Framerate_average = 1000 / avg(FrameInterval_ms)

帧率抖动通常用以下指标量化:

指标 定义 抖动容忍阈值
帧间隔标准差 σ(FrameInterval) < 0.5 ms(30 fps)
帧间隔最大偏差 max(FrameInterval) - min(FrameInterval) < 2 ms(30 fps)
瞬时帧率波动 Framerate_instant 的峰谷差 < 3 fps

4.5 帧率计算模型全景图

下图展示了从传感器曝光到最终帧交付的完整时序模型,标注了各阶段对帧间隔的贡献:

帧率计算模型:帧间隔构成与流水线重叠 帧率计算模型:帧间隔构成与流水线重叠 t (ms) 0 33.3 66.6 100 第N帧 曝光 第N帧 读出 第N帧 ISP 第N+1帧 曝光(重叠) 第N+1帧 读出 第N+1帧 ISP 帧间隔 = max(T_exp, T_readout) + T_isp + J 调度抖动 J 流水线重叠说明: 第N帧读出期间,第N+1帧曝光已经开始(绿色块与红色块重叠)。 帧间隔由 max(曝光时间, 读出时间) 决定,而非两者之和。本例中曝光时间 > 读出时间,帧间隔 ≈ 曝光时间 + ISP 时间 + 抖动。 当曝光时间缩短至小于读出时间时,帧间隔由读出时间主导。

4.6 帧间隔抖动的数学分解

将帧间隔抖动分解为确定性分量与随机性分量,有助于定位根因:

FrameInterval(n) = μ + D(n) + ε(n)

其中:
  μ = 平均帧间隔(由目标帧率决定)
  D(n) = 确定性抖动(由 AE 曝光变化、帧率切换、HDR 模式切换引起)
  ε(n) = 随机性抖动(由中断延迟、CPU 调度、DDR 竞争引起)

确定性抖动通常呈现周期性或阶梯状变化,例如 AE 收敛过程中曝光时间逐帧调整导致的帧间隔渐变。随机性抖动则表现为无规律的毛刺,常见于系统负载突增场景。

排查陷阱: 不要将帧间隔的瞬时增大直接归因于 ISP 过载。应先检查曝光时间是否在该帧发生了跳变。许多帧率抖动问题实际上是 AE 算法在低照度场景下频繁调整曝光时间所致,而非 ISP 或驱动瓶颈。

4.7 帧率计算模型的工程应用

在实际调试中,帧率计算模型用于以下场景:

  • 帧率预算分配: 根据目标帧率反推各阶段的最大允许延迟。例如 60 fps 目标下,帧间隔预算为 16.667 ms,扣除 ISP 管线 5 ms 和调度抖动 1 ms,留给曝光+读出的时间上限为 10.667 ms。
  • 抖动源分离: 通过在不同曝光时间下测量帧间隔,分离出曝光相关抖动与系统调度抖动。若帧间隔随曝光时间线性变化,则抖动源在传感器侧;若曝光时间固定但帧间隔随机波动,则抖动源在系统侧。
  • 帧率稳定性评估: 使用帧间隔标准差与最大偏差两个指标,判断帧率抖动是否在用户可感知范围内。30 fps 下帧间隔标准差超过 1 ms 时,人眼即可感知到卡顿。

下表总结了不同目标帧率下的典型帧间隔预算分配:

目标帧率 帧间隔预算 曝光+读出上限 ISP 预算 调度抖动预留
15 fps 66.667 ms 55 ms 8 ms 3.667 ms
30 fps 33.333 ms 25 ms 6 ms 2.333 ms
60 fps 16.667 ms 10 ms 5 ms 1.667 ms
120 fps 8.333 ms 4 ms 3.5 ms 0.833 ms

从表中可以看出,高帧率场景下调度抖动预留急剧压缩,这也是 60 fps 以上帧率抖动问题频发的根本原因——系统调度延迟的微小波动就会显著影响帧间隔。