REG : [LBT Wi-Fi Coexistence] Different Duty Cycle for different eNB

119 views
Skip to first unread message

saumil shah

unread,
Nov 30, 2017, 9:56:24 AM11/30/17
to ns-3-users
Dear All,

I am working on LBT/Wifi coexistence module. As i know we can configure different ChannelAccessManager for different eNB.

If i am using ChannelAccessManager=DutyCycle, then is it possible that i can use different duty cycle for different eNB?

If yes then can anyone please give me little hint where should i configure it?

Best Regards
Saumil

Tom Henderson

unread,
Nov 30, 2017, 10:38:37 AM11/30/17
to ns-3-...@googlegroups.com
You have to modify the scenario-helper.cc file to accomplish this.

Where it says, in ConfigureLte()

  // additional eNB-specific configuration
  for (uint32_t n = 0; n < bsDevices.GetN (); ++n)
    {
      Ptr<NetDevice> enbDevice = bsDevices.Get (n);
      Ptr<LteEnbNetDevice> enbLteDevice = enbDevice->GetObject<LteEnbNetDevice> ();
      enbLteDevice->GetRrc ()->SetAbsPattern (absPattern);
    }

you can try to specify different absPattern for different eNB at this point.  Note that I haven't ever tried to do this.

- Tom

saumil shah

unread,
Nov 30, 2017, 11:13:27 AM11/30/17
to ns-3-users
Dear Tom,

Thanks for prompt response. I was main concerned for the case of Laa where we can use DutyCycle as ChannelAccessManager and not Lte.
As i know in LTE, ChannelAccessManager option will be ignored and based on lteDutycycle value we will get the result.

So based on what you have suggested that option i think will not be applicable for Laa as that part of code in ConfigureLaa() is commented.

I was checking and trying to configure attributes related to DutyCycle in laa-wifi-coexistance-helper.cc file as mentioned below.

      else if (m_channelAccessManagerFactory.GetTypeId ().GetName () == "ns3::DutyCycleAccessManager")
      {

         Ptr<DutyCycleAccessManager> dutyCycleAccessManager = m_channelAccessManagerFactory.Create<DutyCycleAccessManager> ();

         dutyCycleAccessManager->SetDutyCyclePeriod(MilliSeconds(80));
         dutyCycleAccessManager->SetOnDuration(MilliSeconds(40));
         dutyCycleAccessManager->SetOnStartTime(MilliSeconds(0));

         ltePhy->SetChannelAccessManager (dutyCycleAccessManager);
      }

When i configure here this is working but the thing is it is applicable for all eNB in Laa and not the particular eNB. Can you suggest something?

Best Regards
Saumil

Tom Henderson

unread,
Nov 30, 2017, 12:12:58 PM11/30/17
to ns-3-...@googlegroups.com
On 11/30/2017 08:13 AM, saumil shah wrote:
> Dear Tom,
>
> Thanks for prompt response. I was main concerned for the case of Laa
> where we can use DutyCycle as ChannelAccessManager and not Lte.
> As i know in LTE, ChannelAccessManager option will be ignored and based
> on lteDutycycle value we will get the result.
>
> So based on what you have suggested that option i think will not be
> applicable for Laa as that part of code in ConfigureLaa() is commented.
>
> I was checking and trying to configure attributes related to DutyCycle
> in laa-wifi-coexistance-helper.cc file as mentioned below.
>
>       else if (m_channelAccessManagerFactory.GetTypeId ().GetName () ==
> "ns3::DutyCycleAccessManager")
>       {
>
>          Ptr<DutyCycleAccessManager> dutyCycleAccessManager =
> m_channelAccessManagerFactory.Create<DutyCycleAccessManager> ();
>
>          dutyCycleAccessManager->SetDutyCyclePeriod(MilliSeconds(80));
>          dutyCycleAccessManager->SetOnDuration(MilliSeconds(40));
>          dutyCycleAccessManager->SetOnStartTime(MilliSeconds(0));
>
>          ltePhy->SetChannelAccessManager (dutyCycleAccessManager);
>       }
>
> When i configure here this is working but the thing is it is applicable
> for all eNB in Laa and not the particular eNB. Can you suggest something?

Could you add parameters to this method:

void
LaaWifiCoexistenceHelper::ConfigureEnbDevicesForLbt (NetDeviceContainer
enbDevices, struct PhyParams phyParams)

to pass in values for period, on duration, and start time, and then call
it differently for different NetDevice containers?

Another possibility would be to use the ConfigStore subsystem to load
custom values for all attributes just before the start of the simulation.

- Tom

saumil shah

unread,
Dec 1, 2017, 7:52:21 AM12/1/17
to ns-3-users
Dear Tom,

I am not sure that i understood correctly but first i will explain briefly what i was trying to do.

In "laa-wifi-simple" scenario i have configured cellConfigA=Wifi with 1 AP and 1 STA. Also cellConfigB=Laa with 3 eNB and corresponding 3 UEs. Now i have set the ChannelaccessManager= DutyCycle and what i want is 1st eNB will have 100% duty cycle , 2nd eNB will have 50% duty cycle and 3rd eNB will have 25% duty Cycle.

As you have suggested to pass parameters with PhyParams and then call configureLaa() for each NetDevice Container. To do that as per my understanding i have to make 3 different NetDevice container for 3 different eNB and then need to set parameter for them individually and need to call configureLaa() 3 times.

This will work i think but i am not sure as i have not implemented it.

But instead what i did is i have modified the "laa-wifi-coexistance-helper.cc" file for each node as follow.


 else if (m_channelAccessManagerFactory.GetTypeId ().GetName () == "ns3::DutyCycleAccessManager")
      {

         Ptr<DutyCycleAccessManager> dutyCycleAccessManager = m_channelAccessManagerFactory.Create<DutyCycleAccessManager> ();
         if(node->GetId() == 1)
         {

         dutyCycleAccessManager->SetDutyCyclePeriod(MilliSeconds(80));
         dutyCycleAccessManager->SetOnDuration(MilliSeconds(40));
         dutyCycleAccessManager->SetOnStartTime(MilliSeconds(0));
         //ltePhy->SetChannelAccessManager (dutyCycleAccessManager);
         }
         if(node->GetId() == 2)
         {
             dutyCycleAccessManager->SetDutyCyclePeriod(MilliSeconds(80));
             dutyCycleAccessManager->SetOnDuration(MilliSeconds(20));
             dutyCycleAccessManager->SetOnStartTime(MilliSeconds(0));
         //ltePhy->SetChannelAccessManager (dutyCycleAccessManager);
         }
         ltePhy->SetChannelAccessManager (dutyCycleAccessManager);
      }

So basically what i am doing is from enbDevices based on nodeID i am assigning different parameters as per requirement. for example in above code as you can see for nodeID = 1 i have different parameters for 50 % duty cycle and nodeID = 2 i have different parameters for 20% duty cycle. and for nodeID = 3 i am not assigning anything so it will take the Default values which we have assigned in "laa-wifi-simple.cc" file which i have configured as 100% duty cycle as below.

case DutyCycle:
      Config::SetDefault ("ns3::LaaWifiCoexistenceHelper::ChannelAccessManagerType", StringValue ("ns3::DutyCycleAccessManager"));
      Config::SetDefault ("ns3::DutyCycleAccessManager::OnDuration", TimeValue (MilliSeconds (80)));
      Config::SetDefault ("ns3::DutyCycleAccessManager::OnStartTime",TimeValue (MilliSeconds (0)));
      Config::SetDefault ("ns3::DutyCycleAccessManager::DutyCyclePeriod",TimeValue (MilliSeconds (80)));

Good news is that i am getting max throughput, 50% of max throughput and 25% of max throughput which tells me that what i have configured is working. But the thing is in output for flow 1 i am getting 100% duty cycle which actually i have configured for node 3. and similarly for flow 2 i am getting 50% duty cycle which i have configured for node 1 and in flow 3 i am getting 25% duty cycle which i have configured for node 2.

So what i am trying to say is node index and flow index are not matching. Is there any reason for that?

To show its working check the attached photo where for flow 1 Throughput = 74.6 Mbps , flow 2 Throughput = 36.9 Mbps almost 50% of flow 1 and for flow 3 Throughput = 18.3 Mbps almost 25% of flow 1.

Note: All the nodes AP and eNBs are separated by 1000 m from each other so no one will interfere with each other.
Screenshot from 2017-12-01 13-48-49.png
Reply all
Reply to author
Forward
0 new messages