https://www.zhihu.com/question/24549780/answer/66061998
![](https://i-blog.csdnimg.cn/blog_migrate/7979cbfe11973b30ea4a5265c12bec47.png)
官方文档有一句很概括的话:节点100米以内,要能够通信;200米外不能工作。
目的节点的收包过程:
当节点接收到数据包的第一比特时,检测接收能量,如果小于wifiphy的能量检测门限EnergyDetectionThreshold,就会被丢弃。
能量达到相应的阈值,ns3 最终依据 SNIR (信号与干扰加噪声比)来决定 BER 和 PER 的,即最终决定数据包是否接收成功。这里涉及到一个errorrate model,估计出错的概率,来决定最终决定数据包是否接收成功。
ns3::YansWifiPhy类可以设置的属性:
EnergyDetectionThreshold:能量检测门限,默认为-96dbm
CcaMode1Threshold:确定为CCA busy状态的门限,默认为-99dbm
TxGain:传输增益,默认为1db
RxGain:接收增益,默认为1db
TxPowerLevels:能量的等级数,默认为1.
TxPowerEnd:最大传输水平,默认为16.0206dbm
TxPowerStart:最小传输水平,默认为16.0206dbm
RxNoiseFigure:默认为7db
ChannelWidth:5MHz, 10MHz, 20MHz, 22MHz, 40MHz,80 MHz or 160 MHz.默认20MHz
发射功率=TxPowerStart + txPower *(TxPowerEnd - TxPowerStart)/ TxPowerLevels
txPower 供外部程序调用的接口,比如 MacLow,指定传输采用的功率级数
![](https://i-blog.csdnimg.cn/blog_migrate/57c0fa39acc8ece4b423b9562cb5d8a5.png)
=================================================================
利用移动模型mobility model的setpositionallocator方法,设置出来就可以用做范围(看到github上一大牛的写法),虽然感觉只是节点之间的距离。
=================================================================
将信道衰落模型(PropagationLossModel)设置为RangePropagationLossModel,然后它有个属性是“MaxRange”,设置它就几乎是直接设置了通信范围。
原理是:这个衰落模型是一个很理想化的模型,其核心思想就是小于通信半径(MaxRange)时返回接收增益为0db,大于通信半径时返回接收增益为-1000db,所以就会造成上述效果。
了解其原理之后题主就可以根据自己的需要选择合适的方法了:如果你的仿真对这一块要求不高,可以用这个方法,否则还请参照1楼的普适方法。
希望可以帮到你。
作者:知乎用户
链接:https://www.zhihu.com/question/24549780/answer/115060702
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。