|
INET Framework for OMNeT++/OMNEST
|
#include <Ieee80211LayeredOfdmReceiver.h>
|
| virtual | ~Ieee80211LayeredOfdmReceiver () |
| |
| virtual const Ieee80211OfdmMode * | getMode (const Packet *packet) const |
| |
| virtual bool | computeIsReceptionPossible (const IListening *listening, const IReception *reception, IRadioSignal::SignalPart part) const override |
| | Returns whether the reception of the provided part is possible or not. More...
|
| |
| virtual const IListeningDecision * | computeListeningDecision (const IListening *listening, const IInterference *interference) const override |
| | Returns the result of the listening process specifying the reception state of the receiver. More...
|
| |
| virtual const IListening * | createListening (const IRadio *radio, const simtime_t startTime, const simtime_t endTime, const Coord &startPosition, const Coord &endPosition) const override |
| | Returns a description of how the receiver is listening on the medium. More...
|
| |
| virtual const IReceptionResult * | computeReceptionResult (const IListening *listening, const IReception *reception, const IInterference *interference, const ISnir *snir, const std::vector< const IReceptionDecision * > *decisions) const override |
| | Returns the complete result of the reception process for the provided reception. More...
|
| |
| virtual std::ostream & | printToStream (std::ostream &stream, int level, int evFlags=0) const override |
| | Prints this object to the provided output stream. More...
|
| |
| virtual double | getSNIRThreshold () const |
| |
| virtual bool | computeIsReceptionSuccessful (const IListening *listening, const IReception *reception, IRadioSignal::SignalPart part, const IInterference *interference, const ISnir *snir) const override |
| | Returns whether the reception of the provided part is actually successful or failed by the receiver. More...
|
| |
| | ReceiverBase () |
| |
| virtual W | getMinInterferencePower () const override |
| | Returns the minimum interference power below which receptions are to be ignored while computing the interference. More...
|
| |
| virtual W | getMinReceptionPower () const override |
| | Returns the minimum reception power below which successful reception is definitely not possible. More...
|
| |
| virtual bool | computeIsReceptionPossible (const IListening *listening, const ITransmission *transmission) const override |
| | Returns whether the reception of the provided transmission is possible or not independently of the reception conditions. More...
|
| |
| virtual bool | computeIsReceptionAttempted (const IListening *listening, const IReception *reception, IRadioSignal::SignalPart part, const IInterference *interference) const override |
| | Returns whether the reception of the provided part is actually attempted or ignored by the receiver. More...
|
| |
| virtual const IReceptionDecision * | computeReceptionDecision (const IListening *listening, const IReception *reception, IRadioSignal::SignalPart part, const IInterference *interference, const ISnir *snir) const override |
| | Returns the reception decision for the transmission part that specifies whether the reception is possible, attempted, and successful. More...
|
| |
| 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 |
| |
|
| virtual void | initialize (int stage) override |
| |
| const IReceptionAnalogModel * | createAnalogModel (const LayeredTransmission *transmission, const ISnir *snir) const |
| |
| const IReceptionSampleModel * | createSampleModel (const LayeredTransmission *transmission, const ISnir *snir) const |
| |
| const IReceptionSymbolModel * | createSignalFieldSymbolModel (const IReceptionSymbolModel *symbolModel) const |
| |
| const IReceptionSymbolModel * | createDataFieldSymbolModel (const IReceptionSymbolModel *symbolModel) const |
| |
| const IReceptionSymbolModel * | createSymbolModel (const LayeredTransmission *transmission, const ISnir *snir) const |
| |
| const IReceptionSymbolModel * | createCompleteSymbolModel (const IReceptionSymbolModel *signalFieldSymbolModel, const IReceptionSymbolModel *dataFieldSymbolModel) const |
| |
| const IReceptionBitModel * | createSignalFieldBitModel (const IReceptionBitModel *bitModel, const IReceptionSymbolModel *symbolModel) const |
| |
| const IReceptionBitModel * | createDataFieldBitModel (const IReceptionBitModel *bitModel, const IReceptionSymbolModel *symbolModel, const IReceptionPacketModel *signalFieldPacketModel, const IReceptionBitModel *signalFieldBitModel) const |
| |
| const IReceptionBitModel * | createBitModel (const LayeredTransmission *transmission, const ISnir *snir) const |
| |
| const IReceptionBitModel * | createCompleteBitModel (const IReceptionBitModel *signalFieldBitModel, const IReceptionBitModel *dataFieldBitModel) const |
| |
| const IReceptionPacketModel * | createSignalFieldPacketModel (const IReceptionBitModel *signalFieldBitModel) const |
| |
| const IReceptionPacketModel * | createDataFieldPacketModel (const IReceptionBitModel *signalFieldBitModel, const IReceptionBitModel *dataFieldBitModel, const IReceptionPacketModel *signalFieldPacketModel) const |
| |
| const IReceptionPacketModel * | createPacketModel (const LayeredTransmission *transmission, const ISnir *snir) const |
| |
| const IReceptionPacketModel * | createCompletePacketModel (const char *name, const IReceptionPacketModel *signalFieldPacketModel, const IReceptionPacketModel *dataFieldPacketModel) const |
| |
| const Ieee80211OfdmMode * | computeMode (Hz bandwidth) const |
| |
| unsigned int | getSignalFieldLength (const BitVector *signalField) const |
| |
| unsigned int | calculatePadding (unsigned int dataFieldLengthInBits, const ApskModulationBase *modulation, double codeRate) const |
| |
| double | getCodeRateFromDecoderModule (const IDecoder *decoder) const |
| |
| virtual int | numInitStages () const override |
| |
| virtual W | computeSignalPower (const IListening *listening, const ISnir *snir, const IInterference *interference) const |
| |
| virtual Packet * | computeReceivedPacket (const ISnir *snir, bool isReceptionSuccessful) const |
| |
◆ LevelOfDetail
| Enumerator |
|---|
| PACKET_DOMAIN | |
| BIT_DOMAIN | |
| SYMBOL_DOMAIN | |
| SAMPLE_DOMAIN | |
◆ ~Ieee80211LayeredOfdmReceiver()
| inet::physicallayer::Ieee80211LayeredOfdmReceiver::~Ieee80211LayeredOfdmReceiver |
( |
| ) |
|
|
virtual |
◆ calculatePadding()
| unsigned int inet::physicallayer::Ieee80211LayeredOfdmReceiver::calculatePadding |
( |
unsigned int |
dataFieldLengthInBits, |
|
|
const ApskModulationBase * |
modulation, |
|
|
double |
codeRate |
|
) |
| const |
|
protected |
195 ASSERT(modulation !=
nullptr);
197 unsigned int dataBitsPerOFDMSymbol = codedBitsPerOFDMSymbol * codeRate;
198 return dataBitsPerOFDMSymbol - dataFieldLengthInBits % dataBitsPerOFDMSymbol;
Referenced by createDataFieldBitModel().
◆ computeIsReceptionPossible()
Returns whether the reception of the provided part is possible or not.
For example, it might check if the reception power is above sensitivity.
This function may be called before the reception actually starts at the receiver, thus it must be purely functional and support optimistic parallel computation.
Reimplemented from inet::physicallayer::ReceiverBase.
453 const BandListening *bandListening = check_and_cast<const BandListening *>(listening);
454 const LayeredReception *scalarReception = check_and_cast<const LayeredReception *>(reception);
456 const ScalarReceptionSignalAnalogModel *analogModel = check_and_cast<const ScalarReceptionSignalAnalogModel *>(scalarReception->getAnalogModel());
457 if (bandListening->getCenterFrequency() != analogModel->getCenterFrequency() || bandListening->getBandwidth() != analogModel->getBandwidth()) {
458 EV_DEBUG <<
"Computing reception possible: listening and reception bands are different -> reception is impossible" << endl;
462 const INarrowbandSignal *narrowbandSignalAnalogModel = check_and_cast<const INarrowbandSignal *>(reception->getAnalogModel());
463 W minReceptionPower = narrowbandSignalAnalogModel->computeMinPower(reception->getStartTime(), reception->getEndTime());
464 bool isReceptionPossible = minReceptionPower >=
sensitivity;
465 EV_DEBUG <<
"Computing reception possible" <<
EV_FIELD(minReceptionPower) <<
EV_FIELD(
sensitivity) <<
" -> reception is " << (isReceptionPossible ?
"possible" :
"impossible") << endl;
466 return isReceptionPossible;
◆ computeListeningDecision()
Returns the result of the listening process specifying the reception state of the receiver.
This function must be purely functional and support optimistic parallel computation.
Implements inet::physicallayer::IReceiver.
437 const IRadio *receiver = listening->getReceiver();
438 const IRadioMedium *radioMedium = receiver->getMedium();
439 const IAnalogModel *analogModel = radioMedium->getAnalogModel();
440 const INoise *noise = analogModel->computeNoise(listening, interference);
441 const NarrowbandNoiseBase *flatNoise = check_and_cast<const NarrowbandNoiseBase *>(noise);
442 W maxPower = flatNoise->computeMaxPower(listening->getStartTime(), listening->getEndTime());
445 EV_DEBUG <<
"Computing listening possible: maximum power = " << maxPower <<
", energy detection = " <<
energyDetection <<
" -> listening is " << (isListeningPossible ?
"possible" :
"impossible") << endl;
446 return new ListeningDecision(listening, isListeningPossible);
◆ computeMode()
| const Ieee80211OfdmMode * inet::physicallayer::Ieee80211LayeredOfdmReceiver::computeMode |
( |
Hz |
bandwidth | ) |
const |
|
protected |
349 const Ieee80211OfdmDecoderModule *ofdmSignalDecoderModule = check_and_cast<const Ieee80211OfdmDecoderModule *>(
signalDecoder);
350 const Ieee80211OfdmDecoderModule *ofdmDataDecoderModule = check_and_cast<const Ieee80211OfdmDecoderModule *>(
dataDecoder);
351 const Ieee80211OfdmDemodulatorModule *ofdmSignalDemodulatorModule = check_and_cast<const Ieee80211OfdmDemodulatorModule *>(
signalDemodulator);
352 const Ieee80211OfdmDemodulatorModule *ofdmDataDemodulatorModule = check_and_cast<const Ieee80211OfdmDemodulatorModule *>(
dataDemodulator);
353 const Ieee80211OfdmSignalMode *signalMode =
new Ieee80211OfdmSignalMode(ofdmSignalDecoderModule->getCode(), ofdmSignalDemodulatorModule->getModulation(),
channelSpacing,
bandwidth, 0);
354 const Ieee80211OfdmDataMode *dataMode =
new Ieee80211OfdmDataMode(ofdmDataDecoderModule->getCode(), ofdmDataDemodulatorModule->getModulation(),
channelSpacing,
bandwidth);
Referenced by computeReceptionResult().
◆ computeReceptionResult()
Returns the complete result of the reception process for the provided reception.
This function may be called before the reception actually starts at the receiver, thus it must be purely functional and support optimistic parallel computation.
Reimplemented from inet::physicallayer::ReceiverBase.
360 const Ieee80211LayeredTransmission *transmission =
dynamic_cast<const Ieee80211LayeredTransmission *
>(reception->getTransmission());
362 const IReceptionAnalogModel *analogModel =
createAnalogModel(transmission, snir);
363 const IReceptionSampleModel *sampleModel =
createSampleModel(transmission, snir);
364 const IReceptionSymbolModel *symbolModel =
createSymbolModel(transmission, snir);
365 const IReceptionBitModel *bitModel =
createBitModel(transmission, snir);
366 const IReceptionPacketModel *packetModel =
createPacketModel(transmission, snir);
374 auto packet = signalFieldPacketModel !=
nullptr ? signalFieldPacketModel->getPacket() : packetModel->getPacket();
375 const auto& signalFieldBytesChunk = packet->peekAllAsBytes();
376 uint8_t rate = signalFieldBytesChunk->getByte(0) >> 4;
379 const_cast<Packet *
>(packet)->setBitError(
true);
384 const IReceptionBitModel *dataFieldBitModel =
mode !=
nullptr ?
createDataFieldBitModel(bitModel, dataFieldSymbolModel, signalFieldPacketModel, signalFieldBitModel) : nullptr;
385 const IReceptionPacketModel *dataFieldPacketModel =
mode !=
nullptr ?
createDataFieldPacketModel(signalFieldBitModel, dataFieldBitModel, signalFieldPacketModel) : nullptr;
394 packetModel =
createCompletePacketModel(transmission->getPacket()->getName(), signalFieldPacketModel, dataFieldPacketModel);
396 delete signalFieldSymbolModel;
397 delete dataFieldSymbolModel;
398 delete signalFieldBitModel;
399 delete dataFieldBitModel;
400 if (signalFieldPacketModel !=
nullptr) {
401 delete signalFieldPacketModel->getPacket();
402 delete signalFieldPacketModel;
404 if (dataFieldPacketModel !=
nullptr) {
405 delete dataFieldPacketModel->getPacket();
406 delete dataFieldPacketModel;
409 auto packet =
const_cast<Packet *
>(packetModel->getPacket());
410 auto snirInd = packet->addTagIfAbsent<SnirInd>();
411 snirInd->setMinimumSnir(snir->getMin());
412 snirInd->setMaximumSnir(snir->getMax());
413 snirInd->setAverageSnir(snir->getMean());
414 auto errorRateInd = packet->addTagIfAbsent<ErrorRateInd>();
415 if (symbolModel !=
nullptr)
416 errorRateInd->setSymbolErrorRate(symbolModel->getSymbolErrorRate());
417 if (bitModel !=
nullptr)
418 errorRateInd->setBitErrorRate(bitModel->getBitErrorRate());
419 if (packetModel !=
nullptr)
420 errorRateInd->setPacketErrorRate(packetModel->getPacketErrorRate());
421 auto modeInd = packet->addTagIfAbsent<Ieee80211ModeInd>();
422 modeInd->setMode(transmission->getMode());
423 auto channelInd = packet->addTagIfAbsent<Ieee80211ChannelInd>();
424 channelInd->setChannel(transmission->getChannel());
425 return new LayeredReceptionResult(reception, decisions, packetModel, bitModel, symbolModel, sampleModel, analogModel);
◆ createAnalogModel()
◆ createBitModel()
◆ createCompleteBitModel()
150 if (dataFieldBitModel ==
nullptr)
151 return new ReceptionBitModel(signalFieldBitModel->getHeaderLength(), signalFieldBitModel->getHeaderBitRate(),
b(-1),
bps(
NaN),
new BitVector(*signalFieldBitModel->getBits()),
NaN);
153 BitVector *bits =
new BitVector(*signalFieldBitModel->getBits());
154 const BitVector *dataBits = dataFieldBitModel->getBits();
155 for (
unsigned int i = 0; i < dataBits->getSize(); i++)
156 bits->appendBit(dataBits->getBit(i));
157 return new ReceptionBitModel(signalFieldBitModel->getHeaderLength(), signalFieldBitModel->getHeaderBitRate(), dataFieldBitModel->getDataLength(), dataFieldBitModel->getDataBitRate(), bits,
NaN);
Referenced by computeReceptionResult().
◆ createCompletePacketModel()
336 if (dataFieldPacketModel ==
nullptr)
337 return new ReceptionPacketModel(signalFieldPacketModel->getPacket()->dup(),
bps(
NaN),
NaN);
339 Packet *packet =
new Packet(name);
340 packet->insertAtBack(signalFieldPacketModel->getPacket()->peekAllAsBits());
341 packet->insertAtBack(dataFieldPacketModel->getPacket()->peekAllAsBits());
342 packet->setBitError(signalFieldPacketModel->getPacket()->hasBitError() | dataFieldPacketModel->getPacket()->hasBitError());
343 return new ReceptionPacketModel(packet,
bps(
NaN),
NaN);
Referenced by computeReceptionResult().
◆ createCompleteSymbolModel()
324 const std::vector<const ISymbol *> *symbols = signalFieldSymbolModel->getSymbols();
325 std::vector<const ISymbol *> *completeSymbols =
new std::vector<const ISymbol *>(*symbols);
326 symbols = dataFieldSymbolModel->getSymbols();
327 for (
auto& symbol : *symbols)
328 completeSymbols->push_back(
new Ieee80211OfdmSymbol(*
static_cast<const Ieee80211OfdmSymbol *
>(symbol)));
329 return new Ieee80211OfdmReceptionSymbolModel(signalFieldSymbolModel->getHeaderSymbolLength(), signalFieldSymbolModel->getHeaderSymbolRate(), dataFieldSymbolModel->getPayloadSymbolLength(), dataFieldSymbolModel->getPayloadSymbolRate(), completeSymbols);
Referenced by computeReceptionResult().
◆ createDataFieldBitModel()
275 const IReceptionBitModel *dataFieldBitModel =
nullptr;
281 const Ieee80211OfdmDemodulator ofdmDemodulator(dataMode->getModulation());
282 dataFieldBitModel = ofdmDemodulator.demodulate(dataFieldSymbolModel);
286 const ConvolutionalCode *convolutionalCode =
nullptr;
287 const ApskModulationBase *modulation =
nullptr;
288 double codeRate =
NaN;
289 const auto& bytesChunk = signalFieldPacketModel->getPacket()->peekAllAsBytes();
290 unsigned int psduLengthInBits =
getSignalFieldLength(
new BitVector(bytesChunk->getBytes())) * 8;
295 const Ieee80211OfdmCode *code = dataMode->getCode();
296 convolutionalCode = code->getConvolutionalCode();
297 codeRate = convolutionalCode->getCodeRatePuncturingN() * 1.0 / convolutionalCode->getCodeRatePuncturingK();
300 const Ieee80211OfdmDecoderModule *decoderModule = check_and_cast<const Ieee80211OfdmDecoderModule *>(
dataDecoder);
301 const Ieee80211OfdmCode *code = decoderModule->getCode();
302 convolutionalCode = code->getConvolutionalCode();
306 dataFieldLengthInBits +=
calculatePadding(dataFieldLengthInBits, modulation, 1.0 / codeRate);
308 unsigned int encodedDataFieldLengthInBits = dataFieldLengthInBits * codeRate;
309 const BitVector *bits = bitModel->getBits();
310 unsigned int encodedSignalFieldLength =
b(signalFieldBitModel->getHeaderLength()).get();
311 if (dataFieldLengthInBits + encodedSignalFieldLength > bits->getSize())
312 throw cRuntimeError(
"The calculated data field length = %d is greater then the actual bitvector length = %d", dataFieldLengthInBits, bits->getSize());
313 BitVector *dataBits =
new BitVector();
314 for (
unsigned int i = 0; i < encodedDataFieldLengthInBits; i++)
315 dataBits->appendBit(bits->getBit(encodedSignalFieldLength + i));
316 dataFieldBitModel =
new ReceptionBitModel(
b(-1),
bps(
NaN),
b(encodedDataFieldLengthInBits), bitModel->getDataBitRate(), dataBits,
NaN);
318 return dataFieldBitModel;
Referenced by computeReceptionResult().
◆ createDataFieldPacketModel()
165 const IReceptionPacketModel *dataFieldPacketModel =
nullptr;
171 const Ieee80211OfdmDecoder decoder(code);
172 dataFieldPacketModel = decoder.decode(dataFieldBitModel);
175 return dataFieldPacketModel;
Referenced by computeReceptionResult().
◆ createDataFieldSymbolModel()
226 const Ieee80211OfdmReceptionSymbolModel *dataFieldSymbolModel =
nullptr;
228 throw cRuntimeError(
"This level of detail is unimplemented!");
230 const std::vector<const ISymbol *> *symbols = receptionSymbolModel->getSymbols();
231 std::vector<const ISymbol *> *dataSymbols =
new std::vector<const ISymbol *>();
232 const Ieee80211OfdmSymbol *ofdmSymbol =
nullptr;
233 for (
unsigned int i = 1; i < symbols->size(); i++) {
234 ofdmSymbol = check_and_cast<const Ieee80211OfdmSymbol *>(symbols->at(i));
235 dataSymbols->push_back(
new Ieee80211OfdmSymbol(*ofdmSymbol));
237 dataFieldSymbolModel =
new Ieee80211OfdmReceptionSymbolModel(-1,
NaN, symbols->size() - 1, receptionSymbolModel->getPayloadSymbolRate(), dataSymbols);
239 return dataFieldSymbolModel;
Referenced by computeReceptionResult().
◆ createListening()
| const IListening * inet::physicallayer::Ieee80211LayeredOfdmReceiver::createListening |
( |
const IRadio * |
radio, |
|
|
const simtime_t |
startTime, |
|
|
const simtime_t |
endTime, |
|
|
const Coord & |
startPosition, |
|
|
const Coord & |
endPosition |
|
) |
| const |
|
overridevirtual |
◆ createPacketModel()
◆ createSampleModel()
◆ createSignalFieldBitModel()
244 const IReceptionBitModel *signalFieldBitModel =
nullptr;
251 const Ieee80211OfdmDemodulator demodulator(signalModulation);
252 signalFieldBitModel = demodulator.demodulate(signalFieldSymbolModel);
253 delete signalModulation;
257 unsigned int signalFieldLength = 0;
264 BitVector *signalFieldBits =
new BitVector();
265 const BitVector *bits = bitModel->getBits();
266 for (
unsigned int i = 0; i < signalFieldLength; i++)
267 signalFieldBits->appendBit(bits->getBit(i));
268 signalFieldBitModel =
new ReceptionBitModel(
b(signalFieldLength), bitModel->getHeaderBitRate(),
b(-1),
bps(
NaN), signalFieldBits,
NaN);
270 return signalFieldBitModel;
Referenced by computeReceptionResult().
◆ createSignalFieldPacketModel()
180 const IReceptionPacketModel *signalFieldPacketModel =
nullptr;
187 signalFieldPacketModel = decoder.decode(signalFieldBitModel);
190 return signalFieldPacketModel;
Referenced by computeReceptionResult().
◆ createSignalFieldSymbolModel()
211 const Ieee80211OfdmReceptionSymbolModel *signalFieldSymbolModel =
nullptr;
213 throw cRuntimeError(
"This level of detail is unimplemented!");
215 const std::vector<const ISymbol *> *symbols = receptionSymbolModel->getSymbols();
216 std::vector<const ISymbol *> *signalSymbols =
new std::vector<const ISymbol *>();
217 const Ieee80211OfdmSymbol *signalSymbol = check_and_cast<const Ieee80211OfdmSymbol *>(symbols->at(0));
218 signalSymbols->push_back(
new Ieee80211OfdmSymbol(*signalSymbol));
219 signalFieldSymbolModel =
new Ieee80211OfdmReceptionSymbolModel(1, receptionSymbolModel->getHeaderSymbolRate(), -1,
NaN, signalSymbols);
221 return signalFieldSymbolModel;
Referenced by computeReceptionResult().
◆ createSymbolModel()
◆ getCodeRateFromDecoderModule()
| double inet::physicallayer::Ieee80211LayeredOfdmReceiver::getCodeRateFromDecoderModule |
( |
const IDecoder * |
decoder | ) |
const |
|
protected |
141 const Ieee80211OfdmDecoderModule *decoderModule = check_and_cast<const Ieee80211OfdmDecoderModule *>(decoder);
142 const Ieee80211OfdmCode *code = decoderModule->getCode();
143 const ConvolutionalCode *convolutionalCode = code->getConvolutionalCode();
144 return convolutionalCode ? 1.0 * convolutionalCode->getCodeRatePuncturingN() / convolutionalCode->getCodeRatePuncturingK() : 1;
Referenced by createDataFieldBitModel(), and createSignalFieldBitModel().
◆ getMode()
| const Ieee80211OfdmMode * inet::physicallayer::Ieee80211LayeredOfdmReceiver::getMode |
( |
const Packet * |
packet | ) |
const |
|
virtual |
76 const auto& modeInd =
const_cast<Packet *
>(packet)->findTag<Ieee80211ModeInd>();
78 return modeInd !=
nullptr ? check_and_cast<const Ieee80211OfdmMode *>(modeInd->getMode()) : &Ieee80211OfdmCompliantModes::getCompliantMode(11,
MHz(20));
◆ getSignalFieldLength()
| unsigned int inet::physicallayer::Ieee80211LayeredOfdmReceiver::getSignalFieldLength |
( |
const BitVector * |
signalField | ) |
const |
|
protected |
203 ShortBitVector length;
205 length.appendBit(signalField->getBit(i));
206 return length.toDecimal();
Referenced by createDataFieldBitModel().
◆ initialize()
| void inet::physicallayer::Ieee80211LayeredOfdmReceiver::initialize |
( |
int |
stage | ) |
|
|
overrideprotectedvirtual |
Reimplemented from inet::physicallayer::SnirReceiverBase.
43 errorModel =
dynamic_cast<ILayeredErrorModel *
>(getSubmodule(
"errorModel"));
44 dataDecoder =
dynamic_cast<IDecoder *
>(getSubmodule(
"dataDecoder"));
45 signalDecoder =
dynamic_cast<IDecoder *
>(getSubmodule(
"signalDecoder"));
46 dataDemodulator =
dynamic_cast<IDemodulator *
>(getSubmodule(
"dataDemodulator"));
47 signalDemodulator =
dynamic_cast<IDemodulator *
>(getSubmodule(
"signalDemodulator"));
48 pulseFilter =
dynamic_cast<IPulseFilter *
>(getSubmodule(
"pulseFilter"));
58 throw cRuntimeError(
"In compliant mode it is forbidden to the following parameters: dataDecoder, signalDecoder, dataDemodulator, signalDemodulator, pulseFilter, analogDigitalConverter.");
60 const char *levelOfDetailStr = par(
"levelOfDetail");
61 if (strcmp(
"bit", levelOfDetailStr) == 0)
63 else if (strcmp(
"symbol", levelOfDetailStr) == 0)
65 else if (strcmp(
"sample", levelOfDetailStr) == 0)
67 else if (strcmp(
"packet", levelOfDetailStr) == 0)
70 throw cRuntimeError(
"Unknown level of detail='%s'", levelOfDetailStr);
◆ printToStream()
| std::ostream & inet::physicallayer::Ieee80211LayeredOfdmReceiver::printToStream |
( |
std::ostream & |
stream, |
|
|
int |
level, |
|
|
int |
evFlags = 0 |
|
) |
| const |
|
overridevirtual |
◆ analogDigitalConverter
◆ bandwidth
| Hz inet::physicallayer::Ieee80211LayeredOfdmReceiver::bandwidth |
|
protected |
◆ centerFrequency
| Hz inet::physicallayer::Ieee80211LayeredOfdmReceiver::centerFrequency |
|
protected |
◆ channelSpacing
| Hz inet::physicallayer::Ieee80211LayeredOfdmReceiver::channelSpacing |
|
protected |
◆ dataDecoder
| const IDecoder* inet::physicallayer::Ieee80211LayeredOfdmReceiver::dataDecoder = nullptr |
|
protected |
◆ dataDemodulator
| const IDemodulator* inet::physicallayer::Ieee80211LayeredOfdmReceiver::dataDemodulator = nullptr |
|
protected |
◆ energyDetection
| W inet::physicallayer::Ieee80211LayeredOfdmReceiver::energyDetection |
|
protected |
◆ errorModel
| const ILayeredErrorModel* inet::physicallayer::Ieee80211LayeredOfdmReceiver::errorModel = nullptr |
|
protected |
◆ isCompliant
| bool inet::physicallayer::Ieee80211LayeredOfdmReceiver::isCompliant |
|
protected |
◆ levelOfDetail
| LevelOfDetail inet::physicallayer::Ieee80211LayeredOfdmReceiver::levelOfDetail |
|
protected |
Referenced by createBitModel(), createCompleteBitModel(), createCompleteSymbolModel(), createDataFieldBitModel(), createDataFieldPacketModel(), createDataFieldSymbolModel(), createPacketModel(), createSampleModel(), createSignalFieldBitModel(), createSignalFieldPacketModel(), createSignalFieldSymbolModel(), createSymbolModel(), initialize(), and printToStream().
◆ mode
| const Ieee80211OfdmMode* inet::physicallayer::Ieee80211LayeredOfdmReceiver::mode = nullptr |
|
mutableprotected |
◆ pulseFilter
| const IPulseFilter* inet::physicallayer::Ieee80211LayeredOfdmReceiver::pulseFilter = nullptr |
|
protected |
◆ sensitivity
| W inet::physicallayer::Ieee80211LayeredOfdmReceiver::sensitivity |
|
protected |
◆ signalDecoder
| const IDecoder* inet::physicallayer::Ieee80211LayeredOfdmReceiver::signalDecoder = nullptr |
|
protected |
◆ signalDemodulator
| const IDemodulator* inet::physicallayer::Ieee80211LayeredOfdmReceiver::signalDemodulator = nullptr |
|
protected |
◆ snirThreshold
| double inet::physicallayer::Ieee80211LayeredOfdmReceiver::snirThreshold |
|
protected |
The documentation for this class was generated from the following files:
@ SAMPLE_DOMAIN
Definition: Ieee80211LayeredOfdmReceiver.h:34
const IReceptionBitModel * createDataFieldBitModel(const IReceptionBitModel *bitModel, const IReceptionSymbolModel *symbolModel, const IReceptionPacketModel *signalFieldPacketModel, const IReceptionBitModel *signalFieldBitModel) const
Definition: Ieee80211LayeredOfdmReceiver.cc:273
virtual const IReceptionSymbolModel * computeSymbolModel(const LayeredTransmission *transmission, const ISnir *snir) const =0
Computes the symbol domain representation at the receiver using a simplified model for the underlying...
double snirThreshold
Definition: Ieee80211LayeredOfdmReceiver.h:53
pow< s, -1 > Hz
Definition: Units.h:935
const IReceptionPacketModel * createSignalFieldPacketModel(const IReceptionBitModel *signalFieldBitModel) const
Definition: Ieee80211LayeredOfdmReceiver.cc:178
#define PPDU_TAIL_BITS_LENGTH
Definition: Ieee80211OfdmDefs.h:24
double dBmW2mW(double dBm)
Converts a dBmW value to mW.
Definition: INETMath.h:163
compose< b, pow< s, -1 > > bps
Definition: Units.h:1169
Hz bandwidth
Definition: Ieee80211LayeredOfdmReceiver.h:51
const IReceptionSymbolModel * createSignalFieldSymbolModel(const IReceptionSymbolModel *symbolModel) const
Definition: Ieee80211LayeredOfdmReceiver.cc:209
const IPulseFilter * pulseFilter
Definition: Ieee80211LayeredOfdmReceiver.h:45
const IAnalogDigitalConverter * analogDigitalConverter
Definition: Ieee80211LayeredOfdmReceiver.h:46
const IReceptionSymbolModel * createCompleteSymbolModel(const IReceptionSymbolModel *signalFieldSymbolModel, const IReceptionSymbolModel *dataFieldSymbolModel) const
Definition: Ieee80211LayeredOfdmReceiver.cc:321
double getCodeRateFromDecoderModule(const IDecoder *decoder) const
Definition: Ieee80211LayeredOfdmReceiver.cc:139
compose< J, pow< s, -1 > > W
Definition: Units.h:939
@ PACKET_DOMAIN
Definition: Ieee80211LayeredOfdmReceiver.h:31
#define SIGNAL_LENGTH_FIELD_END
Definition: Ieee80211OfdmDefs.h:21
#define NUMBER_OF_OFDM_DATA_SUBCARRIERS
Definition: Ieee80211OfdmDefs.h:15
const IReceptionPacketModel * createCompletePacketModel(const char *name, const IReceptionPacketModel *signalFieldPacketModel, const IReceptionPacketModel *dataFieldPacketModel) const
Definition: Ieee80211LayeredOfdmReceiver.cc:334
#define PPDU_SERVICE_FIELD_BITS_LENGTH
Definition: Ieee80211OfdmDefs.h:23
#define DECODED_SIGNAL_FIELD_LENGTH
Definition: Ieee80211OfdmDefs.h:16
const Ieee80211OfdmCode * getCode() const
Definition: Ieee80211OfdmMode.h:123
milli< W >::type mW
Definition: Units.h:1080
LevelOfDetail levelOfDetail
Definition: Ieee80211LayeredOfdmReceiver.h:38
Hz centerFrequency
Definition: Ieee80211LayeredOfdmReceiver.h:50
const Ieee80211OfdmMode * mode
Definition: Ieee80211LayeredOfdmReceiver.h:39
unsigned int getSignalFieldLength(const BitVector *signalField) const
Definition: Ieee80211LayeredOfdmReceiver.cc:201
const IReceptionBitModel * createBitModel(const LayeredTransmission *transmission, const ISnir *snir) const
Definition: Ieee80211LayeredOfdmReceiver.cc:118
std::string printFieldToString(const IPrintableObject *object, int level, int evFlags=0)
Definition: IPrintableObject.h:98
#define ENCODED_SIGNAL_FIELD_LENGTH
Definition: Ieee80211OfdmDefs.h:17
const IReceptionSymbolModel * createSymbolModel(const LayeredTransmission *transmission, const ISnir *snir) const
Definition: Ieee80211LayeredOfdmReceiver.cc:132
const ILayeredErrorModel * errorModel
Definition: Ieee80211LayeredOfdmReceiver.h:40
const IDecoder * signalDecoder
Definition: Ieee80211LayeredOfdmReceiver.h:42
static const Ieee80211OfdmMode * findCompliantMode(unsigned int signalRateField, Hz channelSpacing)
Definition: Ieee80211OfdmMode.cc:201
static const BpskModulation singleton
Definition: BpskModulation.h:25
@ BIT_DOMAIN
Definition: Ieee80211LayeredOfdmReceiver.h:32
#define EV_FIELD(...)
Definition: INETDefs.h:112
const IDemodulator * signalDemodulator
Definition: Ieee80211LayeredOfdmReceiver.h:44
const IReceptionBitModel * createSignalFieldBitModel(const IReceptionBitModel *bitModel, const IReceptionSymbolModel *symbolModel) const
Definition: Ieee80211LayeredOfdmReceiver.cc:242
virtual const IReceptionPacketModel * decode(const IReceptionBitModel *bitModel) const =0
virtual void initialize(int stage) override
Definition: SnirReceiverBase.cc:17
virtual const Ieee80211OfdmPreambleMode * getPreambleMode() const override
Definition: Ieee80211OfdmMode.h:146
virtual const IReceptionSampleModel * computeSampleModel(const LayeredTransmission *transmission, const ISnir *snir) const =0
Computes the sample domain representation at the receiver using a simplified model for the underlying...
virtual const Ieee80211OfdmSignalMode * getSignalMode() const
Definition: Ieee80211OfdmMode.h:149
Hz channelSpacing
Definition: Ieee80211LayeredOfdmReceiver.h:52
@ SYMBOL_DOMAIN
Definition: Ieee80211LayeredOfdmReceiver.h:33
#define NaN
Definition: INETMath.h:91
INET_API InitStage INITSTAGE_LOCAL
Initialization of local state that don't use or affect other modules includes:
virtual const IReceptionPacketModel * computePacketModel(const LayeredTransmission *transmission, const ISnir *snir) const =0
Computes the packet domain representation at the receiver using a simplified model for the underlying...
const ApskModulationBase * getSubcarrierModulation() const
Definition: Ieee80211OfdmModulation.h:24
@ PRINT_LEVEL_TRACE
Definition: IPrintableObject.h:22
value< int64_t, units::b > b
Definition: Units.h:1241
virtual const IReceptionBitModel * computeBitModel(const LayeredTransmission *transmission, const ISnir *snir) const =0
Computes the bit domain representation at the receiver using a simplified model for the underlying do...
#define SIGNAL_LENGTH_FIELD_START
Definition: Ieee80211OfdmDefs.h:20
const Ieee80211OfdmMode * computeMode(Hz bandwidth) const
Definition: Ieee80211LayeredOfdmReceiver.cc:347
const IReceptionPacketModel * createPacketModel(const LayeredTransmission *transmission, const ISnir *snir) const
Definition: Ieee80211LayeredOfdmReceiver.cc:125
const IDemodulator * dataDemodulator
Definition: Ieee80211LayeredOfdmReceiver.h:43
int evFlags
Definition: INETDefs.cc:12
const IReceptionAnalogModel * createAnalogModel(const LayeredTransmission *transmission, const ISnir *snir) const
Definition: Ieee80211LayeredOfdmReceiver.cc:83
const IReceptionSymbolModel * createDataFieldSymbolModel(const IReceptionSymbolModel *symbolModel) const
Definition: Ieee80211LayeredOfdmReceiver.cc:224
bool isCompliant
Definition: Ieee80211LayeredOfdmReceiver.h:54
unsigned int calculatePadding(unsigned int dataFieldLengthInBits, const ApskModulationBase *modulation, double codeRate) const
Definition: Ieee80211LayeredOfdmReceiver.cc:193
virtual const Ieee80211OfdmDataMode * getDataMode() const override
Definition: Ieee80211OfdmMode.h:148
W sensitivity
Definition: Ieee80211LayeredOfdmReceiver.h:49
const IReceptionSampleModel * createSampleModel(const LayeredTransmission *transmission, const ISnir *snir) const
Definition: Ieee80211LayeredOfdmReceiver.cc:111
virtual const IReceptionBitModel * demodulate(const IReceptionSymbolModel *symbolModel) const =0
mega< Hz >::type MHz
Definition: Units.h:1083
const Ieee80211OfdmModulation * getModulation() const override
Definition: Ieee80211OfdmMode.h:124
const IReceptionBitModel * createCompleteBitModel(const IReceptionBitModel *signalFieldBitModel, const IReceptionBitModel *dataFieldBitModel) const
Definition: Ieee80211LayeredOfdmReceiver.cc:147
W energyDetection
Definition: Ieee80211LayeredOfdmReceiver.h:48
const IDecoder * dataDecoder
Definition: Ieee80211LayeredOfdmReceiver.h:41
const IReceptionPacketModel * createDataFieldPacketModel(const IReceptionBitModel *signalFieldBitModel, const IReceptionBitModel *dataFieldBitModel, const IReceptionPacketModel *signalFieldPacketModel) const
Definition: Ieee80211LayeredOfdmReceiver.cc:163
static const Ieee80211OfdmCode ofdmCC1_2BPSKInterleavingWithoutScrambling
Definition: Ieee80211OfdmCode.h:58