|
|
| 130 |
DoubleValue (1.0), |
130 |
DoubleValue (1.0), |
| 131 |
MakeDoubleAccessor (&FriisPropagationLossModel::m_systemLoss), |
131 |
MakeDoubleAccessor (&FriisPropagationLossModel::m_systemLoss), |
| 132 |
MakeDoubleChecker<double> ()) |
132 |
MakeDoubleChecker<double> ()) |
| 133 |
.AddAttribute ("MinDistance", |
133 |
.AddAttribute ("MinLoss", |
| 134 |
"The distance under which the propagation model refuses to give results (m)", |
134 |
"The minimum value (dB) of the total propagation loss, used at short ranges", |
| 135 |
DoubleValue (0.5), |
135 |
DoubleValue (0.0), |
| 136 |
MakeDoubleAccessor (&FriisPropagationLossModel::SetMinDistance, |
136 |
MakeDoubleAccessor (&FriisPropagationLossModel::SetMinLoss, |
| 137 |
&FriisPropagationLossModel::GetMinDistance), |
137 |
&FriisPropagationLossModel::GetMinLoss), |
| 138 |
MakeDoubleChecker<double> ()) |
138 |
MakeDoubleChecker<double> ()) |
| 139 |
; |
139 |
; |
| 140 |
return tid; |
140 |
return tid; |
|
|
| 154 |
return m_systemLoss; |
154 |
return m_systemLoss; |
| 155 |
} |
155 |
} |
| 156 |
void |
156 |
void |
| 157 |
FriisPropagationLossModel::SetMinDistance (double minDistance) |
157 |
FriisPropagationLossModel::SetMinLoss (double minLoss) |
| 158 |
{ |
158 |
{ |
| 159 |
m_minDistance = minDistance; |
159 |
m_minLoss = minLoss; |
| 160 |
} |
160 |
} |
| 161 |
double |
161 |
double |
| 162 |
FriisPropagationLossModel::GetMinDistance (void) const |
162 |
FriisPropagationLossModel::GetMinLoss (void) const |
| 163 |
{ |
163 |
{ |
| 164 |
return m_minDistance; |
164 |
return m_minLoss; |
| 165 |
} |
165 |
} |
| 166 |
void |
166 |
void |
| 167 |
FriisPropagationLossModel::SetLambda (double frequency, double speed) |
167 |
FriisPropagationLossModel::SetLambda (double frequency, double speed) |
|
|
| 228 |
* lambda: wavelength (m) |
228 |
* lambda: wavelength (m) |
| 229 |
*/ |
229 |
*/ |
| 230 |
double distance = a->GetDistanceFrom (b); |
230 |
double distance = a->GetDistanceFrom (b); |
| 231 |
if (distance <= m_minDistance) |
231 |
if (distance <= 0) |
| 232 |
{ |
232 |
{ |
| 233 |
return txPowerDbm; |
233 |
return txPowerDbm - m_minLoss; |
| 234 |
} |
234 |
} |
| 235 |
double numerator = m_lambda * m_lambda; |
235 |
double numerator = m_lambda * m_lambda; |
| 236 |
double denominator = 16 * PI * PI * distance * distance * m_systemLoss; |
236 |
double denominator = 16 * PI * PI * distance * distance * m_systemLoss; |
| 237 |
double pr = 10 * log10 (numerator / denominator); |
237 |
double lossDb = -10 * log10 (numerator / denominator); |
| 238 |
NS_LOG_DEBUG ("distance="<<distance<<"m, attenuation coefficient="<<pr<<"dB"); |
238 |
NS_LOG_DEBUG ("distance=" << distance<< "m, loss=" << lossDb <<"dB"); |
| 239 |
return txPowerDbm + pr; |
239 |
return txPowerDbm - std::max (lossDb, m_minLoss); |
| 240 |
} |
240 |
} |
| 241 |
|
241 |
|
| 242 |
// ------------------------------------------------------------------------- // |
242 |
// ------------------------------------------------------------------------- // |