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 |
---|---|---|---|
Yes |
Yes |
Yes |
|
Yes |
Yes |
Yes |
|
Yes |
Yes |
Yes |
|
Yes |
Yes |
Yes |
|
Yes |
Yes |
Yes |
|
Yes |
Yes |
Yes |
|
Yes |
Yes |
Yes |
|
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 |
---|---|
Errors comparing two bit streams |
|
Errors comparing two bit streams divided into blocks |
|
Errors comparing two bit streams divided into frames |
|
Rate of correct frames multiplied by the frame bit rate |
|
Root mean square error between transmitted and received symbols |