1. 传播模型
ns-3传播模块定义了两个通用接口,即PropagationLossModel和PropagationDelayModel,分别对传播损耗和传播延迟进行建模。
官方文档
https://www.nsnam.org/docs/models/html/propagation.htmlNS3信道设置几种写法
-------------------------------- 写法一 --------------------------------
YansWifiPhyHelper wifiPhy;
YansWifiChannelHelper wifiChannel = YansWifiChannelHelper::Default ();
wifiPhy.SetChannel (wifiChannel.Create ());
**默认延迟**:ns3::ConstantSpeedPropagationDelayModel
**默认损耗**:ns3::LogDistancePropagationLossModel
-------------------------------- 写法二 --------------------------------
#include "ns3/propagation-loss-model.h"
#include "ns3/propagation-delay-model.h"
YansWifiPhyHelper wifiPhy;
Ptr<LogDistancePropagationLossModel> lossModel = CreateObject<LogDistancePropagationLossModel> ();
Ptr<ConstantSpeedPropagationDelayModel> delayModel = CreateObject<ConstantSpeedPropagationDelayModel> ();
Ptr<YansWifiChannel> wifiChannel = CreateObject <YansWifiChannel> ();
wifiChannel->SetPropagationLossModel (lossModel);
wifiChannel->SetPropagationDelayModel (delayModel);
wifiPhy.SetChannel (wifiChannel);
-------------------------------- 写法三 --------------------------------
YansWifiPhyHelper wifiPhy;
YansWifiChannelHelper wifiChannel;
wifiChannel.SetPropagationDelay("ns3::ConstantSpeedPropagationDelayModel");
wifiChannel.AddPropagationLoss("ns3::LogDistancePropagationLossModel");
wifiPhy.SetChannel(wifiChannel.Create());
1.1 信号传播延迟模型(PropagationDelayModel)
- ConstantSpeedPropagationDelayModel
在这个模型中,信号以恒定的速度传播。延迟是根据发射器和接收器的位置来计算的。使用Tx和Rx天线之间的欧几里得距离。注意,根据这个模型,地球是平的。 - RandomPropagationDelayModel
传播延迟是完全随机的,每次调用模型时都会发生变化。所有的数据包(甚至是两个固定节点之间的数据包)都经历了随机延迟。因此,数据包的顺序没有得到保留。
1.2 信号传播损失模型(PropagationLossModel)
Propagation Loss Model用来确定接收机能够接收到的信号强度。
模型 | 说明 | 用法 |
---|---|---|
Cost231PropagationLossModel | ||
FixedRssLossModel | 固定信号强度,只要信号强度RSS设置为大于某个阈值,无论节点间距离多远,都可以通信。 | wifiChannel.AddPropagationLoss(“ns3::FixedRssLossModel”, “Rss”,DoubleValue(rss))【参考: examples/wireless/wifi-simple-adhoc.cc】 |
FriisPropagationLossModel | ||
ItuR1411LosPropagationLossModel | 此类实现 ITU-R 1411 LOS 传播模型,用于 300 MHz 至 100 GHz 频率范围内的视距 (LoS) 短距离户外通信。 | |
ItuR1411NlosOverRooftopPropagationLossModel | ||
JakesPropagationLossModel | ||
Kun2600MhzPropagationLossModel | ||
LogDistancePropagationLossModel | 对数距离传播模型。该模型使用所谓的对数距离传播模型计算接收功率: $ L = L_0 + 10 n log_{10}(\frac{d}{d_0})$ | |
MatrixPropagationLossModel | 每对节点的传播损耗是固定的,不取决于它们的实际位置。 | |
NakagamiPropagationLossModel | ||
OkumuraHataPropagationLossModel | ||
RandomPropagationLossModel | 传播损耗遵循随机分布 | |
RangePropagationLossModel | 在MaxRange(默认250米)以内无路径损耗,超出该范围损耗无穷大 | wifiChannel.AddPropagationLoss(“ns3::RangePropagationLossModel”, “MaxRange”, DoubleValue(100)) |
ThreeLogDistancePropagationLossModel | 具有三个距离场的对数距离路径损耗传播模型 该模型与 ns3::LogDistancePropagationLossModel 相同,只是它具有三个距离场:近、中和远,具有不同的指数。 | |
TwoRayGroundPropagationLossModel | ||
ThreeGppPropagationLossModel | ||
ThreeGppRMaPropagationLossModel | ||
ThreeGppUMaPropagationLossModel | ||
ThreeGppUmiStreetCanyonPropagationLossModel | ||
ThreeGppIndoorOfficePropagationLossModel |
2. 速率控制算法(简介)
-
ArfWifiManager
-
AarfWifiManager(简单略)
-
CaraWifiManager
-
IdealWifiManager
相当于RBAR算法。 -
RraaWifiManager
-
AmrrWifiManager
AMRR使用二进制指数退避(BEB)技术来适应用于改变速率和传输计数参数值的采样周期的长度(阈值)。 它使用探测包,并根据其传输状态自适应地改变阈值。 适应机制通过不由倒退机制指定的更高速率来确保更少的故障传输/重传和更高的吞吐量。 除此之外,AMRR采用启发式方法,通过明智地设置速率和传输计数参数来捕获信道的短期变化。 -
OnoeWifiManager
Onoe是基于信用的RCA,其中信用值根据成功发送的数量和在确定的采样周期上积累的错误传输和重传的数量来确定。 对于以特定速率的成功传输,Onoe不断提高其信用额度,达到某些阈值时,当前的传输速率将提高到下一个更高的速率。 类似地,对于失败的传输/重传,当信用低于某个阈值时,信用被扣除并且传输速率下降到下一个较低的速率。 由于其运行方式,Onoe在速率选择方面保守,对单个数据包故障较不敏感。 -
MinstrelWifiManager
该算法是源于madwifi 工程的速率控制算法。它是当前LInux内核默认的速率控制算法。Minstrel跟踪每个成功发送可用速率帧的概率。然后通过乘以速率的概率计算期望的吞吐量。这种方法被选择用于确保不会选择最低速率而趋向于最高速率(尽管最低速率具有更高发送成功概率)。 -
ConstantRateWifiManager
该算法对每一个包使用相同的传输模式。用户可以设置对于所有“unicast”包的期望的“DataMode”和所有“request”控制包的“ControlMode”(例如RTS)。
控制响应帧(比如CTS,ACK)的传输参数的选择规则在802.11标准中是相当清晰的。ns3遵从了这样的标准和从一系列正常速率或者强制性速率选择作为控制响应帧的速率的选择性。这就意味着,即使ConstantRateWifiManager被使用,控制响应帧也可能使用不同的速率进行发送。
ConstantRateWifiManager的ControlMode属性仅仅别用与RTS帧。CTS和ACK帧的速率是根据802.11标准进行选择的。然而,用户仍然可以手动添加WifiMode到基本的速率中,这将允许控制响应帧以其他的速率进行发送。请参考project wiki进一步了解这是如何实现的。
3. 误码率模型
物理层设备(基类 ns3::WifiPhy )在 ns3 中是与 ns3::WifiChannel 相连接的。我们需要为 YansWifiChannel 创建合适的 WifiPhy 对象。这里 YansWifiPhyHelper 就可以胜任这个工作。
YansWifiPhyHelper 类配置了一个对象工厂来创建一个 YansWifiPhy 实例,并添加一些其他的对象到该实例中,包括可能补充的 ErrorRateModel 误码率模型和指向 MobilityModel 移动模型的指针。典型的用户代码如下
YansWifiPhyHelper wifiPhyHelper = YansWifiPhyHelper::Default ();
wifiPhyHelper.SetChannel (wifiChannel);
YansWifiPhyHelper 默认配置 NistErrorRateModel(ns3::NistErrorRateModel) 误码率模型。你可以使用 YansWifiPhyHelper::SetErrorRateModel 方法更改误码率模型。