什么是用于确定链接度量的简单且内存有效的算法?

时间:2013-10-17 22:23:16

标签: algorithm networking network-protocols measurement performance

我想获得两个节点之间无线链路质量的指标。 问题是,这些节点不经常交换消息,但每条消息都包含计划发送下一条消息的时间。

目前,我正在使用以下内容:

if (message arrived in time)
    link_quality = link_quality/2 + 0.5
 else
    link_quality = link_quality/2

如rfc3626

中所述

现在链接质量明显变化很大,一个丢失的数据包会将其减少一半。它仅用于滞后。

假设有两个节点,A和B.B的link_quality意味着它当前从B接收消息的程度。然后它向B宣告1 + link_quality * METRIC_MAX(0无效),所以B知道它如何向A发送消息。 现在,A宣布的价值会发生突变,所以我认为我会做这样的事情

link_metric = (3 * link_metric + new_link_metric) / 4

现在这稍微好一些,但它仍然会受到很大的波动。 如果我增加重量'对于旧值,在link_metric具有实际值之前需要相当长的时间。

你会建议什么?

1 个答案:

答案 0 :(得分:0)

如果我正确理解了您的意思,那么您的质量定义仅基于数据包丢失。

你可以尝试更加重视你所测量的旧质量:

n=<try some different weights to get the behavior of it>
if (message arrived in time)
    link_quality = ((n-1)*(link_quality)+1)/n
 else
    link_quality = ((n-1)*(link_quality)+0)/n

或者您可以尝试使用移动平均线(最后N次尝试的平均值 - 相等加权),为此您需要存储更多数据:

static int index
static int link_metrics[N]

link_quality-=(link_metrics[index]/N)
if (message arrived in time)
    link_metrics[index]=1
else
    link_metrics[index]=0
link_quality+=(link_metrics[index]/N)
index=(index+1)%N

再次使用N来查看此方法的行为。 这是一个简单的移动平均线,您可以尝试更多类型的MA