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-dual-stripe.cc 中有部分提及。该示例程序的特点是有很多可配置的参数,可以通过修改相关的全局变量来自定义。可以使用下列命令来获取所有这些全局变量的列表:

 

  • ./waf --run lena-dual-stripe --command-template="%s --PrintGlobals"

 

下面小节给出了运行仿真程序的例子。

 

22.1 Handover simulation campaign

 
在本小节,我们演示了使用 ns-3 的 LTE 模块运行仿真 campaign 的例子。 campaign 的目标是比较 LTE 模块每一个内置的切换算法的效果。
 
campaign 使用 lena-dual-stripe 示例程序。首先,我们必须修改示例程序来产生我们需要的输出。这种情况下,我们想要的输出为:产生切换的次数、用户平均吞吐量以及平均  SINR。
 
切换次数可以通过计算 HandoverEndOk Handover traces is fired 的次数获得。然后用户平均吞吐量可以通过使能 RLC Simulation Output 获得。最后,SINR 可以通过使能 PHY 仿真输出获得。下列样本代码片段显示了获得上述输出的一种可能方式:
 
void
NotifyHandoverEndOkUe (std::string context, uint64_t imsi,
                      uint16_t cellId, uint16_t rnti)
{
  std::cout << "Handover IMSI " << imsi << std::endl;
}

int
main (int argc, char *argv[])
{
  /*** SNIP ***/

  Config::Connect ("/NodeList/*/DeviceList/*/LteUeRrc/HandoverEndOk",
                  MakeCallback (&NotifyHandoverEndOkUe));

  lteHelper->EnablePhyTraces ();
  lteHelper->EnableRlcTraces ();
  Ptr<RadioBearerStatsCalculator> rlcStats = lteHelper->GetRlcStats ();
  rlcStats->SetAttribute ("StartTime", TimeValue (Seconds (0)));
  rlcStats->SetAttribute ("EpochDuration", TimeValue (Seconds (simTime)));

  Simulator::Run ();
  Simulator::Destroy ();
  return 0;
}
 
然后我们必须配置程序的参数来满足我们的仿真需求。我们在仿真中寻求下列假设:
 
  • 将六边形小区划分为3个扇区,每个扇区有 7 个宏基站站点(例如,21个宏小区),站点间的距离为 500 m 。
  • 尽管 lena-dual-stripe 最初用于两层网络( macrocell 和 femtocell)仿真,我们简化为只有一层(macrocell)。
  • 用户随机部署在站点周围,使用空闲模式小区选择自动连接到网络。此后,用户以 60 kmph 的移动速度在仿真环境中移动。
  • 仿真持续时间为 50 秒,因此用户有足够的时间来触发一些切换。
  • 宏小区传输功率为 46 dBm ,用户传输功率为 10 dBm。
  • 使用 EPC 模式(因为 X2 切换需要)。
  • 下行和上行业务为全缓存,5 MHz 带宽,使用 TCP 协议和 Proportional Fair (比例公平)调度器。
  • 理想的 RRC 协议。
 
下面的表格 lena-dual-stripe parameter configuration for handover campaign 表明我们如何配置  lena-dual-stripe 参数来实现上述假设。
 
Parameter name Value Description
simTime 50 50 seconds simulation duration
nBlocks 0 Disabling apartment buildings and femtocells
nMacroEnbSites 7 Number of macrocell sites (each site has 3 cells)
nMacroEnbSitesX 2 The macrocell sites will be positioned in a 2-3-2 formation
interSiteDistance 500 500 m distance between adjacent macrocell sites
macroEnbTxPowerDbm 46 46 dBm Tx power for each macrocell
epc 1 Enable EPC mode
epcDl 1 Enable full-buffer DL traffic
epcUl 1 Enable full-buffer UL traffic
useUdp 0 Disable UDP traffic and enable TCP instead
macroUeDensity 0.00002 Determines number of UEs (translates to 48 UEs in our simulation)
outdoorUeMinSpeed 16.6667 Minimum UE movement speed in m/s (60 kmph)
outdoorUeMaxSpeed 16.6667 Maximum UE movement speed in m/s (60 kmph)
macroEnbBandwidth 25 5 MHz DL and UL bandwidth
generateRem 1 (Optional) For plotting the Radio Environment Map
 
有些要求的假设不能用作 lena-dual-stripe 的参数。 这种情况下,我们可以 override 默认属性。见下面的表格 Overriding default attributes for handover campaign 。
 
Default value name Value Description
ns3::LteHelper::HandoverAlgorithm ns3::NoOpHandoverAlgorithm,ns3::A3RsrpHandoverAlgorithm, orns3::A2A4RsrqHandoverAlgorithm Choice of handover algorithm
ns3::LteHelper::Scheduler ns3::PfFfMacScheduler Proportional Fair scheduler
ns3::LteHelper::UseIdealRrc 1 Ideal RRC protocol
ns3::RadioBearerStatsCalculator::DlRlcOutputFilename <run>-DlRlcStats.txt File name for DL RLC trace output
ns3::RadioBearerStatsCalculator::UlRlcOutputFilename <run>-UlRlcStats.txt File name for UL RLC trace output
ns3::PhyStatsCalculator::DlRsrpSinrFilename <run>-DlRsrpSinrStats.txt File name for DL PHY RSRP/SINR trace output
ns3::PhyStatsCalculator::UlSinrFilename <run>-UlSinrStats.txt File name for UL PHY SINR trace output
 
 
ns-3 提供了很多方法用于传递配置值到仿真中。在本例中,我们使用命令行参数。 当开始每个单独的仿真时,它通过附加参数及其值到  waf 调用中来实现。 因此,waf 调用请求 ns-3 的仿真类似于:
 
$ ./waf --run="lena-dual-stripe
  --simTime=50 --nBlocks=0 --nMacroEnbSites=7 --nMacroEnbSitesX=2
  --epc=1 --useUdp=0 --outdoorUeMinSpeed=16.6667 --outdoorUeMaxSpeed=16.6667
  --ns3::LteHelper::HandoverAlgorithm=ns3::NoOpHandoverAlgorithm
  --ns3::RadioBearerStatsCalculator::DlRlcOutputFilename=no-op-DlRlcStats.txt
  --ns3::RadioBearerStatsCalculator::UlRlcOutputFilename=no-op-UlRlcStats.txt
  --ns3::PhyStatsCalculator::DlRsrpSinrFilename=no-op-DlRsrpSinrStats.txt
  --ns3::PhyStatsCalculator::UlSinrFilename=no-op-UlSinrStats.txt
  --RngRun=1" > no-op.txt

$ ./waf --run="lena-dual-stripe
  --simTime=50 --nBlocks=0 --nMacroEnbSites=7 --nMacroEnbSitesX=2
  --epc=1 --useUdp=0 --outdoorUeMinSpeed=16.6667 --outdoorUeMaxSpeed=16.6667
  --ns3::LteHelper::HandoverAlgorithm=ns3::A3RsrpHandoverAlgorithm
  --ns3::RadioBearerStatsCalculator::DlRlcOutputFilename=a3-rsrp-DlRlcStats.txt
  --ns3::RadioBearerStatsCalculator::UlRlcOutputFilename=a3-rsrp-UlRlcStats.txt
  --ns3::PhyStatsCalculator::DlRsrpSinrFilename=a3-rsrp-DlRsrpSinrStats.txt
  --ns3::PhyStatsCalculator::UlSinrFilename=a3-rsrp-UlSinrStats.txt
  --RngRun=1" > a3-rsrp.txt

$ ./waf --run="lena-dual-stripe
  --simTime=50 --nBlocks=0 --nMacroEnbSites=7 --nMacroEnbSitesX=2
  --epc=1 --useUdp=0 --outdoorUeMinSpeed=16.6667 --outdoorUeMaxSpeed=16.6667
  --ns3::LteHelper::HandoverAlgorithm=ns3::A2A4RsrqHandoverAlgorithm
  --ns3::RadioBearerStatsCalculator::DlRlcOutputFilename=a2-a4-rsrq-DlRlcStats.txt
  --ns3::RadioBearerStatsCalculator::UlRlcOutputFilename=a2-a4-rsrq-UlRlcStats.txt
  --ns3::PhyStatsCalculator::DlRsrpSinrFilename=a2-a4-rsrq-DlRsrpSinrStats.txt
  --ns3::PhyStatsCalculator::UlSinrFilename=a2-a4-rsrq-UlSinrStats.txt
  --RngRun=1" > a2-a4-rsrq.txt
 
仿真过程中的注意事项:
 
  • 注意,有些参数没有指定,因为它们和默认值一样,我们也保持切换算法为各自的默认设置。
  • 注意仿真输出的文件名,例如 RLC traces 和 PHY traces,因为我们必须确保它们不被下一次仿真运行覆盖。在本例中,我们通过使用命令行参数来命名。
  • --RngRun=1 参数在最后是用于设置被 random number generator(随机数字产生器)使用的运行次数。 我们使用不同的 RngRun 值再次运行仿真, 因此会创建同一仿真的几个独立副本。然后我们把这些副本所得结果进行平均,实现统计意义上的confidence 。
  • 我们可以增加一个参数  --generateRem=1 来生成必要的文件——生成仿真的 REM。 结果如下图 REM obtained from a simulation in handover campaign, 产生的步骤参见前面的章节 Radio Environment Maps 。该图也表明在仿真开始使用RngRun = 1 时基站和用户的位置。其他的 RngRun 值可能产生不同的用户位置。

 

_images/lte-handover-campaign-rem.png
                REM obtained from a simulation in handover campaign
 
在几个小时的运行后,仿真 campaign 最终结束。接下来我们对产生的仿真输出进行一些后续处理来获得一些有用的信息。
 
本例中,我们使用 GNU Octave 来帮助处理吞吐量和 SINR 数据,如下演示了一个示例 GNU Octave 脚本:
 
% RxBytes is the 10th column
DlRxBytes = load ("no-op-DlRlcStats.txt") (:,10);
DlAverageThroughputKbps = sum (DlRxBytes) * 8 / 1000 / 50

% RxBytes is the 10th column
UlRxBytes = load ("no-op-UlRlcStats.txt") (:,10);
UlAverageThroughputKbps = sum (UlRxBytes) * 8 / 1000 / 50

% Sinr is the 6th column
DlSinr = load ("no-op-DlRsrpSinrStats.txt") (:,6);
% eliminate NaN values
idx = isnan (DlSinr);
DlSinr (idx) = 0;
DlAverageSinrDb = 10 * log10 (mean (DlSinr)) % convert to dB

% Sinr is the 5th column
UlSinr = load ("no-op-UlSinrStats.txt") (:,5);
% eliminate NaN values
idx = isnan (UlSinr);
UlSinr (idx) = 0;
UlAverageSinrDb = 10 * log10 (mean (UlSinr)) % convert to dB 
 
至于切换的次数,我们可以使用简单的 shell 脚本计算日志文件中出现字符串 “Handover” 的次数:
 
$ grep "Handover" no-op.txt | wc -l
 
下面的表格 Results of handover campaign  是一些完整的统计数据(对每个单独的仿真运行完成后续处理时所得结果)。下面的值是 RngRun 为 1、2、3 和 4 时所得结果的平均值。
 
Statistics No-op A2-A4-RSRQ Strongest cell
Average DL system throughput 6 615 kbps 20 509 kbps 19 709 kbps
Average UL system throughput 4 095 kbps 5 705 kbps 6 627 kbps
Average DL SINR -0.10 dB 5.19 dB 5.24 dB
Average UL SINR 9.54 dB 81.57 dB 79.65 dB
Number of handovers per UE per second 0 0.05694 0.04771
 
 
结果表明,在移动仿真环境中使用切换算法可以显著提高用户的吞吐量和 SINR 。该 campaign 场景中的两种切换算法基本上没什么差异。观察它们在不同的场景下的性能将是一件有趣的事,例如有家庭基站部署的场景。
 

22.2 Frequency Reuse examples(频率复用例子)

 
下面的两个例子表明频率复用算法的功能。
 
lena-frequency-reuse 是一个简单的例子。3个基站位于一个三角形的布局中,3个小区边缘用户位于该三角形的中心,有3个小区中心用户(每个靠近每个基站)。使用者也可以指定随机布置的用户数。FR 算法安装在基站上,每个基站有不同的 FrCellTypeId,这意味着每个基站使用不同的  FR 配置。用户可以使用 6 种不同的 FR 算法运行  lena-frequency-reuse : NoOp、 Hard FR、 Strict FR、 Soft FR、 Soft FFR 和 Enhanced FFR 。 为了运行 Distributed FFR 算法的仿真场景,用户应使用  lena-distributed-ffr。这两个例子非常相似,但是它们不同,因为 Distributed FFR 要求使用 EPC ,而其他算法不需要。
 
为了使用不同的频率复用算法运行 lena-frequency-reuse , 用户需要通过覆盖默认属 ns3::LteHelper::FfrAlgorithm 来指定 FR 算法。使用 Soft FR 算法运行  lena-frequency-reuse 的命令如下:
 
$ ./waf --run "lena-frequency-reuse --ns3::LteHelper::FfrAlgorithm=ns3::LteFrSoftAlgorithm"
 
这些例子添加的功能有:产生 REM 和 spectrum analyzer trace 。 用户可以通过设置  generateRem 和 generateSpectrumTrace 属性来使能它们的生成。
 
 (1)在 lena-frequency-reuse 场景使用 Soft FR 算法生成 REM (RB 1 in data channel )的命令如下:
 
$ ./waf --run "lena-frequency-reuse --ns3::LteHelper::FfrAlgorithm=ns3::LteFrSoftAlgorithm
  --generateRem=true --remRbId=1"
 
 
_images/lte-fr-soft-1-rem.png
REM for RB 1 obtained from lena-frequency-reuse example with Soft FR algorithm enabled
 
 (2)在 lena-frequency-reuse 场景使用 Soft FFR 算法生成频谱 trace 的命令如下(Spectrum Analyzer 位置需要配置在脚本内):
 
$ ./waf --run "lena-frequency-reuse --ns3::LteHelper::FfrAlgorithm=ns3::LteFfrSoftAlgorithm
  --generateSpectrumTrace=true"
 
例子 spectrum analyzer trace 见图 Spectrum Analyzer trace obtained from lena-frequency-reuse example with Soft FFR algorithm enabled. Spectrum Analyzer was located need eNB with FrCellTypeId 2.。正如我们看到的,不同的数据信道子带以不同的功率等级发射(根据配置),与此同时,控制信道以相同的功率沿着整个系统带宽传输。
_images/lte-ffr-soft-2-spectrum-trace.png
Spectrum Analyzer trace obtained from lena-frequency-reuse example with Soft FFR algorithm enabled. Spectrum Analyzer was located need eNB with FrCellTypeId 2.
 
也可以使用安装在所有宏基站上的频率复用算法运行 lena-dual-stripe。 用户需要通过覆盖默认属性 ns3::LteHelper::FfrAlgorithm来指定 FR 算法。 使用 Hard FR 算法运行 lena-dual-stripe 的命令如下:
 
$ ./waf --run="lena-dual-stripe
  --simTime=50 --nBlocks=0 --nMacroEnbSites=7 --nMacroEnbSitesX=2
  --epc=1 --useUdp=0 --outdoorUeMinSpeed=16.6667 --outdoorUeMaxSpeed=16.6667
  --ns3::LteHelper::HandoverAlgorithm=ns3::NoOpHandoverAlgorithm
  --ns3::LteHelper::FfrAlgorithm=ns3::LteFrHardAlgorithm
  --ns3::RadioBearerStatsCalculator::DlRlcOutputFilename=no-op-DlRlcStats.txt
  --ns3::RadioBearerStatsCalculator::UlRlcOutputFilename=no-op-UlRlcStats.txt
  --ns3::PhyStatsCalculator::DlRsrpSinrFilename=no-op-DlRsrpSinrStats.txt
  --ns3::PhyStatsCalculator::UlSinrFilename=no-op-UlSinrStats.txt
  --RngRun=1" > no-op.txt 
 
在 lena-dual-stripe 场景使用 Hard FR 算法生成 REM ( RB 1 in data channel )的命令如下:
 
$ ./waf --run="lena-dual-stripe
  --simTime=50 --nBlocks=0 --nMacroEnbSites=7 --nMacroEnbSitesX=2
  --epc=0 --useUdp=0 --outdoorUeMinSpeed=16.6667 --outdoorUeMaxSpeed=16.6667
  --ns3::LteHelper::HandoverAlgorithm=ns3::NoOpHandoverAlgorithm
  --ns3::LteHelper::FfrAlgorithm=ns3::LteFrHardAlgorithm
  --ns3::RadioBearerStatsCalculator::DlRlcOutputFilename=no-op-DlRlcStats.txt
  --ns3::RadioBearerStatsCalculator::UlRlcOutputFilename=no-op-UlRlcStats.txt
  --ns3::PhyStatsCalculator::DlRsrpSinrFilename=no-op-DlRsrpSinrStats.txt
  --ns3::PhyStatsCalculator::UlSinrFilename=no-op-UlSinrStats.txt
  --RngRun=1 --generateRem=true --remRbId=1" > no-op.txt
 
在 lena-dual-stripe 场景使用 Hard Frequency Reuse 算法生成 REM (RB= 1,10 和20 )的结果如下图。选择这些 RB 的原因是每一个使用不同的 FR 小区类型。
 
_images/lte-fr-hard-1-rem.png
REM for RB 1 obtained from lena-dual-stripe simulation with Hard FR algorithm enabled
 
_images/lte-fr-hard-2-rem.png
REM for RB 10 obtained from lena-dual-stripe simulation with Hard FR algorithm enabled
 
_images/lte-fr-hard-3-rem.png
REM for RB 20 obtained from lena-dual-stripe simulation with Hard FR algorithm enabled
 
 
 

23 故障检测和调试技巧

 
很多用户在 ns-3-users 论坛上发邮件询问,例如,为什么他们在仿真中没有得到任何业务,或者可能只有上行业务没有下行业务等。大多数情况下,这是用户仿真程序的 bug 。这里有一些调试程序和找到问题原因的建议:
 
一般的方法是选择性地和递增地使能相关LTE模块组件的日志功能, 验证每次激活——输出能按预期输出。具体地:
 
  • 首先检查控制面,特别是 RRC 连接建立过程,通过使能日志组件 LteUeRrcLteEnbRrc。
  • 然后检查数据面的数据包传输,首先使能日志组件 LteUeNetDeviceEpcSgwPgwApplication,然后是 EpcEnbApplication,接着向下移动到 LTE 无线协议栈 (PDCP, RLC, MAC, 和 PHY), 直到你找到数据包停止处理/转发的位置(All his until you find where packets stop being processed / forwarded)。
 (完)
 
 

参考文献

https://www.nsnam.org/docs/models/html/lte-user.html
posted @ 2016-05-21 17:26  小花开  阅读(3292)  评论(0编辑  收藏  举报