我想获得两个节点之间无线链路质量的指标。 问题是,这些节点不经常交换消息,但每条消息都包含计划发送下一条消息的时间。
目前,我正在使用以下内容:
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具有实际值之前需要相当长的时间。
你会建议什么?
答案 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。