官方文档有一句很概括的话:节点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,指定传输采用的功率级数
所以综合来讲,,来调大距离,可以增大发射功率,发送增益,接受增益。。默认的通信范围取决于传播损耗模型和衰落模型以及一些初始值。。。当然上面只是理论,,你可以通过实践的方法,用ns3建立两个无线节点,,从100开始,慢慢增大距离,看看是多少的时候开始连不上就可以了。
=================================================================
利用移动模型mobility model的setpositionallocator方法,设置出来就可以用做范围(看到github上一大牛的写法),虽然感觉只是节点之间的距离。
=================================================================
@冷溪煦
的答案已经很详细了,也比较普适,这里我补充一种简单的方法:
将信道衰落模型(PropagationLossModel)设置为RangePropagationLossModel,然后它有个属性是“MaxRange”,设置它就几乎是直接设置了通信范围。
原理是:这个衰落模型是一个很理想化的模型,其核心思想就是小于通信半径(MaxRange)时返回接收增益为0db,大于通信半径时返回接收增益为-1000db,所以就会造成上述效果。
了解其原理之后题主就可以根据自己的需要选择合适的方法了:如果你的仿真对这一块要求不高,可以用这个方法,否则还请参照1楼的普适方法。
希望可以帮到你。
作者:知乎用户
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。