FMCW#

class FMCW(num_chirps=10, bandwidth=100000000.0, chirp_duration=1.5e-06, pulse_rep_interval=1.5e-06, sampling_rate=None, adc_sampling_rate=None)[source]#

Bases: RadarWaveform, Serializable

Frequency Modulated Continuous Waveform Radar Sensing with stretch processing.

This class generates a frame consisting of a sequence of unmodulated chirps. They are used for radar detection with stretch processing, i.e., mixing the received signal with the transmitted sequence, (under)sampling and applying an FFT. S A minimal example configuring an FMCW radar waveform illuminating a single target within the context of a Simulation would look like this:

 1from hermespy.radar import Radar, FMCW, ReceiverOperatingCharacteristic
 2from hermespy.simulation import Simulation
 3from hermespy.channel import SingleTargetRadarChannel
 4
 5# Create a new simulated scenario featuring a single device
 6simulation = Simulation()
 7device = simulation.new_device(snr=1e-2, carrier_frequency=60e9)
 8
 9# Configure the device to transmit and reveive radar waveforms
10radar = Radar(device=device)
11radar.waveform = FMCW(num_chirps=3, bandwidth=1e9, chirp_duration=1e-6, pulse_rep_interval=1.1e-6)
12
13# Create a new radar channel with a single illuminated target
14target = SingleTargetRadarChannel(1, 1., attenuate=True)
15simulation.scenario.set_channel(device, device, target)
16
17# Create a new detection probability evaluator
18simulation.add_evaluator(ReceiverOperatingCharacteristic(radar, target))
19
20# Run the simulation
21result = simulation.run()
Parameters:
  • num_chirps (float, optional) – Number of dedicated chirps within a single radar frame. \(10\) by default.

  • bandwidth (float, optional) – Sweep bandwidth of every chirp in Hz. \(0.1~\mathrm{GHz}\) by default.

  • chirp_duration (float, optional) – Duration of every chirp in seconds. \(1.5~\mathrm{\mu s}\) by default.

  • pulse_rep_interval (float, optional) – Repetition interval of the individual chirps in seconds. \(1.5~\mathrm{\mu s}\) by default.

  • sampling_rate (float, optional) – Sampling rate of the baseband signal in Hz.

  • adc_sampling_rate (float, optional) – Sampling rate of the analog-digital conversion in Hz.

estimate(input_signal)[source]#

Generate a range-doppler map from a single-stream radar frame.

Parameters:

signal (Signal) – Single-stream signal model of a single propagated radar frame.

Return type:

ndarray

Returns:

Numpy matrix (2D array) of the range-doppler map, where the first dimension indicates discrete doppler frequency bins and the second dimension indicates discrete range bins.

ping()[source]#

Generate a single radar frame.

Return type:

Signal

Returns:

Single-stream signal model of a single radar frame.

property adc_sampling_rate: float#

Sampling rate at ADC

Returns:

sampling rate in Hz.

Return type:

float

Raises:

ValueError – If sampling rate is smaller or equal to zero.

property bandwidth: float#

Bandwidth swept during each chirp.

(Source code)

../_images/radar_fmcw_bandwidth_00.png

(png, hires.png, pdf)#

../_images/radar_fmcw_bandwidth_01.png

(png, hires.png, pdf)#

Returns:

Sweep bandwidth in Hz.

Return type:

float

Raises:

ValueError – If bandwidth is smaller or equal to zero.

property chirp_duration: float#

Duration of a single chirp within the FMCW frame.

In combination with pulse_rep_interval the chirp duration determines the guard interval between two consecutive chirps:

(Source code)

../_images/radar_fmcw_chirp_duration_00.png

(png, hires.png, pdf)#

../_images/radar_fmcw_chirp_duration_01.png

(png, hires.png, pdf)#

Raises:

ValueErorr – For durations smaller or equal to zero.

property energy: float#

Energy of an FMCW radar pulse in \(\mathrm{Wh}\).

property frame_duration: float#

Duration of a single radar frame in seconds.

Denoted by \(T_{\mathrm{F}}\) of unit \(\left[ T_{\mathrm{F}} \right] = \mathrm{s}\) in literature.

property max_range: float#

The waveform’s maximum detectable range in meters.

Denoted by \(R_{\mathrm{Max}}\) of unit \(\left[ R_{\mathrm{Max}} \right] = \mathrm{m}\) in literature.

property max_relative_doppler: float#

Maximum relative detectable radial doppler frequency shift in Hz.

\[\Delta f_\mathrm{Max} = \frac{v_\mathrm{Max}}{\lambda}\]

Returns: Shift frequency delta in Hz.

property num_chirps: int#

Number of chirps per transmitted radar frame.

Changing the number of chirps per frame will result in a different radar frame length:

(Source code)

../_images/radar_fmcw_num_chirps_00.png

(png, hires.png, pdf)#

../_images/radar_fmcw_num_chirps_01.png

(png, hires.png, pdf)#

Raises:

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

property power: float#

Power of an FMCW radar pulse in \(\mathrm{W}\).

property pulse_rep_interval: float#

Pulse repetition interval in seconds.

The pulse repetition interval determines the overall frame duration. In combination with the chirp_duration the pulse repetition interval it determines the guard interval between two consecutive chirps:

(Source code)

../_images/radar_fmcw_pulse_rep_interval_00.png

(png, hires.png, pdf)#

../_images/radar_fmcw_pulse_rep_interval_01.png

(png, hires.png, pdf)#

Raises:

ValueError – If interval is smaller or equal to zero.

property range_resolution: float#

Resolution of the radial range sensing in meters.

Denoted by \(\Delta R\) of unit \(\left[ \Delta R \right] = \mathrm{m}\) in literature.

property relative_doppler_bins: ndarray#

Realtive discrete sample bins of the radial doppler frequency shift sensing.

Returns:

A numpy vector (1D array) of discrete doppler frequency bins in Hz.

property relative_doppler_resolution: float#

Relative resolution of the radial doppler frequency shift sensing in Hz.

\[\Delta f_\mathrm{Res} = \frac{v_\mathrm{Res}}{\lambda}\]

Returns: Doppler resolution in Hz.

property sampling_rate: float#

The optional sampling rate required to process this waveform.

Denoted by \(f_\mathrm{s}\) of unit \(\left[ f_\mathrm{s} \right] = \mathrm{Hz} = \tfrac{1}{\mathrm{s}}\) in literature.

property slope: float#

Slope of the bandwidth sweep.

Returns:

Slope in Hz / s.

Return type:

float

Raises:

ValueError – If slope is smaller or equal to zero.