在尝试在NS3已有场景代码lena-dual-stripe.cc基础上更改得到车联网V2I场景时,设置切换算法代码如下:
//lteHelper->SetHandoverAlgorithmType ("ns3::NoOpHandoverAlgorithm");
lteHelper->SetHandoverAlgorithmType ("ns3::A2A4RsrqHandoverAlgorithm");
//lteHelper->SetHandoverAlgorithmType ("ns3::A3RsrpHandoverAlgorithm");
lteHelper->SetHandoverAlgorithmAttribute ("ServingCellThreshold",
UintegerValue (30));
lteHelper->SetHandoverAlgorithmAttribute ("NeighbourCellOffset",
UintegerValue (1));
if (epc)
{
// this enables handover for macro eNBs
lteHelper->AddX2Interface (macroEnbs);
lteHelper->AddX2Interface (cellEnbs);
}
在单给macroEnbs添加x2接口时能够正确切换,其结果如下
可以正常进行切换。
但在加入了小基站的x2接口后便会报错:
assert failed. cond="m_x2InterfaceSockets.find (remoteCellId) == m_x2InterfaceSockets.end ()", msg="Mapping for remoteCellId = 2 is already known", file=../src/lte/model/epc-x2.cc, line=156
分析大概是cellID的问题,但是不知道怎么设置改正,求大神指导!
下面是小基站配置的代码:
Ptr<ListPositionAllocator> enbPositionAlloc = CreateObject<ListPositionAllocator> ();
enbPositionAlloc->Add (Vector (150, 80, 0));
enbPositionAlloc->Add (Vector (200, 120, 0));
enbPositionAlloc->Add (Vector (250, 80, 0));
enbPositionAlloc->Add (Vector (300, 120, 0));
enbPositionAlloc->Add (Vector (350, 80, 0));
enbPositionAlloc->Add (Vector (400, 120, 0));
enbPositionAlloc->Add (Vector (450, 80, 0));
enbPositionAlloc->Add (Vector (500, 120, 0));
enbPositionAlloc->Add (Vector (550, 80, 0));
enbPositionAlloc->Add (Vector (600, 120, 0));
enbPositionAlloc->Add (Vector (450, 160, 0));
enbPositionAlloc->Add (Vector (550, 160, 0));
enbPositionAlloc->Add (Vector (500, 200, 0));
enbPositionAlloc->Add (Vector (600, 200, 0));
enbPositionAlloc->Add (Vector (550, 240, 0));
enbPositionAlloc->Add (Vector (650, 240, 0));
enbPositionAlloc->Add (Vector (650, 80, 0));
enbPositionAlloc->Add (Vector (700, 120, 0));
//enbPositionAlloc->Add (Vector (0, 40, 0));
//enbPositionAlloc->Add (Vector (50, 0, 0));
/*enbPositionAlloc->Add (Vector (450, 480, 0));
enbPositionAlloc->Add (Vector (550, 480, 0));
enbPositionAlloc->Add (Vector (360, 195, 0));
enbPositionAlloc->Add (Vector (440, 195, 0));
enbPositionAlloc->Add (Vector (100, 305, 0));
enbPositionAlloc->Add (Vector (300, 305, 0));
enbPositionAlloc->Add (Vector (60, 370, 0));
enbPositionAlloc->Add (Vector (140, 370, 0));
enbPositionAlloc->Add (Vector (260, 370, 0));
enbPositionAlloc->Add (Vector (340, 370, 0));*/
mobility.SetPositionAllocator (enbPositionAlloc);
mobility.Install (smallEnbs);
BuildingsHelper::Install(smallEnbs);
Config::SetDefault ("ns3::LteEnbPhy::TxPower", DoubleValue (smallEnbTxPowerDbm));
lteHelper->SetEnbAntennaModelType ("ns3::IsotropicAntennaModel");
lteHelper->SetEnbDeviceAttribute ("DlEarfcn", UintegerValue (smallEnbDlEarfcn));
lteHelper->SetEnbDeviceAttribute ("UlEarfcn", UintegerValue (smallEnbDlEarfcn + 18000));
lteHelper->SetEnbDeviceAttribute ("DlBandwidth", UintegerValue (smallEnbBandwidth));
lteHelper->SetEnbDeviceAttribute ("UlBandwidth", UintegerValue (smallEnbBandwidth));
lteHelper->SetEnbDeviceAttribute ("CsgId", UintegerValue (1));
lteHelper->SetEnbDeviceAttribute ("CsgIndication", BooleanValue (true));
lteHelper->SetAttribute ("PathlossModel", StringValue ("ns3::FriisSpectrumPropagationLossModel"));
lteHelper->SetSpectrumChannelType ("ns3::MultiModelSpectrumChannel");
lteHelper->SetFfrAlgorithmType ("ns3::LteFrHardAlgorithm");
NetDeviceContainer smallEnbDevs = lteHelper->InstallEnbDevice (smallEnbs);
看下配置文件里面有没有设置id的地方,一个id只能有一个实例。你同时安装2个一样的就报错。或者把之前的先删除
大佬,怎么联系你,我也想做车联网切换算法的仿真,但不会用ns3