|
INET Framework for OMNeT++/OMNEST
|
#include <Ieee80211LayeredOfdmTransmitter.h>
|
| virtual void | initialize (int stage) override |
| |
| const ITransmissionPacketModel * | createSignalFieldPacketModel (const ITransmissionPacketModel *completePacketModel) const |
| |
| const ITransmissionPacketModel * | createDataFieldPacketModel (const ITransmissionPacketModel *completePacketModel) const |
| |
| virtual const ITransmissionPacketModel * | createPacketModel (const Packet *packet) const |
| |
| const ITransmissionSymbolModel * | createSymbolModel (const ITransmissionSymbolModel *signalFieldSymbolModel, const ITransmissionSymbolModel *dataFieldSymbolModel) const |
| |
| const ITransmissionBitModel * | createBitModel (const ITransmissionBitModel *signalFieldBitModel, const ITransmissionBitModel *dataFieldBitModel, const ITransmissionPacketModel *packetModel) const |
| |
| void | encodeAndModulate (const ITransmissionPacketModel *packetModel, const ITransmissionBitModel *&fieldBitModel, const ITransmissionSymbolModel *&fieldSymbolModel, const IEncoder *encoder, const IModulator *modulator, bool isSignalField) const |
| |
| const ITransmissionSampleModel * | createSampleModel (const ITransmissionSymbolModel *symbolModel) const |
| |
| const ITransmissionAnalogModel * | createAnalogModel (const ITransmissionPacketModel *packetModel, const ITransmissionBitModel *bitModel, const ITransmissionSymbolModel *symbolModel, const ITransmissionSampleModel *sampleModel) const |
| |
| const ITransmissionAnalogModel * | createScalarAnalogModel (const ITransmissionPacketModel *packetModel, const ITransmissionBitModel *bitModel) const |
| |
| const Ieee80211OfdmMode * | computeMode (Hz bandwidth) const |
| |
| virtual int | numInitStages () const override |
| |
◆ LevelOfDetail
| Enumerator |
|---|
| PACKET_DOMAIN | |
| BIT_DOMAIN | |
| SYMBOL_DOMAIN | |
| SAMPLE_DOMAIN | |
◆ ~Ieee80211LayeredOfdmTransmitter()
| inet::physicallayer::Ieee80211LayeredOfdmTransmitter::~Ieee80211LayeredOfdmTransmitter |
( |
| ) |
|
|
virtual |
◆ computeMode()
| const Ieee80211OfdmMode * inet::physicallayer::Ieee80211LayeredOfdmTransmitter::computeMode |
( |
Hz |
bandwidth | ) |
const |
|
protected |
267 const Ieee80211OfdmEncoderModule *ofdmSignalEncoderModule = check_and_cast<const Ieee80211OfdmEncoderModule *>(
signalEncoder);
268 const Ieee80211OfdmEncoderModule *ofdmDataEncoderModule = check_and_cast<const Ieee80211OfdmEncoderModule *>(
dataEncoder);
269 const Ieee80211OfdmModulatorModule *ofdmSignalModulatorModule = check_and_cast<const Ieee80211OfdmModulatorModule *>(
signalModulator);
270 const Ieee80211OfdmModulatorModule *ofdmDataModulatorModule = check_and_cast<const Ieee80211OfdmModulatorModule *>(
dataModulator);
271 const Ieee80211OfdmSignalMode *signalMode =
new Ieee80211OfdmSignalMode(ofdmSignalEncoderModule->getCode(), ofdmSignalModulatorModule->getModulation(),
channelSpacing,
bandwidth, 0);
272 const Ieee80211OfdmDataMode *dataMode =
new Ieee80211OfdmDataMode(ofdmDataEncoderModule->getCode(), ofdmDataModulatorModule->getModulation(),
channelSpacing,
bandwidth);
Referenced by initialize().
◆ createAnalogModel()
253 const ITransmissionAnalogModel *analogModel =
nullptr;
258 throw cRuntimeError(
"Digital/analog converter needs sample representation");
Referenced by createTransmission().
◆ createBitModel()
217 BitVector *encodedBits =
new BitVector(*signalFieldBitModel->getBits());
218 unsigned int signalBitLength = signalFieldBitModel->getBits()->getSize();
219 const BitVector *dataFieldBits = dataFieldBitModel->getBits();
220 unsigned int dataBitLength = dataFieldBits->getSize();
221 for (
unsigned int i = 0; i < dataFieldBits->getSize(); i++)
222 encodedBits->appendBit(dataFieldBits->getBit(i));
223 const TransmissionBitModel *transmissionBitModel =
new TransmissionBitModel(
b(signalBitLength),
mode->
getSignalMode()->
getGrossBitrate(),
b(dataBitLength),
mode->
getDataMode()->
getGrossBitrate(), encodedBits, dataFieldBitModel->getForwardErrorCorrection(), dataFieldBitModel->getScrambling(), dataFieldBitModel->getInterleaving());
224 delete signalFieldBitModel;
225 delete dataFieldBitModel;
226 return transmissionBitModel;
Referenced by createTransmission().
◆ createDataFieldPacketModel()
149 auto packet = completePacketModel->getPacket();
151 return new TransmissionPacketModel(
new Packet(
nullptr, dataChunk),
bps(
NaN));
Referenced by encodeAndModulate().
◆ createPacketModel()
◆ createSampleModel()
235 throw cRuntimeError(
"This level of detail is unimplemented.");
Referenced by createTransmission().
◆ createScalarAnalogModel()
101 int headerBitLength = -1;
102 int dataBitLength = -1;
104 headerBitLength =
b(bitModel->getHeaderLength()).get();
105 dataBitLength =
b(bitModel->getDataLength()).get();
111 dataBitLength = convolutionalCode->getEncodedLength((packetModel->getPacket()->getByteLength() * 8 -
DECODED_SIGNAL_FIELD_LENGTH));
114 throw cRuntimeError(
"Unimplemented");
118 simtime_t headerDuration = 0;
121 ASSERT(headerBitLength % headerCodeWordSize == 0);
122 unsigned int numberOfSignalApskSymbols = headerBitLength / headerCodeWordSize;
129 ASSERT(dataBitLength % dataCodeWordSize == 0);
130 unsigned int numberOfDataApskSymbols = dataBitLength / dataCodeWordSize;
133 simtime_t duration = preambleDuration + headerDuration + dataDuration;
Referenced by createAnalogModel().
◆ createSignalFieldPacketModel()
142 auto packet = completePacketModel->getPacket();
144 return new TransmissionPacketModel(
new Packet(
nullptr, signalChunk),
bps(
NaN));
Referenced by encodeAndModulate().
◆ createSymbolModel()
194 const std::vector<const ISymbol *> *signalSymbols = signalFieldSymbolModel->getSymbols();
195 std::vector<const ISymbol *> *mergedSymbols =
new std::vector<const ISymbol *>();
196 const Ieee80211OfdmSymbol *ofdmSymbol =
nullptr;
197 for (
auto& signalSymbol : *signalSymbols) {
198 ofdmSymbol = check_and_cast<const Ieee80211OfdmSymbol *>(signalSymbol);
199 mergedSymbols->push_back(
new Ieee80211OfdmSymbol(*ofdmSymbol));
201 const std::vector<const ISymbol *> *dataSymbols = dataFieldSymbolModel->getSymbols();
202 for (
auto& dataSymbol : *dataSymbols) {
203 ofdmSymbol =
dynamic_cast<const Ieee80211OfdmSymbol *
>(dataSymbol);
204 mergedSymbols->push_back(
new Ieee80211OfdmSymbol(*ofdmSymbol));
206 const Ieee80211OfdmTransmissionSymbolModel *transmissionSymbolModel =
new Ieee80211OfdmTransmissionSymbolModel(1, 1.0 /
mode->
getSignalMode()->
getDuration(), mergedSymbols->size() - 1, 1.0 /
mode->
getSymbolInterval(), mergedSymbols, signalFieldSymbolModel->getHeaderModulation(), dataFieldSymbolModel->getPayloadModulation());
207 delete signalFieldSymbolModel;
208 delete dataFieldSymbolModel;
209 return transmissionSymbolModel;
Referenced by createTransmission().
◆ createTransmission()
| const ITransmission * inet::physicallayer::Ieee80211LayeredOfdmTransmitter::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.
288 const ITransmissionBitModel *bitModel =
nullptr;
289 const ITransmissionBitModel *signalFieldBitModel =
nullptr;
290 const ITransmissionBitModel *dataFieldBitModel =
nullptr;
291 const ITransmissionSymbolModel *symbolModel =
nullptr;
292 const ITransmissionSymbolModel *signalFieldSymbolModel =
nullptr;
293 const ITransmissionSymbolModel *dataFieldSymbolModel =
nullptr;
294 const ITransmissionSampleModel *sampleModel =
nullptr;
295 const ITransmissionAnalogModel *analogModel =
nullptr;
299 bitModel =
createBitModel(signalFieldBitModel, dataFieldBitModel, packetModel);
302 analogModel =
createAnalogModel(packetModel, bitModel, symbolModel, sampleModel);
303 IMobility *mobility = transmitter->getAntenna()->getMobility();
305 const simtime_t endTime = startTime + analogModel->getDuration();
306 const Coord& startPosition = mobility->getCurrentPosition();
307 const Coord& endPosition = mobility->getCurrentPosition();
308 const Quaternion& startOrientation = mobility->getCurrentAngularPosition();
309 const Quaternion& endOrientation = mobility->getCurrentAngularPosition();
311 return new Ieee80211LayeredTransmission(packetModel, bitModel, symbolModel, sampleModel, analogModel, transmitter, packet, startTime, endTime, -1, -1, -1, startPosition, endPosition, startOrientation, endOrientation,
mode,
nullptr);
◆ encodeAndModulate()
156 const ITransmissionPacketModel *fieldPacketModel =
nullptr;
162 if (fieldPacketModel) {
164 fieldBitModel = encoder->encode(fieldPacketModel);
167 const Ieee80211OfdmEncoder encoder(code);
168 fieldBitModel = encoder.encode(fieldPacketModel);
172 throw cRuntimeError(
"Encoder needs packet representation");
177 fieldSymbolModel = modulator->modulate(fieldBitModel);
180 Ieee80211OfdmModulator modulator(ofdmModulation, isSignalField ? 0 : 1);
181 fieldSymbolModel = modulator.modulate(fieldBitModel);
185 throw cRuntimeError(
"Modulator needs bit representation");
187 delete fieldPacketModel->getPacket();
188 delete fieldPacketModel;
Referenced by createTransmission().
◆ getBandwidth()
| const Hz inet::physicallayer::Ieee80211LayeredOfdmTransmitter::getBandwidth |
( |
| ) |
const |
|
inline |
◆ getCarrierSpacing()
| const Hz inet::physicallayer::Ieee80211LayeredOfdmTransmitter::getCarrierSpacing |
( |
| ) |
const |
|
inline |
◆ getCenterFrequency()
| const Hz inet::physicallayer::Ieee80211LayeredOfdmTransmitter::getCenterFrequency |
( |
| ) |
const |
|
inline |
◆ getDigitalAnalogConverter()
| virtual const IDigitalAnalogConverter* inet::physicallayer::Ieee80211LayeredOfdmTransmitter::getDigitalAnalogConverter |
( |
| ) |
const |
|
inlinevirtual |
◆ getEncoder()
| virtual const IEncoder* inet::physicallayer::Ieee80211LayeredOfdmTransmitter::getEncoder |
( |
| ) |
const |
|
inlinevirtual |
◆ getMaxCommunicationRange()
| virtual m inet::physicallayer::Ieee80211LayeredOfdmTransmitter::getMaxCommunicationRange |
( |
| ) |
const |
|
inlineoverridevirtual |
◆ getMaxInterferenceRange()
| virtual m inet::physicallayer::Ieee80211LayeredOfdmTransmitter::getMaxInterferenceRange |
( |
| ) |
const |
|
inlineoverridevirtual |
◆ getMaxPower()
| virtual W inet::physicallayer::Ieee80211LayeredOfdmTransmitter::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.
◆ getMode()
| const Ieee80211OfdmMode * inet::physicallayer::Ieee80211LayeredOfdmTransmitter::getMode |
( |
const Packet * |
packet | ) |
const |
|
virtual |
278 const auto& modeReq =
const_cast<Packet *
>(packet)->findTag<Ieee80211ModeReq>();
280 return modeReq !=
nullptr ? check_and_cast<const Ieee80211OfdmMode *>(modeReq->getMode()) : &Ieee80211OfdmCompliantModes::getCompliantMode(11,
MHz(20));
Referenced by createTransmission().
◆ getModulator()
| virtual const IModulator* inet::physicallayer::Ieee80211LayeredOfdmTransmitter::getModulator |
( |
| ) |
const |
|
inlinevirtual |
◆ getPulseShaper()
| virtual const IPulseShaper* inet::physicallayer::Ieee80211LayeredOfdmTransmitter::getPulseShaper |
( |
| ) |
const |
|
inlinevirtual |
◆ initialize()
| void inet::physicallayer::Ieee80211LayeredOfdmTransmitter::initialize |
( |
int |
stage | ) |
|
|
overrideprotectedvirtual |
41 dataEncoder =
dynamic_cast<const IEncoder *
>(getSubmodule(
"dataEncoder"));
42 signalEncoder =
dynamic_cast<const IEncoder *
>(getSubmodule(
"signalEncoder"));
43 dataModulator =
dynamic_cast<const IModulator *
>(getSubmodule(
"dataModulator"));
44 signalModulator =
dynamic_cast<const IModulator *
>(getSubmodule(
"signalModulator"));
45 pulseShaper =
dynamic_cast<const IPulseShaper *
>(getSubmodule(
"pulseShaper"));
46 digitalAnalogConverter =
dynamic_cast<const IDigitalAnalogConverter *
>(getSubmodule(
"digitalAnalogConverter"));
54 throw cRuntimeError(
"In compliant mode it is forbidden to set the following parameters: dataEncoder, signalEncoder, modulator, signalModulator, pulseShaper, digitalAnalogConverter, bandwidth, channelSpacing");
56 const char *levelOfDetailStr = par(
"levelOfDetail");
57 if (strcmp(
"bit", levelOfDetailStr) == 0)
59 else if (strcmp(
"symbol", levelOfDetailStr) == 0)
61 else if (strcmp(
"sample", levelOfDetailStr) == 0)
63 else if (strcmp(
"packet", levelOfDetailStr) == 0)
66 throw cRuntimeError(
"Unknown level of detail='%s'", levelOfDetailStr);
◆ printToStream()
| std::ostream & inet::physicallayer::Ieee80211LayeredOfdmTransmitter::printToStream |
( |
std::ostream & |
stream, |
|
|
int |
level, |
|
|
int |
evFlags = 0 |
|
) |
| const |
|
overridevirtual |
Prints this object to the provided output stream.
Reimplemented from inet::IPrintableObject.
76 stream <<
"Ieee80211LayeredOfdmTransmitter";
◆ bandwidth
| Hz inet::physicallayer::Ieee80211LayeredOfdmTransmitter::bandwidth |
|
protected |
◆ centerFrequency
| Hz inet::physicallayer::Ieee80211LayeredOfdmTransmitter::centerFrequency |
|
protected |
◆ channelSpacing
| Hz inet::physicallayer::Ieee80211LayeredOfdmTransmitter::channelSpacing |
|
protected |
◆ dataEncoder
| const IEncoder* inet::physicallayer::Ieee80211LayeredOfdmTransmitter::dataEncoder = nullptr |
|
protected |
◆ dataModulator
| const IModulator* inet::physicallayer::Ieee80211LayeredOfdmTransmitter::dataModulator = nullptr |
|
protected |
◆ digitalAnalogConverter
| const IDigitalAnalogConverter* inet::physicallayer::Ieee80211LayeredOfdmTransmitter::digitalAnalogConverter = nullptr |
|
protected |
◆ isCompliant
| bool inet::physicallayer::Ieee80211LayeredOfdmTransmitter::isCompliant |
|
protected |
◆ levelOfDetail
| LevelOfDetail inet::physicallayer::Ieee80211LayeredOfdmTransmitter::levelOfDetail |
|
protected |
◆ mode
| const Ieee80211OfdmMode* inet::physicallayer::Ieee80211LayeredOfdmTransmitter::mode = nullptr |
|
mutableprotected |
◆ power
| W inet::physicallayer::Ieee80211LayeredOfdmTransmitter::power |
|
protected |
◆ pulseShaper
| const IPulseShaper* inet::physicallayer::Ieee80211LayeredOfdmTransmitter::pulseShaper = nullptr |
|
protected |
◆ signalEncoder
| const IEncoder* inet::physicallayer::Ieee80211LayeredOfdmTransmitter::signalEncoder = nullptr |
|
protected |
◆ signalModulator
| const IModulator* inet::physicallayer::Ieee80211LayeredOfdmTransmitter::signalModulator = nullptr |
|
protected |
The documentation for this class was generated from the following files:
W power
Definition: Ieee80211LayeredOfdmTransmitter.h:50
INET_API InitStage INITSTAGE_LAST
Operations that no other initializations can depend on, e.g.
@ SYMBOL_DOMAIN
Definition: Ieee80211LayeredOfdmTransmitter.h:32
const ITransmissionBitModel * createBitModel(const ITransmissionBitModel *signalFieldBitModel, const ITransmissionBitModel *dataFieldBitModel, const ITransmissionPacketModel *packetModel) const
Definition: Ieee80211LayeredOfdmTransmitter.cc:214
pow< s, -1 > Hz
Definition: Units.h:935
virtual unsigned int getCodeWordSize() const override
Definition: ApskModulationBase.h:37
virtual bps getGrossBitrate() const override
Definition: Ieee80211OfdmMode.h:125
virtual const simtime_t getDuration() const override
Definition: Ieee80211OfdmMode.h:96
compose< b, pow< s, -1 > > bps
Definition: Units.h:1169
void encodeAndModulate(const ITransmissionPacketModel *packetModel, const ITransmissionBitModel *&fieldBitModel, const ITransmissionSymbolModel *&fieldSymbolModel, const IEncoder *encoder, const IModulator *modulator, bool isSignalField) const
Definition: Ieee80211LayeredOfdmTransmitter.cc:154
@ BIT_DOMAIN
Definition: Ieee80211LayeredOfdmTransmitter.h:31
virtual const ITransmissionAnalogModel * convertDigitalToAnalog(const ITransmissionSampleModel *sampleModel) const =0
compose< J, pow< s, -1 > > W
Definition: Units.h:939
virtual bps getNetBitrate() const override
Definition: Ieee80211OfdmMode.h:126
#define NUMBER_OF_OFDM_DATA_SUBCARRIERS
Definition: Ieee80211OfdmDefs.h:15
const IModulator * signalModulator
Definition: Ieee80211LayeredOfdmTransmitter.h:41
virtual const simtime_t getDuration() const override
Definition: Ieee80211OfdmMode.h:71
Hz bandwidth
Definition: Ieee80211LayeredOfdmTransmitter.h:47
#define DECODED_SIGNAL_FIELD_LENGTH
Definition: Ieee80211OfdmDefs.h:16
const Ieee80211OfdmCode * getCode() const
Definition: Ieee80211OfdmMode.h:123
@ SAMPLE_DOMAIN
Definition: Ieee80211LayeredOfdmTransmitter.h:33
const ITransmissionAnalogModel * createAnalogModel(const ITransmissionPacketModel *packetModel, const ITransmissionBitModel *bitModel, const ITransmissionSymbolModel *symbolModel, const ITransmissionSampleModel *sampleModel) const
Definition: Ieee80211LayeredOfdmTransmitter.cc:251
const Ieee80211OfdmModulation * getModulation() const override
Definition: Ieee80211OfdmMode.h:99
const ITransmissionAnalogModel * createScalarAnalogModel(const ITransmissionPacketModel *packetModel, const ITransmissionBitModel *bitModel) const
Definition: Ieee80211LayeredOfdmTransmitter.cc:99
Hz centerFrequency
Definition: Ieee80211LayeredOfdmTransmitter.h:49
std::string printFieldToString(const IPrintableObject *object, int level, int evFlags=0)
Definition: IPrintableObject.h:98
bool isCompliant
Definition: Ieee80211LayeredOfdmTransmitter.h:45
#define ENCODED_SIGNAL_FIELD_LENGTH
Definition: Ieee80211OfdmDefs.h:17
const ITransmissionPacketModel * createSignalFieldPacketModel(const ITransmissionPacketModel *completePacketModel) const
Definition: Ieee80211LayeredOfdmTransmitter.cc:138
const Ieee80211OfdmMode * computeMode(Hz bandwidth) const
Definition: Ieee80211LayeredOfdmTransmitter.cc:265
#define EV_FIELD(...)
Definition: INETDefs.h:112
virtual bps getGrossBitrate() const override
Definition: Ieee80211OfdmMode.h:101
virtual const Ieee80211OfdmPreambleMode * getPreambleMode() const override
Definition: Ieee80211OfdmMode.h:146
virtual const Ieee80211OfdmSignalMode * getSignalMode() const
Definition: Ieee80211OfdmMode.h:149
const IEncoder * dataEncoder
Definition: Ieee80211LayeredOfdmTransmitter.h:40
LevelOfDetail levelOfDetail
Definition: Ieee80211LayeredOfdmTransmitter.h:37
#define NaN
Definition: INETMath.h:91
INET_API InitStage INITSTAGE_LOCAL
Initialization of local state that don't use or affect other modules includes:
const Ieee80211OfdmCode * getCode() const
Definition: Ieee80211OfdmMode.h:98
const ApskModulationBase * getSubcarrierModulation() const
Definition: Ieee80211OfdmModulation.h:24
const Ieee80211OfdmMode * mode
Definition: Ieee80211LayeredOfdmTransmitter.h:38
@ PRINT_LEVEL_TRACE
Definition: IPrintableObject.h:22
value< int64_t, units::b > b
Definition: Units.h:1241
virtual const ITransmissionPacketModel * createPacketModel(const Packet *packet) const
Definition: Ieee80211LayeredOfdmTransmitter.cc:94
int evFlags
Definition: INETDefs.cc:12
const IPulseShaper * pulseShaper
Definition: Ieee80211LayeredOfdmTransmitter.h:43
const IModulator * dataModulator
Definition: Ieee80211LayeredOfdmTransmitter.h:42
const IEncoder * signalEncoder
Definition: Ieee80211LayeredOfdmTransmitter.h:39
const IDigitalAnalogConverter * digitalAnalogConverter
Definition: Ieee80211LayeredOfdmTransmitter.h:44
const value_type & get() const
Definition: Units.h:108
@ PACKET_DOMAIN
Definition: Ieee80211LayeredOfdmTransmitter.h:30
Hz channelSpacing
Definition: Ieee80211LayeredOfdmTransmitter.h:48
virtual const Ieee80211OfdmDataMode * getDataMode() const override
Definition: Ieee80211OfdmMode.h:148
const ITransmissionPacketModel * createDataFieldPacketModel(const ITransmissionPacketModel *completePacketModel) const
Definition: Ieee80211LayeredOfdmTransmitter.cc:147
mega< Hz >::type MHz
Definition: Units.h:1083
virtual const Ieee80211OfdmMode * getMode(const Packet *packet) const
Definition: Ieee80211LayeredOfdmTransmitter.cc:276
value< double, units::m > m
Definition: Units.h:1233
const Ieee80211OfdmModulation * getModulation() const override
Definition: Ieee80211OfdmMode.h:124
const ITransmissionSymbolModel * createSymbolModel(const ITransmissionSymbolModel *signalFieldSymbolModel, const ITransmissionSymbolModel *dataFieldSymbolModel) const
Definition: Ieee80211LayeredOfdmTransmitter.cc:191
virtual Hz getBandwidth() const override
Definition: Ieee80211OfdmMode.h:118
const ITransmissionSampleModel * createSampleModel(const ITransmissionSymbolModel *symbolModel) const
Definition: Ieee80211LayeredOfdmTransmitter.cc:232
const ConvolutionalCode * getConvolutionalCode() const
Definition: Ieee80211OfdmCode.h:31