47 GHz carrierFrequency_;
48 double carrierFrequencyHz_;
49 double carrierFrequencyGHz_;
50 double log10CarrierFrequencyGHz_;
62 bool inside_building_;
65 double inside_distance_;
71 DeploymentScenario scenario_;
74 double antennaGainEnB_;
77 double antennaGainMicro_;
80 double antennaGainUe_;
86 inet::ModuleRefByPar<Binder> binder_;
92 double ueNoiseFigure_;
95 double bsNoiseFigure_;
110 bool enableBackgroundCellInterference_;
111 bool enableDownlinkInterference_;
112 bool enableUplinkInterference_;
115 std::map<MacNodeId, std::pair<inet::simtime_t, double>> lastComputedSF_;
118 std::map<MacNodeId, bool> losMap_;
122 double correlationDistance_;
124 typedef std::pair<inet::simtime_t, inet::Coord> Position;
127 std::map<MacNodeId, std::queue<Position>> positionHistory_;
131 std::map<MacNodeId, Position> lastCorrelationPoint_;
133 bool tolerateMaxDistViolation_;
136 struct JakesFadingData
138 std::vector<double> angleOfArrival;
139 std::vector<simtime_t> delaySpread;
141 friend std::ostream& operator<<(std::ostream& os,
const JakesFadingData& e)
143 os <<
"paths=" << e.angleOfArrival.size();
149 std::map<MacNodeId, std::vector<JakesFadingData>> jakesFadingMap_;
151 typedef std::vector<JakesFadingData> JakesFadingVector;
152 typedef std::map<MacNodeId, JakesFadingVector> JakesFadingMap;
160 FadingType fadingType_;
177 virtual double getAttenuation(MacNodeId nodeId, Direction dir, inet::Coord bgBsCoord, inet::Coord bgUeCoord);
184 virtual double computePathLoss(
double distance,
double dbp,
bool los);
191 double rayleighFading(MacNodeId
id,
unsigned int band);
201 double jakesFading(MacNodeId nodeId,
double speed,
unsigned int band,
unsigned int numBands);
208 void computeLosProbability(
double d, MacNodeId nodeId);
210 JakesFadingMap *getJakesMap()
212 return &jakesFadingMap_;
219 double computeSpeed(
const MacNodeId nodeId,
const inet::Coord coord);
225 double computeCorrelationDistance(
const MacNodeId nodeId,
const inet::Coord coord);
231 void updateCorrelationDistance(
const MacNodeId nodeId,
const inet::Coord coord);
237 void updatePositionHistory(
const MacNodeId nodeId,
const inet::Coord coord);
239 double computeShadowing(
double sqrDistance, MacNodeId nodeId,
double speed);
241 double computeAngle(inet::Coord center, inet::Coord point);
242 double computeVerticalAngle(inet::Coord center, inet::Coord point);
243 double getTwoDimDistance(inet::Coord a, inet::Coord b);
244 double computeAngularAttenuation(
double hAngle,
double vAngle);
246 bool computeDownlinkInterference(MacNodeId bgUeId, inet::Coord bgUePos, GHz carrierFrequency,
const RbMap& rbmap,
unsigned int numBands, std::vector<double> *interference);
247 bool computeUplinkInterference(MacNodeId bgUeId, inet::Coord bgUePos, GHz carrierFrequency,
const RbMap& rbmap,
unsigned int numBands, std::vector<double> *interference);
248 bool computeBackgroundCellInterference(MacNodeId bgUeId, inet::Coord bgUeCoord,
int bgBsId, inet::Coord bgBsCoord, GHz carrierFrequency,
const RbMap& rbmap, Direction dir,
unsigned int numBands, std::vector<double> *interference);
251 void initialize(
int stage)
override;
252 int numInitStages()
const override {
return inet::NUM_INIT_STAGES; }
258 void setCarrierFrequency(GHz carrierFrequency) {
259 carrierFrequency_ = carrierFrequency;
260 carrierFrequencyGHz_ = GHz(carrierFrequency).get();
261 carrierFrequencyHz_ = Hz(carrierFrequency).get();
262 log10CarrierFrequencyGHz_ = log10(carrierFrequencyGHz_);
268 virtual std::vector<double> getSINR(MacNodeId bgUeId, inet::Coord bgUePos, TrafficGeneratorBase *bgUe, BackgroundScheduler *bgScheduler, Direction dir);
274 virtual double getReceivedPower_bgUe(
double txPower, inet::Coord txPos, inet::Coord rxPos, Direction dir,
bool losStatus,
const BackgroundScheduler *bgScheduler);