C-FSK#

Inheritance diagram of hermespy.modem.waveform_chirp_fsk.ChirpFSKWaveform, hermespy.modem.waveform_chirp_fsk.ChirpFSKSynchronization, hermespy.modem.waveform_chirp_fsk.ChirpFSKCorrelationSynchronization

Chirp Frequency Shift Keying (C-FSK) is a modulation scheme that encodes information in the start and stop frequency of an FMCW ramp.

The waveform can be configured by specifying the number of number of pilot- and data chirps contained within each frame, as well as the duration and bandwidth each of the chirps:

1# Initialize the waveform description
2waveform = ChirpFSKWaveform(
3    chirp_duration=1e-8,
4    chirp_bandwidth=1e9,
5    num_pilot_chirps=16,
6    num_data_chirps=64,
7)

Afterwards, additional processing steps such as synchronization can be added to the waveform description:

1# Configure the waveform's synchronization routine
2waveform.synchronization = ChirpFSKCorrelationSynchronization()

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 ChirpFSKWaveform(chirp_duration=1e-08, chirp_bandwidth=1000000000.0, freq_difference=None, num_pilot_chirps=14, num_data_chirps=50, guard_interval=0.0, **kwargs)[source]#

Bases: PilotCommunicationWaveform, Serializable

Chirp Frequency Shift Keying communication waveform description.

Parameters:
  • chirp_duration (float, optional) – Duration of a single chirp in seconds.

  • chirp_bandwidth (float, optional) – Bandwidth of a single chirp in Hz.

  • freq_difference (float, optional) – Frequency difference of two adjacent chirp symbols.

  • num_pilot_chirps (int, optional) – Number of pilot symbols within a single frame.

  • num_data_chirps (int, optional) – Number of data symbols within a single frame.

  • guard_interval (float, optional) – Frame guard interval in seconds.

  • **kwargs – Base waveform generator initialization arguments.

symbol_type#

alias of int64

demodulate(baseband_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

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

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

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

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.

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

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 bit_energy: float#

Theoretical average bit energy of the modulated signal.

Returns:

The average bit energy in UNIT.

property bits_per_symbol: int#

The number of bits per generated symbol.

Returns:

The number of bits.

Return type:

int

property chirp_bandwidth: float#

Access the chirp bandwidth.

Returns:

The chirp bandwidth in Hz.

Return type:

float

property chirp_duration: float#

Duration of a single chirp within a frame.

Returns:

Chirp duration in seconds.

Return type:

float

Raises:

ValueError – If the duration is less or equal to zero.

property chirps_in_frame: int#

The number of chirps per generated frame.

Returns:

The number of chirps.

Return type:

int

property frame_duration: float#

Length of one data frame in seconds.

Returns:

Frame length in seconds.

Return type:

float

property freq_difference: float#

The frequency offset between neighbouring chirp symbols.

Returns:

The frequency difference in Hz.

Return type:

float

Raises:

ValueError – If freq_difference is smaller or equal to zero.

property guard_interval: float#

Access the guard interval.

Returns:

The guard interval in seconds.

Return type:

float

property modulation_order: int#

Access the modulation order.

Returns:

The modulation order.

Return type:

int

property num_data_chirps: int#

Access the number of data chirps.

Returns:

The number of data chirps.

Return type:

int

property num_data_symbols: int#

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

property num_pilot_chirps: int#

Access the number of pilot chirps.

Returns:

The number of pilot chirps.

Return type:

int

property pilot_signal: Signal#

Samples of the frame’s pilot section.

Returns:

Pilot samples.

Return type:

samples (np.ndarray)

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 samples_in_chirp: int#

The number of discrete samples per generated chirp.

Returns:

The number of samples.

Return type:

int

property samples_per_frame: int#

Number of time-domain samples per processed communication frame.

property sampling_rate: float#

Rate at which the waveform generator signal is internally sampled.

Returns:

Sampling rate in Hz.

Return type:

float

property symbol_duration: float#

Duration of a single symbol block.

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.

class ChirpFSKSynchronization(waveform=None)[source]#

Bases: Synchronization[ChirpFSKWaveform], Serializable

Synchronization for chirp-based frequency shift keying communication waveforms.

Parameters:

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

class ChirpFSKCorrelationSynchronization(threshold=0.9, guard_ratio=0.8, peak_prominence=0.2, *args, **kwargs)[source]#

Bases: CorrelationSynchronization[ChirpFSKWaveform], Serializable

Correlation-based clock-synchronization for Chirp-FSK waveforms.

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

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

  • peak_prominence (float, optional) – Minimum peak prominence for peak detection in the interval (0, 1]. \(0.2\) is a good default value for most applications.

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

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

YAML serialization tag.