0

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

目前,我正在使用这样的东西:

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

正如 rfc3626 中所建议的那样

现在链路质量明显变化很大,一个丢包就会把它减半。它仅用于滞后。

假设有两个节点,A 和 B。A 对 B 的 link_quality 表示它当前从 B 接收消息的质量。然后它1 + link_quality * METRIC_MAX向 B 宣布(0 无效),因此 B 知道它可以向 A 发送消息的质量。现在的值公告会发生突然变化,所以我想我会做这样的事情

link_metric = (3 * link_metric + new_link_metric) / 4

现在这个稍微好点了,但是还是会有很大的波动。如果我进一步增加旧值的“权重”,则在 link_metric 具有实际值之前需要很长时间。

你有什么建议?

4

1 回答 1

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 。

于 2013-11-24T12:08:40.400 回答