LTE Module User Documentation(翻译12)——X2切换(X2-based handover)

LTE用户文档

(如有不当的地方,欢迎指正!)

18 X2-based handover

正如 3GPP 定义的,切换是改变用户服务小区的连接方式的过程。这一过程中涉及的两个基站通常称为源基站和目标基站。

为了使能仿真中 X2 切换的执行,有三个条件必须要满足。首先,仿真中必须使能 EPC(见 Evolved Packet Core (EPC) )。

其次,两个基站之间必须配置 X2 接口,这一点必须在仿真程序中明确交待:

lteHelper->AddX2Interface (enbNodes);

其中,enbNodes 是一个包含两个基站(基站之间配置有 X2 接口)的 NodeContainer (节点容器)。如果容器包含的基站超过两个,函数会在容器的每一对基站之间创建 X2 接口 。

最后,目标基站必须将 X2 切换请求(HANDOVER REQUES)配置为“open”。每个基站默认为开启的,因此大多数情况下不需要额外的命令。 然而,用户可以通过将布尔属性 LteEnbRrc::AdmitHandoverRequest 设为 false  来设置基站“closed” 。例如,你可以运行 lena-x2-handover 程序并按照下列方式设置属性:

NS_LOG=EpcX2:LteEnbRrc ./waf --run lena-x2-handover --command="%s --ns3::LteEnbRrc::AdmitHandoverRequest=false"

在满足上述三个要求后,切换过程就可以自动或手动触发了。下面的小节将一一阐述。

18.1 Manual handover trigger(手动切换触发)

通过调度明确的切换事件来“手动”触发仿真程序中的切换事件。LteHelper 对象为切换事件的调度提供了一个方便的方法。例如,让我们假定 ueLteDevs 为一个 NetDeviceContainer ,包含即将被切换的用户;enbLteDevs 为另一个 NetDeviceContainer ,包含源基站和目标基站。然后,在 0.1 s ,调度切换如下:

lteHelper->HandoverRequest (Seconds (0.100),
                            ueLteDevs.Get (0),
                            enbLteDevs.Get (0),
                            enbLteDevs.Get (1));

注意,用户需要已经连接到源基站,否则仿真会出错终止。

本小节完整的代码参见 src/lte/examples/ lena-x2-handover.cc 。

18.2 Automatic handover trigger(自动切换触发)

切换过程也可以通过用户的服务基站“自动”触发。触发背后的逻辑依赖于当前活跃在基站 RRC 实体中的切换算法。用户可以选择和配置仿真中将使用的切换算法,本节下面将阐述这一点。用户也可以选择自己编写切换算法,详情见设计文档的 Handover algorithm 这一章节。

切换算法的选择是通过 LteHelper 对象和它的 SetHandoverAlgorithmType 方法实现的:

Ptr<LteHelper> lteHelper = CreateObject<LteHelper> ();
lteHelper->SetHandoverAlgorithmType ("ns3::A2A4RsrqHandoverAlgorithm");

选定的切换算法也可以提供几种配置属性,如下:

lteHelper->SetHandoverAlgorithmAttribute ("ServingCellThreshold",
                                          UintegerValue (30));
lteHelper->SetHandoverAlgorithmAttribute ("NeighbourCellOffset",
                                          UintegerValue (1));

LTE 模块中有三种切换算法可供选择。第一种是 A2-A4-RSRQ 切换算法(命名为 ns3::A2A4RsrqHandoverAlgorithm),它是默认算法,使用方法如上。

第二种是最强小区切换算法 strongest cell handover algorithm (命名为 ns3::A3RsrpHandoverAlgorithm),配置方式如下:

lteHelper->SetHandoverAlgorithmType ("ns3::A3RsrpHandoverAlgorithm");
lteHelper->SetHandoverAlgorithmAttribute ("Hysteresis",
                                          DoubleValue (3.0));
lteHelper->SetHandoverAlgorithmAttribute ("TimeToTrigger",
                                          TimeValue (MilliSeconds (256)));

第三种是最特别的一个,称为 no-op  切换算法,基本上禁用自动切换。当手动切换触发需要专门地控制所有的切换决策时,该算法就会特别有用。它并没有任何配置属性,使用方式如下:

lteHelper->SetHandoverAlgorithmType ("ns3::NoOpHandoverAlgorithm");

每种切换算法的决策策略和属性,请参考设计文档的 Handover algorithm 这一章节。

最后,LteHelper 的 InstallEnbDevice 函数会实例化每个基站设备所选的切换算法。换句话说,在最终确定下列代码前要确保选择正确的切换算法:

NetDeviceContainer enbLteDevs = lteHelper->InstallEnbDevice (enbNodes);

本小节完整的代码参见 src/lte/examples/lena-x2-handover-measures.cc。

18.3 Tuning simulation with handover

正如设计文档中提及的,当切换失败时,当前切换模型的实现可能产生不可预期的后果。本小节将描述用户在仿真中使用切换时应考虑的几点步骤。

造成切换失败的主要原因是在执行切换过程中传输切换相关的信令发生错误。从设计文档的这个图 Sequence diagram of the X2-based handover 可以明显看出,存在很多信令,并且它们使用不同的接口和协议。为了简单起见,我们可以假定X2接口(源基站和目标基站之间)与 S1 接口(目标基站与 SGW/PGW之间)十分稳定。因此我们重点关注 RRC 协议(在用户和基站之间)和随机接入过程——一般通过空中传输,信道条件容易下降。

减小传输误差的一般建议是确保每个用户有足够高的 SINR。这可以通过合适地计划网络拓扑来最小化网络覆盖空洞。如果拓扑已经有了覆盖空洞,那么应该避免把用户配置在该区域。

另一种方法是避免  too-late handovers 。 换句话说,切换应该发生在用户的  SINR 变得太低之前,否则用户可能不能从源基站那接收到切换命令。切换算法有办法控制什么时候执行切换决策。例如,A2-A4-RSRQ 切换算法可以配置成一个更高的阈值来更早决定切换。相似的,更小的滞后现象或者最强小区切换算法中更短时间的触发通常会导致过早地切换。为了找到这些参数的合适值,应该考虑用户移动速度这一参数。一般而言,一个移动越快的用户需要执行的切换会越早。一些研究作品已经提出了一些推荐值,例如 [Lee2010] 。

上述要点已经足够正常的仿真使用,但是当一些特殊的情况出现时,还要考虑一些极端的措施。例如,用户可能考虑禁用信道误差模型( disabling the channel error models),确保所有切换相关的信令消息成功传输,而不管距离和信道条件。然而,这也会影响所有其他的与切换无关的数据或控制数据包,这可能是不必要的副作用。另外,用户可以使用下列方式实现:

Config::SetDefault ("ns3::LteSpectrumPhy::CtrlErrorModelEnabled", BooleanValue (false));
Config::SetDefault ("ns3::LteSpectrumPhy::DataErrorModelEnabled", BooleanValue (false));

通过使用上述代码,我们同时在控制和数据信道以及上行和下行方向上禁用误差模型。这是必要的,因为切换相关的信令消息通过使用这些信道来传输。例外是当仿真使用理想的 RRC 协议时,这种情况下,只需考虑随机接入过程。该过程包含控制消息,因此,我们只需要禁用控制信道的误差模型。

18.4 Handover traces

RRC 模型,特别是 LteEnbRrc 和 LteUeRrc 对象,会提供一些有用的 traces 用于连接一些自定义的函数,以便在用户侧和基站侧、在整个切换执行过程的开始和结束,这些函数都能被调用。例如,在你的仿真程序中,你可以声明下列方法:

void
NotifyHandoverStartUe (std::string context,
                      uint64_t imsi,
                      uint16_t cellId,
                      uint16_t rnti,
                      uint16_t targetCellId)
{
  std::cout << Simulator::Now ().GetSeconds () << " " << context
            << " UE IMSI " << imsi
            << ": previously connected to CellId " << cellId
            << " with RNTI " << rnti
            << ", doing handover to CellId " << targetCellId
            << std::endl;
}

void
NotifyHandoverEndOkUe (std::string context,
                      uint64_t imsi,
                      uint16_t cellId,
                      uint16_t rnti)
{
  std::cout << Simulator::Now ().GetSeconds () << " " << context
            << " UE IMSI " << imsi
            << ": successful handover to CellId " << cellId
            << " with RNTI " << rnti
            << std::endl;
}

void
NotifyHandoverStartEnb (std::string context,
                        uint64_t imsi,
                        uint16_t cellId,
                        uint16_t rnti,
                        uint16_t targetCellId)
{
  std::cout << Simulator::Now ().GetSeconds () << " " << context
            << " eNB CellId " << cellId
            << ": start handover of UE with IMSI " << imsi
            << " RNTI " << rnti
            << " to CellId " << targetCellId
            << std::endl;
}

void
NotifyHandoverEndOkEnb (std::string context,
                        uint64_t imsi,
                        uint16_t cellId,
                        uint16_t rnti)
{
  std::cout << Simulator::Now ().GetSeconds () << " " << context
            << " eNB CellId " << cellId
            << ": completed handover of UE with IMSI " << imsi
            << " RNTI " << rnti
            << std::endl;
} 

然后,你可以把这些方法连接到(hook up)相应的 trace sources ,类似于:

Config::Connect ("/NodeList/*/DeviceList/*/LteEnbRrc/HandoverStart",
                MakeCallback (&NotifyHandoverStartEnb));
Config::Connect ("/NodeList/*/DeviceList/*/LteUeRrc/HandoverStart",
                MakeCallback (&NotifyHandoverStartUe));
Config::Connect ("/NodeList/*/DeviceList/*/LteEnbRrc/HandoverEndOk",
                MakeCallback (&NotifyHandoverEndOkEnb));
Config::Connect ("/NodeList/*/DeviceList/*/LteUeRrc/HandoverEndOk",
                MakeCallback (&NotifyHandoverEndOkUe));

示例程序 src/lte/examples/lena-x2-handover.cc 表明上述所有指令如何整合到一个仿真程序中。你可以像这样运行程序:

./waf --run lena-x2-handover

并且它将输出由自定义切换 trace hooks print 的消息。为了额外可视化一些有用的日志信息,你可以像这样运行程序:

NS_LOG=LteEnbRrc:LteUeRrc:EpcX2 ./waf --run lena-x2-handover

参考文献

https://www.nsnam.org/docs/models/html/lte-user.html

时间: 2024-11-10 13:02:37

LTE Module User Documentation(翻译12)——X2切换(X2-based handover)的相关文章

LTE Module User Documentation(翻译15)——示例程序、参考场景以及故障检测和调试技巧

LTE用户文档 (如有不当的地方,欢迎指正!) 21 Examples Programs(示例程序) 路径 src/lte/examples/ 包含一些示例仿真程序,这些例子表明如何仿真不同的LTE场景. 22 Reference scenarios(参考场景) 文献中可以找到大量的参考仿真场景.下面我们列出了其中一部分: [TR36814] 的 A.2 节提到的系统仿真场景. dual stripe model [R4-092042], 在示例程序  src/lte/examples/lena

LTE Module User Documentation(翻译11)——配置用户测量

LTE用户文档 (如有不当的地方,欢迎指正!) 17 Configure UE measurements 仿真中激活的用户测量配置取决于所选的 “consumers”,例如切换算法.用户可能需要添加自己的配置,有以下几种方式: 在基站 RRC 实体中直接配置: 配置现有的切换算法:并 开发一种新的切换算法. 本节只讲述第一种方法.第二种方法在章节 Automatic handover trigger 中,第三种方法在设计文档的 Handover algorithm 中有讲. 在基站 RRC 直接

LTE Module User Documentation(翻译6)——物理误差模型、MIMO模型、天线模型

LTE用户文档 (如有不当的地方,欢迎指正!) 9 PHY Error Model 物理误差模型包含数据误差模型和下行控制误差模型,两者默认为激活.可以使用 ns-3 属性系统去激活,具体为: Config::SetDefault ("ns3::LteSpectrumPhy::CtrlErrorModelEnabled", BooleanValue (false)); Config::SetDefault ("ns3::LteSpectrumPhy::DataErrorMod

LTE Module User Documentation(翻译7)——无线环境地图(REM)、AMC 模型 和 CQI 计算

LTE用户文档 (如有不当的地方,欢迎指正!) 12 Radio Environment Maps 通过使用类 RadioEnvironmentMapHelper  是可能输出文件 Radio Environment Map (REM) 的,例如一个统一的 2D 网格值,表示下行基站(在每个点有最强的信号)的信噪比,可以指定 REM 是否应生成数据或控制信道. 并且,用户可以设置 RbId, 它表示 REM 将生成. 默认情况下,RbId 为 -1 ,表示 REM 将生成来自所有 RBs 的平均

LTE Module User Documentation(翻译)

LTE用户文档 (如有不当的地方,欢迎指正!) 1.背景 假定读者已经熟悉 ns-3 simulator ,能运行一般的仿真程序.如果不是的话,强烈推荐读者参考 [ns3tutorial]. 2. 使用概述 ns-3 LTE 模块是一个软件库,允许仿真LTE网络,一些情况下还可以仿真核心网 Evolved Packet Core (EPC).仿真过程通常涉及以下几个步骤: 定义仿真场景. 编写程序,重建期望的仿真场景拓扑/架构,通过使用 ns3::LteHelper API(定义在 src/lt

LTE Module User Documentation(翻译8)——核心网(EPC)

LTE用户文档 (如有不当的地方,欢迎指正!) 14 Evolved Packet Core (EPC) 我们现在讲解如何编写一个仿真程序——除了 LTE 无线接入网外,还允许仿真 EPC. EPC 允许使用 IPv4 网络与 LTE 设备连接.换句话说,可以在 LTE 上使用常规的 ns-3 应用和 IPv4  sockets ,并且能够把 LTE 网络与仿真中的任何 IPv4 网络相连接. 首先,除了我们已经在 Basic simulation program 中介绍过的 LteHelper

LTE Module User Documentation(翻译5)——Mobility Model with Buildings

LTE用户文档 (如有不当的地方,欢迎指正!) 8 Mobility Model with Buildings 我们现在通过例子解释如何在 ns-3 仿真程序中使用 buildings 模型(特别是 MobilityBuildingInfo  和 BuildingPropagationModel 类) 来设置 LTE 仿真场景(包括建筑物和室内节点). 1. 包含的头文件: #include <ns3/mobility-building-info.h> #include <ns3/bui

LTE Module User Documentation(翻译4)—— 使用 Fading Trace

LTE用户文档 (如有不当的地方,欢迎指正!) 7 使用 Fading Trace 本节描述如何在 LTE 仿真中使用 fading traces . (1)生成 Fading Traces  通过使用专用的 matlab 脚本 (/lte/model/fading-traces/fading-trace-generator.m)提供的代码生成 fading traces .该脚本包含典型的 taps 配置,用于 3 种 3GPP 场景(例如,行人.车辆和城市,定义在 Annex B.2 of 

LTE Manual ——Logging(翻译)

LTE Manual ——Logging(翻译) (本文为个人学习笔记,如有不当的地方,欢迎指正!) 9 Logging ns-3 日志功能可以用于监测或调试仿真程序的进展.日志输出可以通过 main()  程序中的语句或通过使用 NS_LOG 环境变量来启用. 日志语句并没有编译成 ns-3 的优化版本(Logging statements are not compiled into optimized builds of ns-3).为了使用日志,必须 build  ns-3  的默认调试