原文:http://fajun82.blog.163.com/blog/static/16292252720104129738222/
ns3 中 802.11 Phy 和 Channel 对应于 YansWifiPhy 和 YansWifiChannel两个类,它们分别有对应的 Helper 类,辅助配置工作。
YansWifiPhy 描述的是天线相关参数,比如 TxGain, RxGain, RxRoiseFigure 等。YansWifiPhy 应用依赖于 YansWifiChannel 中的两个成员变量 PropagationDelayModel 和PropagationLossModel。
PropagationDelayModel 很好理解,就是无线电的传播模型,通常使用ConstantPropagationDelay
Model 并使用缺省值,光速 c = 3.0 e+8 传播即可。
PropagationLossModel对应的是无线传播衰减模型。信号衰减模型本身很复杂,对应的模型很多。从ns2过度过来一定知道的模型有 free space,two-ray ground, shadowing 模型等。一般认为 shadowing 模型已经能够很好的仿真了。在 ns3中定义了更加丰富的信号衰减模型,名字也区别于 ns2。比如 free space 模型在ns3 中称为 Ferris 模型。Shadowing 模型在ns3 中称为 LogDistancePropagationLo ssModel.
其中,L 表示信号衰减程度,采用 dB 计量。如果知道发送端发出的信号功率,和节点间距离,就能够计算出接收端接收到的信号功率。
看 到这里,有个疑问是,ns3 中数据包是怎么丢失的?更具体一点,知道了接收信号强度,RxGain, RxRoiseFigure等参数后,如何判断某个数据包是丢失还是没有丢失呢?更上层的问题是,如何计算无线传送距离呢?在讨论无线干涉模型时有这么几个距离需要关注:1. 传输距离; 2. 干涉距离;3.载波检测距离。
ns3 中 YansWifiPhy 中包含两个属性与这些距离相关,它们是 EnergyDetectionThreshold (ED)和CcaModelThreshold (CCA). 缺省设置, ED = -96 dbm, CCA = -99 dbm. 也就是说 ED要大于 CCA. CCA 是 Clear Channel Assessment 的首字母缩写。CCA的功能定义在不同的物理模型中是不同的。比如, DSSS 模型中,CCA 的功能定义如下:
YansWifiPhy::SendPacket 启动数据包发送:
m_channel->Send (this, packet, GetPowerDbm (txPower)+ m_txGainDb, txMode, preamble);
YansWifiChannel::Send 将把数据包发送到所有注册在此channel的物理设备,并调用对应的接收函数:
Simulator::ScheduleWithContext (dstNode,
delay, &YansWifiChannel::
Receive, this,
j, copy, rxPowerDbm, wifiMode, preamble);
YansWifiPhy::Receive 调用:
m_phyList[i]->
StartReceivePacket (packet, rxPowerDbm,txMode, preamble);
YansWifiPhy::StartReceivePacket启动物理层接收数据包,物理层根据当前状态的不同决定是否启动接收过程。当物理设备处于Switching, Rx, Tx时,都会丢掉该数据包,当物理设备处于 CCA_Busy 和 Idle 状态时,并且接收信号强度高于 ED阈值时,进入下一步处理:
m_endRxEvent= Simulator::Schedule (rxDuration,&YansWifiPhy::
EndReceive, this,
packet,
event);
InterferenceHelper::CalculatePer 从 chunck 的尺度计算 Packet Error Rate(per). 物理设备判断接收成功与否的方式太简单,即在[0, 1]区间均匀抽样,如果随机数大于 per,则认为接收成功,否则失败。
chunck 的划分不是以调制边界为基础的,而是以物理设备所在地的snr 保持不变的时间端为依据。每个比特块的出错概率通过ErrorRateModel 计算出。目前 ns3 中仅仅定义了一个YansErrorRateModel。ErrorRateModel 能够计算出在当时的 snr 条件下,以特定的调制模式,比如BPSK 或 QAM 等,以特定的传送速率,获得的 BER (Bit error rate)。
ns3 中 802.11 Phy 和 Channel 对应于 YansWifiPhy 和 YansWifiChannel两个类,它们分别有对应的 Helper 类,辅助配置工作。
YansWifiPhy 描述的是天线相关参数,比如 TxGain, RxGain, RxRoiseFigure 等。YansWifiPhy 应用依赖于 YansWifiChannel 中的两个成员变量 PropagationDelayModel 和PropagationLossModel。
PropagationDelayModel 很好理解,就是无线电的传播模型,通常使用ConstantPropagationDelay
PropagationLossModel对应的是无线传播衰减模型。信号衰减模型本身很复杂,对应的模型很多。从ns2过度过来一定知道的模型有 free space,two-ray ground, shadowing 模型等。一般认为 shadowing 模型已经能够很好的仿真了。在 ns3中定义了更加丰富的信号衰减模型,名字也区别于 ns2。比如 free space 模型在ns3 中称为 Ferris 模型。Shadowing 模型在ns3 中称为 LogDistancePropagationLo
其中,L 表示信号衰减程度,采用 dB 计量。如果知道发送端发出的信号功率,和节点间距离,就能够计算出接收端接收到的信号功率。
看 到这里,有个疑问是,ns3 中数据包是怎么丢失的?更具体一点,知道了接收信号强度,RxGain, RxRoiseFigure等参数后,如何判断某个数据包是丢失还是没有丢失呢?更上层的问题是,如何计算无线传送距离呢?在讨论无线干涉模型时有这么几个距离需要关注:1. 传输距离; 2. 干涉距离;3.载波检测距离。
ns3 中 YansWifiPhy 中包含两个属性与这些距离相关,它们是 EnergyDetectionThreshold
- CCA Mode 1:
能量高于ED。一旦检测到能量高于ED阈值,CCA就报信道忙; - CCA Mode 2:
仅依赖 CS。不管检测到的能量是高于 ED,还是低于ED,只要高于 CS 阈值就报告信道忙; - CCA Mode 3:
检测到 CS,并且高于 ED。CCA报告信道忙的前提,既要求检测的能量高于 CS 阈值,又要高于 ED 阈值。
YansWifiPhy::SendPacket 启动数据包发送:
YansWifiChannel::Send 将把数据包发送到所有注册在此channel的物理设备,并调用对应的接收函数:
YansWifiPhy::StartReceivePacket启动物理层接收数据包,物理层根据当前状态的不同决定是否启动接收过程。当物理设备处于Switching, Rx, Tx时,都会丢掉该数据包,当物理设备处于 CCA_Busy 和 Idle 状态时,并且接收信号强度高于 ED阈值时,进入下一步处理:
InterferenceHelper::CalculatePer 从 chunck 的尺度计算 Packet Error Rate(per). 物理设备判断接收成功与否的方式太简单,即在[0, 1]区间均匀抽样,如果随机数大于 per,则认为接收成功,否则失败。
chunck 的划分不是以调制边界为基础的,而是以物理设备所在地的snr 保持不变的时间端为依据。每个比特块的出错概率通过ErrorRateModel 计算出。目前 ns3 中仅仅定义了一个YansErrorRateModel。ErrorRateModel 能够计算出在当时的 snr 条件下,以特定的调制模式,比如BPSK 或 QAM 等,以特定的传送速率,获得的 BER (Bit error rate)。