23 #include "ns3/simulator.h" 
   27 #include "ns3/spectrum-test.h" 
   29 #include "ns3/lte-phy-tag.h" 
   31 #include "ns3/lte-spectrum-signal-parameters.h" 
   35 #include <ns3/lte-helper.h> 
   36 #include <ns3/lte-chunk-processor.h> 
   70   sm = Create<SpectrumModel> (bands);
 
   76   (*rxPsd1)[0] = 1.255943215755e-15;
 
   81   (*rxPsd2)[1] = 7.204059965732e-16;
 
   84   (*theoreticalSinr1)[0] = 3.72589167251055;
 
   85   (*theoreticalSinr1)[1] = 3.72255684126076;
 
   95   (*rxPsd3)[0] = 2.505936168136e-17;
 
  100   (*rxPsd4)[1] = 3.610582885110e-17;
 
  103   (*theoreticalSinr2)[0] = 0.0743413124381667;
 
  104   (*theoreticalSinr2)[1] = 0.1865697965291756;
 
  120   : 
TestCase (
"SINR calculation in uplink data frame: " + name),
 
  123     m_sm (sv1->GetSpectrumModel ()),
 
  124     m_expectedSinr (sinr)
 
  126   NS_LOG_INFO (
"Creating LteUplinkDataSinrTestCase");
 
  143   uint16_t cellId = 100;
 
  144   dlPhy->SetCellId (cellId);
 
  145   ulPhy->SetCellId (cellId);
 
  150   ulPhy->AddDataSinrChunkProcessor (chunkProcessor);
 
  161   const int numOfDataPbs = 2;
 
  162   const int numOfIntfPbs = 4;
 
  163   const int numOfPbs = numOfDataPbs + numOfIntfPbs;
 
  166   const int numOfPkts = 10;
 
  175   uint16_t pbCellId[numOfPbs];
 
  183   for ( 
int dataPb = 0 ; dataPb < numOfDataPbs ; dataPb++, pb++ )
 
  186       packetBursts[pb] = CreateObject<PacketBurst> ();
 
  187       pbCellId[pb] = cellId;
 
  189       for ( 
int i = 0 ; i < numOfPkts ; i++ )
 
  191           pkt[pb][i] = Create<Packet> (1000);
 
  193           packetBursts[pb]->
AddPacket ( pkt[pb][i] );
 
  196   for ( 
int intfPb = 0 ; intfPb < numOfIntfPbs ; intfPb++, pb++ )
 
  199       packetBursts[pb] = CreateObject<PacketBurst> ();
 
  200       pbCellId[pb] = cellId * (pb + 1);
 
  203       for ( 
int i = 0 ; i < numOfPkts ; i++ )
 
  205           pkt[pb][i] = Create<Packet> (1000);
 
  207           packetBursts[pb]->
AddPacket ( pkt[pb][i] );
 
  218   (*noisePsd)[0] = 5.000000000000e-19;
 
  219   (*noisePsd)[1] = 4.545454545455e-19;
 
  221   (*i1)[0] = 5.000000000000e-18;
 
  222   (*i2)[0] = 5.000000000000e-16;
 
  223   (*i3)[0] = 1.581138830084e-16;
 
  224   (*i4)[0] = 7.924465962306e-17;
 
  225   (*i1)[1] = 1.437398936440e-18;
 
  226   (*i2)[1] = 5.722388235428e-16;
 
  227   (*i3)[1] = 7.204059965732e-17;
 
  228   (*i4)[1] = 5.722388235428e-17;
 
  241   ulPhy->SetNoisePowerSpectralDensity (noisePsd);
 
  253   sp1->
cellId = pbCellId[0];
 
  254   Simulator::Schedule (ts, &LteSpectrumPhy::StartRx, ulPhy, sp1);
 
  261   sp2->
cellId = pbCellId[1];
 
  262   Simulator::Schedule (ts, &LteSpectrumPhy::StartRx, ulPhy, sp2);
 
  270   ip1->
cellId = pbCellId[2];
 
  271   Simulator::Schedule (ti1, &LteSpectrumPhy::StartRx, ulPhy, ip1);
 
  278   ip2->
cellId = pbCellId[3];
 
  279   Simulator::Schedule (ti2, &LteSpectrumPhy::StartRx, ulPhy, ip2);
 
  286   ip3->
cellId = pbCellId[4];
 
  287   Simulator::Schedule (ti3, &LteSpectrumPhy::StartRx, ulPhy, ip3);
 
  294   ip4->
cellId = pbCellId[5];
 
  295   Simulator::Schedule (ti4, &LteSpectrumPhy::StartRx, ulPhy, ip4);
 
  297   Simulator::Stop (
Seconds (5.0));
 
  301   NS_LOG_INFO (
"Data Frame - Calculated SINR: " << *(actualSinrCatcher.GetValue ()));
 
  307   Simulator::Destroy ();
 
  317   : 
TestCase (
"SINR calculation in uplink srs frame: " + name),
 
  320     m_sm (sv1->GetSpectrumModel ()),
 
  321     m_expectedSinr (sinr)
 
  348   uint16_t cellId = 100;
 
  349   dlPhy->SetCellId (cellId);
 
  350   ulPhy->SetCellId (cellId);
 
  354   ulPhy->AddCtrlSinrChunkProcessor (chunkProcessor);
 
  366   int numOfDataSignals = 2;
 
  367   int numOfIntfSignals = 4;
 
  368   int numOfSignals = numOfDataSignals + numOfIntfSignals;
 
  370   uint16_t pbCellId[numOfSignals];
 
  378   for ( 
int dataPb = 0 ; dataPb < numOfDataSignals ; dataPb++, pb++ )
 
  380       pbCellId[pb] = cellId;
 
  383   for ( 
int intfPb = 0 ; intfPb < numOfIntfSignals ; intfPb++, pb++ )
 
  386       pbCellId[pb] = cellId * (pb + 1);
 
  397   (*noisePsd)[0] = 5.000000000000e-19;
 
  398   (*noisePsd)[1] = 4.545454545455e-19;
 
  400   (*i1)[0] = 5.000000000000e-18;
 
  401   (*i2)[0] = 5.000000000000e-16;
 
  402   (*i3)[0] = 1.581138830084e-16;
 
  403   (*i4)[0] = 7.924465962306e-17;
 
  404   (*i1)[1] = 1.437398936440e-18;
 
  405   (*i2)[1] = 5.722388235428e-16;
 
  406   (*i3)[1] = 7.204059965732e-17;
 
  407   (*i4)[1] = 5.722388235428e-17;
 
  420   ulPhy->SetNoisePowerSpectralDensity (noisePsd);
 
  431   sp1->
cellId = pbCellId[0];
 
  432   Simulator::Schedule (ts, &LteSpectrumPhy::StartRx, ulPhy, sp1);
 
  438   sp2->
cellId = pbCellId[1];
 
  439   Simulator::Schedule (ts, &LteSpectrumPhy::StartRx, ulPhy, sp2);
 
  446   ip1->
cellId = pbCellId[2];
 
  447   Simulator::Schedule (ti1, &LteSpectrumPhy::StartRx, ulPhy, ip1);
 
  453   ip2->
cellId = pbCellId[3];
 
  454   Simulator::Schedule (ti2, &LteSpectrumPhy::StartRx, ulPhy, ip2);
 
  460   ip3->
cellId = pbCellId[4];
 
  461   Simulator::Schedule (ti3, &LteSpectrumPhy::StartRx, ulPhy, ip3);
 
  467   ip4->
cellId = pbCellId[5];
 
  468   Simulator::Schedule (ti4, &LteSpectrumPhy::StartRx, ulPhy, ip4);
 
  470   Simulator::Stop (
Seconds (5.0));
 
  480   Simulator::Destroy ();
 
virtual void DoRun(void)
Implementation to actually run this TestCase. 
 
static LteUplinkSinrTestSuite lteUplinkSinrTestSuite
 
LteUplinkSrsSinrTestCase(Ptr< SpectrumValue > sv1, Ptr< SpectrumValue > sv2, Ptr< SpectrumValue > sinr, std::string name)
TestCase Srs. 
 
Simulation virtual time values and global simulation resolution. 
 
Ptr< SpectrumValue > m_sv2
 
Ptr< SpectrumValue > m_expectedSinr
 
LteUplinkSinrTestSuite()
Test 1.2 SINR calculation in uplink. 
 
Ptr< SpectrumValue > m_sv1
 
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name. 
 
#define NS_LOG_INFO(msg)
Use NS_LOG to output a message of level LOG_INFO. 
 
void ReportSinr(const SpectrumValue &sinr)
Callback to be connected to an LteChunkProcessor to collect the reported SINR. 
 
Ptr< const SpectrumModel > m_sm
 
std::vector< BandInfo > Bands
 
LteUplinkDataSinrTestCase(Ptr< SpectrumValue > sv1, Ptr< SpectrumValue > sv2, Ptr< SpectrumValue > sinr, std::string name)
TestCase Data. 
 
virtual void AddCallback(LteChunkProcessorCallback c)
Add callback to list. 
 
void AddTestCase(TestCase *testCase, enum TestDuration duration)
Add an individual child TestCase to this test suite. 
 
Ptr< SpectrumValue > m_sv2
 
double fc
center frequency 
 
Ptr< SpectrumPhy > txPhy
The SpectrumPhy instance that is making the transmission. 
 
Callback< R > MakeCallback(R(T::*memPtr)(void), OBJ objPtr)
 
A sink to be plugged to the callback of LteChunkProcessor allowing to save and later retrieve the lat...
 
void AddPacket(Ptr< Packet > packet)
add a packet to the list of packet 
 
Ptr< SpectrumValue > m_expectedSinr
 
Every class exported by the ns3 library is enclosed in the ns3 namespace. 
 
double fl
lower limit of subband 
 
Ptr< PacketBurst > packetBurst
The packet burst being transmitted with this signal. 
 
#define NS_TEST_EXPECT_MSG_NE(actual, limit, msg)
Test that an actual and expected (limit) value are not equal and report if not. 
 
Ptr< SpectrumValue > m_actualSinr
 
#define NS_ASSERT_MSG(condition, message)
At runtime, in debugging builds, if this condition is not true, the program prints the message to out...
 
#define NS_TEST_ASSERT_MSG_SPECTRUM_VALUE_EQ_TOL(actual, expected, tol, msg)
Test if two SpectrumValue instances are equal within a given tolerance. 
 
Test 1.2 SINR calculation in uplink. 
 
Ptr< SpectrumValue > psd
The Power Spectral Density of the waveform, in linear units. 
 
virtual ~LteUplinkSrsSinrTestCase()
 
Time Seconds(double value)
Construct a Time in the indicated unit. 
 
virtual void DoRun(void)
Implementation to actually run this TestCase. 
 
virtual ~LteUplinkDataSinrTestCase()
 
Ptr< SpectrumValue > Copy() const 
 
Time duration
The duration of the packet transmission. 
 
Ptr< SpectrumValue > m_sv1
 
double fh
upper limit of subband 
 
Ptr< const SpectrumModel > m_sm
 
Set of values corresponding to a given SpectrumModel. 
 
The building block of a SpectrumModel.