61 auto packet = packetModel->getPacket();
62 const auto& apskPhyHeader = packet->peekAtFront<ApskPhyHeader>();
63 auto length = packet->getTotalLength();
64 BitVector *encodedBits;
65 if (
b(length).get() % 8 == 0)
66 encodedBits =
new BitVector(packet->peekAllAsBytes()->getBytes());
68 encodedBits =
new BitVector();
69 const auto& bitsChunk = packet->peekAllAsBits();
70 for (
int i = 0; i <
b(length).get(); i++)
71 encodedBits->appendBit(bitsChunk->getBit(i));
73 const IScrambling *scrambling =
nullptr;
77 EV_DEBUG <<
"Scrambled bits are: " << *encodedBits << endl;
79 const IForwardErrorCorrection *forwardErrorCorrection =
nullptr;
83 EV_DEBUG <<
"FEC encoded bits are: " << *encodedBits << endl;
85 const IInterleaving *interleaving =
nullptr;
89 EV_DEBUG <<
"Interleaved bits are: " << *encodedBits << endl;
91 b netHeaderLength = apskPhyHeader->getChunkLength();
92 if (forwardErrorCorrection ==
nullptr)
93 return new TransmissionBitModel(netHeaderLength, packetModel->getBitrate(), length - netHeaderLength, packetModel->getBitrate(), encodedBits, forwardErrorCorrection, scrambling, interleaving);
95 b grossHeaderLength =
b(forwardErrorCorrection->getEncodedLength(
b(netHeaderLength).get()));
96 bps grossBitrate = packetModel->getBitrate() / forwardErrorCorrection->getCodeRate();
97 return new TransmissionBitModel(grossHeaderLength, grossBitrate, length - grossHeaderLength, grossBitrate, encodedBits, forwardErrorCorrection, scrambling, interleaving);