Computes the symbol domain representation at the receiver using a simplified model for the underlying domains.
This result includes all potential errors that were not corrected by the underlying domains.
88 const ITransmissionBitModel *transmissionBitModel = transmission->getBitModel();
89 const TransmissionSymbolModel *transmissionSymbolModel = check_and_cast<
const Ieee80211OFDMTransmissionSymbolModel *>(transmission->getSymbolModel());
90 const IModulation *modulation = transmissionSymbolModel->getPayloadModulation();
91 const APSKModulationBase *dataModulation = check_and_cast<
const APSKModulationBase *>(modulation);
92 unsigned int dataFieldConstellationSize = dataModulation->getConstellationSize();
94 const std::vector<APSKSymbol> *constellationForDataField = dataModulation->getConstellation();
96 const ScalarTransmissionSignalAnalogModel *analogModel = check_and_cast<
const ScalarTransmissionSignalAnalogModel *>(transmission->getAnalogModel());
98 double dataSER = std::isnan(
dataSymbolErrorRate) ? dataModulation->calculateSER(snir->getMin(), analogModel->getBandwidth(), transmissionBitModel->getPayloadBitRate()) :
dataSymbolErrorRate;
99 const std::vector<const ISymbol *> *symbols = transmissionSymbolModel->getSymbols();
100 std::vector<const ISymbol *> *corruptedSymbols =
new std::vector<const ISymbol *>();
102 corruptedSymbols->push_back(
corruptOFDMSymbol(check_and_cast<const Ieee80211OFDMSymbol *>(symbols->at(0)), signalSER, signalFieldConstellationSize, constellationForSignalField));
104 for (
unsigned int i = 1; i < symbols->size(); i++) {
105 Ieee80211OFDMSymbol *corruptedOFDMSymbol =
corruptOFDMSymbol(check_and_cast<const Ieee80211OFDMSymbol *>(symbols->at(i)), dataSER,
106 dataFieldConstellationSize, constellationForDataField);
107 corruptedSymbols->push_back(corruptedOFDMSymbol);
109 return new Ieee80211OFDMReceptionSymbolModel(transmissionSymbolModel->getHeaderSymbolLength(), transmissionSymbolModel->getHeaderSymbolRate(), transmissionSymbolModel->getPayloadSymbolLength(), transmissionSymbolModel->getPayloadSymbolRate(), corruptedSymbols);
virtual double calculateSER(double snir, Hz bandwidth, bps bitrate) const override
Returns the symbol error rate as a function of the signal to noise and interference ratio...
Definition: BPSKModulation.cc:34
Ieee80211OFDMSymbol * corruptOFDMSymbol(const Ieee80211OFDMSymbol *symbol, double ser, int constellationSize, const std::vector< APSKSymbol > *constellation) const
Definition: Ieee80211OFDMErrorModel.cc:121
double signalSymbolErrorRate
Definition: Ieee80211OFDMErrorModel.h:31
virtual const std::vector< APSKSymbol > * getConstellation() const
Definition: APSKModulationBase.h:45
virtual unsigned int getConstellationSize() const override
Definition: APSKModulationBase.h:46
static const BPSKModulation singleton
Definition: BPSKModulation.h:35
double dataSymbolErrorRate
Definition: Ieee80211OFDMErrorModel.h:32