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

OCDM

Yes

Yes

Yes

OTFS

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.

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.

  • channel_estimation (ChannelEstimation, optional) – Channel estimation algorithm. If not specified, an ideal channel is assumed.

  • channel_equalization (ChannelEqualization, optional) – Channel equalization algorithm. If not specified, no symbol equalization is performed.

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 (numpy.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 (numpy.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.

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.

  • channel_estimation (ChannelEstimation, optional) – Channel estimation algorithm. If not specified, an ideal channel is assumed.

  • channel_equalization (ChannelEqualization, optional) – Channel equalization algorithm. If not specified, no symbol equalization is performed.

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 CWT

Communication waveform type.

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