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,依此类推。这种模型在系统设计阶段用于计算带宽、缓冲区大小和同步时序,但实际系统中几乎无法达到。
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 以上视频的主流模式。
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 帧率计算模型全景图
下图展示了从传感器曝光到最终帧交付的完整时序模型,标注了各阶段对帧间隔的贡献:
4.6 帧间隔抖动的数学分解
将帧间隔抖动分解为确定性分量与随机性分量,有助于定位根因:
FrameInterval(n) = μ + D(n) + ε(n)
其中:
μ = 平均帧间隔(由目标帧率决定)
D(n) = 确定性抖动(由 AE 曝光变化、帧率切换、HDR 模式切换引起)
ε(n) = 随机性抖动(由中断延迟、CPU 调度、DDR 竞争引起)
确定性抖动通常呈现周期性或阶梯状变化,例如 AE 收敛过程中曝光时间逐帧调整导致的帧间隔渐变。随机性抖动则表现为无规律的毛刺,常见于系统负载突增场景。
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 以上帧率抖动问题频发的根本原因——系统调度延迟的微小波动就会显著影响帧间隔。