NS2中修改無線節點通信半徑

原文鏈接:http://blog.sina.com.cn/s/blog_685456fb01011kdk.html

每次在終端運行有關無線節點通訊的代碼之後,在終端上你都會看見一些默認的數據:

highestAntennaZ_ = 1.5, distCST_ = 550.0

這其中 :

highestAntennaZ_:指的是無線天線的高度。
distCST_:指的是載波監聽範圍。

這兩個數值都是默認的,至於載波監聽的概念,這裏不在陳述了,可以谷歌一下。但要說明一下,一般載波監聽的範圍是通訊距離的2.2倍左右,也就是說在distCST_ = 550 的時候,通訊距離是250,讀者可以自己測試一下。

distCST_ = wifp->getDist(wifp->getCSThresh(), wifp->getPt(), 1.0, 1.0,highestZ , highestZ, wifp->getL(),wifp->getLambda());

從這個語句中可以看出,distCST_ 的值是與CSThresh_的值相關的,改變CSThresh_的值就可以改變distCST_的值了,那麼什麼是CSThresh_呢,其實就是偵聽閾值。只有接收功率大於這個閾值的時候數據纔可以被接收到。

那麼怎樣修改通訊距離呢,就是所謂的distance,同上,這個距離是和RXThresh_相關的,改變RXThresh的值就會間接的更改distance的值,也就是通訊半徑咯。那麼怎樣修改RXThresh_的值?在NS2中是用

 Phy/WirelessPhy set RXThresh_  < value >

來更改的,另外這條語句是添加在新建一個模擬器之前的。那麼這個value的值是不是就是你想要的距離呢,比如直接改爲250?不是的,筆者起初就是犯了這個錯誤,怎麼改都沒有反映,在RXThresh_與distance之間是有一個換算過程的,至於怎麼計算的,筆者沒有關心這個問題,但筆者知道這個換算可以通過threshold這個程序計算出來,在ns2中有這個程序的源代碼,但需要編譯一下生成可執行文件,在文件夾ns-allinone-2.35/ns-2.35/indep-utils/propagation中可以看到threshold.cc這個源文件,用命令

g++ -lm threshold.cc -o threshold

來編譯一下,期間你會遇到幾個錯誤,但是都是很明顯的錯誤,有過C++基礎的同學,能夠很輕易的將代碼改過來,然後運行

./threshold -m TwoRayGround < value >

(這個value的值纔是你想改變的通訊半徑值,比如100) 然後在終端上你就會得到通訊半徑100m所對應的RXThresh_值爲1.42681e-08 然後你在把這個值複製一下替換你的tcl代碼中

Phy/WirelessPhy set RXThresh_ < value >

valu 的值。

懂了嗎?不要覺得那個 ./threshold -m TwoRayGround 100 多麼神奇,他的作用就是求出對應的RXThresh_值,然後改成

Phy/WirelessPhy set RXThresh_ 1.42681e-08

這樣你就將通訊距離改爲100M 了。

同理你也可以改變distCST_的值了,對應的修改代碼爲

Phy/WirelessPhy set CSThresh_ < value >

這個value也是通過以上的方法求出來的。讀者可以嘗試修改一個這個distCST_的值,這樣再次運行tcl腳本的時候,就會發現終端上的默認值終於改變了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章