src/lte/examples/lena-rem-sector-antenna.cc
changeset 8601 105d17d0138b
parent 8581 83da56eb5283
child 8605 55a01da4a323
equal deleted inserted replaced
8595:5d193f3e4195 8601:105d17d0138b
    45   ConfigStore inputConfig;
    45   ConfigStore inputConfig;
    46   inputConfig.ConfigureDefaults ();
    46   inputConfig.ConfigureDefaults ();
    47 
    47 
    48   cmd.Parse (argc, argv);
    48   cmd.Parse (argc, argv);
    49 
    49 
    50   Config::SetDefault ("ns3::LteSpectrumPhy::PemEnabled", BooleanValue (false));
       
    51 
       
    52   // Geometry of the scenario (in meters)
    50   // Geometry of the scenario (in meters)
    53   // Assume squared building
    51   // Assume squared building
    54   double nodeHeight = 1.5;
    52   double nodeHeight = 1.5;
    55   double roomHeight = 3;
    53   double roomHeight = 3;
    56   double roomLength = 500;
    54   double roomLength = 500;
    59   uint32_t nEnb = nRooms*nRooms + 4;
    57   uint32_t nEnb = nRooms*nRooms + 4;
    60   uint32_t nUe = 1;
    58   uint32_t nUe = 1;
    61 
    59 
    62   Ptr < LteHelper > lteHelper = CreateObject<LteHelper> ();
    60   Ptr < LteHelper > lteHelper = CreateObject<LteHelper> ();
    63   //lteHelper->EnableLogComponents ();
    61   //lteHelper->EnableLogComponents ();
    64   lteHelper->SetAttribute ("PathlossModel", StringValue ("ns3::BuildingsPropagationLossModel"));
    62   lteHelper->SetAttribute ("PathlossModel", StringValue ("ns3::FriisPropagationLossModel"));
    65 
    63 
    66   // Create Nodes: eNodeB and UE
    64   // Create Nodes: eNodeB and UE
    67   NodeContainer enbNodes;
    65   NodeContainer enbNodes;
    68   NodeContainer oneSectorNodes;
    66   NodeContainer oneSectorNodes;
    69   NodeContainer threeSectorNodes;
    67   NodeContainer threeSectorNodes;
   112           mmEnb->SetFloorNumber (0);
   110           mmEnb->SetFloorNumber (0);
   113           mmEnb->SetRoomNumberX (row);
   111           mmEnb->SetRoomNumberX (row);
   114           mmEnb->SetRoomNumberY (column);
   112           mmEnb->SetRoomNumberY (column);
   115 
   113 
   116           // Positioning UEs attached to eNB
   114           // Positioning UEs attached to eNB
   117           mobility.Install (ueNodes.at (plantedEnb));
   115           mobility.Install (ueNodes.at(plantedEnb));
   118           for (uint32_t ue = 0; ue < nUe; ue++)
   116           for (uint32_t ue = 0; ue < nUe; ue++)
   119             {
   117             {
   120               Ptr<BuildingsMobilityModel> mmUe = ueNodes.at (plantedEnb).Get (ue)->GetObject<BuildingsMobilityModel> ();
   118               Ptr<BuildingsMobilityModel> mmUe = ueNodes.at(plantedEnb).Get (ue)->GetObject<BuildingsMobilityModel> ();
   121               Vector vUe (v.x, v.y, v.z);
   119               Vector vUe (v.x, v.y, v.z);
   122               mmUe->SetPosition (vUe);
   120               mmUe->SetPosition (vUe);
   123               mmUe->SetIndoor (building);
   121               mmUe->SetIndoor (building);
   124               mmUe->SetFloorNumber (0);
   122               mmUe->SetFloorNumber (0);
   125               mmUe->SetRoomNumberX (row);
   123               mmUe->SetRoomNumberX (row);
   130 
   128 
   131   // Add a 1-sector site
   129   // Add a 1-sector site
   132   Vector v (500, 3000, nodeHeight);
   130   Vector v (500, 3000, nodeHeight);
   133   positionAlloc->Add (v);
   131   positionAlloc->Add (v);
   134   enbPosition.push_back (v);
   132   enbPosition.push_back (v);
   135   mobility.Install (ueNodes.at (plantedEnb));
   133   mobility.Install (ueNodes.at(plantedEnb));
   136   plantedEnb++;
   134   plantedEnb++;
   137 
   135 
   138   // Add the 3-sector site
   136   // Add the 3-sector site
   139   for (uint32_t index = 0; index < 3; index++, plantedEnb++)
   137   for (uint32_t index = 0; index < 3; index++, plantedEnb++)
   140     {
   138     {
   141       Vector v (500, 2000, nodeHeight);
   139       Vector v (500, 2000, nodeHeight);
   142       positionAlloc->Add (v);
   140       positionAlloc->Add (v);
   143       enbPosition.push_back (v);
   141       enbPosition.push_back (v);
   144       mobility.Install (ueNodes.at (plantedEnb));
   142       mobility.Install (ueNodes.at(plantedEnb));
   145     }
   143     }
   146 
   144 
   147 
   145 
   148   mobility.SetPositionAllocator (positionAlloc);
   146   mobility.SetPositionAllocator (positionAlloc);
   149   mobility.Install (enbNodes);
   147   mobility.Install (enbNodes);
   150 
   148 
   151   // Position of UEs attached to eNB
   149   // Position of UEs attached to eNB
   152   for (uint32_t i = 0; i < nEnb; i++)
   150   for (uint32_t i = 0; i < nEnb; i++)
   153     {
   151     {
   154       UniformVariable posX (enbPosition.at (i).x - roomLength * 0,
   152       UniformVariable posX (enbPosition.at(i).x - roomLength * 0,
   155                             enbPosition.at (i).x + roomLength * 0);
   153                             enbPosition.at(i).x + roomLength * 0);
   156       UniformVariable posY (enbPosition.at (i).y - roomLength * 0,
   154       UniformVariable posY (enbPosition.at(i).y - roomLength * 0,
   157                             enbPosition.at (i).y + roomLength * 0);
   155                             enbPosition.at(i).y + roomLength * 0);
   158       positionAlloc = CreateObject<ListPositionAllocator> ();
   156       positionAlloc = CreateObject<ListPositionAllocator> ();
   159       for (uint32_t j = 0; j < nUe; j++)
   157       for (uint32_t j = 0; j < nUe; j++)
   160         {
   158         {
   161           if ( i == nEnb - 3 )
   159           if ( i == nEnb - 3 )
   162             {
   160             {
   163               positionAlloc->Add (Vector (enbPosition.at (i).x + 10, enbPosition.at (i).y, nodeHeight));
   161               positionAlloc->Add (Vector (enbPosition.at(i).x + 10, enbPosition.at(i).y, nodeHeight));
   164             }
   162             }
   165           else if ( i == nEnb - 2 )
   163           else if ( i == nEnb - 2 )
   166             {
   164             {
   167               positionAlloc->Add (Vector (enbPosition.at (i).x - sqrt (10), enbPosition.at (i).y + sqrt (10), nodeHeight));
   165               positionAlloc->Add (Vector (enbPosition.at(i).x - sqrt (10), enbPosition.at(i).y + sqrt (10), nodeHeight));
   168             }
   166             }
   169           else if ( i == nEnb - 1 )
   167           else if ( i == nEnb - 1 )
   170             {
   168             {
   171               positionAlloc->Add (Vector (enbPosition.at (i).x - sqrt (10), enbPosition.at (i).y - sqrt (10), nodeHeight));
   169               positionAlloc->Add (Vector (enbPosition.at(i).x - sqrt (10), enbPosition.at(i).y - sqrt (10), nodeHeight));
   172             }
   170             }
   173           else
   171           else
   174             {
   172             {
   175               positionAlloc->Add (Vector (posX.GetValue (), posY.GetValue (), nodeHeight));
   173               positionAlloc->Add (Vector (posX.GetValue (), posY.GetValue (), nodeHeight));
   176             }
   174             }
   177           mobility.SetPositionAllocator (positionAlloc);
   175           mobility.SetPositionAllocator (positionAlloc);
   178         }
   176         }
   179       mobility.Install (ueNodes.at (i));
   177       mobility.Install (ueNodes.at(i));
   180     }
   178     }
   181   BuildingsHelper::MakeMobilityModelConsistent ();
   179   BuildingsHelper::MakeMobilityModelConsistent ();
   182 
   180 
   183 
   181 
   184   // Create Devices and install them in the Nodes (eNB and UE)
   182   // Create Devices and install them in the Nodes (eNB and UE)
   206   lteHelper->SetEnbAntennaModelAttribute ("MaxGain",     DoubleValue (0.0));
   204   lteHelper->SetEnbAntennaModelAttribute ("MaxGain",     DoubleValue (0.0));
   207   enbDevs.Add ( lteHelper->InstallEnbDevice (threeSectorNodes.Get (2)));
   205   enbDevs.Add ( lteHelper->InstallEnbDevice (threeSectorNodes.Get (2)));
   208 
   206 
   209   for (uint32_t i = 0; i < nEnb; i++)
   207   for (uint32_t i = 0; i < nEnb; i++)
   210     {
   208     {
   211       NetDeviceContainer ueDev = lteHelper->InstallUeDevice (ueNodes.at (i));
   209       NetDeviceContainer ueDev = lteHelper->InstallUeDevice (ueNodes.at(i));
   212       ueDevs.push_back (ueDev);
   210       ueDevs.push_back (ueDev);
   213       lteHelper->Attach (ueDev, enbDevs.Get (i));
   211       lteHelper->Attach (ueDev, enbDevs.Get (i));
   214       enum EpsBearer::Qci q = EpsBearer::GBR_CONV_VOICE;
   212       enum EpsBearer::Qci q = EpsBearer::GBR_CONV_VOICE;
   215       EpsBearer bearer (q);
   213       EpsBearer bearer (q);
   216       lteHelper->ActivateEpsBearer (ueDev, bearer, EpcTft::Default ());
   214       lteHelper->ActivateEpsBearer (ueDev, bearer, EpcTft::Default ());
   217     }
   215     }
   218 
   216 
   219   Simulator::Stop (Seconds (simTime));
   217   Simulator::Stop (Seconds (simTime));
   220 
   218   lteHelper->EnableTraces ();
   221   // better to leave traces disabled
       
   222   //lteHelper->EnableTraces ();
       
   223 
   219 
   224   Ptr<RadioEnvironmentMapHelper> remHelper = CreateObject<RadioEnvironmentMapHelper> ();
   220   Ptr<RadioEnvironmentMapHelper> remHelper = CreateObject<RadioEnvironmentMapHelper> ();
   225   remHelper->SetAttribute ("ChannelPath", StringValue ("/ChannelList/0"));
   221   remHelper->SetAttribute ("ChannelPath", StringValue ("/ChannelList/0"));
   226   remHelper->SetAttribute ("OutputFile", StringValue ("rem.out"));
   222   remHelper->SetAttribute ("OutputFile", StringValue ("rem.out"));
   227   remHelper->SetAttribute ("XMin", DoubleValue (-200.0));
   223   remHelper->SetAttribute ("XMin", DoubleValue (-2000.0));
   228   remHelper->SetAttribute ("XMax", DoubleValue (1200.0));
   224   remHelper->SetAttribute ("XMax", DoubleValue (+2000.0));
   229   remHelper->SetAttribute ("XRes", UintegerValue (300));
   225   remHelper->SetAttribute ("XRes", UintegerValue (100));
   230   remHelper->SetAttribute ("YMin", DoubleValue (-300.0));
   226   remHelper->SetAttribute ("YMin", DoubleValue (-500.0));
   231   remHelper->SetAttribute ("YMax", DoubleValue (+3500.0));
   227   remHelper->SetAttribute ("YMax", DoubleValue (+3500.0));
   232   remHelper->SetAttribute ("YRes", UintegerValue (300));
   228   remHelper->SetAttribute ("YRes", UintegerValue (100));
   233   remHelper->SetAttribute ("Z", DoubleValue (1.5));
   229   remHelper->SetAttribute ("Z", DoubleValue (1.5));
   234   remHelper->Install ();
   230   remHelper->Install ();
   235   // Recall the buildings helper to place the REM nodes in its position
   231   // Recall the buildings helper to place the REM nodes in its position
   236   BuildingsHelper::MakeMobilityModelConsistent ();
   232   BuildingsHelper::MakeMobilityModelConsistent ();
   237   Simulator::Run ();
   233   Simulator::Run ();