This class implements the IEEE 802.15.4A Channel Model[1] in the MiXiM omnet++ modeling framework. More...
#include <UWBIRIEEE802154APathlossModel.h>
Inherits AnalogueModel.
Classes | |
struct | CMconfig |
Public Member Functions | |
UWBIRIEEE802154APathlossModel (int _channelModel, double _threshold, const Move *_move, bool shadowing=true) | |
void | filterSignal (Signal &s) |
Has to be overriden by every implementation. | |
double | Rayleigh (double param) |
Static Public Attributes | |
static const bool | implemented_CMs [] |
static const CMconfig | CMconfigs [] |
Protected Member Functions | |
void | addEchoes (simtime_t pulseStart) |
double | getPathloss (double fc, double BW) |
Protected Attributes | |
int | channelModel |
selected channel model | |
CMconfig | cfg |
double | tapThreshold |
double | doShadowing |
double | doSmallScaleShadowing |
const Move * | move |
TimeMapping< Linear > * | newTxPower |
ConstMapping * | txPower |
Argument | arg |
MappingIterator * | pulsesIter |
double | L |
double | S |
simtime_t | clusterStart |
simtime_t | gamma_l |
double | Mcluster |
double | Omega_l |
double | distance |
double | averagePower |
long | nbCalls |
cOutVector | averagePowers |
cOutVector | pathlosses |
Static Protected Attributes | |
static const double | PL0 = 0.000040738 |
static const double | pathloss_exponent = 1.79 |
static const double | meanL = 3 |
static const double | Lambda = 0.047E9 |
static const double | lambda1 = 1.54E9 |
static const double | lambda2 = 0.15E9 |
static const double | Beta = 0.095 |
static const double | Gamma = 22.61E-9 |
static const double | k_gamma = 0 |
static const double | gamma_0 = 12.53 * 0.001 * 0.001 * 0.01 |
static const double | sigma_cluster = 1.883649089 |
static const double | fc = 4.492E9 |
static const double | BW = 500E6 |
static const double | fcMHz = 4492 |
static const double | d0 = 1 |
static const double | ntx = 1 |
static const double | nrx = 1 |
This class implements the IEEE 802.15.4A Channel Model[1] in the MiXiM omnet++ modeling framework.
"IEEE 802.15.4a channel model - final report", 2005, Andreas F. Molisch, Kannan Balakrishnan, Dajana Cassioli, Chia-Chin Chong, Shahriar Emami, Andrew Fort, Johan Karedal, Juergen Kunisch, Hans Schantz, Ulrich Schuster, Kai Siwiak
Citation of the following publication is appreciated if you use the MiXiM UWB PHY model for a publication of your own. J. Rousselot, J.-D. Decotignie, An ultra-wideband impulse radio PHY layer model for network simulation. SIMULATION January 2011 vol. 87 no. 1-2 82-112.
For more information, see also:
[1] J. Rousselot, J.-D. Decotignie, An ultra-wideband impulse radio PHY layer model for network simulation. SIMULATION January 2011 vol. 87 no. 1-2 82-112. http://dx.doi.org/10.1177/0037549710377767 [2] J. Rousselot, Ultra Low Power Communication Protocols for UWB Impulse Radio Wireless Sensor Networks. EPFL Thesis 4720, 2010. http://infoscience.epfl.ch/record/147987 [3] A High-Precision Ultra Wideband Impulse Radio Physical Layer Model for Network Simulation, Jérôme Rousselot, Jean-Dominique Decotignie, Second International Omnet++ Workshop,Simu'TOOLS, Rome, 6 Mar 09. http://portal.acm.org/citation.cfm?id=1537714
Definition at line 64 of file UWBIRIEEE802154APathlossModel.h.
void UWBIRIEEE802154APathlossModel::filterSignal | ( | Signal & | s | ) | [virtual] |
Has to be overriden by every implementation.
Filters a specified Signal by adding an attenuation over time to the Signal.
Implements AnalogueModel.
Definition at line 154 of file UWBIRIEEE802154APathlossModel.cc.
References Signal::addAttenuation(), ConstMapping::createConstIterator(), TimeMapping< Interpolator >::createIterator(), Coord::distance(), Signal::getMove(), ConstMappingIterator::getPosition(), Move::getPositionAt(), Signal::getSignalLength(), Signal::getSignalStart(), Argument::getTime(), Signal::getTransmissionPower(), ConstMappingIterator::getValue(), ConstMappingIterator::hasNext(), ConstMappingIterator::inRange(), IEEE802154A::mandatory_pulse, ConstMappingIterator::next(), and Signal::setTransmissionPower().
{ // We create a new "fake" txPower to add multipath taps // and then attenuation is applied to all pulses. // (1) Power Delay Profile realization txPower = s.getTransmissionPower(); newTxPower = new TimeMapping<Linear>(); //dynamic_cast<TimeMapping<Linear>*> (txPower->clone()); // create working copy pulsesIter = newTxPower->createIterator(); // create an iterator that we will use many times in addEchoes // generate number of clusters for this channel (channel coherence time > packet air time) L = max(1, poisson(cfg.Lmean)); // Choose block shadowing S = pow(10,(normal(0, cfg.sigma_s)/10)); // Loop on each value of the original mapping and generate multipath echoes ConstMappingIterator* iter = txPower->createConstIterator(); while (iter->inRange()) { // generate echoes for each non zero value if (iter->getValue() != 0) { // give the pulse start position addEchoes(iter->getPosition().getTime() - IEEE802154A::mandatory_pulse/2); } if (!iter->hasNext()) { break; } iter->next(); } delete iter; delete pulsesIter; s.setTransmissionPower(newTxPower); // compute distance Move srcMove = s.getMove(); Coord srcCoord, rcvCoord; distance = 0; srcCoord = srcMove.getPositionAt(s.getSignalStart()); rcvCoord = move->getPositionAt(s.getSignalStart()); distance = rcvCoord.distance(srcCoord); // Total radiated power Prx at that distance [W] //double attenuation = 0.5 * ntx * nrx * cfg.PL0 / pow(distance / d0, cfg.n); double attenuation = getPathloss(fc, BW); pathlosses.record(attenuation); // Power intensity I at that distance [W/m²] //attenuation = attenuation /(4*PI*pow(distance, cfg.n)); // create mapping SimpleTimeConstMapping* attMapping = new SimpleTimeConstMapping( attenuation, s.getSignalStart(), s.getSignalStart()+s.getSignalLength()); s.addAttenuation(attMapping); }
const bool UWBIRIEEE802154APathlossModel::implemented_CMs [static] |
{ false, true, true, true, false, true, true, true, false, false }
Definition at line 94 of file UWBIRIEEE802154APathlossModel.h.