double
FemtoCellUrbanAreaChannelRealization::GetPathLoss (void)
{
	/*
	 * Path loss Models from sect. 5.2 in
	 * 3GPP TSG RAN WG4 R4-092042
	 *
	 * Alternative simplified model based on LTE-A evaluation methodology which avoids modeling any walls.
	 */

  double distance;
  double minimumCouplingLoss = 45; //[dB] - see 3GPP TSG RAN WG4 #42bis (R4-070456)
  double floorPenetration = 0.0;
  //18.3 n ((n+2)/(n+1)-0.46)

  if (GetSourceNode ()->GetNodeType () == NetworkNode::TYPE_UE
		  && ( GetDestinationNode ()->GetNodeType () == NetworkNode::TYPE_ENODEB || GetDestinationNode ()->GetNodeType () == NetworkNode::TYPE_HOME_BASE_STATION) )
    {
	  UserEquipment* ue = (UserEquipment*) GetSourceNode ();
	  ENodeB* enb = (ENodeB*) GetDestinationNode ();

	  if( enb->GetCell()->GetCellCenterPosition()->GetCoordinateZ() > 0
			  && ue->IsIndoor()
			     && enb->GetCell()->GetCellCenterPosition()->GetCoordinateZ() != ue->GetCell()->GetCellCenterPosition()->GetCoordinateZ())
	  {
		  int n = (int) abs( enb->GetCell()->GetCellCenterPosition()->GetCoordinateZ() - ue->GetCell()->GetCellCenterPosition()->GetCoordinateZ() );
		  floorPenetration = 18.3 * pow( n, ((n+2)/(n+1)-0.46));
	  }

	  distance =  ue->GetMobilityModel ()->GetAbsolutePosition ()->GetDistance (enb->GetMobilityModel ()->GetAbsolutePosition ());
    }

  else if (GetDestinationNode ()->GetNodeType () == NetworkNode::TYPE_UE
		  && ( GetSourceNode ()->GetNodeType () == NetworkNode::TYPE_ENODEB || GetSourceNode ()->GetNodeType () == NetworkNode::TYPE_HOME_BASE_STATION) )
  {
	  UserEquipment* ue = (UserEquipment*) GetDestinationNode ();
	  ENodeB* enb = (ENodeB*) GetSourceNode ();

	  if( enb->GetCell()->GetCellCenterPosition()->GetCoordinateZ() > 0
			  && ue->IsIndoor()
			  && enb->GetCell()->GetCellCenterPosition()->GetCoordinateZ() != ue->GetCell()->GetCellCenterPosition()->GetCoordinateZ())
	  {
		  int n = (int) abs( enb->GetCell()->GetCellCenterPosition()->GetCoordinateZ() - ue->GetCell()->GetCellCenterPosition()->GetCoordinateZ() );
		  floorPenetration = 18.3 * pow( n, ((n+2)/(n+1)-0.46));
	  }

	  distance =  ue->GetMobilityModel ()->GetAbsolutePosition ()->GetDistance (enb->GetMobilityModel ()->GetAbsolutePosition ());
  }




  m_pathLoss = max( minimumCouplingLoss, 127 + ( 30 * log10 (distance * 0.001) ) + floorPenetration);


  return m_pathLoss;
}
Exemplo n.º 2
0
ENodeB*
NetworkManager::GetENodeBByCellID (int idCell)
{
  std::vector<ENodeB*>* eNodeBContainer = GetENodeBContainer ();
  std::vector<ENodeB*>::iterator iter2;
  ENodeB *eNodeB;
  for (iter2 = eNodeBContainer->begin ();
      iter2 !=eNodeBContainer->end (); iter2++)
    {
    eNodeB = *iter2;
    if (eNodeB->GetCell ()->GetIdCell ()== idCell)
      {
      return eNodeB;
      }
    }
  return false;
}
double
WinnerDownlinkChannelRealization::GetPathLoss (void)
{
    /*
     * Path Loss Model For Indoor Environment.
     * "WINNER II channel models, ver 1.1, Tech Report"
     * PL = A*log10(r) + B + C*log10(fc/5) + X; [r in meters; fc in GHz]
     * I = 128.1 – 2GHz
     * X depends on the number of walls in between
     * FL = 17 + 4 (Nfloors - 1) --- floor loss
     */

    double distance;
    UserEquipment* ue;
    ENodeB* enb;

    assert (GetDestinationNode ()->GetNodeType () == NetworkNode::TYPE_HOME_BASE_STATION  || GetSourceNode ()->GetNodeType () == NetworkNode::TYPE_HOME_BASE_STATION);

    if (GetSourceNode ()->GetNodeType () == NetworkNode::TYPE_UE
            && GetDestinationNode ()->GetNodeType () == NetworkNode::TYPE_HOME_BASE_STATION )
    {
        ue = (UserEquipment*) GetSourceNode ();
        enb = (ENodeB*) GetDestinationNode ();

        distance =  ue->GetMobilityModel ()->GetAbsolutePosition ()->GetDistance (enb->GetMobilityModel ()->GetAbsolutePosition ());
    }

    else if (GetDestinationNode ()->GetNodeType () == NetworkNode::TYPE_UE
             && GetSourceNode ()->GetNodeType () == NetworkNode::TYPE_HOME_BASE_STATION )
    {
        ue = (UserEquipment*) GetDestinationNode ();
        enb = (ENodeB*) GetSourceNode ();

        distance =  ue->GetMobilityModel ()->GetAbsolutePosition ()->GetDistance (enb->GetMobilityModel ()->GetAbsolutePosition ());
    }

    int* nbWalls = GetWalls( (Femtocell*) (enb->GetCell()), ue);

    double A, B, C;
    double ExternalWallsAttenuation = 20.0;
    double InternalWallsAttenuation = 10.0;

    if (nbWalls[0] == 0 && nbWalls[1] == 0)
    {   //LOS
        A = 18.7;
        B = 46.8;
        C = 20.0;
    }
    else
    {   //NLOS
        A = 20.0;
        B = 46.4;
        C = 20.0;
    }

    m_pathLoss = A * log10( distance ) +
                 B +
                 C * log10(2. / 5.0) +
                 InternalWallsAttenuation * nbWalls[1] +
                 ExternalWallsAttenuation * nbWalls[0];

    delete [] nbWalls;
    return m_pathLoss;
}