|
|
| 54 |
static std::map<WifiSpectrumModelId, Ptr<SpectrumModel> > g_wifiSpectrumModelMap; |
54 |
static std::map<WifiSpectrumModelId, Ptr<SpectrumModel> > g_wifiSpectrumModelMap; |
| 55 |
|
55 |
|
| 56 |
Ptr<SpectrumModel> |
56 |
Ptr<SpectrumModel> |
| 57 |
WifiSpectrumValueHelper::GetSpectrumModel (uint32_t centerFrequency, uint32_t channelWidth) |
57 |
WifiSpectrumValueHelper::GetSpectrumModel (uint32_t centerFrequency, uint32_t channelWidth, double bandBandwidth) |
| 58 |
{ |
58 |
{ |
| 59 |
NS_LOG_FUNCTION (centerFrequency << channelWidth); |
59 |
NS_LOG_FUNCTION (centerFrequency << channelWidth << bandBandwidth); |
| 60 |
Ptr<SpectrumModel> ret; |
60 |
Ptr<SpectrumModel> ret; |
| 61 |
WifiSpectrumModelId key (centerFrequency, channelWidth); |
61 |
WifiSpectrumModelId key (centerFrequency, channelWidth); |
| 62 |
std::map<WifiSpectrumModelId, Ptr<SpectrumModel> >::iterator it = g_wifiSpectrumModelMap.find (key); |
62 |
std::map<WifiSpectrumModelId, Ptr<SpectrumModel> >::iterator it = g_wifiSpectrumModelMap.find (key); |
|
|
| 70 |
double centerFrequencyHz = centerFrequency * 1e6; |
70 |
double centerFrequencyHz = centerFrequency * 1e6; |
| 71 |
// Overall bandwidth will be channelWidth plus 10 MHz guards on each side |
71 |
// Overall bandwidth will be channelWidth plus 10 MHz guards on each side |
| 72 |
double bandwidth = (channelWidth + 20) * 1e6; |
72 |
double bandwidth = (channelWidth + 20) * 1e6; |
| 73 |
// Use OFDM subcarrier width of 312.5 KHz as band granularity |
|
|
| 74 |
double bandBandwidth = 312500; |
| 75 |
// For OFDM, the center subcarrier is null (at center frequency) |
73 |
// For OFDM, the center subcarrier is null (at center frequency) |
| 76 |
uint32_t numBands = static_cast<uint32_t> (bandwidth / bandBandwidth + 0.5); |
74 |
uint32_t numBands = static_cast<uint32_t> (bandwidth / bandBandwidth + 0.5); |
| 77 |
NS_ASSERT (numBands > 0); |
75 |
NS_ASSERT (numBands > 0); |
|
|
| 109 |
WifiSpectrumValueHelper::CreateHtOfdmTxPowerSpectralDensity (uint32_t centerFrequency, uint32_t channelWidth, double txPowerW) |
107 |
WifiSpectrumValueHelper::CreateHtOfdmTxPowerSpectralDensity (uint32_t centerFrequency, uint32_t channelWidth, double txPowerW) |
| 110 |
{ |
108 |
{ |
| 111 |
NS_LOG_FUNCTION (centerFrequency << channelWidth << txPowerW); |
109 |
NS_LOG_FUNCTION (centerFrequency << channelWidth << txPowerW); |
| 112 |
Ptr<SpectrumValue> c = Create<SpectrumValue> (GetSpectrumModel (centerFrequency, channelWidth)); |
110 |
Ptr<SpectrumValue> c = Create<SpectrumValue> (GetSpectrumModel (centerFrequency, channelWidth, 312500)); |
| 113 |
Values::iterator vit = c->ValuesBegin (); |
111 |
Values::iterator vit = c->ValuesBegin (); |
| 114 |
Bands::const_iterator bit = c->ConstBandsBegin (); |
112 |
Bands::const_iterator bit = c->ConstBandsBegin (); |
| 115 |
double txPowerPerBand; |
113 |
double txPowerPerBand; |
|
|
| 202 |
WifiSpectrumValueHelper::CreateOfdmTxPowerSpectralDensity (uint32_t centerFrequency, uint32_t channelWidth, double txPowerW) |
200 |
WifiSpectrumValueHelper::CreateOfdmTxPowerSpectralDensity (uint32_t centerFrequency, uint32_t channelWidth, double txPowerW) |
| 203 |
{ |
201 |
{ |
| 204 |
NS_LOG_FUNCTION (centerFrequency << channelWidth << txPowerW); |
202 |
NS_LOG_FUNCTION (centerFrequency << channelWidth << txPowerW); |
| 205 |
Ptr<SpectrumValue> c = Create<SpectrumValue> (GetSpectrumModel (centerFrequency, channelWidth)); |
203 |
Ptr<SpectrumValue> c = Create<SpectrumValue> (GetSpectrumModel (centerFrequency, channelWidth, 312500)); |
| 206 |
Values::iterator vit = c->ValuesBegin (); |
204 |
Values::iterator vit = c->ValuesBegin (); |
| 207 |
Bands::const_iterator bit = c->ConstBandsBegin (); |
205 |
Bands::const_iterator bit = c->ConstBandsBegin (); |
| 208 |
double txPowerPerBand; |
206 |
double txPowerPerBand; |
|
|
| 287 |
{ |
285 |
{ |
| 288 |
NS_LOG_FUNCTION (centerFrequency << txPowerW); |
286 |
NS_LOG_FUNCTION (centerFrequency << txPowerW); |
| 289 |
uint32_t channelWidth = 22; // DSSS channels are 22 MHz wide |
287 |
uint32_t channelWidth = 22; // DSSS channels are 22 MHz wide |
| 290 |
Ptr<SpectrumValue> c = Create<SpectrumValue> (GetSpectrumModel (centerFrequency, channelWidth)); |
288 |
Ptr<SpectrumValue> c = Create<SpectrumValue> (GetSpectrumModel (centerFrequency, channelWidth, 312500)); |
| 291 |
Values::iterator vit = c->ValuesBegin (); |
289 |
Values::iterator vit = c->ValuesBegin (); |
| 292 |
Bands::const_iterator bit = c->ConstBandsBegin (); |
290 |
Bands::const_iterator bit = c->ConstBandsBegin (); |
| 293 |
double txPowerPerBand; |
291 |
double txPowerPerBand; |
|
|
| 305 |
} |
303 |
} |
| 306 |
|
304 |
|
| 307 |
Ptr<SpectrumValue> |
305 |
Ptr<SpectrumValue> |
| 308 |
WifiSpectrumValueHelper::CreateNoisePowerSpectralDensity (uint32_t centerFrequency, uint32_t channelWidth, double noiseFigure) |
306 |
WifiSpectrumValueHelper::CreateNoisePowerSpectralDensity (uint32_t centerFrequency, uint32_t channelWidth, double bandBandwidth, double noiseFigure) |
| 309 |
{ |
307 |
{ |
| 310 |
Ptr<SpectrumModel> model = GetSpectrumModel (centerFrequency, channelWidth); |
308 |
Ptr<SpectrumModel> model = GetSpectrumModel (centerFrequency, channelWidth, bandBandwidth); |
| 311 |
return CreateNoisePowerSpectralDensity (noiseFigure, model); |
309 |
return CreateNoisePowerSpectralDensity (noiseFigure, model); |
| 312 |
} |
310 |
} |
| 313 |
|
311 |
|
|
|
| 330 |
} |
328 |
} |
| 331 |
|
329 |
|
| 332 |
Ptr<SpectrumValue> |
330 |
Ptr<SpectrumValue> |
| 333 |
WifiSpectrumValueHelper::CreateRfFilter (uint32_t centerFrequency, uint32_t channelWidth) |
331 |
WifiSpectrumValueHelper::CreateRfFilter (uint32_t centerFrequency, uint32_t channelWidth, double bandGranularity) |
| 334 |
{ |
332 |
{ |
| 335 |
NS_LOG_FUNCTION (centerFrequency << channelWidth); |
333 |
NS_LOG_FUNCTION (centerFrequency << channelWidth << bandGranularity); |
| 336 |
Ptr<SpectrumValue> c = Create <SpectrumValue> (GetSpectrumModel (centerFrequency, channelWidth)); |
334 |
Ptr<SpectrumValue> c = Create <SpectrumValue> (GetSpectrumModel (centerFrequency, channelWidth, bandGranularity)); |
| 337 |
size_t numBands = c->GetSpectrumModel ()->GetNumBands (); |
335 |
size_t numBands = c->GetSpectrumModel ()->GetNumBands (); |
| 338 |
Bands::const_iterator bit = c->ConstBandsBegin (); |
336 |
Bands::const_iterator bit = c->ConstBandsBegin (); |
| 339 |
Values::iterator vit = c->ValuesBegin (); |
337 |
Values::iterator vit = c->ValuesBegin (); |
| 340 |
uint32_t bandBandwidth = static_cast<uint32_t> (((bit->fh - bit->fl) + 0.5)); |
338 |
uint32_t bandBandwidth = static_cast<uint32_t> (bandGranularity); |
| 341 |
NS_LOG_DEBUG ("Band bandwidth: " << bandBandwidth); |
|
|
| 342 |
size_t numBandsInFilter = static_cast<size_t> (channelWidth * 1e6 / bandBandwidth); |
339 |
size_t numBandsInFilter = static_cast<size_t> (channelWidth * 1e6 / bandBandwidth); |
| 343 |
if (channelWidth % bandBandwidth != 0) |
340 |
if (channelWidth % bandBandwidth != 0) |
| 344 |
{ |
341 |
{ |