2007.10.22
許多人在做NS2的wireless部分時,通常都會發現傳輸範圍到底該如何做設定,這也困惑了我很久
所以整理了這篇來詳述我找到的做法~也很感謝傅冠提供了網管人2007.September P.122~P.127
在ns-default.tcl可以發現到:
# Initialize the SharedMedia interface with parameters to make
# it work like the 914MHz Lucent WaveLAN DSSS radio interface
Phy/WirelessPhy set CPThresh_ 10.0
Phy/WirelessPhy set CSThresh_ 1.559e-11
Phy/WirelessPhy set RXThresh_ 3.652e-10
Phy/WirelessPhy set bandwidth_ 2e6
Phy/WirelessPhy set Pt_ 0.28183815
Phy/WirelessPhy set freq_ 914e+6
Phy/WirelessPhy set L_ 1.0
Phy/WiredPhy set bandwidth_ 10e6
人家都說NS預設傳送/接收範圍 = 250m/550m,但是從這個預設值來看
似乎還看不出有什麼關聯性,沒有250也沒有550呀!到底是什麼一回事呢?
原來它是經由一個公式算出來的
RXThresh_是節點可傳送到的範圍
CSThresh_是節點可監聽到附近網路活動的範圍
而那個公式就存在C:\cygwin\home\Administrator\ns-allinone-2.30\ns-2.30\indep-utils\propagation\threshold.cc
打開後你會發現:
double TwoRay(double Pt, double Gt, double Gr, double ht, double hr, double L, double d, double lambda)
{
/*
* if d < crossover_dist, use Friis free space model
* if d >= crossover_dist, use two ray model
*
* Two-ray ground reflection model.
*
* Pt * Gt * Gr * (ht^2 * hr^2)
* Pr = ----------------------------
* d^4 * L
*
* The original equation in Rappaport's book assumes L = 1.
* To be consistant with the free space equation, L is added here.
*/
double Pr; // received power
double crossover_dist = (4 * M_PI * ht * hr) / lambda;
if (d < crossover_dist)
Pr = Friis(Pt, Gt, Gr, lambda, L, d);
else
Pr = Pt * Gt * Gr * (hr * hr * ht * ht) / (d * d * d * d * L);
return Pr;
}
沒錯這就是我們的公式,其中:
Pr就是我們要的RXThresh,它代表的就是我們要的傳輸距離
Pt = transmit power
Gt = transmit antenna gain
Gr = receive antenna gain
ht = transmit antenna height
hr = receive antenna height
d = distance (例如250m)
我們將使用threshold.cc來換算出RXThresh _值 (CSThresh_同理)
步驟:
1. 在Cygwin下找到threshold.cc後,將他編譯(在這裡我把他叫test,這時會在同一個資料夾下出現一個test.exe)

2. 以下是執行的格式,其中other-options可以不用,最後的distance,初始設定以公尺為單位
如果我們要傳輸距離為250m,我們就鍵入250

最後程式幫我們算出RXThresh_,就可以在腳本裡面做傳輸範圍的設定囉!
後記:因為程式裡有小數點精準度的小誤差,如果自己用公式寫一支程式來測試會比較準哦!
許多人在做NS2的wireless部分時,通常都會發現傳輸範圍到底該如何做設定,這也困惑了我很久
所以整理了這篇來詳述我找到的做法~也很感謝傅冠提供了網管人2007.September P.122~P.127
在ns-default.tcl可以發現到:
# Initialize the SharedMedia interface with parameters to make
# it work like the 914MHz Lucent WaveLAN DSSS radio interface
Phy/WirelessPhy set CPThresh_ 10.0
Phy/WirelessPhy set CSThresh_ 1.559e-11
Phy/WirelessPhy set RXThresh_ 3.652e-10
Phy/WirelessPhy set bandwidth_ 2e6
Phy/WirelessPhy set Pt_ 0.28183815
Phy/WirelessPhy set freq_ 914e+6
Phy/WirelessPhy set L_ 1.0
Phy/WiredPhy set bandwidth_ 10e6
人家都說NS預設傳送/接收範圍 = 250m/550m,但是從這個預設值來看
似乎還看不出有什麼關聯性,沒有250也沒有550呀!到底是什麼一回事呢?
原來它是經由一個公式算出來的
RXThresh_是節點可傳送到的範圍
CSThresh_是節點可監聽到附近網路活動的範圍
而那個公式就存在C:\cygwin\home\Administrator\ns-allinone-2.30\ns-2.30\indep-utils\propagation\threshold.cc
打開後你會發現:
double TwoRay(double Pt, double Gt, double Gr, double ht, double hr, double L, double d, double lambda)
{
/*
* if d < crossover_dist, use Friis free space model
* if d >= crossover_dist, use two ray model
*
* Two-ray ground reflection model.
*
* Pt * Gt * Gr * (ht^2 * hr^2)
* Pr = ----------------------------
* d^4 * L
*
* The original equation in Rappaport's book assumes L = 1.
* To be consistant with the free space equation, L is added here.
*/
double Pr; // received power
double crossover_dist = (4 * M_PI * ht * hr) / lambda;
if (d < crossover_dist)
Pr = Friis(Pt, Gt, Gr, lambda, L, d);
else
Pr = Pt * Gt * Gr * (hr * hr * ht * ht) / (d * d * d * d * L);
return Pr;
}
沒錯這就是我們的公式,其中:
Pr就是我們要的RXThresh,它代表的就是我們要的傳輸距離
Pt = transmit power
Gt = transmit antenna gain
Gr = receive antenna gain
ht = transmit antenna height
hr = receive antenna height
d = distance (例如250m)
我們將使用threshold.cc來換算出RXThresh _值 (CSThresh_同理)
步驟:
1. 在Cygwin下找到threshold.cc後,將他編譯(在這裡我把他叫test,這時會在同一個資料夾下出現一個test.exe)

2. 以下是執行的格式,其中other-options可以不用,最後的distance,初始設定以公尺為單位
如果我們要傳輸距離為250m,我們就鍵入250

最後程式幫我們算出RXThresh_,就可以在腳本裡面做傳輸範圍的設定囉!
後記:因為程式裡有小數點精準度的小誤差,如果自己用公式寫一支程式來測試會比較準哦!












Recommend to Front page
峰峰's 研究日誌(8)




很棒呢!
雖然這些專業知識對于我來說如同天書,可是能感覺到你的用心與上進,以及你對于本專業的熱忱。加油哦!~關於設定範圍的問題~
您好~我這邊有一個問題~就是說 如果照您這樣更改了傳輸的範圍大小之後,如果跑NAM真的可以看的出來發出的範圍大小的差異嗎?謝謝~^^ 我是個NS2新手!~請多指教~其實可以去看一下trace檔就可以很清楚的發現了喔
只要進去trace檔 比較看看有加和沒加傳輸範圍的設定,再比較節點是否有收到較遠節點的封包,就可以發現有沒有影響了,基本上看nam是比較不準的作法 ^^
如果我試著要在用一個模擬中,將個別的node,設定成兩個或數麵的transmit power,該怎麼作呢??
比方說,有些可以傳250,有許只能傳50公尺
Comment Permissions: Allow commenting