ns3 中 802.11 Phy & Channel

原文地址:点击打开链接

ns3 中 802.11 Phy 和 Channel 对应于 YansWifiPhy 和 YansWifiChannel 两个类,它们分别有对应的 Helper 类,辅助配置工作。

YansWifiPhy 描述的是天线相关参数,比如 TxGain, RxGain, RxRoiseFigure 等。 YansWifiPhy 应用依赖于 YansWifiChannel 中的两个成员变量 PropagationDelayModel 和 PropagationLossModel。 

PropagationDelayModel 很好理解,就是无线电的传播模型,通常使用 ConstantPropagationDelayModel 并使用缺省值,光速 c = 3.0 e+8 传播即可。

PropagationLossModel 对应的是无线传播衰减模型。信号衰减模型本身很复杂,对应的模型很多。从ns2过度过来一定知道的模型有 free space, two-ray ground, shadowing 模型等。一般认为 shadowing 模型已经能够很好的仿真了。在 ns3 中定义了更加丰富的信号衰减模型,名字也区别于 ns2。比如 free space 模型在ns3 中称为 Ferris 模型。 Shadowing 模型在ns3 中称为 LogDistancePropagationLossModel.


其中,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 的功能定义如下:

  • CCA Mode 1:  能量高于ED。一旦检测到能量高于ED阈值,CCA 就报信道忙;
  • CCA Mode 2:  仅依赖 CS。不管检测到的能量是高于 ED,还是低于 ED,只要高于 CS 阈值就报告信道忙;
  • CCA Mode 3:  检测到 CS,并且高于 ED。CCA 报告信道忙的前提,既要求检测的能量高于 CS 阈值,又要高于 ED 阈值。
ns3 中数据在物理层的发送过程是这样的。首先,下图显示了物理设备和信道直接的关系,如下:

ns3 中 802.11 Phy & Channel_第1张图片

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)。

你可能感兴趣的:(NS-3)