merge
This commit is contained in:
@@ -57,41 +57,8 @@ LteTestDlSchedulingCallback (LteLinkAdaptationTestCase *testcase, std::string pa
|
||||
LteLinkAdaptationTestSuite::LteLinkAdaptationTestSuite ()
|
||||
: TestSuite ("lte-link-adaptation", SYSTEM)
|
||||
{
|
||||
// LogLevel logLevel = (LogLevel)(LOG_PREFIX_FUNC | LOG_PREFIX_TIME | LOG_LEVEL_ALL);
|
||||
// LogComponentEnable ("LteLinkAdaptationTest", logLevel);
|
||||
|
||||
NS_LOG_INFO ("Creating LteLinkAdaptionTestSuite");
|
||||
|
||||
// Tests: distance --> loss
|
||||
#if 0
|
||||
int distanceMin = 1;
|
||||
int distanceMax = 2000;
|
||||
int distanceStep = 1000;
|
||||
bool logStep = false;
|
||||
|
||||
for ( int distance = distanceMin ;
|
||||
distance <= distanceMax ;
|
||||
logStep ? ( distance *= distanceStep) : ( distance += distanceStep ) )
|
||||
{
|
||||
/**
|
||||
* Propagation Loss (in W/Hz)
|
||||
*
|
||||
* ( 4 * PI * distance * frequency ) 2
|
||||
* Loss = ( ------------------------------- )
|
||||
* ( c )
|
||||
*
|
||||
* where: c is speed of light in vacuum = 3e8 (m/s)
|
||||
* distance in (m)
|
||||
* frequency in (Hz)
|
||||
*/
|
||||
double lossLinear = ( ( 4.0 * M_PI * distance * 2.160e9 ) / 3e8 );
|
||||
lossLinear = lossLinear * lossLinear;
|
||||
double lossDb = 10 * log10(lossLinear);
|
||||
|
||||
AddTestCase (new LteLinkAdaptationTestCase (lossDb, distance));
|
||||
}
|
||||
#endif
|
||||
|
||||
struct SnrEfficiencyMcs
|
||||
{
|
||||
double snrDb;
|
||||
@@ -140,25 +107,22 @@ LteLinkAdaptationTestSuite::LteLinkAdaptationTestSuite ()
|
||||
{28.00000, 6.84687, 28},
|
||||
{29.00000, 7.17649, 28},
|
||||
{30.00000, 7.50663, 28},
|
||||
};
|
||||
};
|
||||
int numOfTests = sizeof (snrEfficiencyMcs) / sizeof (SnrEfficiencyMcs);
|
||||
|
||||
|
||||
double txPowerDbm = 30; // default eNB TX power over whole bandwdith
|
||||
double ktDbm = -174; // reference LTE noise PSD
|
||||
double noisePowerDbm = ktDbm + 10*log10(25*180000); // corresponds to kT*bandwidth in linear units
|
||||
double receiverNoiseFigureDb = 9.0; // default UE noise figure
|
||||
|
||||
|
||||
for ( int i = 0 ; i < numOfTests; i++ )
|
||||
{
|
||||
{
|
||||
double lossDb = txPowerDbm - snrEfficiencyMcs[i].snrDb - noisePowerDbm - receiverNoiseFigureDb;
|
||||
double lossLinear = pow (10, lossDb / 10);
|
||||
double distance = ( ( 3e8 * sqrt ( lossLinear ) ) / ( 4.0 * M_PI * 2.160e9 ) );
|
||||
|
||||
std::ostringstream name;
|
||||
name << " snr= " << snrEfficiencyMcs[i].snrDb << " dB, "
|
||||
<< " mcs= " << snrEfficiencyMcs[i].mcsIndex;
|
||||
AddTestCase (new LteLinkAdaptationTestCase (name.str (), snrEfficiencyMcs[i].snrDb, lossDb, distance, snrEfficiencyMcs[i].mcsIndex));
|
||||
AddTestCase (new LteLinkAdaptationTestCase (name.str (), snrEfficiencyMcs[i].snrDb, lossDb, snrEfficiencyMcs[i].mcsIndex));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -170,11 +134,10 @@ static LteLinkAdaptationTestSuite lteLinkAdaptationTestSuite;
|
||||
* TestCase
|
||||
*/
|
||||
|
||||
LteLinkAdaptationTestCase::LteLinkAdaptationTestCase (std::string name, double snrDb, double loss, double distance, uint16_t mcsIndex)
|
||||
LteLinkAdaptationTestCase::LteLinkAdaptationTestCase (std::string name, double snrDb, double loss, uint16_t mcsIndex)
|
||||
: TestCase (name),
|
||||
m_snrDb (snrDb),
|
||||
m_loss (loss),
|
||||
m_distance (distance),
|
||||
m_mcsIndex (mcsIndex)
|
||||
{
|
||||
std::ostringstream sstream1, sstream2;
|
||||
@@ -191,47 +154,6 @@ LteLinkAdaptationTestCase::~LteLinkAdaptationTestCase ()
|
||||
void
|
||||
LteLinkAdaptationTestCase::DoRun (void)
|
||||
{
|
||||
// LogLevel logLevel = (LogLevel)(LOG_PREFIX_FUNC | LOG_PREFIX_TIME | LOG_LEVEL_ALL);
|
||||
// LogComponentEnable ("LteAmc", logLevel);
|
||||
// LogComponentEnable ("LteLinkAdaptationTest", logLevel);
|
||||
// LogComponentEnable ("LteEnbRrc", logLevel);
|
||||
// LogComponentEnable ("LteUeRrc", logLevel);
|
||||
// LogComponentEnable ("LteEnbMac", logLevel);
|
||||
// LogComponentEnable ("LteUeMac", logLevel);
|
||||
// LogComponentEnable ("LteRlc", logLevel);
|
||||
// LogComponentEnable ("RrPacketScheduler", logLevel);
|
||||
|
||||
// LogComponentEnable ("RrFfMacScheduler", logLevel);
|
||||
|
||||
// LogComponentEnable ("LtePhy", logLevel);
|
||||
// LogComponentEnable ("LteEnbPhy", logLevel);
|
||||
// LogComponentEnable ("LteUePhy", logLevel);
|
||||
|
||||
// LogComponentEnable ("LteSpectrumValueHelper", logLevel);
|
||||
// LogComponentEnable ("LteSpectrumPhy", logLevel);
|
||||
// LogComponentEnable ("LteInterference", logLevel);
|
||||
// LogComponentEnable ("LteSinrChunkProcessor", logLevel);
|
||||
// LogComponentEnable ("LteTestSinrChunkProcessor", logLevel);
|
||||
|
||||
// LogComponentEnable ("LtePropagationLossModel", logLevel);
|
||||
// LogComponentEnable ("LossModel", logLevel);
|
||||
// LogComponentEnable ("ShadowingLossModel", logLevel);
|
||||
// LogComponentEnable ("PenetrationLossModel", logLevel);
|
||||
// LogComponentEnable ("MultipathLossModel", logLevel);
|
||||
// LogComponentEnable ("PathLossModel", logLevel);
|
||||
// LogComponentEnable ("FriisSpectrumPropagationLossModel", logLevel);
|
||||
// LogComponentEnable ("ConstantSpectrumPropagationLossModel", logLevel);
|
||||
|
||||
// LogComponentEnable ("LteNetDevice", logLevel);
|
||||
// LogComponentEnable ("LteUeNetDevice", logLevel);
|
||||
// LogComponentEnable ("LteEnbNetDevice", logLevel);
|
||||
|
||||
// LogComponentEnable ("MobilityModel", logLevel);
|
||||
// LogComponentEnable ("ConstantPositionMobilityModel", logLevel);
|
||||
// LogComponentEnable ("MultiModelSpectrumChannel", logLevel);
|
||||
// LogComponentEnable ("SingleModelSpectrumChannel", logLevel);
|
||||
|
||||
|
||||
/**
|
||||
* Simulation Topology
|
||||
*/
|
||||
@@ -251,15 +173,9 @@ LteLinkAdaptationTestCase::DoRun (void)
|
||||
ueNodes.Create (1);
|
||||
NodeContainer allNodes = NodeContainer ( enbNodes, ueNodes );
|
||||
|
||||
// Position of the eNodeB and UE
|
||||
Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator> ();
|
||||
positionAlloc->Add (Vector (0.0, 0.0, 0.0));
|
||||
positionAlloc->Add (Vector (100.0, 0.0, 0.0));
|
||||
|
||||
// Install Mobility Model
|
||||
MobilityHelper mobility;
|
||||
mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
|
||||
mobility.SetPositionAllocator (positionAlloc);
|
||||
mobility.Install (allNodes);
|
||||
|
||||
// Create Devices and install them in the Nodes (eNB and UE)
|
||||
@@ -277,21 +193,16 @@ LteLinkAdaptationTestCase::DoRun (void)
|
||||
EpsBearer bearer (q);
|
||||
lena->ActivateEpsBearer (ueDevs, bearer);
|
||||
|
||||
|
||||
// this is to test that the SNR is as intended
|
||||
// Use testing chunk processor in the PHY layer
|
||||
// It will be used to test that the SNR is as intended
|
||||
Ptr<LtePhy> uePhy = ueDevs.Get (0)->GetObject<LteUeNetDevice> ()->GetPhy ()->GetObject<LtePhy> ();
|
||||
Ptr<LteTestSinrChunkProcessor> testSinr = Create<LteTestSinrChunkProcessor> (uePhy);
|
||||
uePhy->GetDownlinkSpectrumPhy ()->AddSinrChunkProcessor (testSinr);
|
||||
|
||||
|
||||
Config::Connect ("/NodeList/0/DeviceList/0/LteEnbMac/DlScheduling",
|
||||
MakeBoundCallback(&LteTestDlSchedulingCallback, this));
|
||||
|
||||
Simulator::Stop (Seconds (0.005));
|
||||
//Simulator::Stop (Seconds (0.01));
|
||||
// Simulator::Stop (Seconds (0.1));
|
||||
/* Simulator::Stop (Seconds (2.0));*/
|
||||
// Simulator::Stop (Seconds (10.0));
|
||||
Simulator::Run ();
|
||||
|
||||
double calculatedSinrDb = 10.0 * log10 (testSinr->GetSinr ()[0]);
|
||||
@@ -309,7 +220,6 @@ LteLinkAdaptationTestCase::DlScheduling (uint32_t frameNo, uint32_t subframeNo,
|
||||
if ( firstTime )
|
||||
{
|
||||
firstTime = false;
|
||||
// NS_LOG_UNCOND (" Frame\tSbframe\tRnti\tmcsTb1\tsizeTb1\tmcsTb2\tsizeTb2");
|
||||
NS_LOG_UNCOND ("SNR\tRef_MCS\tCalc_MCS");
|
||||
}
|
||||
|
||||
@@ -319,12 +229,7 @@ LteLinkAdaptationTestCase::DlScheduling (uint32_t frameNo, uint32_t subframeNo,
|
||||
* because CQI feedback is still not available at the eNB.
|
||||
*/
|
||||
if ( (frameNo > 1) || (subframeNo > 4) )
|
||||
// if ( (frameNo == 1) && (subframeNo == 10) )
|
||||
{
|
||||
// NS_LOG_UNCOND (" " << frameNo << "\t" << subframeNo << "\t" << rnti << "\t"
|
||||
// << (uint16_t)mcsTb1 << "\t" << sizeTb1 << "\t"
|
||||
// << (uint16_t)mcsTb2 << "\t" << sizeTb2);
|
||||
|
||||
NS_LOG_UNCOND (m_snrDb << "\t" << m_mcsIndex << "\t" << (uint16_t)mcsTb1);
|
||||
|
||||
NS_TEST_ASSERT_MSG_EQ ((uint16_t)mcsTb1, m_mcsIndex, "Wrong MCS index");
|
||||
|
||||
@@ -40,7 +40,7 @@ public:
|
||||
class LteLinkAdaptationTestCase : public TestCase
|
||||
{
|
||||
public:
|
||||
LteLinkAdaptationTestCase (std::string name, double snrDb, double loss, double distance, uint16_t mcsIndex);
|
||||
LteLinkAdaptationTestCase (std::string name, double snrDb, double loss, uint16_t mcsIndex);
|
||||
LteLinkAdaptationTestCase ();
|
||||
virtual ~LteLinkAdaptationTestCase ();
|
||||
|
||||
@@ -52,7 +52,6 @@ class LteLinkAdaptationTestCase : public TestCase
|
||||
|
||||
double m_snrDb;
|
||||
double m_loss;
|
||||
double m_distance;
|
||||
uint16_t m_mcsIndex;
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user