背景
我需要一种(某种)带宽估算算法。
有两个对等方,即发送方和接收方。发送方以(几乎)恒定比特率发送一些数据,每个数据包包含其本地时间(Ts
)。
接收器偶尔(即不一定在每个接收到的数据包之后)发送反馈,其中包含发送者和接收者时间戳(Ts
,Tr
)。
发送者的目标是,基于这些反馈,检测实际网络带宽和可能的拥塞。基于此,发送方应调整传输带宽。
假设:
现在,基于这些假设,我们有以下模型。定义:
i
- 是反馈索引。dTs[i] := Ts[i+1] - Ts[i]
dTr[i] := Tr[i+1] - Tr[i]
Q[i]
- 是发送队列大小(以字节为单位)。在拥挤的情况下,它是非零的。X[i]
- 是发件人在[i
,i+1
]间隔内传输的数据的大小。B[i]
- 是实际的网络带宽(缓慢变化,几乎不变)。即可以传输的最大带宽,没有拥塞累积。问题
然后我们可以为i
=>产生以下递归公式。 i+1
过渡。
Q[i] + X[i] >= B[i] * dTs[i]
dTr[i] = X[i] / B[i]
Q[i+1] = Q[i] + X[i] - B[i] * dTs[i]
dTr[i] = dTs[i] - Q[i] / B[i]
Q[i+1] = 0
B[i]
和Q[i]
未知,dTs[i]
,dTr[i]
和X[i]
已知。
现在,我需要一种算法来拟合未知数来满足递归公式。通过拟合,我的意思是最小化recusrsive公式中的残差,即预测dTr[i]
与实际的对比。
问题是我们的递归公式包含条件(if
),因此只能通过分析方法来完成拟合。此外,在某些情况下,无法推断出所请求的参数:如果带宽从未饱和,那么我们不知道B[i]
,我们只能猜测它的下限。如果总是出现拥堵,那么我们就不知道Q[i]
的绝对值,我们只能预测它的变化。
但除了那些含糊不清(发送者都是不正常的,应该分开对待)之外,问题似乎是明确定义和可解决的。我试图找到一个有效的解决方案。
我能想到的一种方法是尝试替换init-guess条件,一旦知道问题变成分析并具有明确定义的解决方案。接下来,我们可以尝试所有条件变量,也可以每次更改其中一个变量,直到达到最优残差。
或者我们可以从B[i]
和Q[i]
的init-guess开始,在每次迭代时计算残差及其导数w.r.t.两个参数,然后迭代调整它们。
我想知道数据是否适合条件是一个众所周知的合适解决方案的问题。
提前致谢。