0

2 つのノード間のワイヤレス リンクの品質のメトリックを取得したいと考えています。問題は、これらのノードが頻繁にメッセージを交換していないことですが、各メッセージには次のメッセージの送信予定時刻が含まれています。

現在、私は次のようなものを使用しています:

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

rfc3626 で提案されているように

現在、リンクの品質は明らかに大きく変化します。パケットが 1 つ失われると、半分になります。ヒステリシスのみに使用されます。

A と B の 2 つのノードがあるとします。B に対する A の link_quality は、B からのメッセージを現在どの程度受信しているかを意味します。次に、B にアナウンス1 + link_quality * METRIC_MAX(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 に答える