INET Framework for OMNeT++/OMNEST
inet::physicallayer::Ieee802154UWBIRTransmitter Class Reference

This generates pulse-level representation of an IEEE 802.15.4A UWB PHY frame using the mandatory mode (high PRF). More...

#include <Ieee802154UWBIRTransmitter.h>

Inheritance diagram for inet::physicallayer::Ieee802154UWBIRTransmitter:
inet::physicallayer::TransmitterBase inet::physicallayer::ITransmitter inet::physicallayer::IPrintableObject

Public Member Functions

 Ieee802154UWBIRTransmitter ()
 
virtual const ITransmissioncreateTransmission (const IRadio *transmitter, const cPacket *macFrame, const simtime_t startTime) const override
 Returns a transmission which describes the radio signal corresponding to the provided mac frame. More...
 
virtual std::ostream & printToStream (std::ostream &stream, int level) const override
 Prints this object to the provided output stream. More...
 
- Public Member Functions inherited from inet::physicallayer::TransmitterBase
virtual W getMaxPower () const override
 Returns the maximum transmission power above which no transmission is ever transmitted. More...
 
virtual m getMaxCommunicationRange () const override
 Returns the maximum transmission range. More...
 
virtual m getMaxInterferenceRange () const override
 Returns the maximum interference range. More...
 
- Public Member Functions inherited from inet::physicallayer::IPrintableObject
virtual ~IPrintableObject ()
 
virtual std::string getInfoStringRepresentation () const
 
virtual std::string getDetailStringRepresentation () const
 
virtual std::string getDebugStringRepresentation () const
 
virtual std::string getTraceStringRepresentation () const
 
virtual std::string getCompleteStringRepresentation () const
 

Protected Member Functions

virtual void initialize (int stage) override
 
simtime_t getFrameDuration (int psduLength) const
 
simtime_t getMaxFrameDuration () const
 
simtime_t getPhyMaxFrameDuration () const
 
simtime_t getThdr () const
 
virtual void generateSyncPreamble (Mapping *mapping, Argument *arg, const simtime_t startTime) const
 
virtual void generateSFD (Mapping *mapping, Argument *arg, const simtime_t startTime) const
 
virtual void generatePhyHeader (Mapping *mapping, Argument *arg, const simtime_t startTime) const
 
virtual void generateBurst (Mapping *mapping, Argument *arg, const simtime_t startTime, const simtime_t burstStart, short polarity) const
 
virtual void generatePulse (Mapping *mapping, Argument *arg, const simtime_t startTime, short polarity, double peak, const simtime_t chip) const
 
virtual ConstMappinggenerateIEEE802154AUWBSignal (const simtime_t startTime, std::vector< bool > *bits) const
 
- Protected Member Functions inherited from inet::physicallayer::TransmitterBase
virtual int numInitStages () const override
 

Protected Attributes

Ieee802154UWBIRMode cfg
 

Additional Inherited Members

- Public Types inherited from inet::physicallayer::IPrintableObject
enum  PrintLevel {
  PRINT_LEVEL_TRACE, PRINT_LEVEL_DEBUG, PRINT_LEVEL_DETAIL, PRINT_LEVEL_INFO,
  PRINT_LEVEL_COMPLETE = INT_MIN
}
 

Detailed Description

This generates pulse-level representation of an IEEE 802.15.4A UWB PHY frame using the mandatory mode (high PRF).

Constructor & Destructor Documentation

inet::physicallayer::Ieee802154UWBIRTransmitter::Ieee802154UWBIRTransmitter ( )
34 {
35 }

Member Function Documentation

const ITransmission * inet::physicallayer::Ieee802154UWBIRTransmitter::createTransmission ( const IRadio transmitter,
const cPacket *  macFrame,
const simtime_t  startTime 
) const
overridevirtual

Returns a transmission which describes the radio signal corresponding to the provided mac frame.

This function never returns nullptr.

Implements inet::physicallayer::ITransmitter.

183 {
184  int bitLength = macFrame->getBitLength();
185  // KLUDGE: generate random bits until serializer is implemented
186  std::vector<bool> *bits = new std::vector<bool>();
187  for (int i = 0; i < bitLength; i++) {
188  bool bitValue = intuniform(0, 1, 0);
189  EV_INFO << "Transmitted bit at " << i << " is " << (int)bitValue << endl;
190  bits->push_back(bitValue);
191  }
192  // KLUDGE: add a fake CRC
193  for (int i = 0; i < 8; i++) {
194  bits->push_back(0);
195  for (int j = 0; j + i < bitLength; j += 8)
196  bits->at(bitLength + i) = bits->at(bitLength + i) ^ bits->at(j + i);
197  }
198  const simtime_t duration = getFrameDuration(bits->size() / 8);
199  const simtime_t endTime = startTime + duration;
200  IMobility *mobility = transmitter->getAntenna()->getMobility();
201  const Coord startPosition = mobility->getCurrentPosition();
202  const Coord endPosition = mobility->getCurrentPosition();
203  const EulerAngles startOrientation = mobility->getCurrentAngularPosition();
204  const EulerAngles endOrientation = mobility->getCurrentAngularPosition();
205  const ConstMapping *powerMapping = generateIEEE802154AUWBSignal(startTime, bits);
206  return new DimensionalTransmission(transmitter, macFrame, startTime, endTime, -1, -1, -1, startPosition, endPosition, startOrientation, endOrientation, -1, bitLength, cfg.bitrate, nullptr, cfg.centerFrequency, cfg.bandwidth, powerMapping);
207 }
bps bitrate
Definition: Ieee802154UWBIRMode.h:79
virtual ConstMapping * generateIEEE802154AUWBSignal(const simtime_t startTime, std::vector< bool > *bits) const
Definition: Ieee802154UWBIRTransmitter.cc:155
Hz bandwidth
Definition: Ieee802154UWBIRMode.h:94
simtime_t getFrameDuration(int psduLength) const
Definition: Ieee802154UWBIRTransmitter.cc:50
Hz centerFrequency
Definition: Ieee802154UWBIRMode.h:93
Ieee802154UWBIRMode cfg
Definition: Ieee802154UWBIRTransmitter.h:44
void inet::physicallayer::Ieee802154UWBIRTransmitter::generateBurst ( Mapping mapping,
Argument arg,
const simtime_t  startTime,
const simtime_t  burstStart,
short  polarity 
) const
protectedvirtual

Referenced by generateIEEE802154AUWBSignal().

144 {
145  // ASSERT(burstStart < cfg.preambleLength + (psduLength * 8 + 48 + 2) * cfg.data_symbol_duration);
146  // 1. Start point = zeros
147  simtime_t offset = burstStart;
148  for (int pulse = 0; pulse < cfg.nbPulsesPerBurst; pulse++) {
149  arg->setTime(offset);
150  generatePulse(mapping, arg, startTime, 1, Ieee802154UWBIRMode::maxPulse, cfg.pulse_duration);
151  offset = offset + cfg.pulse_duration;
152  }
153 }
static const double maxPulse
Total triangular pulse peak energy in mW (0 dBm / 50 MHz over 500 MHz)
Definition: Ieee802154UWBIRMode.h:37
int nbPulsesPerBurst
Definition: Ieee802154UWBIRMode.h:80
double pulse_duration
Definition: Ieee802154UWBIRMode.h:90
Ieee802154UWBIRMode cfg
Definition: Ieee802154UWBIRTransmitter.h:44
virtual void generatePulse(Mapping *mapping, Argument *arg, const simtime_t startTime, short polarity, double peak, const simtime_t chip) const
Definition: Ieee802154UWBIRTransmitter.cc:131
ConstMapping * inet::physicallayer::Ieee802154UWBIRTransmitter::generateIEEE802154AUWBSignal ( const simtime_t  startTime,
std::vector< bool > *  bits 
) const
protectedvirtual

Referenced by createTransmission().

156 {
157  // 48 R-S parity bits, the 2 symbols phy header is not modeled as it includes its own parity bits
158  // and is thus very robust
159  unsigned int bitLength = bits->size() + 48;
160  // data start time relative to signal->getReceptionStart();
161  simtime_t dataStart = cfg.preambleLength; // = Tsync + Tsfd
162  TimeMapping<Linear>* mapping = new TimeMapping<Linear> ();
163  Argument arg;
164 
165  generateSyncPreamble(mapping, &arg, startTime);
166  generateSFD(mapping, &arg, startTime);
167  //generatePhyHeader(mapping, &arg, startTime);
168 
169  // generate bit values and modulates them according to
170  // the IEEE 802.15.4A specification
171  simtime_t symbolStart = dataStart;
172  simtime_t burstPos;
173  for (unsigned int burst = 0; burst < bitLength; burst++) {
174  int bit = burst < bits->size() ? bits->at(burst) : intuniform(0, 1, 0);
175  burstPos = symbolStart + bit * cfg.shift_duration + cfg.getHoppingPos(burst) * cfg.burst_duration;
176  generateBurst(mapping, &arg, startTime, burstPos, +1);
177  symbolStart = symbolStart + cfg.data_symbol_duration;
178  }
179  return mapping;
180 }
double burst_duration
Definition: Ieee802154UWBIRMode.h:91
int getHoppingPos(int sym) const
Definition: Ieee802154UWBIRMode.cc:109
virtual void generateSyncPreamble(Mapping *mapping, Argument *arg, const simtime_t startTime) const
Definition: Ieee802154UWBIRTransmitter.cc:91
double shift_duration
Definition: Ieee802154UWBIRMode.h:89
virtual void generateSFD(Mapping *mapping, Argument *arg, const simtime_t startTime) const
Definition: Ieee802154UWBIRTransmitter.cc:110
virtual void generateBurst(Mapping *mapping, Argument *arg, const simtime_t startTime, const simtime_t burstStart, short polarity) const
Definition: Ieee802154UWBIRTransmitter.cc:143
double data_symbol_duration
Definition: Ieee802154UWBIRMode.h:88
Ieee802154UWBIRMode cfg
Definition: Ieee802154UWBIRTransmitter.h:44
double preambleLength
Definition: Ieee802154UWBIRMode.h:92
void inet::physicallayer::Ieee802154UWBIRTransmitter::generatePhyHeader ( Mapping mapping,
Argument arg,
const simtime_t  startTime 
) const
protectedvirtual
127 {
128  // not implemented
129 }
void inet::physicallayer::Ieee802154UWBIRTransmitter::generatePulse ( Mapping mapping,
Argument arg,
const simtime_t  startTime,
short  polarity,
double  peak,
const simtime_t  chip 
) const
protectedvirtual

Referenced by generateBurst(), generateSFD(), and generateSyncPreamble().

132 {
133  ASSERT(polarity == -1 || polarity == +1);
134  arg->setTime(arg->getTime() + startTime); // adjust argument so that we use absolute time values in Mapping
135  mapping->setValue(*arg, 0);
136  arg->setTime(arg->getTime() + chip / 2);
137  // Maximum point at symbol half (triangular pulse)
138  mapping->setValue(*arg, peak * polarity);
139  arg->setTime(arg->getTime() + chip / 2);
140  mapping->setValue(*arg, 0);
141 }
void inet::physicallayer::Ieee802154UWBIRTransmitter::generateSFD ( Mapping mapping,
Argument arg,
const simtime_t  startTime 
) const
protectedvirtual

Referenced by generateIEEE802154AUWBSignal().

111 {
112  const simtime_t sfdStart = cfg.NSync * cfg.sync_symbol_duration;
113  for (short n = 0; n < 8; n = n + 1) {
114  if (Ieee802154UWBIRMode::shortSFD[n] != 0) {
115  for (short pos = 0; pos < cfg.CLength; pos = pos + 1) {
117  arg->setTime(sfdStart + n * cfg.sync_symbol_duration + pos * cfg.spreadingdL*cfg.pulse_duration);
118  //generatePulse(mapping, arg, startTime, C31[Ci - 1][pos] * shortSFD[n]); // change pulse polarity
119  generatePulse(mapping, arg, startTime, 1, Ieee802154UWBIRMode::maxPulse, cfg.pulse_duration); // always positive polarity
120  }
121  }
122  }
123  }
124 }
int CLength
Definition: Ieee802154UWBIRMode.h:76
double sync_symbol_duration
Definition: Ieee802154UWBIRMode.h:87
static const double maxPulse
Total triangular pulse peak energy in mW (0 dBm / 50 MHz over 500 MHz)
Definition: Ieee802154UWBIRMode.h:37
static const short shortSFD[8]
Definition: Ieee802154UWBIRMode.h:42
double pulse_duration
Definition: Ieee802154UWBIRMode.h:90
UWBPreambleSymbolRepetitions NSync
Definition: Ieee802154UWBIRMode.h:75
int spreadingdL
Definition: Ieee802154UWBIRMode.h:77
Ieee802154UWBIRMode cfg
Definition: Ieee802154UWBIRTransmitter.h:44
static const short C31[8][31]
Definition: Ieee802154UWBIRMode.h:40
virtual void generatePulse(Mapping *mapping, Argument *arg, const simtime_t startTime, short polarity, double peak, const simtime_t chip) const
Definition: Ieee802154UWBIRTransmitter.cc:131
static const short Ci
Definition: Ieee802154UWBIRMode.h:41
void inet::physicallayer::Ieee802154UWBIRTransmitter::generateSyncPreamble ( Mapping mapping,
Argument arg,
const simtime_t  startTime 
) const
protectedvirtual

Referenced by generateIEEE802154AUWBSignal().

92 {
93  // NSync repetitions of the Si symbol
94  for (short n = 0; n < cfg.NSync; n = n + 1) {
95  for (short pos = 0; pos < cfg.CLength; pos = pos + 1) {
97  if(n==0 && pos==0) {
98  // we slide the first pulse slightly in time to get the first point "inside" the signal
99  arg->setTime(1E-12 + n * cfg.sync_symbol_duration + pos * cfg.spreadingdL * cfg.pulse_duration);
100  } else {
101  arg->setTime(n * cfg.sync_symbol_duration + pos * cfg.spreadingdL * cfg.pulse_duration);
102  }
103  //generatePulse(mapping, arg, startTime, C31[Ci - 1][pos], IEEE802154A::maxPulse, IEEE802154A::mandatory_pulse);
104  generatePulse(mapping, arg, startTime, 1, Ieee802154UWBIRMode::maxPulse, cfg.pulse_duration); // always positive polarity
105  }
106  }
107  }
108 }
int CLength
Definition: Ieee802154UWBIRMode.h:76
double sync_symbol_duration
Definition: Ieee802154UWBIRMode.h:87
static const double maxPulse
Total triangular pulse peak energy in mW (0 dBm / 50 MHz over 500 MHz)
Definition: Ieee802154UWBIRMode.h:37
double pulse_duration
Definition: Ieee802154UWBIRMode.h:90
UWBPreambleSymbolRepetitions NSync
Definition: Ieee802154UWBIRMode.h:75
int spreadingdL
Definition: Ieee802154UWBIRMode.h:77
Ieee802154UWBIRMode cfg
Definition: Ieee802154UWBIRTransmitter.h:44
static const short C31[8][31]
Definition: Ieee802154UWBIRMode.h:40
virtual void generatePulse(Mapping *mapping, Argument *arg, const simtime_t startTime, short polarity, double peak, const simtime_t chip) const
Definition: Ieee802154UWBIRTransmitter.cc:131
static const short Ci
Definition: Ieee802154UWBIRMode.h:41
simtime_t inet::physicallayer::Ieee802154UWBIRTransmitter::getFrameDuration ( int  psduLength) const
protected

Referenced by createTransmission().

51 {
52  return cfg.preambleLength + (psduLength * 8 + 48) * cfg.data_symbol_duration;
53 }
double data_symbol_duration
Definition: Ieee802154UWBIRMode.h:88
Ieee802154UWBIRMode cfg
Definition: Ieee802154UWBIRTransmitter.h:44
double preambleLength
Definition: Ieee802154UWBIRMode.h:92
simtime_t inet::physicallayer::Ieee802154UWBIRTransmitter::getMaxFrameDuration ( ) const
protected
56 {
58 }
double data_symbol_duration
Definition: Ieee802154UWBIRMode.h:88
Ieee802154UWBIRMode cfg
Definition: Ieee802154UWBIRTransmitter.h:44
double preambleLength
Definition: Ieee802154UWBIRMode.h:92
static const int MaxPSDULength
Maximum size of message that is accepted by the Phy layer (in bytes).
Definition: Ieee802154UWBIRMode.h:44
simtime_t inet::physicallayer::Ieee802154UWBIRTransmitter::getPhyMaxFrameDuration ( ) const
protected
61 {
62  simtime_t phyMaxFrameDuration = 0;
63  simtime_t TSHR, TPHR, TPSDU, TCCApreamble;
64  TSHR = getThdr();
65  TPHR = getThdr();
66  phyMaxFrameDuration = phyMaxFrameDuration + TSHR;
67  return phyMaxFrameDuration;
68 }
simtime_t getThdr() const
Definition: Ieee802154UWBIRTransmitter.cc:70
simtime_t inet::physicallayer::Ieee802154UWBIRTransmitter::getThdr ( ) const
protected

Referenced by getPhyMaxFrameDuration().

71 {
72  switch (cfg.channel) {
73  default:
74  switch (cfg.prf) {
76  //throw cRuntimeError("This optional mode is not implemented.");
77  return 0;
78  break;
80  return 16.4E-6;
82  return 16.8E-6;
84  return 0;
85  }
86  break;
87  }
88  return 0;
89 }
UWBPRF prf
Definition: Ieee802154UWBIRMode.h:73
int channel
Definition: Ieee802154UWBIRMode.h:72
Definition: Ieee802154UWBIRMode.h:54
Definition: Ieee802154UWBIRMode.h:54
Definition: Ieee802154UWBIRMode.h:54
Ieee802154UWBIRMode cfg
Definition: Ieee802154UWBIRTransmitter.h:44
Definition: Ieee802154UWBIRMode.h:54
void inet::physicallayer::Ieee802154UWBIRTransmitter::initialize ( int  stage)
overrideprotectedvirtual
38 {
39  if (stage == INITSTAGE_LOCAL)
40  {
42  }
43 }
static const Ieee802154UWBIRMode cfg_mandatory_16M
Definition: Ieee802154UWBIRMode.h:50
Local initializations.
Definition: InitStages.h:35
Ieee802154UWBIRMode cfg
Definition: Ieee802154UWBIRTransmitter.h:44
std::ostream & inet::physicallayer::Ieee802154UWBIRTransmitter::printToStream ( std::ostream &  stream,
int  level 
) const
overridevirtual

Prints this object to the provided output stream.

Function calls to operator<< with pointers or references either const or not are all forwarded to this function.

Reimplemented from inet::physicallayer::IPrintableObject.

46 {
47  return stream << "Ieee802154UWBIRTransmitter";
48 }

Member Data Documentation


The documentation for this class was generated from the following files: