Filtered Single Carrier Waveforms#

class FilteredSingleCarrierWaveform(symbol_rate, num_preamble_symbols, num_data_symbols, num_postamble_symbols=0, pilot_rate=0, guard_interval=0.0, oversampling_factor=4, pilot_symbol_sequence=None, repeat_pilot_symbol_sequence=True, **kwargs)#

Bases: ConfigurablePilotWaveform

This method provides a class for a generic PSK/QAM modem.

The modem has the following characteristics: - root-raised cosine filter with arbitrary roll-off factor - arbitrary constellation, as defined in modem.tools.psk_qam_mapping:PskQamMapping

This implementation has currently the following limitations: - hard output only (no LLR) - no reference signal - ideal channel estimation - equalization of ISI with FMCW in AWGN channel only - no equalization (only amplitude and phase of first propagation path is compensated)

Waveform Generator PSK-QAM initialization.

Parameters:
  • symbol_rate (float) – Rate at which symbols are being generated in Hz.

  • num_preamble_symbols (int) – Number of preamble symbols within a single communication frame.

  • num_data_symbols (int) – Number of data symbols within a single communication frame.

  • num_postamble_symbols (int, optional) – Number of postamble symbols within a single communication frame.

  • guard_interval (float, optional) – Guard interval between communication frames in seconds. Zero by default.

  • oversampling_factor (int, optional) – The oversampling factor of the waform.

  • pilot_rate (int, optional) – Pilot symbol rate. Zero by default, i.e. no pilot symbols.

  • pilot_symbol_sequence (Optional[PilotSymbolSequence], optional) – The configured pilot symbol sequence. Uniform by default.

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

  • kwargs (Any) – Waveform generator base class initialization parameters.

property symbol_rate: float#

Repetition rate of symbols.

Returns:

Symbol rate in Hz.

Raises:

ValueError – For rates smaller or equal to zero.

property num_preamble_symbols: int#

Number of preamble symbols.

Transmitted at the beginning of communication frames.

Returns: The number of symbols.

Raises:

ValueError – If the number of symbols is smaller than zero.

property num_postamble_symbols: int#

Number of postamble symbols.

Transmitted at the end of communication frames.

Returns: The number of symbols.

Raises:

ValueError – If the number of symbols is smaller than zero.

property modulation_order: int#

Access the modulation order.

Returns:

The modulation order.

Return type:

int

property pilot_signal: Signal#

Model of the pilot sequence within this communication waveform.

Returns:

The pilot sequence.

Return type:

Signal

map(bits)#

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

unmap(symbols)#

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

modulate(symbols)#

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.

Returns:

Signal model of a single modulate data frame.

Return type:

Signal

demodulate(signal)#

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

property guard_interval: float#

Frame guard interval.

Returns:

Interval in seconds.

Return type:

float

property num_guard_samples: int#

Number of samples within the guarding section of a frame.

Returns:

Number of samples.

Return type:

int

property pilot_rate: int#

Repetition rate of pilot symbols within the frame.

A pilot rate of zero indicates no pilot symbols within the data frame.

Returns:

Rate in number of symbols

Raises:

ValueError – If the pilot rate is smaller than zero.

property num_data_symbols: int#

Number of data symbols per frame.

Returns:

Number of data symbols.

Return type:

int

property samples_in_frame: int#

The number of discrete samples per generated frame.

Returns:

The number of samples.

Return type:

int

property bits_per_frame: int#

Number of bits required to generate a single data frame.

Returns:

Number of bits

Return type:

int

property symbols_per_frame: int#

Number of dat symbols per transmitted frame.

Returns:

Number of data symbols

Return type:

int

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 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 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

property sampling_rate: float#

Rate at which the waveform generator signal is internally sampled.

Returns:

Sampling rate in Hz.

Return type:

float

plot_filter_correlation()#

Plot the convolution between transmit and receive filter shapes.

Return type:

Figure

Returns:

Handle to the generated matplotlib figure.

plot_filter()#

Plot the transmit filter shape.

Return type:

Figure

Returns:

Handle to the generated matplotlib figure.

class SingleCarrierCorrelationSynchronization(threshold=0.9, guard_ratio=0.8, *args, **kwargs)#

Bases: CorrelationSynchronization[FilteredSingleCarrierWaveform]

Correlation-based clock-synchronization for PSK-QAM waveforms.

Parameters:
  • threshold (float, optional) – Correlation threshold at which a pilot signal is detected.

  • guard_ratio (float, optional) – Guard ratio of frame duration.

  • *args (Any) – Synchronization base class initialization parameters.

yaml_tag: Optional[str] = 'SC-Correlation'#

YAML serialization tag.

class SingleCarrierChannelEstimation(waveform_generator=None, *args)#

Bases: ChannelEstimation[FilteredSingleCarrierWaveform], ABC

Channel estimation for Psk Qam waveforms.

Parameters:

waveform_generator (WaveformGenerator, optional) – The waveform generator this synchronization routine is attached to.

class SingleCarrierIdealChannelEstimation(waveform_generator=None)#

Bases: IdealChannelEstimation[FilteredSingleCarrierWaveform], Serializable

Ideal channel estimation for single carrier waveforms

Parameters:

waveform_generator (WaveformGenerator, optional) – The waveform generator this estimation routine is attached to.

yaml_tag: Optional[str] = 'SC-Ideal'#

YAML serialization tag

estimate_channel(symbols)#

Estimate the wireless channel of a received communication frame.

Parameters:

symbols (Symbols) – Demodulated communication symbols.

Return type:

Tuple[StatedSymbols, ChannelStateInformation]

Returns: The symbols and their respective channel states.

class SingleCarrierLeastSquaresChannelEstimation(waveform_generator=None, *args)#

Bases: SingleCarrierChannelEstimation

Least-Squares channel estimation for Psk Qam waveforms.

Parameters:

waveform_generator (WaveformGenerator, optional) – The waveform generator this synchronization routine is attached to.

yaml_tag: Optional[str] = 'SC-LS'#

YAML serialization tag

estimate_channel(symbols)#

Estimate the wireless channel of a received communication frame.

Parameters:

symbols (Symbols) – Demodulated communication symbols.

Return type:

Tuple[StatedSymbols, ChannelStateInformation]

Returns: The symbols and their respective channel states.

class SingleCarrierChannelEqualization(waveform=None)#

Bases: ChannelEqualization[FilteredSingleCarrierWaveform], ABC

Channel estimation for Psk Qam waveforms.

Parameters:

waveform (WaveformGenerator, optional) – The waveform generator this equalization routine is attached to.

class SingleCarrierZeroForcingChannelEqualization(waveform_generator=None)#

Bases: ZeroForcingChannelEqualization[FilteredSingleCarrierWaveform]

Zero-Forcing Channel estimation for Psk Qam waveforms.

Parameters:

waveform_generator (WaveformGenerator, optional) – The waveform generator this equalization routine is attached to.

yaml_tag: Optional[str] = 'SC-ZF'#

YAML serialization tag

class SingleCarrierMinimumMeanSquareChannelEqualization(waveform_generator=None)#

Bases: SingleCarrierChannelEqualization, ABC

Minimum-Mean-Square Channel estimation for Psk Qam waveforms.

Parameters:

waveform_generator (WaveformGenerator, optional) – The waveform generator this equalization routine is attached to.

yaml_tag: Optional[str] = 'SC-MMSE'#

YAML serialization tag

equalize_channel(symbols)#

Equalize the wireless channel of a received communication frame.

Parameters:

frame (Symbols) – Symbols and channel state of the received communication frame.

Return type:

Symbols

Returns: The equalize symbols.

class RolledOffSingleCarrierWaveform(relative_bandwidth=1.0, roll_off=0.0, filter_length=16, *args, **kwargs)#

Bases: FilteredSingleCarrierWaveform

Base class for single carrier waveforms applying linear filters longer than a single symbol duration.

Parameters:
  • relative_bandwidth (float, optional) – Bandwidth relative to the configured symbol rate. One by default, meaning the pulse bandwidth is equal to the symbol rate in Hz, assuming zero roll_off.

  • roll_off (float, optional) – Filter pulse shape roll off factor between zero and one. Zero by default, meaning no inter-symbol interference at the sampling instances.

  • filter_length (float, optional) – Filter length in modulation symbols. 16 by default.

property filter_length: int#

Filter length in modulation symbols.

Configures how far the shaping filter stretches in terms of the number of modulation symbols it overlaps with.

Returns:

Filter length in number of modulation symbols.

Raises:

ValueError – For filter lengths smaller than one.

property relative_bandwidth: float#

Bandwidth relative to the configured symbol rate.

Raises:

ValueError – On values smaller or equal to zero.

property roll_off: float#

Filter pulse shape roll off factor.

Raises:

ValueError – On values smaller than zero or larger than one.

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

class RootRaisedCosineWaveform(*args, **kwargs)#

Bases: RolledOffSingleCarrierWaveform, Serializable

Root-Raised-Cosine filtered single carrier mdulation.

(Source code, png, hires.png, pdf)

../_images/modem-waveform_single_carrier-1.png

(Source code, png, hires.png, pdf)

../_images/modem-waveform_single_carrier-2.png
Parameters:
  • relative_bandwidth (float, optional) – Bandwidth relative to the configured symbol rate. One by default, meaning the pulse bandwidth is equal to the symbol rate in Hz, assuming zero roll_off.

  • roll_off (float, optional) – Filter pulse shape roll off factor between zero and one. Zero by default, meaning no inter-symbol interference at the sampling instances.

  • filter_length (float, optional) – Filter length in modulation symbols. 16 by default.

yaml_tag: Optional[str] = 'SC-RootRaisedCosine'#

YAML serialization tag

class RaisedCosineWaveform(*args, **kwargs)#

Bases: RolledOffSingleCarrierWaveform, Serializable

Root-Raised-Cosine filtered single carrier mdulation.

(Source code, png, hires.png, pdf)

../_images/modem-waveform_single_carrier-3.png

(Source code, png, hires.png, pdf)

../_images/modem-waveform_single_carrier-4.png
Parameters:
  • relative_bandwidth (float, optional) – Bandwidth relative to the configured symbol rate. One by default, meaning the pulse bandwidth is equal to the symbol rate in Hz, assuming zero roll_off.

  • roll_off (float, optional) – Filter pulse shape roll off factor between zero and one. Zero by default, meaning no inter-symbol interference at the sampling instances.

  • filter_length (float, optional) – Filter length in modulation symbols. 16 by default.

yaml_tag: Optional[str] = 'SC-RaisedCosine'#

YAML serialization tag

class RectangularWaveform(relative_bandwidth=1.0, *args, **kwargs)#

Bases: FilteredSingleCarrierWaveform, Serializable

Rectangular filtered single carrier modulation.

(Source code, png, hires.png, pdf)

../_images/modem-waveform_single_carrier-5.png

(Source code, png, hires.png, pdf)

../_images/modem-waveform_single_carrier-6.png

Waveform Generator PSK-QAM initialization.

Parameters:
  • symbol_rate (float) – Rate at which symbols are being generated in Hz.

  • num_preamble_symbols (int) – Number of preamble symbols within a single communication frame.

  • num_data_symbols (int) – Number of data symbols within a single communication frame.

  • num_postamble_symbols (int, optional) – Number of postamble symbols within a single communication frame.

  • guard_interval (float, optional) – Guard interval between communication frames in seconds. Zero by default.

  • oversampling_factor (int, optional) – The oversampling factor of the waform.

  • pilot_rate (int, optional) – Pilot symbol rate. Zero by default, i.e. no pilot symbols.

  • pilot_symbol_sequence (Optional[PilotSymbolSequence], optional) – The configured pilot symbol sequence. Uniform by default.

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

  • kwargs (Any) – Waveform generator base class initialization parameters.

yaml_tag: Optional[str] = 'SC-Rectangular'#

YAML serialization tag

property relative_bandwidth: float#

Bandwidth relative to the configured symbol rate.

Raises:

ValueError – On values smaller or equal to zero.

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

class FMCWWaveform(bandwidth, chirp_duration=0.0, *args, **kwargs)#

Bases: FilteredSingleCarrierWaveform, Serializable

Frequency Modulated Continuous Waveform Filter Modulation Scheme.

(Source code, png, hires.png, pdf)

../_images/modem-waveform_single_carrier-7.png

(Source code, png, hires.png, pdf)

../_images/modem-waveform_single_carrier-8.png
Parameters:
  • bandwidth (float) – The chirp bandwidth in Hz.

  • chirp_duration (float, optional) – Duration of each FMCW chirp in seconds. By default, the inverse symbol rate is assumed.

yaml_tag: Optional[str] = 'SC-FMCW'#

YAML serialization tag

property_blacklist: Set[str] = {'pilot_symbol_sequence'}#

Set of properties to be ignored during serialization.

property chirp_duration: float#

FMCW Chirp duration.

A duration of zero will result in the inverse symbol rate as chirp duration.

Returns:

Chirp duration in seconds.

Raises:

ValueError – If the duration is smaller than zero.

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

property chirp_slope: float#

Chirp slope.

The slope is equal to the chirp bandwidth divided by its duration.

Returns:

Slope in Hz/s.