NS3 WIFI 链路与物理层学习笔记:wifi模块物理层与关键变量说明

因为种种原因想要测试一下如何对ns3中wifi设备的通信距离。

总体架构

在官方给出的实例third.cc中,创建一个wifi设备的的操作如下。

// 默认传播延迟模型: ConstantSpeedPropagationDelayModel
// 默认损耗模型: LogDistancePropagationLossModel
  YansWifiChannelHelper channel = YansWifiChannelHelper::Default ();
  
  // 默认误码率模型: NistErrorRateModel
  YansWifiPhyHelper phy = YansWifiPhyHelper::Default ();
  phy.SetChannel (channel.Create ());

  WifiHelper wifi;
  // 速率控制算法: 默认为 AarfWifiManager
  wifi.SetRemoteStationManager ("ns3::AarfWifiManager");
  WifiMacHelper mac;
  
  Ssid ssid = Ssid ("ns-3-ssid");
  mac.SetType ("ns3::StaWifiMac",
               "Ssid", SsidValue (ssid),
               "ActiveProbing", BooleanValue (false));

  NetDeviceContainer staDevices;
  // wifi设备添加三元组: 物理层,mac层,节点
  staDevices = wifi.Install (phy, mac, wifiStaNodes);

结合上述代码与下图所示,共有三个主要部分: channel, Wifiphy, Remote Station Manager。(Mac模块负责关联,探测,信标,分组重传,RTS和CTS消息等功能,在此先不做考虑)。这三个部分中,channel需要配置传播延迟模型和传播损耗模型; WifiPhy需要配置误码率模型; 整体的wifi模块还需要配置速率控制算法。这三者都在ns3中进行了多种实现,下面对这三个不同配置对整体传播距离的影响进行研究。
wifi网络设备软件架构

速率控制

推荐参考样例 examples/wireless/wifi-adhoc.cc
该部分给出了许多速率控制算法的实现,速率控制根据网络环境选择最佳数据速率。
在这里插入图片描述
ns-3给出了许多速率控制算法的实现。

WiFi-channel

物理信道有两种
SpectrumWifiPhy vs YansWifiPhy
YansWifiPhy是ns3早期项目 Yet Another Network Simulator中使用的模型。频谱物理层实现则是基于ns3的频谱模块。该模块需要指定传播延迟与损耗模型。
信道

	//衰减模型
wifiChannel.AddPropagationLoss("ns3::FriisPropagationLossModel");
  // 传播延迟模型
wifiChannel.SetPropagationDelay("ns3::ConstantSpeedPropagationDelayModel");

WiFi-phy

该部分需要指定误码率模型。
修改包括发射功率,传输延迟,接收阈值.
查询官方文档可知误码率模型中有如下两种:
在这里插入图片描述
YansErrorRateModel VS NistErrorRateModel
使用 wifiPhy.SetErrorRateModel ("ns3::NistErrorRateModel"); 修改不同的误码率计算方式,对比这两种误码率算法,在低速率与高速率情况下,传输距离与传输成功的比特数差别不大。(可能是实验参数设置的问题)

除了误码率模型之外,物理层还可以对以下参数进行修改。(该部分的TypeID有详细的说明)

1. 频率: Frequency
2. 带宽:ChannelWidth

ChannelWidth:5MHz, 10MHz, 20MHz, 22MHz, 40MHz, 80 MHz or 160 MHz.默认20MHz

3. 发射/接收增益: TxGain。 RxGain

对应的值 为:m_txGainDb 和 m_rxGainDb
在这里插入图片描述
这两个值在接收和发送信息过程中很重要,对于发射功率而言: 其在物理层收发包时被调用。参考yans-wifi-phy.cc中的发包过程的实现。

// 下方函数被 YansWifiPhy::SendPacket 函数调用
// 
  m_channel->Send (this, packet, GetPowerDbm (txVector.GetTxPowerLevel ()) + GetTxGain (), txVector, preamble, mpdutype, txDuration);

// 衰减方式。


// 上述函数中调用的GetPowerDbm 函数如下。
WifiPhy::GetPowerDbm (uint8_t power) const

选取物理层接收部分重要代码如下, 在经历了衰减之后, 信号获得一个接收增益,随后与门限数值进行比较。

YansWifiPhy::StartReceivePreambleAndHeader (Ptr<Packet> packet,...){
  rxPowerDbm += GetRxGain ();
  case YansWifiPhy::IDLE:
      if (rxPowerW > GetEdThresholdW ()) //checked here, no need to check in the payload reception (current implementation assumes constant rx power over the packet duration)
        {
}
4. 发送能量范围

TxPowerLevels:能量的等级数,默认为1. TxPowerEnd:最大传输水平,默认为16.0206dbm TxPowerStart:最小传输水平,默认为16.0206dbm
在这里插入图片描述
这两个值在计算发送功率时十分重要。 发送过程中

      dbm = m_txPowerBaseDbm + power * (m_txPowerEndDbm - m_txPowerBaseDbm) / (m_nTxPower - 1);
      dbm = m_txPowerBaseDbm;

其中的power 为能量等级,由辅助类的GetTxPowerLevel 返回而来。在仅有一种能量等级或者最低/最高能量相等时该值无用。

5. 能量检测门限

EnergyDetectionThreshold:能量检测门限,默认为-96dbm
CcaMode1Threshold:确定为CCA busy状态的门限,默认为-99dbm TxGain:传输增益,默认为1db

6. 其他

RxNoiseFigure:默认为7db
这些可修改的值对应了wifi中的重要参数如下。

  uint32_t m_channelCenterFrequency;   //!< Center frequency in MHz
  uint32_t m_initialFrequency;         //!< Store frequency until initialization
  bool m_frequencyChannelNumberInitialized; //!< Store initialization state
  uint32_t m_channelWidth;             //!< Channel width

  double m_edThresholdW;          //!< Energy detection threshold in watts
  double   m_ccaMode1ThresholdW;  //!< Clear channel assessment (CCA) threshold in watts
  double   m_txGainDb;            //!< Transmission gain (dB)
  double   m_rxGainDb;            //!< Reception gain (dB)
  double   m_txPowerBaseDbm;      //!< Minimum transmission power (dBm)
  double   m_txPowerEndDbm;       //!< Maximum transmission power (dBm)
  uint32_t m_nTxPower;            //!< Number of available transmission power levels

修改方式如下。

// 物理层可以修改的。
  wifiPhy.Set("TxPowerStart", DoubleValue(20)); // dBm (1.26 mW)
  wifiPhy.Set("TxPowerEnd", DoubleValue(20));
  // wifiPhy.Set ("ShortGuardEnabled", BooleanValue (true));
  wifiPhy.Set ("ChannelWidth", UintegerValue (160)); // 5, 10, 20, 22, 40, 80, 160
  wifiPhy.Set ("TxGain", DoubleValue (20));

dbm单位说明: 该单位是一个能量单位,是一种用于衡量电功率级别的单位,通常用于无线通信和电子设备中。dBm是一种相对于1毫瓦(mW)的单位,表示电功率的对数比值。
具体地说,1 dBm等于10log10(P/1mW),其中P是功率的值。因此,如果一个电源输出功率为1毫瓦,则其功率级别为0 dBm。如果输出功率为10毫瓦,则功率级别为10 dBm。
在实际的应用中,除了代表功率之外,dBm也可以用于表示信号的强度,例如,对于一个接收器来说,其接收到的信号强度可以用dBm来表示。在这种情况下,一个信号的强度越大,其dBm值就越高。(谢谢chatgpt)

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ko no 辉夜 da

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值