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, N0
 3from hermespy.channel import SingleTargetRadarChannel
 4
 5# Create a new simulated scenario featuring a single device
 6simulation = Simulation()
 7device = simulation.new_device(noise_level=N0(2.5e-6), carrier_frequency=60e9)
 8
 9# Configure the device to transmit and reveive radar waveforms
10radar = Radar()
11radar.waveform = FMCW(num_chirps=3, bandwidth=1e9, chirp_duration=1e-6, pulse_rep_interval=1.1e-6)
12device.add_dsp(radar)
13
14# Create a new radar channel with a single illuminated target
15target = SingleTargetRadarChannel(1, 1., attenuate=True)
16simulation.scenario.set_channel(device, device, target)
17
18# Create a new detection probability evaluator
19simulation.add_evaluator(ReceiverOperatingCharacteristic(radar, device, device, target))
20
21# Run the simulation
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. If not specified, the sampling rate will be equal to the bandwidth.

  • adc_sampling_rate (float, optional) – Sampling rate of the analog-digital conversion in Hz. If not specified, the adc sampling rate will be equal to the bandwidth.

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 the ADC in Hz.

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.