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脚本的时候,就会发现终端上的默认值终于改变了。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值