FMCW

Inheritance diagram of hermespy.modem.waveform_single_carrier.FMCWWaveform

The Frequency-Modulated Continuous Waveform (FMCW) is a single-carrier modulation scheme filtering the communication symbols with rectangle pulse shape:

Pulse Properties

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

../../_images/waveform-single_carrier-FMCW-1.png

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

../../_images/waveform-single_carrier-FMCW-2.png

The waveform can be configured by specifying the number of number of data- and preamble symbols contained within each frame, as well as the considered symbol rate:

1# Initialize the waveform description
2waveform = FMCWWaveform(
3    num_preamble_symbols=16,
4    num_data_symbols=32,
5    modulation_order=64,
6)
7
8# Configure the waveform's synchronization routine
9waveform.synchronization = SingleCarrierCorrelationSynchronization()

Afterwards, additional processing steps such as synchronization, channel estimation, equalization, and the pilot symbol sequence can be added to the waveform:

 1# Configure the waveform's channel estimation routine
 2waveform.channel_estimation = SingleCarrierLeastSquaresChannelEstimation()
 3
 4# Configure the waveform's channel equalization routine
 5waveform.channel_equalization = SingleCarrierZeroForcingChannelEqualization()
 6
 7# Configure the waveform's pilot symbol sequence
 8waveform.pilot_symbol_sequence = CustomPilotSymbolSequence(
 9    np.exp(.25j * np.pi * np.array([0, 1, 2, 3]))
10)
11
12# Initialize a new simulation considering a single device
13simulation = Simulation()

In order to generate and evaluate communication transmissions or receptions, waveforms should be added to modem implementations. Refer to Transmitting Modem, Receiving Modem or Simplex Link for more information. For instructions how to implement custom waveforms, refer to Implementing Communication Waveforms.

class FMCWWaveform(num_samples_per_chirp=128, *args, **kwargs)[source]

Bases: FilteredSingleCarrierWaveform, Serializable

Frequency Modulated Continuous Waveform Filter Modulation Scheme.

Parameters:
  • num_samples_per_chirp (int) – Number of discrete sampling instances per FMCW chirp. Assumes no oversampling.

  • args – Additional parameters passed to the base class.

  • kwargs – Additional parameters passed to the base class.

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:

FMCWWaveform

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

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.

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

property num_samples_per_chirp: int[source]

Number of discrete sampling instances per FMCW chirp.

Raises:

ValueError – If the number of samples is smaller than one.

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.