@(webrtc)[webrtc, congestion control]
Webrtc delay-base-bwe代码分析(3): OveruseEstimator模块
该模块是一个卡尔曼滤波,根据当前到达时间差和传输大小的值,对到达时间差进行滤波,计算更精准的到达时间差。
0. 卡尔曼滤波基础公式
从参考文档中获得基础公式及对应变量意义。
公式:
变量:
1. OveruseEstimator的卡尔曼滤波公式
2. 代码分析
2.1 update
void OveruseEstimator::Update(int64_t t_delta,
double ts_delta,
int size_delta,
BandwidthUsage current_hypothesis) {
const double min_frame_period = UpdateMinFramePeriod(ts_delta);
const double t_ts_delta = t_delta - ts_delta;
double fs_delta = size_delta;
++num_of_deltas_;
if (num_of_deltas_ > kDeltaCounterMax) {
num_of_deltas_ = kDeltaCounterMax;
}
// Update the Kalman filter.
// 误差矩阵
// 加上协方差,为配置初始化值。
// process_noise_ Q
// P(k) = AP(k - 1)AT + Q
// 预测方程2
// 2.3
E_[0][0] += process_noise_[0];
E_[1][1] += process_noise_[1];
if ((current_hypothesis == kBwOverusing && offset_ < prev_offset_) ||
(current_hypothesis == kBwUnderusing && offset_ > prev_offset_)) {
E_[