49 if (symbolErrorRate == 0) {
50 const TransmissionSymbolModel *transmissionSymbolModel = check_and_cast<const TransmissionSymbolModel *>(transmission->getSymbolModel());
51 return new ReceptionSymbolModel(transmissionSymbolModel->getHeaderSymbolLength(), transmissionSymbolModel->getHeaderSymbolRate(), transmissionSymbolModel->getPayloadSymbolLength(), transmissionSymbolModel->getPayloadSymbolRate(),
new std::vector<const ISymbol *>(*transmissionSymbolModel->getSymbols()), symbolErrorRate);
54 const TransmissionSymbolModel *transmissionSymbolModel = check_and_cast<const TransmissionSymbolModel *>(transmission->getSymbolModel());
55 const ApskModulationBase *modulation = check_and_cast<const ApskModulationBase *>(transmissionSymbolModel->getPayloadModulation());
56 const std::vector<const ISymbol *> *transmittedSymbols = transmissionSymbolModel->getSymbols();
57 std::vector<const ISymbol *> *receivedSymbols =
new std::vector<const ISymbol *>();
58 for (
auto& transmittedSymbols_i : *transmittedSymbols) {
59 if (uniform(0, 1) < symbolErrorRate) {
60 const ApskSymbol *transmittedSymbol = check_and_cast<const ApskSymbol *>(transmittedSymbols_i);
61 ShortBitVector bits = modulation->demapToBitRepresentation(transmittedSymbol);
62 int errorIndex = intuniform(0, bits.getSize() - 1);
63 bits.setBit(errorIndex, !bits.getBit(errorIndex));
64 const ApskSymbol *receivedSymbol = modulation->mapToConstellationDiagram(bits);
65 receivedSymbols->push_back(receivedSymbol);
68 receivedSymbols->push_back(transmittedSymbols_i);
70 return new ReceptionSymbolModel(transmissionSymbolModel->getHeaderSymbolLength(), transmissionSymbolModel->getHeaderSymbolRate(), transmissionSymbolModel->getPayloadSymbolLength(), transmissionSymbolModel->getPayloadSymbolRate(), receivedSymbols, symbolErrorRate);