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的方式如何。然後它向B發佈1 + link_quality * METRIC_MAX(0無效),所以B知道它可以將消息發送到A. 現在宣佈價值受突然的變化,所以我想我會做這樣的事情

link_metric = (3 * link_metric + new_link_metric)/4 

現在,這是稍微好一點,但它仍然受到了很大的波動。 如果我進一步增加舊值的「權重」,在link_metric具有實際值之前需要相當長的時間。

你會建議什麼?

+0

定義'質量'?帶寬,延遲,抖動,數據包丟失? – ChuckCottrill

回答

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你可以嘗試。

相關問題