This class implements a model of an energy detection receiver that demodulates UWB-IR burst position modulation as defined in the IEEE802154A standard (mandatory mode, high PRF). More...
#include <DeciderUWBIRED.h>
Inherits Decider.
Inherited by DeciderUWBIREDSync, and DeciderUWBIREDSyncOnAddress.
Public Types | |
enum | UWBIRED_CTRL_KIND { SYNC_SUCCESS = MacToPhyInterface::LAST_BASE_PHY_KIND+1, SYNC_FAILURE } |
Control message kinds specific to DeciderUWBIRED. Currently defines a message kind that informs the MAC of a successful SYNC event at PHY layer. | |
Public Member Functions | |
DeciderUWBIRED (DeciderToPhyInterface *iface, PhyLayerUWBIR *_uwbiface, double _syncThreshold, bool _syncAlwaysSucceeds, bool _stats, bool _trace, bool alwaysFailOnDataInterference=false) | |
virtual simtime_t | processSignal (AirFrame *frame) |
This function processes a AirFrame given by the PhyLayer and returns the time point when Decider wants to be given the AirFrame again. | |
double | getAvgThreshold () |
double | getNoiseValue () |
void | cancelReception () |
void | finish () |
Method to be called by an OMNeT-module during its own finish(), to enable a decider to do some things. | |
virtual ChannelState | getChannelState () |
A function that returns information about the channel state. | |
Static Public Attributes | |
static const double | noiseVariance = 101.085E-12 |
static const double | peakPulsePower = 1.3E-3 |
Protected Types | |
enum | { FIRST, HEADER_OVER, SIGNAL_OVER } |
typedef ConcatConstMapping < std::multiplies< double > > | MultipliedMapping |
Protected Member Functions | |
bool | decodePacket (Signal *signal, vector< bool > *receivedBits) |
simtime_t | handleNewSignal (Signal *s) |
simtime_t | handleHeaderOver (map< Signal *, int >::iterator &it) |
virtual bool | attemptSync (Signal *signal) |
simtime_t | handleSignalOver (map< Signal *, int >::iterator &it, AirFrame *frame) |
pair< double, double > | integrateWindow (int symbol, simtime_t now, simtime_t burst, Signal *signal) |
simtime_t | handleChannelSenseRequest (ChannelSenseRequest *request) |
This function is called by the PhyLayer to hand over a ChannelSenseRequest. | |
Protected Attributes | |
double | syncThreshold |
Stores the snr value of the last packet seen (see decodePacket). | |
bool | syncAlwaysSucceeds |
bool | channelSensing |
bool | synced |
bool | alwaysFailOnDataInterference |
UWBIRPacket | packet |
int | catUWBIRPacket |
BaseUtility * | utility |
double | epulseAggregate |
double | enoiseAggregate |
map< Signal *, int > | currentSignals |
cOutVector | receivedPulses |
cOutVector | syncThresholds |
PhyLayerUWBIR * | uwbiface |
Signal * | tracking |
int | nbFramesWithInterference |
int | nbFramesWithoutInterference |
int | nbCancelReceptions |
int | nbFinishTrackingFrames |
int | nbFinishNoiseFrames |
vector< ConstMapping * > | receivingPowers |
ConstMapping * | signalPower |
vector< simtime_t > | offsets |
AirFrameVector | airFrameVector |
AirFrameVector::iterator | airFrameIter |
Private Attributes | |
bool | trace |
bool | stats |
long | nbRandomBits |
long | nbFailedSyncs |
long | nbSuccessfulSyncs |
double | nbSymbols |
double | allThresholds |
double | vsignal2 |
double | vnoise2 |
double | snirs |
double | snirEvals |
double | pulseSnrs |
double | packetSNIR |
double | packetSignal |
double | packetNoise |
double | packetSamples |
IEEE802154A::config | cfg |
double | snrLastPacket |
This class implements a model of an energy detection receiver that demodulates UWB-IR burst position modulation as defined in the IEEE802154A standard (mandatory mode, high PRF).
The code modeling the frame clock synchronization is implemented in attemptSync(). Simply subclass this class and redefine attemptSync() if you wish to consider more sophisticated synchronization models.
To implement a coherent receiver, the easiest way to start is to copy-paste this code into a new class and rename it accordingly. Then, redefine decodePacket().
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 66 of file DeciderUWBIRED.h.
ChannelState DeciderUWBIRED::getChannelState | ( | ) | [virtual] |
A function that returns information about the channel state.
It is an alternative for the MACLayer in order to obtain information immediately (in contrast to sending a ChannelSenseRequest, i.e. sending a cMessage over the OMNeT-control-channel)
Reimplemented from Decider.
Definition at line 365 of file DeciderUWBIRED.cc.
{ return ChannelState(true, 0); // channel is always "sensed" free }
simtime_t DeciderUWBIRED::handleChannelSenseRequest | ( | ChannelSenseRequest * | request | ) | [protected, virtual] |
This function is called by the PhyLayer to hand over a ChannelSenseRequest.
The MACLayer is able to send a ChannelSenseRequest to the PhyLayer that calls this function with it and is returned a time point when to re-call this function with the specific ChannelSenseRequest.
The Decider puts the result (ChannelState) to the ChannelSenseRequest and "answers" by calling the "sendControlMsg"-function on the DeciderToPhyInterface, i.e. telling the PhyLayer to send it back.
Reimplemented from Decider.
Definition at line 352 of file DeciderUWBIRED.cc.
References Decider::phy, and DeciderToPhyInterface::sendControlMsg().
{ if (channelSensing) { // send back the channel state request->setResult(new ChannelState(synced, 0)); // bogus rssi value (0) phy->sendControlMsg(request); channelSensing = false; return -1; // do not call me back ; I have finished } else { channelSensing = true; return -1; //phy->getSimTime() + request->getSenseDuration(); } }