Waveforms#

Communication waveforms are the central configuration option of Modems. They describe the signal processing steps required to generate base-band waveforms carrying information during transmission and, inversely, the signal processing steps required to estimate information from base-band signals during reception.

The following waveforms 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

Chirp FSK

Yes

No

No

class CommunicationWaveform(modem=None, oversampling_factor=1, modulation_order=16, channel_estimation=None, channel_equalization=None)[source]#

Bases: ABC, Serializable

Abstract base class for all communication waveform descriptions.

Waveform Generator initialization.

Parameters:
  • modem (BaseModem, optional) – A modem this generator is attached to. By default, the generator is considered to be floating.

  • oversampling_factor (int, optional) – The factor at which the simulated baseband_signal is oversampled.

  • modulation_order (int, optional) – Order of modulation. Must be a non-negative power of two.

symbol_type#

Symbol type.

alias of complex128

bits_per_frame(num_data_symbols=None)[source]#

Number of bits required to generate a single data frame.

Parameters:

num_data_symbols (int) – Number of unique data symbols contained within the frame. If not specified, the waveform’s default number of data symbols will be assumed.

Return type:

int

Returns: Number of bits.

data_rate(num_data_symbols)[source]#

Data rate theoretically achieved by this waveform configuration.

Parameters:

num_data_symbols (int) – Number of data symbols contained within the frame.

Return type:

float

Returns: Bits per second.

abstract demodulate(signal)[source]#

Demodulate a base-band signal stream to data symbols.

Parameters:

signal (np.ndarray) – Vector of complex-valued base-band samples of a single communication frame.

Return type:

Symbols

Returns:

The demodulated communication symbols

equalize_symbols(symbols)[source]#
Return type:

Symbols

estimate_channel(frame, frame_delay=0.0)[source]#
Return type:

StatedSymbols

abstract map(data_bits)[source]#

Map a stream of bits to data symbols.

Parameters:

data_bits (np.ndarray) – Vector containing a sequence of L hard data bits to be mapped onto data symbols.

Returns:

Mapped data symbols.

Return type:

Symbols

abstract modulate(data_symbols)[source]#

Modulate a stream of data symbols to a base-band signal containing a single data frame.

Parameters:

data_symbols (Symbols) – Singular stream of data symbols to be modulated by this waveform.

Return type:

ndarray

Returns: Samples of the modulated base-band signal.

abstract pick(placed_symbols)[source]#

Pick the mapped symbols from the communicaton frame.

Additionally removes interleaved pilot symbols.

Parameters:

placed_symbols (StatedSymbols) – The placed symbols.

Return type:

StatedSymbols

Returns: The symbols with the mapped symbols picked from the frame.

abstract place(symbols)[source]#

Place the mapped symbols within the communicaton frame.

Additionally interleaves pilot symbols.

Parameters:

symbols (Symbols) – The mapped symbols.

Return type:

Symbols

Returns: The symbols with the mapped symbols placed within the frame.

abstract unmap(symbols)[source]#

Map a stream of data symbols to data bits.

Parameters:

symbols (Symbols) – Sequence of K data symbols to be mapped onto bit sequences.

Returns:

Vector containing the resulting sequence of L data bits In general, L is greater or equal to K.

Return type:

np.ndarray

abstract property bandwidth: float#

Bandwidth of the frame generated by this generator.

Used to estimate the minimal sampling frequency required to adequately simulate the scenario.

Returns:

Bandwidth in Hz.

Return type:

float

abstract property bit_energy: float#

Returns the theoretical average (discrete-time) bit energy of the modulated baseband_signal.

Energy of baseband_signal \(x[k]\) is defined as \(\sum{|x[k]}^2\) Only data bits are considered, i.e., reference, guard intervals are ignored.

property bits_per_symbol: int#

Number of bits transmitted per modulated symbol.

Returns:

Number of bits per symbol

Return type:

int

property channel_equalization: ChannelEqualization#

Channel estimation routine.

Returns:

Handle to the equalization routine.

Return type:

ChannelEqualization

property channel_estimation: ChannelEstimation#

Channel estimation routine.

Returns:

Handle to the estimation routine.

Return type:

ChannelEstimation

property frame_duration: float#

Duration a single communication frame in seconds.

property modem: BaseModem | None#

Access the modem this generator is attached to.

Returns: A handle to the modem.

property modulation_order: int#

Access the modulation order.

Returns:

The modulation order.

Return type:

int

abstract property num_data_symbols: int#

Number of bit-mapped symbols contained within each communication frame.

property oversampling_factor: int#

Access the oversampling factor.

Returns:

The oversampling factor.

Return type:

int

abstract property power: float#

Returns the theoretical average symbol (unitless) power,

Power of baseband_signal \(x[k]\) is defined as \(\sum_{k=1}^N{|x[k]|}^2 / N\) Power is the average power of the data part of the transmitted frame, i.e., bit energy x raw bit rate

abstract property samples_per_frame: int#

Number of time-domain samples per processed communication frame.

abstract property sampling_rate: float#

Rate at which the waveform generator signal is internally sampled.

Returns:

Sampling rate in Hz.

Return type:

float

abstract property symbol_duration: float#

Duration of a single symbol block.

abstract property symbol_energy: float#

The theoretical average symbol (discrete-time) energy of the modulated baseband_signal.

Energy of baseband_signal \(x[k]\) is defined as \(\sum{|x[k]}^2\) Only data bits are considered, i.e., reference, guard intervals are ignored.

Returns:

The average symbol energy in UNIT.

property symbol_precoding_support: bool#

Flag indicating if this waveforms supports symbol precodings.

Returns: Boolean support flag.

property synchronization: Synchronization#

Synchronization routine.

Returns:

Handle to the synchronization routine.

Return type:

Synchronization

class PilotCommunicationWaveform(modem=None, oversampling_factor=1, modulation_order=16, channel_estimation=None, channel_equalization=None)[source]#

Bases: CommunicationWaveform

Abstract base class of communication waveform generators generating a pilot signal.

Waveform Generator initialization.

Parameters:
  • modem (BaseModem, optional) – A modem this generator is attached to. By default, the generator is considered to be floating.

  • oversampling_factor (int, optional) – The factor at which the simulated baseband_signal is oversampled.

  • modulation_order (int, optional) – Order of modulation. Must be a non-negative power of two.

abstract property pilot_signal: Signal#

Model of the pilot sequence within this communication waveform.

Returns:

The pilot sequence.

Return type:

Signal

class ConfigurablePilotWaveform(symbol_sequence=None, repeat_symbol_sequence=True, **kwargs)[source]#

Bases: PilotCommunicationWaveform

Parameters:
  • symbol_sequence (PilotSymbolSequence, optional) – The configured pilot symbol sequence. Uniform by default.

  • repeat_symbol_sequence (bool, optional) – Allow the repetition of pilot symbol sequences. Enabled by default.

  • **kwargs – Additional CommunicationWaveform initialization parameters.

pilot_symbols(num_symbols)[source]#

Sample a pilot symbol sequence.

Parameters:

num_symbols (int) – The expected number of symbols within the sequence.

Return type:

ndarray

Returns:

A pilot symbol sequence of length num_symbols.

Raises:

RuntimeError – If a repetition of the symbol sequence is required but not allowed.

pilot_symbol_sequence: PilotSymbolSequence#

The configured pilot symbol sequence.

repeat_pilot_symbol_sequence: bool#

Allow the repetition of pilot symbol sequences.

class WaveformType#

Type hint for waveform generator classes.

alias of TypeVar(‘WaveformType’, bound=CommunicationWaveform)