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

#include <ApskLayeredTransmitter.h>

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

Public Types

enum  LevelOfDetail { PACKET_DOMAIN, BIT_DOMAIN, SYMBOL_DOMAIN, SAMPLE_DOMAIN }
 
- Public Types inherited from inet::IPrintableObject
enum  PrintLevel {
  PRINT_LEVEL_TRACE, PRINT_LEVEL_DEBUG, PRINT_LEVEL_DETAIL, PRINT_LEVEL_INFO,
  PRINT_LEVEL_COMPLETE = INT_MIN
}
 
enum  PrintFlag { PRINT_FLAG_FORMATTED = (1 << 0), PRINT_FLAG_MULTILINE = (1 << 1) }
 

Public Member Functions

 ApskLayeredTransmitter ()
 
virtual std::ostream & printToStream (std::ostream &stream, int level, int evFlags=0) const override
 Prints this object to the provided output stream. More...
 
virtual const IEncodergetEncoder () const
 
virtual const IModulatorgetModulator () const
 
virtual const IPulseShapergetPulseShaper () const
 
virtual const IDigitalAnalogConvertergetDigitalAnalogConverter () const
 
virtual W getPower () const
 
virtual bps getBitrate () const
 
virtual const Hz getBandwidth () const
 
virtual const Hz getCenterFrequency () const
 
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 communication range. More...
 
virtual m getMaxInterferenceRange () const override
 Returns the maximum interference range. More...
 
virtual const ITransmissioncreateTransmission (const IRadio *radio, const Packet *packet, const simtime_t startTime) const override
 Returns a transmission which describes the radio signal corresponding to the provided packet. More...
 
- Public Member Functions inherited from inet::IPrintableObject
virtual ~IPrintableObject ()
 
virtual std::string printToString () const
 
virtual std::string printToString (int level, int evFlags=0) const
 
virtual std::string getInfoStringRepresentation (int evFlags=0) const
 
virtual std::string getDetailStringRepresentation (int evFlags=0) const
 
virtual std::string getDebugStringRepresentation (int evFlags=0) const
 
virtual std::string getTraceStringRepresentation (int evFlags=0) const
 
virtual std::string getCompleteStringRepresentation (int evFlags=0) const
 

Protected Member Functions

virtual void initialize (int stage) override
 
virtual const ITransmissionPacketModelcreatePacketModel (const Packet *packet) const
 
virtual const ITransmissionBitModelcreateBitModel (const ITransmissionPacketModel *packetModel) const
 
virtual const ITransmissionSymbolModelcreateSymbolModel (const ITransmissionBitModel *bitModel) const
 
virtual const ITransmissionSampleModelcreateSampleModel (const ITransmissionSymbolModel *symbolModel) const
 
virtual const ITransmissionAnalogModelcreateAnalogModel (const ITransmissionPacketModel *packetModel, const ITransmissionBitModel *bitModel, const ITransmissionSampleModel *sampleModel) const
 
- Protected Member Functions inherited from inet::physicallayer::TransmitterBase
virtual int numInitStages () const override
 

Protected Attributes

LevelOfDetail levelOfDetail
 
const IEncoderencoder
 
const IModulatormodulator
 
const IPulseShaperpulseShaper
 
const IDigitalAnalogConverterdigitalAnalogConverter
 
W power
 
bps bitrate
 
Hz bandwidth
 
Hz centerFrequency
 

Member Enumeration Documentation

◆ LevelOfDetail

Enumerator
PACKET_DOMAIN 
BIT_DOMAIN 
SYMBOL_DOMAIN 
SAMPLE_DOMAIN 
26  {
28  BIT_DOMAIN,
31  };

Constructor & Destructor Documentation

◆ ApskLayeredTransmitter()

inet::physicallayer::ApskLayeredTransmitter::ApskLayeredTransmitter ( )
25  :
26  levelOfDetail(static_cast<LevelOfDetail>(-1)),
27  encoder(nullptr),
28  modulator(nullptr),
29  pulseShaper(nullptr),
30  digitalAnalogConverter(nullptr),
31  power(W(NaN)),
32  bitrate(bps(NaN)),
33  bandwidth(Hz(NaN)),
35 {
36 }

Member Function Documentation

◆ createAnalogModel()

const ITransmissionAnalogModel * inet::physicallayer::ApskLayeredTransmitter::createAnalogModel ( const ITransmissionPacketModel packetModel,
const ITransmissionBitModel bitModel,
const ITransmissionSampleModel sampleModel 
) const
protectedvirtual
135 {
137  if (sampleModel == nullptr)
138  throw cRuntimeError("Digital analog converter needs sample domain representation");
139  else
140  return digitalAnalogConverter->convertDigitalToAnalog(sampleModel);
141  }
142  else {
143  simtime_t duration = packetModel->getPacket()->getBitLength() / bitrate.get();
144  return new ScalarTransmissionSignalAnalogModel(duration, centerFrequency, bandwidth, power);
145  }
146 }

Referenced by createTransmission().

◆ createBitModel()

const ITransmissionBitModel * inet::physicallayer::ApskLayeredTransmitter::createBitModel ( const ITransmissionPacketModel packetModel) const
protectedvirtual
94 {
96  return encoder->encode(packetModel);
97  else {
98  auto packet = packetModel->getPacket();
99  b netHeaderLength = packet->peekAtFront<ApskPhyHeader>()->getChunkLength();
100  b netDataLength = packet->getTotalLength() - netHeaderLength;
101  if (encoder) {
102  const ApskEncoder *apskEncoder = check_and_cast<const ApskEncoder *>(encoder);
103  const ConvolutionalCode *forwardErrorCorrection = apskEncoder->getCode()->getConvolutionalCode();
104  if (forwardErrorCorrection == nullptr)
105  return new TransmissionBitModel(netHeaderLength, bitrate, netDataLength, bitrate, nullptr, forwardErrorCorrection, nullptr, nullptr);
106  else {
107  b grossHeaderLength = b(forwardErrorCorrection->getEncodedLength(b(netHeaderLength).get()));
108  b grossDataLength = b(forwardErrorCorrection->getEncodedLength(b(netDataLength).get()));
109  bps grossBitrate = bitrate / forwardErrorCorrection->getCodeRate();
110  return new TransmissionBitModel(grossHeaderLength, grossBitrate, grossDataLength, grossBitrate, nullptr, forwardErrorCorrection, nullptr, nullptr);
111  }
112  }
113  else
114  return new TransmissionBitModel(netHeaderLength, bitrate, netDataLength, bitrate, nullptr, nullptr, nullptr, nullptr);
115  }
116 }

Referenced by createTransmission().

◆ createPacketModel()

const ITransmissionPacketModel * inet::physicallayer::ApskLayeredTransmitter::createPacketModel ( const Packet packet) const
protectedvirtual
89 {
90  return new TransmissionPacketModel(check_and_cast<const Packet *>(packet), bitrate);
91 }

Referenced by createTransmission().

◆ createSampleModel()

const ITransmissionSampleModel * inet::physicallayer::ApskLayeredTransmitter::createSampleModel ( const ITransmissionSymbolModel symbolModel) const
protectedvirtual
127 {
129  return pulseShaper->shape(symbolModel);
130  else
131  return nullptr;
132 }

Referenced by createTransmission().

◆ createSymbolModel()

const ITransmissionSymbolModel * inet::physicallayer::ApskLayeredTransmitter::createSymbolModel ( const ITransmissionBitModel bitModel) const
protectedvirtual
119 {
121  return modulator->modulate(bitModel);
122  else
123  return new TransmissionSymbolModel(-1, NaN, -1, NaN, nullptr, modulator->getModulation(), modulator->getModulation());
124 }

Referenced by createTransmission().

◆ createTransmission()

const ITransmission * inet::physicallayer::ApskLayeredTransmitter::createTransmission ( const IRadio transmitter,
const Packet packet,
const simtime_t  startTime 
) const
overridevirtual

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

This function never returns nullptr.

Implements inet::physicallayer::ITransmitter.

149 {
150  const ITransmissionPacketModel *packetModel = createPacketModel(packet);
151  const ITransmissionBitModel *bitModel = createBitModel(packetModel);
152  const ITransmissionSymbolModel *symbolModel = createSymbolModel(bitModel);
153  const ITransmissionSampleModel *sampleModel = createSampleModel(symbolModel);
154  const ITransmissionAnalogModel *analogModel = createAnalogModel(packetModel, bitModel, sampleModel);
155  // assuming movement and rotation during transmission is negligible
156  IMobility *mobility = transmitter->getAntenna()->getMobility();
157  const simtime_t endTime = startTime + analogModel->getDuration();
158  const Coord& startPosition = mobility->getCurrentPosition();
159  const Coord& endPosition = mobility->getCurrentPosition();
160  const Quaternion& startOrientation = mobility->getCurrentAngularPosition();
161  const Quaternion& endOrientation = mobility->getCurrentAngularPosition();
162  return new LayeredTransmission(packetModel, bitModel, symbolModel, sampleModel, analogModel, transmitter, packet, startTime, endTime, -1, -1, -1, startPosition, endPosition, startOrientation, endOrientation);
163 }

◆ getBandwidth()

virtual const Hz inet::physicallayer::ApskLayeredTransmitter::getBandwidth ( ) const
inlinevirtual
63 { return bandwidth; }

◆ getBitrate()

virtual bps inet::physicallayer::ApskLayeredTransmitter::getBitrate ( ) const
inlinevirtual
62 { return bitrate; }

◆ getCenterFrequency()

virtual const Hz inet::physicallayer::ApskLayeredTransmitter::getCenterFrequency ( ) const
inlinevirtual
64 { return centerFrequency; }

◆ getDigitalAnalogConverter()

virtual const IDigitalAnalogConverter* inet::physicallayer::ApskLayeredTransmitter::getDigitalAnalogConverter ( ) const
inlinevirtual
60 { return digitalAnalogConverter; }

◆ getEncoder()

virtual const IEncoder* inet::physicallayer::ApskLayeredTransmitter::getEncoder ( ) const
inlinevirtual
57 { return encoder; }

◆ getMaxCommunicationRange()

virtual m inet::physicallayer::ApskLayeredTransmitter::getMaxCommunicationRange ( ) const
inlineoverridevirtual

Returns the maximum communication range.

Returns a value in the range [0, +infinity] or NaN if unspecified.

Reimplemented from inet::physicallayer::TransmitterBase.

66 { return m(NaN); }

◆ getMaxInterferenceRange()

virtual m inet::physicallayer::ApskLayeredTransmitter::getMaxInterferenceRange ( ) const
inlineoverridevirtual

Returns the maximum interference range.

Returns a value in the range [0, +infinity] or NaN if unspecified.

Reimplemented from inet::physicallayer::TransmitterBase.

67 { return m(NaN); }

◆ getMaxPower()

virtual W inet::physicallayer::ApskLayeredTransmitter::getMaxPower ( ) const
inlineoverridevirtual

Returns the maximum transmission power above which no transmission is ever transmitted.

Returns a value in the range [0, +infinity] or NaN if unspecified.

Reimplemented from inet::physicallayer::TransmitterBase.

65 { return power; }

◆ getModulator()

virtual const IModulator* inet::physicallayer::ApskLayeredTransmitter::getModulator ( ) const
inlinevirtual
58 { return modulator; }

◆ getPower()

virtual W inet::physicallayer::ApskLayeredTransmitter::getPower ( ) const
inlinevirtual
61 { return power; }

◆ getPulseShaper()

virtual const IPulseShaper* inet::physicallayer::ApskLayeredTransmitter::getPulseShaper ( ) const
inlinevirtual
59 { return pulseShaper; }

◆ initialize()

void inet::physicallayer::ApskLayeredTransmitter::initialize ( int  stage)
overrideprotectedvirtual
39 {
40  if (stage == INITSTAGE_LOCAL) {
41  encoder = dynamic_cast<const IEncoder *>(getSubmodule("encoder"));
42  modulator = dynamic_cast<const IModulator *>(getSubmodule("modulator"));
43  pulseShaper = dynamic_cast<const IPulseShaper *>(getSubmodule("pulseShaper"));
44  digitalAnalogConverter = dynamic_cast<const IDigitalAnalogConverter *>(getSubmodule("digitalAnalogConverter"));
45  power = W(par("power"));
46  bitrate = bps(par("bitrate"));
47  if (bitrate <= bps(0))
48  throw cRuntimeError("Invalid birate: %s", bitrate.str().c_str());
49  bandwidth = Hz(par("bandwidth"));
50  centerFrequency = Hz(par("centerFrequency"));
51  const char *levelOfDetailStr = par("levelOfDetail");
52  if (strcmp("packet", levelOfDetailStr) == 0)
54  else if (strcmp("bit", levelOfDetailStr) == 0)
56  else if (strcmp("symbol", levelOfDetailStr) == 0)
58  else if (strcmp("sample", levelOfDetailStr) == 0)
60  else
61  throw cRuntimeError("Unknown level of detail='%s'", levelOfDetailStr);
62  if (levelOfDetail >= BIT_DOMAIN && !encoder)
63  throw cRuntimeError("Encoder not configured");
65  throw cRuntimeError("Modulator not configured");
67  throw cRuntimeError("Pulse shaper not configured");
68  }
69 }

◆ printToStream()

std::ostream & inet::physicallayer::ApskLayeredTransmitter::printToStream ( std::ostream &  stream,
int  level,
int  evFlags = 0 
) const
overridevirtual

Prints this object to the provided output stream.

Reimplemented from inet::IPrintableObject.

72 {
73  stream << "ApskLayeredTransmitter";
74  if (level <= PRINT_LEVEL_DETAIL)
75  stream << EV_FIELD(levelOfDetail)
77  if (level <= PRINT_LEVEL_TRACE)
78  stream << EV_FIELD(encoder, printFieldToString(encoder, level + 1, evFlags))
82  << EV_FIELD(power)
83  << EV_FIELD(bitrate)
84  << EV_FIELD(bandwidth);
85  return stream;
86 }

Member Data Documentation

◆ bandwidth

Hz inet::physicallayer::ApskLayeredTransmitter::bandwidth
protected

◆ bitrate

bps inet::physicallayer::ApskLayeredTransmitter::bitrate
protected

◆ centerFrequency

Hz inet::physicallayer::ApskLayeredTransmitter::centerFrequency
protected

◆ digitalAnalogConverter

const IDigitalAnalogConverter* inet::physicallayer::ApskLayeredTransmitter::digitalAnalogConverter
protected

◆ encoder

const IEncoder* inet::physicallayer::ApskLayeredTransmitter::encoder
protected

◆ levelOfDetail

LevelOfDetail inet::physicallayer::ApskLayeredTransmitter::levelOfDetail
protected

◆ modulator

const IModulator* inet::physicallayer::ApskLayeredTransmitter::modulator
protected

◆ power

W inet::physicallayer::ApskLayeredTransmitter::power
protected

◆ pulseShaper

const IPulseShaper* inet::physicallayer::ApskLayeredTransmitter::pulseShaper
protected

The documentation for this class was generated from the following files:
inet::physicallayer::ApskLayeredTransmitter::PACKET_DOMAIN
@ PACKET_DOMAIN
Definition: ApskLayeredTransmitter.h:27
inet::physicallayer::IPulseShaper::shape
virtual const ITransmissionSampleModel * shape(const ITransmissionSymbolModel *symbolModel) const =0
inet::physicallayer::ApskLayeredTransmitter::LevelOfDetail
LevelOfDetail
Definition: ApskLayeredTransmitter.h:26
inet::units::value::str
std::string str() const
Definition: Units.h:101
inet::physicallayer::ApskLayeredTransmitter::createPacketModel
virtual const ITransmissionPacketModel * createPacketModel(const Packet *packet) const
Definition: ApskLayeredTransmitter.cc:88
inet::physicallayer::ApskLayeredTransmitter::bitrate
bps bitrate
Definition: ApskLayeredTransmitter.h:40
inet::units::units::Hz
pow< s, -1 > Hz
Definition: Units.h:935
inet::IPrintableObject::PRINT_LEVEL_DETAIL
@ PRINT_LEVEL_DETAIL
Definition: IPrintableObject.h:24
inet::physicallayer::ApskLayeredTransmitter::createSymbolModel
virtual const ITransmissionSymbolModel * createSymbolModel(const ITransmissionBitModel *bitModel) const
Definition: ApskLayeredTransmitter.cc:118
inet::units::units::bps
compose< b, pow< s, -1 > > bps
Definition: Units.h:1169
inet::physicallayer::IDigitalAnalogConverter::convertDigitalToAnalog
virtual const ITransmissionAnalogModel * convertDigitalToAnalog(const ITransmissionSampleModel *sampleModel) const =0
inet::units::units::W
compose< J, pow< s, -1 > > W
Definition: Units.h:939
inet::physicallayer::ApskLayeredTransmitter::digitalAnalogConverter
const IDigitalAnalogConverter * digitalAnalogConverter
Definition: ApskLayeredTransmitter.h:38
inet::physicallayer::ApskLayeredTransmitter::createAnalogModel
virtual const ITransmissionAnalogModel * createAnalogModel(const ITransmissionPacketModel *packetModel, const ITransmissionBitModel *bitModel, const ITransmissionSampleModel *sampleModel) const
Definition: ApskLayeredTransmitter.cc:134
inet::physicallayer::ApskLayeredTransmitter::bandwidth
Hz bandwidth
Definition: ApskLayeredTransmitter.h:41
inet::physicallayer::ApskLayeredTransmitter::levelOfDetail
LevelOfDetail levelOfDetail
Definition: ApskLayeredTransmitter.h:34
inet::physicallayer::ApskLayeredTransmitter::power
W power
Definition: ApskLayeredTransmitter.h:39
inet::physicallayer::IModulator::modulate
virtual const ITransmissionSymbolModel * modulate(const ITransmissionBitModel *bitModel) const =0
inet::printFieldToString
std::string printFieldToString(const IPrintableObject *object, int level, int evFlags=0)
Definition: IPrintableObject.h:98
inet::physicallayer::IEncoder::encode
virtual const ITransmissionBitModel * encode(const ITransmissionPacketModel *packetModel) const =0
EV_FIELD
#define EV_FIELD(...)
Definition: INETDefs.h:112
inet::physicallayer::ApskLayeredTransmitter::modulator
const IModulator * modulator
Definition: ApskLayeredTransmitter.h:36
inet::physicallayer::ApskLayeredTransmitter::BIT_DOMAIN
@ BIT_DOMAIN
Definition: ApskLayeredTransmitter.h:28
NaN
#define NaN
Definition: INETMath.h:91
inet::INITSTAGE_LOCAL
INET_API InitStage INITSTAGE_LOCAL
Initialization of local state that don't use or affect other modules includes:
inet::physicallayer::ApskLayeredTransmitter::centerFrequency
Hz centerFrequency
Definition: ApskLayeredTransmitter.h:42
inet::IPrintableObject::PRINT_LEVEL_TRACE
@ PRINT_LEVEL_TRACE
Definition: IPrintableObject.h:22
inet::units::values::b
value< int64_t, units::b > b
Definition: Units.h:1241
inet::evFlags
int evFlags
Definition: INETDefs.cc:12
inet::physicallayer::IModulator::getModulation
virtual const IModulation * getModulation() const =0
inet::physicallayer::ApskLayeredTransmitter::pulseShaper
const IPulseShaper * pulseShaper
Definition: ApskLayeredTransmitter.h:37
inet::units::value::get
const value_type & get() const
Definition: Units.h:108
inet::physicallayer::ApskLayeredTransmitter::createBitModel
virtual const ITransmissionBitModel * createBitModel(const ITransmissionPacketModel *packetModel) const
Definition: ApskLayeredTransmitter.cc:93
inet::physicallayer::ApskLayeredTransmitter::createSampleModel
virtual const ITransmissionSampleModel * createSampleModel(const ITransmissionSymbolModel *symbolModel) const
Definition: ApskLayeredTransmitter.cc:126
inet::units::values::m
value< double, units::m > m
Definition: Units.h:1233
inet::physicallayer::ApskLayeredTransmitter::encoder
const IEncoder * encoder
Definition: ApskLayeredTransmitter.h:35
inet::physicallayer::ApskLayeredTransmitter::SAMPLE_DOMAIN
@ SAMPLE_DOMAIN
Definition: ApskLayeredTransmitter.h:30
inet::physicallayer::ApskLayeredTransmitter::SYMBOL_DOMAIN
@ SYMBOL_DOMAIN
Definition: ApskLayeredTransmitter.h:29