author | Nicola Baldo <nbaldo@cttc.es> |
Mon, 17 Dec 2012 16:01:08 +0100 | |
changeset 9562 | 691b97de80ed |
parent 8663 | 5e7f07723483 |
child 9063 | 32755d0516f4 |
permissions | -rw-r--r-- |
7385
10beb0e53130
standardize emacs c++ mode comments
Vedran Mileti? <rivanvx@gmail.com>
parents:
6852
diff
changeset
|
1 |
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */ |
6705 | 2 |
/* |
3 |
* Copyright (c) 2010 TELEMATICS LAB, DEE - Politecnico di Bari |
|
4 |
* |
|
5 |
* This program is free software; you can redistribute it and/or modify |
|
6 |
* it under the terms of the GNU General Public License version 2 as |
|
7 |
* published by the Free Software Foundation; |
|
8 |
* |
|
9 |
* This program is distributed in the hope that it will be useful, |
|
10 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
11 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
12 |
* GNU General Public License for more details. |
|
13 |
* |
|
14 |
* You should have received a copy of the GNU General Public License |
|
15 |
* along with this program; if not, write to the Free Software |
|
16 |
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
|
17 |
* |
|
18 |
* Author: Giuseppe Piro <g.piro@poliba.it> |
|
7993 | 19 |
* Nicola Baldo <nbaldo@cttc.es> |
6705 | 20 |
*/ |
21 |
||
8106
65bf071cf610
Added execution-time-reference simulation program to perform profiling on the execution time and memory usage.
jnin
parents:
8060
diff
changeset
|
22 |
#include <map> |
8015 | 23 |
#include <cmath> |
6705 | 24 |
|
7993 | 25 |
#include <ns3/log.h> |
8106
65bf071cf610
Added execution-time-reference simulation program to perform profiling on the execution time and memory usage.
jnin
parents:
8060
diff
changeset
|
26 |
#include <ns3/fatal-error.h> |
6705 | 27 |
|
28 |
#include "lte-spectrum-value-helper.h" |
|
7993 | 29 |
|
30 |
NS_LOG_COMPONENT_DEFINE ("LteSpectrumValueHelper"); |
|
6705 | 31 |
|
32 |
namespace ns3 { |
|
33 |
||
7993 | 34 |
/** |
35 |
* Table 5.7.3-1 "E-UTRA channel numbers" from 3GPP TS 36.101 |
|
36 |
* The table was converted to C syntax doing a cut & paste from TS 36.101 and running the following filter: |
|
37 |
* awk '{if ((NR % 7) == 1) printf("{"); printf ("%s",$0); if ((NR % 7) == 0) printf("},\n"); else printf(", ");}' | sed 's/ – /, /g' |
|
38 |
*/ |
|
39 |
struct EutraChannelNumbers |
|
6705 | 40 |
{ |
8148
09e2d03022a2
run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents:
8106
diff
changeset
|
41 |
uint8_t band; |
09e2d03022a2
run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents:
8106
diff
changeset
|
42 |
double fDlLow; |
7993 | 43 |
uint16_t nOffsDl; |
44 |
uint16_t rangeNdl1; |
|
45 |
uint16_t rangeNdl2; |
|
8148
09e2d03022a2
run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents:
8106
diff
changeset
|
46 |
double fUlLow; |
7993 | 47 |
uint16_t nOffsUl; |
48 |
uint16_t rangeNul1; |
|
8148
09e2d03022a2
run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents:
8106
diff
changeset
|
49 |
uint16_t rangeNul2; |
7993 | 50 |
} g_eutraChannelNumbers[] = { |
8148
09e2d03022a2
run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents:
8106
diff
changeset
|
51 |
{ 1, 2110, 0, 0, 599, 1920, 18000, 18000, 18599}, |
09e2d03022a2
run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents:
8106
diff
changeset
|
52 |
{ 2, 1930, 600, 600, 1199, 1850, 18600, 18600, 19199}, |
09e2d03022a2
run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents:
8106
diff
changeset
|
53 |
{ 3, 1805, 1200, 1200, 1949, 1710, 19200, 19200, 19949}, |
09e2d03022a2
run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents:
8106
diff
changeset
|
54 |
{ 4, 2110, 1950, 1950, 2399, 1710, 19950, 19950, 20399}, |
09e2d03022a2
run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents:
8106
diff
changeset
|
55 |
{ 5, 869, 2400, 2400, 2649, 824, 20400, 20400, 20649}, |
09e2d03022a2
run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents:
8106
diff
changeset
|
56 |
{ 6, 875, 2650, 2650, 2749, 830, 20650, 20650, 20749}, |
09e2d03022a2
run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents:
8106
diff
changeset
|
57 |
{ 7, 2620, 2750, 2750, 3449, 2500, 20750, 20750, 21449}, |
09e2d03022a2
run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents:
8106
diff
changeset
|
58 |
{ 8, 925, 3450, 3450, 3799, 880, 21450, 21450, 21799}, |
09e2d03022a2
run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents:
8106
diff
changeset
|
59 |
{ 9, 1844.9, 3800, 3800, 4149, 1749.9, 21800, 21800, 22149}, |
09e2d03022a2
run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents:
8106
diff
changeset
|
60 |
{ 10, 2110, 4150, 4150, 4749, 1710, 22150, 22150, 22749}, |
09e2d03022a2
run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents:
8106
diff
changeset
|
61 |
{ 11, 1475.9, 4750, 4750, 4949, 1427.9, 22750, 22750, 22949}, |
09e2d03022a2
run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents:
8106
diff
changeset
|
62 |
{ 12, 728, 5000, 5000, 5179, 698, 23000, 23000, 23179}, |
09e2d03022a2
run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents:
8106
diff
changeset
|
63 |
{ 13, 746, 5180, 5180, 5279, 777, 23180, 23180, 23279}, |
09e2d03022a2
run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents:
8106
diff
changeset
|
64 |
{ 14, 758, 5280, 5280, 5379, 788, 23280, 23280, 23379}, |
09e2d03022a2
run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents:
8106
diff
changeset
|
65 |
{ 17, 734, 5730, 5730, 5849, 704, 23730, 23730, 23849}, |
09e2d03022a2
run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents:
8106
diff
changeset
|
66 |
{ 18, 860, 5850, 5850, 5999, 815, 23850, 23850, 23999}, |
09e2d03022a2
run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents:
8106
diff
changeset
|
67 |
{ 19, 875, 6000, 6000, 6149, 830, 24000, 24000, 24149}, |
8663
5e7f07723483
fixed typo in g_eutraChannelNumbers
Luca Costantino <luca.costantino@gmail.com>
parents:
8253
diff
changeset
|
68 |
{ 20, 791, 6150, 6150, 6449, 832, 24150, 24150, 24449}, |
8148
09e2d03022a2
run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents:
8106
diff
changeset
|
69 |
{ 21, 1495.9, 6450, 6450, 6599, 1447.9, 24450, 24450, 24599}, |
09e2d03022a2
run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents:
8106
diff
changeset
|
70 |
{ 33, 1900, 36000, 36000, 36199, 1900, 36000, 36000, 36199}, |
09e2d03022a2
run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents:
8106
diff
changeset
|
71 |
{ 34, 2010, 36200, 36200, 36349, 2010, 36200, 36200, 36349}, |
09e2d03022a2
run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents:
8106
diff
changeset
|
72 |
{ 35, 1850, 36350, 36350, 36949, 1850, 36350, 36350, 36949}, |
09e2d03022a2
run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents:
8106
diff
changeset
|
73 |
{ 36, 1930, 36950, 36950, 37549, 1930, 36950, 36950, 37549}, |
09e2d03022a2
run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents:
8106
diff
changeset
|
74 |
{ 37, 1910, 37550, 37550, 37749, 1910, 37550, 37550, 37749}, |
09e2d03022a2
run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents:
8106
diff
changeset
|
75 |
{ 38, 2570, 37750, 37750, 38249, 2570, 37750, 37750, 38249}, |
09e2d03022a2
run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents:
8106
diff
changeset
|
76 |
{ 39, 1880, 38250, 38250, 38649, 1880, 38250, 38250, 38649}, |
09e2d03022a2
run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents:
8106
diff
changeset
|
77 |
{ 40, 2300, 38650, 38650, 39649, 2300, 38650, 38650, 39649} |
7993 | 78 |
}; |
6705 | 79 |
|
7993 | 80 |
#define NUM_EUTRA_BANDS (sizeof (g_eutraChannelNumbers) / sizeof (EutraChannelNumbers)) |
6705 | 81 |
|
7993 | 82 |
double |
83 |
LteSpectrumValueHelper::GetCarrierFrequency (uint16_t earfcn) |
|
84 |
{ |
|
85 |
NS_LOG_FUNCTION (earfcn); |
|
86 |
if (earfcn < 7000) |
|
87 |
{ |
|
88 |
// FDD downlink |
|
89 |
return GetDownlinkCarrierFrequency (earfcn); |
|
90 |
} |
|
91 |
else |
|
92 |
{ |
|
93 |
// either FDD uplink or TDD (for which uplink & downlink have same frequency) |
|
8148
09e2d03022a2
run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents:
8106
diff
changeset
|
94 |
return GetUplinkCarrierFrequency (earfcn); |
7993 | 95 |
} |
96 |
} |
|
6705 | 97 |
|
7993 | 98 |
double |
99 |
LteSpectrumValueHelper::GetDownlinkCarrierFrequency (uint16_t nDl) |
|
6705 | 100 |
{ |
7993 | 101 |
NS_LOG_FUNCTION (nDl); |
102 |
for (uint16_t i = 0; i < NUM_EUTRA_BANDS; ++i) |
|
103 |
{ |
|
8148
09e2d03022a2
run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents:
8106
diff
changeset
|
104 |
if ((g_eutraChannelNumbers[i].rangeNdl1 <= nDl) |
09e2d03022a2
run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents:
8106
diff
changeset
|
105 |
&& (g_eutraChannelNumbers[i].rangeNdl2 >= nDl)) |
7993 | 106 |
{ |
107 |
NS_LOG_LOGIC ("entry " << i << " fDlLow=" << g_eutraChannelNumbers[i].fDlLow); |
|
8015 | 108 |
return 1.0e6 * (g_eutraChannelNumbers[i].fDlLow + 0.1 * (nDl - g_eutraChannelNumbers[i].nOffsDl)); |
7993 | 109 |
} |
110 |
} |
|
111 |
NS_LOG_ERROR ("invalid EARFCN " << nDl); |
|
112 |
return 0.0; |
|
113 |
} |
|
6705 | 114 |
|
7993 | 115 |
double |
116 |
LteSpectrumValueHelper::GetUplinkCarrierFrequency (uint16_t nUl) |
|
117 |
{ |
|
118 |
NS_LOG_FUNCTION (nUl); |
|
119 |
for (uint16_t i = 0; i < NUM_EUTRA_BANDS; ++i) |
|
120 |
{ |
|
8148
09e2d03022a2
run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents:
8106
diff
changeset
|
121 |
if ((g_eutraChannelNumbers[i].rangeNul1 <= nUl) |
09e2d03022a2
run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents:
8106
diff
changeset
|
122 |
&& (g_eutraChannelNumbers[i].rangeNul2 >= nUl)) |
7993 | 123 |
{ |
124 |
NS_LOG_LOGIC ("entry " << i << " fUlLow=" << g_eutraChannelNumbers[i].fUlLow); |
|
8015 | 125 |
return 1.0e6 * (g_eutraChannelNumbers[i].fUlLow + 0.1 * (nUl - g_eutraChannelNumbers[i].nOffsUl)); |
7993 | 126 |
} |
127 |
} |
|
128 |
NS_LOG_ERROR ("invalid EARFCN " << nUl); |
|
129 |
return 0.0; |
|
130 |
} |
|
6705 | 131 |
|
8015 | 132 |
double |
133 |
LteSpectrumValueHelper::GetChannelBandwidth (uint8_t transmissionBandwidth) |
|
6705 | 134 |
{ |
8015 | 135 |
NS_LOG_FUNCTION ((uint16_t) transmissionBandwidth); |
136 |
switch (transmissionBandwidth) |
|
137 |
{ |
|
138 |
case 6: |
|
139 |
return 1.4e6; |
|
140 |
case 15: |
|
141 |
return 3.0e6; |
|
142 |
case 25: |
|
143 |
return 5.0e6; |
|
144 |
case 50: |
|
145 |
return 10.0e6; |
|
146 |
case 75: |
|
147 |
return 15.0e6; |
|
8148
09e2d03022a2
run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents:
8106
diff
changeset
|
148 |
case 100: |
09e2d03022a2
run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents:
8106
diff
changeset
|
149 |
return 20.0e6; |
8015 | 150 |
default: |
151 |
NS_FATAL_ERROR ("invalid bandwidth value " << (uint16_t) transmissionBandwidth); |
|
152 |
} |
|
153 |
} |
|
6705 | 154 |
|
155 |
||
156 |
||
157 |
||
8015 | 158 |
struct LteSpectrumModelId |
159 |
{ |
|
160 |
LteSpectrumModelId (uint16_t f, uint8_t b); |
|
161 |
uint16_t earfcn; |
|
162 |
uint8_t bandwidth; |
|
163 |
}; |
|
164 |
||
165 |
LteSpectrumModelId::LteSpectrumModelId (uint16_t f, uint8_t b) |
|
166 |
: earfcn (f), |
|
167 |
bandwidth (b) |
|
168 |
{ |
|
169 |
} |
|
8148
09e2d03022a2
run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents:
8106
diff
changeset
|
170 |
|
8015 | 171 |
bool |
172 |
operator < (const LteSpectrumModelId& a, const LteSpectrumModelId& b) |
|
173 |
{ |
|
174 |
return ( (a.earfcn < b.earfcn) || ( (a.earfcn == b.earfcn) && (a.bandwidth < b.bandwidth) ) ); |
|
175 |
} |
|
176 |
||
177 |
||
178 |
static std::map<LteSpectrumModelId, Ptr<SpectrumModel> > g_lteSpectrumModelMap; |
|
179 |
||
180 |
||
181 |
Ptr<SpectrumModel> |
|
182 |
LteSpectrumValueHelper::GetSpectrumModel (uint16_t earfcn, uint8_t txBandwidthConfiguration) |
|
6705 | 183 |
{ |
8015 | 184 |
NS_LOG_FUNCTION (earfcn << (uint16_t) txBandwidthConfiguration); |
185 |
Ptr<SpectrumModel> ret; |
|
186 |
LteSpectrumModelId key (earfcn, txBandwidthConfiguration); |
|
187 |
std::map<LteSpectrumModelId, Ptr<SpectrumModel> >::iterator it = g_lteSpectrumModelMap.find (key); |
|
188 |
if (it != g_lteSpectrumModelMap.end ()) |
|
189 |
{ |
|
190 |
ret = it->second; |
|
191 |
} |
|
192 |
else |
|
193 |
{ |
|
194 |
double fc = GetCarrierFrequency (earfcn); |
|
195 |
NS_ASSERT_MSG (fc != 0, "invalid EARFCN=" << earfcn); |
|
196 |
||
197 |
double f = fc - (txBandwidthConfiguration * 180e3 / 2.0); |
|
198 |
Bands rbs; |
|
199 |
for (uint8_t numrb = 0; numrb < txBandwidthConfiguration; ++numrb) |
|
200 |
{ |
|
201 |
BandInfo rb; |
|
202 |
rb.fl = f; |
|
203 |
f += 90e3; |
|
204 |
rb.fc = f; |
|
205 |
f += 90e3; |
|
8148
09e2d03022a2
run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents:
8106
diff
changeset
|
206 |
rb.fh = f; |
8015 | 207 |
rbs.push_back (rb); |
8148
09e2d03022a2
run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents:
8106
diff
changeset
|
208 |
} |
8015 | 209 |
ret = Create<SpectrumModel> (rbs); |
210 |
g_lteSpectrumModelMap.insert (std::pair<LteSpectrumModelId, Ptr<SpectrumModel> > (key, ret)); |
|
211 |
} |
|
212 |
NS_LOG_LOGIC ("returning SpectrumModel::GetUid () == " << ret->GetUid ()); |
|
213 |
return ret; |
|
214 |
} |
|
215 |
||
216 |
// just needed to log a std::vector<int> properly... |
|
217 |
std::ostream& |
|
218 |
operator << (std::ostream& os, const std::vector<int>& v) |
|
219 |
{ |
|
220 |
std::vector<int>::const_iterator it = v.begin (); |
|
221 |
while (it != v.end ()) |
|
222 |
{ |
|
223 |
os << *it << " " ; |
|
224 |
++it; |
|
225 |
} |
|
226 |
os << std::endl; |
|
227 |
return os; |
|
228 |
} |
|
229 |
||
230 |
||
231 |
Ptr<SpectrumValue> |
|
232 |
LteSpectrumValueHelper::CreateTxPowerSpectralDensity (uint16_t earfcn, uint8_t txBandwidthConfiguration, double powerTx, std::vector <int> activeRbs) |
|
233 |
{ |
|
234 |
NS_LOG_FUNCTION (earfcn << (uint16_t) txBandwidthConfiguration << powerTx << activeRbs); |
|
8148
09e2d03022a2
run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents:
8106
diff
changeset
|
235 |
|
09e2d03022a2
run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents:
8106
diff
changeset
|
236 |
Ptr<SpectrumModel> model = GetSpectrumModel (earfcn, txBandwidthConfiguration); |
8015 | 237 |
Ptr<SpectrumValue> txPsd = Create <SpectrumValue> (model); |
6705 | 238 |
|
239 |
// powerTx is expressed in dBm. We must convert it into natural unit. |
|
8015 | 240 |
double powerTxW = pow (10., (powerTx - 30) / 10); |
6705 | 241 |
|
8060
f8cef15d3cd0
fixed TX and noise PSD calculations
Nicola Baldo <nbaldo@cttc.es>
parents:
8015
diff
changeset
|
242 |
double txPowerDensity = (powerTxW / (txBandwidthConfiguration * 180000)); |
6705 | 243 |
|
8015 | 244 |
for (std::vector <int>::iterator it = activeRbs.begin (); it != activeRbs.end (); it++) |
6705 | 245 |
{ |
8015 | 246 |
int rbId = (*it); |
247 |
(*txPsd)[rbId] = txPowerDensity; |
|
6705 | 248 |
} |
249 |
||
8015 | 250 |
NS_LOG_LOGIC (*txPsd); |
251 |
||
6705 | 252 |
return txPsd; |
253 |
} |
|
254 |
||
255 |
||
256 |
Ptr<SpectrumValue> |
|
8015 | 257 |
LteSpectrumValueHelper::CreateNoisePowerSpectralDensity (uint16_t earfcn, uint8_t txBandwidthConfiguration, double noiseFigure) |
6705 | 258 |
{ |
8015 | 259 |
NS_LOG_FUNCTION (earfcn << (uint16_t) txBandwidthConfiguration << noiseFigure); |
260 |
Ptr<SpectrumModel> model = GetSpectrumModel (earfcn, txBandwidthConfiguration); |
|
8148
09e2d03022a2
run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents:
8106
diff
changeset
|
261 |
return CreateNoisePowerSpectralDensity (noiseFigure, model); |
6705 | 262 |
} |
263 |
||
264 |
Ptr<SpectrumValue> |
|
7981 | 265 |
LteSpectrumValueHelper::CreateNoisePowerSpectralDensity (double noiseFigureDb, Ptr<SpectrumModel> spectrumModel) |
6705 | 266 |
{ |
8015 | 267 |
NS_LOG_FUNCTION (noiseFigureDb << spectrumModel); |
6705 | 268 |
|
269 |
||
8060
f8cef15d3cd0
fixed TX and noise PSD calculations
Nicola Baldo <nbaldo@cttc.es>
parents:
8015
diff
changeset
|
270 |
// see "LTE - From theory to practice" |
f8cef15d3cd0
fixed TX and noise PSD calculations
Nicola Baldo <nbaldo@cttc.es>
parents:
8015
diff
changeset
|
271 |
// Section 22.4.4.2 Thermal Noise and Receiver Noise Figure |
f8cef15d3cd0
fixed TX and noise PSD calculations
Nicola Baldo <nbaldo@cttc.es>
parents:
8015
diff
changeset
|
272 |
const double kT_dBm_Hz = -174.0; // dBm/Hz |
8148
09e2d03022a2
run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents:
8106
diff
changeset
|
273 |
double kT_W_Hz = pow (10.0, (kT_dBm_Hz - 30) / 10.0); |
09e2d03022a2
run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents:
8106
diff
changeset
|
274 |
double noiseFigureLinear = pow (10.0, noiseFigureDb / 10.0); |
8060
f8cef15d3cd0
fixed TX and noise PSD calculations
Nicola Baldo <nbaldo@cttc.es>
parents:
8015
diff
changeset
|
275 |
double noisePowerSpectralDensity = kT_W_Hz * noiseFigureLinear; |
6705 | 276 |
|
7981 | 277 |
Ptr<SpectrumValue> noisePsd = Create <SpectrumValue> (spectrumModel); |
278 |
(*noisePsd) = noisePowerSpectralDensity; |
|
279 |
return noisePsd; |
|
6705 | 280 |
} |
281 |
||
282 |
} // namespace ns3 |