src/lte/test/lte-test-shadowing.cc
changeset 8248 986f7db9f056
parent 8247 9cc847386565
child 8249 b1c98c4098b3
--- a/src/lte/test/lte-test-shadowing.cc	Wed Sep 28 16:48:04 2011 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,237 +0,0 @@
-/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
-/*
-* Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
-*
-* This program is free software; you can redistribute it and/or modify
-* it under the terms of the GNU General Public License version 2 as
-* published by the Free Software Foundation;
-*
-* This program is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-* GNU General Public License for more details.
-*
-* You should have received a copy of the GNU General Public License
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-*
-* Author: Marco Miozzo <marco.miozzo@cttc.es>
-*/
-
-#include "ns3/simulator.h"
-
-#include "ns3/log.h"
-
-#include "ns3/spectrum-test.h"
-
-#include "ns3/lte-phy-tag.h"
-#include "ns3/lte-test-ue-phy.h"
-#include "ns3/lte-sinr-chunk-processor.h"
-
-#include "ns3/lte-test-shadowing.h"
-#include <ns3/buildings-propagation-loss-model.h>
-#include <ns3/node-container.h>
-#include <ns3/mobility-helper.h>
-#include <ns3/lena-helper.h>
-#include <ns3/single-model-spectrum-channel.h>
-#include "ns3/string.h"
-#include "ns3/double.h"
-#include <ns3/building.h>
-#include <ns3/enum.h>
-#include <ns3/net-device-container.h>
-#include <ns3/lte-ue-net-device.h>
-#include <ns3/lte-enb-net-device.h>
-#include <ns3/lte-ue-rrc.h>
-#include <ns3/lena-helper.h>
-#include <ns3/lte-enb-phy.h>
-#include <ns3/lte-ue-phy.h>
-#include "lte-test-sinr-chunk-processor.h"
-
-NS_LOG_COMPONENT_DEFINE ("LteShadowingTest");
-
-using namespace ns3;
-
-
-/**
-* Test 1.1 Shadowing compound test
-*/
-
-/**
-* This TestSuite tests the shadowing model of BuildingPathlossModel 
-* by reproducing several communication scenarios 
-*/
-
-
-LteShadowingTestSuite::LteShadowingTestSuite ()
-: TestSuite ("lte-shadowing-model", SYSTEM)
-{
-  
-  
-  // -------------- UNIT TESTS ----------------------------------
-  
-  LogComponentEnable ("LteShadowingTest", LOG_LEVEL_ALL);
-  
-  // NS_LOG_INFO ("Creating LteDownlinkSinrTestSuite");
-  
-  Ptr<LenaHelper> lena = CreateObject<LenaHelper> ();
-  
-  lena->SetAttribute ("PropagationModel", StringValue ("ns3::BuildingsPropagationLossModel"));
-  
-  // Create Nodes: eNodeB, home eNB, UE and home UE (UE attached to HeNB)
-  NodeContainer enbNodes;
-  NodeContainer henbNodes;
-  NodeContainer ueNodes;
-  NodeContainer hueNodes;
-  enbNodes.Create (1);
-  henbNodes.Create (2);
-  ueNodes.Create (5);
-  hueNodes.Create (3);
-  
-  // Install Mobility Model
-  MobilityHelper mobility;
-  mobility.SetMobilityModel ("ns3::BuildingsMobilityModel");
-  mobility.Install (enbNodes);
-  mobility.Install (henbNodes);
-  mobility.Install (ueNodes);
-  mobility.Install (hueNodes);
-  
-  NetDeviceContainer enbDevs;
-  NetDeviceContainer henbDevs;
-  NetDeviceContainer ueDevs;
-  NetDeviceContainer hueDevs;
-  enbDevs = lena->InstallEnbDevice (enbNodes);
-  ueDevs = lena->InstallUeDevice (ueNodes);
-  henbDevs = lena->InstallEnbDevice (henbNodes);
-  hueDevs = lena->InstallUeDevice (hueNodes);
-  
-  
-  
-  lena->Attach (ueDevs, enbDevs.Get (0));
-  lena->Attach (hueDevs, henbDevs.Get (0));
-  
-  // Test #1 Outdoor Model
-  
-  double distance = 2000;
-  double hm = 1;
-  double hb = 30;
-  double freq = 869e6; // E_UTRA BAND #5 see table 5.5-1 of 36.101
-  Ptr<BuildingsMobilityModel> mm1 = enbNodes.Get (0)->GetObject<BuildingsMobilityModel> ();
-  mm1->SetPosition (Vector (0.0, 0.0, hb));
-  
-  Ptr<BuildingsMobilityModel> mm2 = ueNodes.Get (0)->GetObject<BuildingsMobilityModel> ();
-  mm2->SetPosition (Vector (distance, 0.0, hm));
-  
-  AddTestCase (new LteShadowingTestCase (mm1, mm2, 148.86, 7.0, "Outdoor Shadowing"));
-  
-  // Test #2 Indoor model
-  
-  distance = 30;
-  freq = 2.1140e9; // E_UTRA BAND #1 see table 5.5-1 of 36.101
-  double henbHeight = 10.0;
-  Ptr<BuildingsMobilityModel> mm5 = henbNodes.Get (0)->GetObject<BuildingsMobilityModel> ();
-  mm5->SetPosition (Vector (0.0, 0.0, henbHeight));
-  Ptr<Building> building1 = Create<Building> (0.0, 10.0, 0.0, 10.0, 0.0, 20.0/*, 1, 1, 1*/);
-  building1->SetBuildingType (Building::Residential);
-  building1->SetExtWallsType (Building::ConcreteWithWindows);
-  mm5->SetIndoor (building1);
-  Ptr<BuildingsMobilityModel> mm6 = hueNodes.Get (0)->GetObject<BuildingsMobilityModel> ();
-  mm6->SetPosition (Vector (distance, 0.0, hm));
-  mm6->SetIndoor (building1);
-  mm6->SetFloorNumber (2);
-  AddTestCase (new LteShadowingTestCase (mm5, mm6, 88.5724, 8.0, "Indoor Shadowing"));
-  
-  // Test #3 Indoor -> Outdoor
-  
-  distance = 100;
-  freq = 2.1140e9; // E_UTRA BAND #1 see table 5.5-1 of 36.101
-  Ptr<BuildingsMobilityModel> mm9 = henbNodes.Get (1)->GetObject<BuildingsMobilityModel> ();
-  mm9->SetPosition (Vector (0.0, 0.0, henbHeight));
-  mm9->SetIndoor (building1);
-  mm9->SetFloorNumber (2);
-  Ptr<BuildingsMobilityModel> mm10 = hueNodes.Get (1)->GetObject<BuildingsMobilityModel> ();
-  mm10->SetPosition (Vector (distance, 0.0, hm));
-  // The loss is similar of test #4 plus the building penetration loss
-  // which for ConcreteWithWindows is equal to 7 dB and the height gain
-  // (2 floors x 2 dB/floor = 4) -> 81.838 + 7 - 4 = 84.838
-  AddTestCase (new LteShadowingTestCase (mm9, mm10, 85.0012, 8.6, "Indoor -> Outdoor Shadowing"));
-
-}
-
-static LteShadowingTestSuite lteShadowingTestSuite;
-
-
-/**
-* TestCase
-*/
-
-LteShadowingTestCase::LteShadowingTestCase (Ptr<BuildingsMobilityModel> m1, Ptr<BuildingsMobilityModel> m2, double refValue, double sigmaRef, std::string name)
-: TestCase ("SHADOWING calculation: " + name),
-m_node1 (m1),
-m_node2 (m2),
-m_lossRef (refValue),
-m_sigmaRef (sigmaRef)
-{
-}
-
-LteShadowingTestCase::~LteShadowingTestCase ()
-{
-}
-
-void
-LteShadowingTestCase::DoRun (void)
-{
-//     LogLevel logLevel = (LogLevel)(LOG_PREFIX_FUNC | LOG_PREFIX_TIME | LOG_LEVEL_ALL);
-  
-  //   LogComponentEnable ("LteEnbRrc", logLevel);
-  //   LogComponentEnable ("LteUeRrc", logLevel);
-  //   LogComponentEnable ("LteEnbMac", logLevel);
-  //   LogComponentEnable ("LteUeMac", logLevel);
-  //   LogComponentEnable ("LteRlc", logLevel);
-  //   LogComponentEnable ("RrPacketScheduler", logLevel);
-  // 
-  //   LogComponentEnable ("LtePhy", logLevel);
-  //   LogComponentEnable ("LteEnbPhy", logLevel);
-  //   LogComponentEnable ("LteUePhy", logLevel);
-  // 
-  //   LogComponentEnable ("LteSpectrumPhy", logLevel);
-  //   LogComponentEnable ("LteInterference", logLevel);
-  //   LogComponentEnable ("LteSinrChunkProcessor", logLevel);
-  // 
-  //   LogComponentEnable ("LtePropagationLossModel", logLevel);
-  //   LogComponentEnable ("LossModel", logLevel);
-//     LogComponentEnable ("ShadowingLossModel", logLevel);
-  //   LogComponentEnable ("PenetrationLossModel", logLevel);
-  //   LogComponentEnable ("MultipathLossModel", logLevel);
-  //   LogComponentEnable ("PathLossModel", logLevel);
-  // 
-  //   LogComponentEnable ("LteNetDevice", logLevel);
-  //   LogComponentEnable ("LteUeNetDevice", logLevel);
-  //   LogComponentEnable ("LteEnbNetDevice", logLevel);
-  
-//   LogComponentEnable ("BuildingsPropagationLossModel", LOG_LEVEL_ALL);
-  NS_LOG_INFO ("Testing " << GetName());
-  std::vector<double> loss;
-  double sum = 0.0;
-  double sumSquared = 0.0;
-  int samples = 10000;
-  for (int i = 0; i < samples; i++)
-  {
-  Ptr<SpectrumChannel> m_downlinkChannel = CreateObject<SingleModelSpectrumChannel> ();
-  Ptr<SpectrumChannel> m_uplinkChannel = CreateObject<SingleModelSpectrumChannel> ();
-  Ptr<BuildingsPropagationLossModel> m_downlinkPropagationLossModel = CreateObject<BuildingsPropagationLossModel> ();
-  Ptr<BuildingsPropagationLossModel>  m_uplinkPropagationLossModel = CreateObject<BuildingsPropagationLossModel> ();
-  m_downlinkChannel->AddPropagationLossModel (m_downlinkPropagationLossModel);
-  m_uplinkChannel->AddPropagationLossModel (m_uplinkPropagationLossModel);
-  loss.push_back (m_downlinkPropagationLossModel->GetLoss (m_node1, m_node2) - m_lossRef);
-  sum += loss.at (loss.size()-1);
-  sumSquared += (loss.at (loss.size()-1)*loss.at (loss.size()-1));
-  }
-  double mean = sum/samples;
-  double sigma = sqrt(sumSquared/samples - (mean*mean));
-  // test whether the distribution falls in the 99% confidence interval, as expected with a nornal distribution
-  double ci = (2.575829303549 * sigma) / sqrt (samples);
-  
-  NS_LOG_INFO ("Mean from simulation " << mean << ", sigma " << sigma << ", reference value " << m_sigmaRef << ", CI(99%) " << ci);
-  
-  NS_TEST_ASSERT_MSG_EQ_TOL(fabs(mean), 0.0, ci, "Wrong shadowing distribution !");
-}