Single Carrier

Inheritance diagram of hermespy.modem.waveform_single_carrier.FilteredSingleCarrierWaveform, hermespy.modem.waveform_single_carrier.RolledOffSingleCarrierWaveform

Single carrier waveforms modulate only a single discrete carrier frequency. They are typically applying a shaping filter around the modulated frequency, of which the following are currently available:

class FilteredSingleCarrierWaveform(num_preamble_symbols=16, num_data_symbols=256, num_postamble_symbols=0, pilot_rate=0, guard_interval=0.0, pilot_symbol_sequence=None, repeat_pilot_symbol_sequence=True, **kwargs)[source]

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)

Parameters:
  • 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) – Number of postamble symbols within a single communication frame.

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

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

  • pilot_symbol_sequence (PilotSymbolSequence | None) – The configured pilot symbol sequence. Uniform by default.

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

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

classmethod Deserialize(process)[source]

Deserialize an object’s state.

Objects cannot be deserialized directly, instead a Factory must be instructed to carry out the deserialization process.

Parameters:

process (DeserializationProcess) – The current stage of the deserialization process. This object is generated by the Factory and provides an interface to deserialization methods supporting multiple backends.

Return type:

FilteredSingleCarrierWaveform

Returns:

The deserialized object.

demodulate(signal, bandwidth, oversampling_factor)[source]

Demodulate a base-band signal stream to data symbols.

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

  • bandwidth (float) – Bandwidth of the communication waveform in Hz.

  • oversampling_factor (int) – Oversampling factor of the communication waveform.

Return type:

Symbols

Returns:

The demodulated communication symbols

frame_duration(bandwidth)[source]

Duration of a single communication frame in seconds.

Parameters:

bandwidth (float) – Target bandwidth of the communication waveform in Hz.

Returns:

Duration of a single communication frame in seconds.

Return type:

float

map(data_bits)[source]

Map a stream of bits to data symbols.

Parameters:

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

Return type:

Symbols

Returns: Mapped data symbols.

modulate(data_symbols, bandwidth, oversampling_factor)[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.

  • bandwidth (float) – Bandwidth of the communication waveform in Hz.

  • oversampling_factor (int) – Oversampling factor of the communication waveform.

Return type:

ndarray

Returns:

Samples of the modulated base-band signal.

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.

pilot_signal(bandwidth, oversampling_factor)[source]

Model of the pilot sequence within this communication waveform.

Parameters:
  • bandwidth (float) – Bandwidth of the communication waveform in Hz.

  • oversampling_factor (int) – Oversampling factor of the communication waveform.

Return type:

Signal

Returns: The pilot sequence.

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.

plot_filter(oversampling_factor=64)[source]

Plot the transmit filter shape.

Parameters:

oversampling_factor (int) – The oversampling factor used for the waveform generation.

Return type:

Figure

Returns: Handle to the generated matplotlib figure.

plot_filter_correlation(oversampling_factor=64)[source]

Plot the convolution between transmit and receive filter shapes.

Parameters:

oversampling_factor (int) – The oversampling factor used for the waveform generation.

Return type:

Figure

Returns: Handle to the generated matplotlib figure.

samples_per_frame(bandwidth, oversampling_factor)[source]

Number of time-domain samples per processed communication frame.

Parameters:
  • bandwidth (float) – Bandwidth of the communication waveform in Hz.

  • oversampling_factor (int) – Oversampling factor of the communication waveform.

Note that the overall sampling rate is defined as bandwidth * oversampling_factor.

Returns:

Number of samples per frame.

Return type:

int

serialize(process)[source]

Serialize this object’s state.

Objects cannot be serialized directly, instead a Factory must be instructed to carry out the serialization process.

Parameters:

process (SerializationProcess) – The current stage of the serialization process. This object is generated by the Factory and provides an interface to serialization methods supporting multiple backends.

Return type:

None

symbol_energy(bandwidth, oversampling_factor)[source]

Expected energy of a single communication symbol within the modulated baseband-signal.

Parameters:
  • bandwidth (float) – Bandwidth of the communication waveform in Hz.

  • oversampling_factor (int) – Oversampling factor of the communication waveform.

Typically denoted by \(E_s\). HermesPy defines the symbol energy as the expected sum of squared magnitudes

\[E_s = \sum_{n=0}^{N-1} |x[n]|^2\]

where \(x[n]\) are the complex base-band samples of a single communication symbol.

Returns:

The expected symbol energy.

Return type:

float

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.

Return type:

ndarray

Returns:

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

property guard_interval: float[source]

Frame guard interval.

Raises:

ValueError – If interval is smaller than zero.

property modulation_order: int[source]

Access the modulation order.

Returns:

The modulation order.

Return type:

int

property num_data_symbols: int[source]

Number of data symbols per frame.

Raises:

ValueError – If num is smaller than zero.

property num_postamble_symbols: int[source]

Number of postamble symbols.

Transmitted at the end of communication frames.

Raises:

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

property num_preamble_symbols: int[source]

Number of preamble symbols.

Transmitted at the beginning of communication frames.

Raises:

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

property pilot_rate: int[source]

Repetition rate of pilot symbols within the frame.

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

Raises:

ValueError – If the pilot rate is smaller than zero.

property power: float[source]

Expected in-band power of the generated baseband-signal for within given target bandwidth.

Typically denoted by \(P\).

Returns:

The expected power of the modulated signal.

class RolledOffSingleCarrierWaveform(relative_bandwidth=1.0, roll_off=0.0, filter_length=16, *args, **kwargs)[source]

Bases: FilteredSingleCarrierWaveform

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

Parameters:
  • relative_bandwidth (float) – 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) – Filter pulse shape roll off factor between zero and one. Zero by default, meaning no inter-symbol interference at the sampling instances.

  • filter_length (int) – Filter length in modulation symbols. 16 by default.

serialize(process)[source]

Serialize this object’s state.

Objects cannot be serialized directly, instead a Factory must be instructed to carry out the serialization process.

Parameters:

process (SerializationProcess) – The current stage of the serialization process. This object is generated by the Factory and provides an interface to serialization methods supporting multiple backends.

Return type:

None

property filter_length: int[source]

Filter length in modulation symbols.

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

Raises:

ValueError – For filter lengths smaller than one.

property relative_bandwidth: float[source]

Bandwidth relative to the configured symbol rate.

Raises:

ValueError – On values smaller or equal to zero.

property roll_off: float[source]

Filter pulse shape roll off factor.

Raises:

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