=================== Transmitting Modem =================== .. inheritance-diagram:: hermespy.modem.modem.TransmittingModem :parts: 1 :top-classes: hermespy.core.device.Transmitter, hermespy.modem.modem.BaseModem Transmitting modems represent the digital signal processing operations performed within a communication system up to the point of digital-to-analog conversion. After a :class:`TransmittingModem` is added as a type of :class:`Transmitter` to a :class:`Device`, a call to :meth:`Device.transmit` will be delegated to :meth:`TransmittingModem._transmit()`: .. mermaid:: sequenceDiagram Device ->>+ TransmittingModem: _transmit() loop Frame Generation TransmittingModem->>+BitsSource: generate_bits() BitsSource->>-TransmittingModem: bits TransmittingModem->>+EncoderManager: encode() EncoderManager->>-TransmittingModem: encoded_bits TransmittingModem->>+CommunicationWaveform: map() CommunicationWaveform->>-TransmittingModem: Symbols TransmittingModem->>+SymbolPrecoding: encode() SymbolPrecoding->>-TransmittingModem: Symbols TransmittingModem->>+CommunicationWaveform: place() CommunicationWaveform->>-TransmittingModem: Symbols TransmittingModem->>+CommunicationWaveform: modulate() CommunicationWaveform->>-TransmittingModem: Signal TransmittingModem->>+TransmitStreamCoding: encode() TransmitStreamCoding->>-TransmittingModem: Signal end TransmittingModem ->>- Device: CommunicationTransmission Initially, the :class:`TransmittingModem` configured :class:`BitsSource` will be queried for a sequence of data bits required to moulate a single frame. The specic number of bits depends several factors, primarily the :class:`Waveform` configured by the respective :attr:`waveform`, the precodings and the forward error correction. The sequence of data bits is subseuently encoded for forward error correction by the :class:`EncoderManager` configured by the respective :attr:`encoder_manager`. The resulting sequence of encoded bits is then mapped to a sequence of communication symbols by the :class:`CommunicationWaveform's` :meth:`map` method. In the following step, the sequence of communication symbols is precoded by the :class:`SymbolPrecoding` configured by the respective :attr:`precoding` property. Finally, a set of baseband streams is generate by :meth:`placing` and :meth:`modulating` the precoded communication symbols. The baseband streams are then encoded by the :attr:`TransmitStreamCoding`. This sequence of steps can be repeated multiple times to generate a sequence of communication frames, if required. Note that, as a bare minimum, only the :class:`waveform` has to be configured for a fully functional :class:`TransmittingModem`. The following snippet shows how to configure a :class:`TransmittingModem` with a :class:`RootRaisedCosineWaveform` wavform implementing a :class:`CommunicationWaveform`: .. literalinclude:: ../scripts/examples/modem_TransmittingModem.py :language: python :linenos: :lines: 10-26 This barebone configuration can be extended by adding additional components such as :class:`BitsSources`, :class:`Bit Encoders`, :class:`Symbol Precoders` and :class:`Stream Precoders`: .. literalinclude:: ../scripts/examples/modem_TransmittingModem.py :language: python :linenos: :lines: 28-39 .. autoclass:: hermespy.modem.modem.TransmittingModem .. autoclass:: hermespy.modem.modem.TransmittingModemBase :private-members: _transmit .. footbibliography::