首页 > 编程语言 >NS-3源码学习(六)eMLSR

NS-3源码学习(六)eMLSR

时间:2023-12-11 20:22:42浏览次数:27  
标签:const 信道 Wi eMLSR mac 源码 Link NS

简介

enhanced Multi Link Single Radio (eMLSR) 是MLO 的模式之一。WiFi AP 與使用者同時 使用多根天線建立連線,並從中選擇一條最適合之天線進行資料傳輸,當連線遭遇干擾時便立即切換至另一條天線以躲避干擾。透過此種傳輸模式WiFi AP與使用者能即時對環境干擾變化做出反應藉此提升傳輸吞吐量及可靠性。然而視使用者設備的效能不同切換延遲也長短不一,過高的切換頻率可能會為資料傳輸效能帶來反效果。

通过设计eMLSR切换算法,能夠在不同頻道干擾狀態下做出最精準的頻道切換決策,達到提升吞吐量的效果。

img

杂项

  1. 通过源码可以确定NS-3对于多个Link的实现方式:

    1. NS-3中对于WiFi结点的MAC和PHY的组装使用下述代码完成:

      staDevices = wifiHelper.Install(phy, wifiMac, staNodes);
      
      // src/wifi/helper/wifi-helper.cc
      NetDeviceContainer
      WifiHelper::Install(const WifiPhyHelper& phyHelper,
                          const WifiMacHelper& macHelper,
                          NodeContainer c) const{}
      
      src/wifi/helper/wifi-helper.cc
      NetDeviceContainer
      WifiHelper::Install(const WifiPhyHelper& phyHelper,
                          const WifiMacHelper& macHelper,
                          NodeContainer::Iterator first,
                          NodeContainer::Iterator last) const{}
      
    2. 在上述方法中,使用WifiHelper::Install(const WifiPhyHelper& phyHelper方法创建含有多个Link的PHY,每个PHY中的Link通过LinkID标识。在物理层中是找不到MAC地址的

    3. 这之后调用ns3::WifiMacHelper::Create方法开始创建mac层,这个方法被调用结束后,连接上多个Link的MAC层被创建,必须要深入这个方法内部才能看到具体的每个Link所对应的MAC层的创建方案。

    4. 创建每个Link所对应的mac如下图所示,在代码中我们可以看到,对于一个含有多个Link的device来说,mac实际上只有一个(指向了同一个内存地址),但Mac48Address有多个,他们各自安装到了不同的Link的帧管理器中,这些mac地址可以通过下述代码拿到:

      // 查看每隔staDevice的所有mac地址
          std::cout << "staDevices info :" << std::endl;
          for(u_int16_t i = 0; i < staDevices.GetN(); i++)
          {
              const Ptr<WifiNetDevice> device = DynamicCast<WifiNetDevice>(staDevices.Get(i));
              Ptr<WifiMac> mac = device->GetMac();
              for(uint8_t linkId = 0; linkId < std::max<uint8_t>(device->GetNPhys(), 1); ++linkId){
                  auto fem = mac->GetFrameExchangeManager(linkId);
                  std::cout << "staDevice " << i << " linkId " << std::to_string(linkId) << " mac address: " << fem->GetAddress() << std::endl;
              }
          }
      

      img

  2. 在wifi-phy中有一个属性ChannelSwitchDelay,这个属性的注释为"Delay between two short frames transmitted on different frequencies.",也就是信道的切换延迟

    1. 但是对于wifi6及以下的设备来说,并不支持多链路连接,也就是说这个属性出现的就很迷惑

    2. 不过这个属性被设置的值很大,默认是250ms

    3. 但是往深处想,这个如果ap切换了信道,那么sta不就断联了吗?gpt回答说ap会协调sta一起切换信道,这里需要去调查以下这种协商是如何工作的

    4. 另外,向channel中添加信号损失模型的工作

  3. eMLSR仅是MLO的模式一种,MLO还有其他种类的工作模式,比如STR和nSTR

    1. Multi-Link:该技术是Wi-Fi 7的最大亮点,其实也是Wi-Fi 7中最为复杂的技术

    2. 在Wi-FI 6时代,已经有一些系统,能够在单芯片中集成多个完整系统链路,并通过双Wi-Fi连接的方式,为用户提供服务,但是具体如何提供服务,以及一些调度策略的话,实际上是在传输层以上进行控制

    3. 简单的使用方式就是eMLSR和重传。eMLSR上面已经说过,重传是指在一个信道上发送源一个信道上发送副本,这样不必占用主信道的资源进行重传

    4. STR和nSTR技术

      img

      1. sta与ap的硬件差别:RF,天线数量,基带数量,IC,

      2. str难点:STR模式看起来工作机理很简单,也就是两个独立的802.11模块分别在不同的频段上跑。但是这里还是有几个难点或者说可以讨论的点:

        1. 共天线。 目前从协议讨论上看,在MLD的PHY中,是多个Link需要同时使用一根天线的,而且根据先行的硬件设计,Wi-Fi的天线其实与蓝牙BLE也是共天线的。另外一个很重要的就是Wi-Fi片内片外的资源都是非常吃紧的,所以在这种情况下实现MLD还是有技术难度的。

        2. Device间的干扰。虽说不同的Link(也就是对应到不同的Device)其是通过频段进行隔离的,但是由于其device的距离近,以及共天线等相关因素,所以Device间仍然有可能存在干扰。这种干扰被称为In-Device Coexistence (IDC) Interference。

        3. 在异步的情况下挖掘Multi-Link的可能性,比如一种典型的想法就是重传,让link 2给link1进行重传,这可以有效避免某一个信道的干扰,或者说用一个link做控制信道之类的。

      3. nstr难点:

        1. 同时开始,竞争机会

        2. 同时结束,对帧长度和发送速率的控制

  4. 启动eMLSR必须要保证是MLO(多链路)的,换言之,设备必须是MLD(多链路设备)

    1. 参考上一篇笔记,只需要向phy层添加多个channel,即可启动多链路功能

    2. 启动多链路后,可以在信标帧中看到响应的字段

      img

  5. 启动eMLSR过程:在ns-3的gitlab仓库中最新的WiFi 7示例程序中就有了eMLSR响应的字段,另外,在wifi-emlsr-test.ccDoSetup()方法中也有对应的设置字段

    1. std::string emlsrLinks;该字符串指定了在哪几个Link上启动emlsr

      1. 可以看到这个属性的类型为字符串,经过测试,Link序号从0开始,不需要左右的大括号

      2. std::string emlsrLinks = "0,1";

      3. 调用void ns3::WifiMacHelper::SetEmlsrManager函数进行设置

      4. 示例1:

        mac.SetEmlsrManager("ns3::DefaultEmlsrManager",
                                            "EmlsrLinkSet",
                                            StringValue(emlsrLinks)
                                            ...
        
      5. 示例2:

        mac.SetEmlsrManager("ns3::DefaultEmlsrManager",
                                "EmlsrLinkSet",
                                AttributeContainerValue<UintegerValue>(m_linksToEnableEmlsrOn),
                                ...
        

标签:const,信道,Wi,eMLSR,mac,源码,Link,NS
From: https://www.cnblogs.com/polariszg/p/17895465.html

相关文章

  • 多层神经网络源码
    多层神经网络源码解析在深度学习领域,多层神经网络是一种常用的模型,用于解决各种复杂的问题。本文将介绍多层神经网络的原理,并通过一个简单的代码示例来演示其实现过程。神经网络原理神经网络是一种基于人工神经元的模型,通过多层神经元的连接来模拟人脑的信息处理过程。它由输入......
  • insert语句详解
    --insert插入语句(添加)--语法insertinto表名([字段名1,字段名2,字段名3])values('值1(字段名123)'),('值2(字段名123)'),('值3(字段名123)'),,,INSERTINTO`student2`(`name`)VALUES('焯');--由于主键自增我们可以省略(如果不写表的字段,他就会一一匹配)INSERTINTO`student2`(`name`)......
  • ubuntu 下 docker 中部署 jenkins,并配置安卓 python 开发环境
    1、ubuntu中下载AndroidSdk#安装unzip工具sudoaptupdatesudoaptinstallunzip#下载AndroidSDKwgethttps://dl.google.com/android/repository/commandlinetools-linux-7302050_latest.zip#解压unzipcommandlinetools-linux-7302050_latest.zip-dandroid......
  • unity Transform 的 Rotate(xAngle: float, yAngle: float, zAngle: float, relativeT
    publicclassdemoword2:MonoBehaviour{//StartiscalledbeforethefirstframeupdatevoidStart(){//transform.Rotate(60,70,80,Space.World);//eulerAngles.z度围绕z轴,eulerAngles.x度围绕x轴,eulerAngles.y度围绕y轴//......
  • java高精度定位系统源码,人员定位,物资定位
    高精度定位系统源码,前端框架:Vue  后端框架:Springboot超宽带(UltraWide-Band,UWB)是一种新型的无线通信技术,根据通信委员会的规范,UWB的工作频带为3.1~10.6GHz,系统-10dB带宽与系统中心频率之比大于20%或系统带宽至少为500MHz。UWB信号的发生可通过发射时间极短(如2ns)的窄脉冲(如二次......
  • 报错:Client does not support authentication protocol requested by server; consider
    IDEA启动项目登录时显示用户或密码错误或者连接mysql数据库时报错原因:mysql8之前的版本中加密规则是mysql_native_password,而在mysql8之后,加密规则是caching_sha2_password,所以可以需要改变mysql的加密规则打开cmd窗口,登录mysql;mysql-uroot-h127.0.0.1-P3306-p......
  • CF1901 D Yet Another Monster Fight 题解
    LinkCF1901DYetAnotherMonsterFightQuestion现在给你一堆怪物,你拥有法术(一个法术可以连续攻击这n个所有怪物),你可以选择任意一个怪物作为法术的第一个攻击目标(伤害为\(x\)),然后除了第一个攻击目标可以任意,其他攻击目标只能为曾经攻击目标的相邻怪物。然后伤害依次递减,\(x......
  • D. Yet Another Monster Fight
    原题链接1.导论这道题能不能用贪心做?答案是不能,具体为什么已经有题解给出回答。当贪心无法求解时,我们考虑一下动态规划。2.算法设计对于任一节点,其最坏情况(即所需最大起始威力值,后文称最大值)是什么?当第一个被攻击的怪物(以下称头怪物)在其右边时,其最大值为右边怪物的数量加上自......
  • InstallShield 集成.net Framework的安装包制作
    .netFramework出现之前,一直用innosetup,setupfactory等工具打包,后来,.netFramework1.0/1.1同行的vs2002/2003中有了安装项目,制作也很方便,另外,微软也提供了一个强大的组件:MicrosoftVisualStudio.NET2003引导程序插件。通过MicrosoftVisualStudio.NET2003引导程序插件......
  • 【HarmonyOS】Failure[MSG_ERR_INSTALL_GRANT_REQUEST_PERMISSIONS_FAILED]报错权限自
    ​【关键词】REQUEST_PERMISSIONS_FAILED、应用权限、ACL 【问题背景】在调用ArkTSAPI的过程中,往往会受到一些权限的限制,但是明明我们已经在module.json5文件的requestPermissions配置了该权限,真机运行的的时候却报错,一直运行不起来,这是为何?​​ 【问题分析及解决方案......