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; }
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; }