CommunicationΒΆ

The communication package contains a propgramming framework for simulating and evaluating communication systems on the physical layer. It is primarily comprised of Modem implementations and associated Communication Waveforms:

        classDiagram

class CommunicationWaveform {

   <<Abstract>>

   %%+int oversampling_factor
   %%+int modulation_order
   %%+int num_data_symbols*
   %%+int samples_per_frame*
   %%+float frame_duration
   %%+float symbol_duration*
   %%+float bit_energy*
   %%+float symbol_energy*
   %%+float power*
   +map(numpy.ndarray) Symbols*
   +unmap(Symbols) np.ndarray*
   +place(Symbols) Symbols*
   +pick(StatedSymbols) StatedSymbols*
   +modulate(Symbols) np.ndarray*
   +demodulate(np.ndarray) Symbols*
}

class BaseModem {

   <<Abstract>>

   +CommunicationWaveform waveform
   +EncoderManager encoder_manager
   +SymbolPredocding Precoding
   +Device transmitting_device*
   +Device receiving_device*
}

class TransmittingModem {

   +Device transmitting_device
   +None receiving_device
   +BitsSource bits_source
   +TransmitStreamCoding transmit_stream_coding
   #CommunicationTransmission _transmit()
}

class ReceivingModem {

   +None transmitting_device
   +Device receiving_device
   +BitsSink bits_sink
   +ReceiveStreamCoding receive_stream_coding
   #CommunicationReception _receive(Signal)
}

class SimplexLink
class DuplexModem

class CommunicationTransmission {

   +List[CommunicationTransmissionFrame] frames
   +int num_frames
   +bits numpy.ndarray
   +symbols Symbols
}

class CommunicationReception {

   +List[CommunicationReceptionFrame] frames
   +int num_frames
   +encoded_bits numpy.ndarray
   +bits numpy.ndarray
   +symbols Symbols
   +equalized_symbols Symbols
}

BaseModem --* CommunicationWaveform
TransmittingModem --|> BaseModem
TransmittingModem --> CommunicationTransmission : create
ReceivingModem --|> BaseModem
ReceivingModem --> CommunicationReception : create
SimplexLink --|> TransmittingModem
SimplexLink --|> ReceivingModem
DuplexModem --|> TransmittingModem
DuplexModem --|> ReceivingModem

link CommunicationWaveform "modem.waveform.waveform.html"
link BaseModem "modem.modem.BaseModem.html"
link TransmittingModem "modem.modem.TransmittingModem.html"
link ReceivingModem "modem.modem.ReceivingModem.html"
link SimplexLink "modem.modem.SimplexLink.html"
link DuplexModem "modem.modem.DuplexModem.html"
link CommunicationTransmission "modem.modem.CommunicationTransmission.html"
link CommunicationReception "modem.modem.CommunicationReception.html"
    

Modems implement a customizable signal processing pipeline for both transmitting and receiving communication devices, as well as a SimplexLink for unidirectional communication links and a DuplexModem for bidirectional communication links. They can be configured in terms of their bit generation and the forward error correction codings applied to the bits, the precoding applied to communication symbols, and, most importantly, the communication waveform used to transmit and receive commuication symbols. The waveform offers additional specific configuration options for synchronization, channel estimation and channel equalization. The following waveform types are currently supported:

Waveform

Synchronization

Channel Estimation

Channel Equalization

Root Raised Cosine

Yes

Yes

Yes

Raised Cosine

Yes

Yes

Yes

Rectangular

Yes

Yes

Yes

FMCW

Yes

Yes

Yes

OFDM

Yes

Yes

Yes

OCDM

Yes

Yes

Yes

OTFS

Yes

Yes

Yes

Chirp FSK

Yes

No

No

Out of the box, the communication package provides a number of evaluators to estimate common performance metrics of communication systems:

Performance Indicator

Performance Indicator

Bit Error Rate

Errors comparing two bit streams

Block Error Rate

Errors comparing two bit streams divided into blocks

Frame Error Rate

Errors comparing two bit streams divided into frames

Throughput

Rate of correct frames multiplied by the frame bit rate

Error Vector Magnitude

Root mean square error between transmitted and received symbols