Sensing

The radar module provides all functionalities to implement sensing operations on devices.

It currently implements a single signal processing chain Radar configured by realizations of abstract RadarWaveform and RadarDetector classes:

classDiagram class Radar { +RadarWaveform waveform +TransmitBeamformer transmit_beamformer +ReceiveBeamformer receive_beamformer +RadarTransmission transmission +RadarReception reception +RadarDetector detector +transmit() : RadarTransmission +receive() : RadarReception } class RadarWaveform { <<Abstract>> +ping() : Signal +estimate(Signal) : ndarray } class RadarTransmission { +Signal signal } class RadarReception { +Signal signal +RadarCube cube +RadarPointCloud cloud } class RadarDetector { <<Abstract>> +detect(RadarCube) : RadarPointCloud } class PointDetection { +ndarray position +ndarray velocity +float power } class RadarCube { +plot_range() +plot_range_velocity() } class RadarPointCloud { +plot() } Radar *-- RadarWaveform Radar --> RadarTransmission : transmit() Radar *-- RadarTransmission Radar --> RadarReception : receive() Radar *-- RadarReception Radar *-- RadarDetector Radar --> RadarCube RadarCube --* RadarReception RadarCube --> RadarDetector RadarDetector --> RadarPointCloud : detect() RadarReception *-- RadarPointCloud PointDetection "*" --* RadarPointCloud link RadarCube "radar.cube.RadarCube.html" link Radar "radar.radar.Radar.html" link RadarReception "radar.radar.RadarReception.html" link RadarTransmission "radar.radar.RadarTransmission.html" link RadarWaveform "radar.radar.RadarWaveform.html" link RadarDetector "radar.detection.RadarDetector.html" link PointDetection "radar.detection.PointDetection.html" link RadarPointCloud "radar.detection.RadarPointCloud.html"

Within the context of a simulation, we can use the Radar class to configure a device sensing a single target within its field of view:

 1from hermespy.radar import Radar, FMCW, ThresholdDetector
 2from hermespy.simulation import Simulation
 3from hermespy.channel import SingleTargetRadarChannel
 4
 5# Configure an FMCW radar with a threshold detector
 6radar = Radar()
 7radar.waveform = FMCW()
 8radar.detector = ThresholdDetector(.5)
 9
10# Initialize a simulation and configure a radar channel
11simulation = Simulation()
12radar.device = simulation.new_device(carrier_frequency=60e9)
13channel = SingleTargetRadarChannel(.5 * radar.max_range, 1.)
14simulation.scenario.set_channel(radar.device, radar.device, channel)

This snippet initially imports required modules from Hermes’ radar, simulation and channel modules and configures a simulation scenario with a single FMCW Radar Device transmitting at \(60~\mathrm{GHz}\). The transmitted signals are reflected by a single Target with a cross section of \(1~\mathrm{m}^2\) at a distance of half the maximum detectable range. A single simulation drop, consisting of the radar emitting a frame, the frame being propagated over the channel model, the radar receiving the frame and processing it given the configured waveform and detector can be generated by executing the following statement:

1# Generate a single simulation drop
2simulation.scenario.drop()

Afterwards, the generated information is cached at the radar and can be visualized by calling plotting routines:

1# Visualizue the generated radar information
2radar.transmission.signal.plot(title='Transmitted Radar Signal')
3radar.reception.signal.plot(title='Received Radar Signal')
4radar.reception.cube.plot_range(title='Range Power Profile')
5radar.reception.cube.plot_range_velocity(title='Range Velocity Map')
6radar.reception.cloud.visualize(title='Radar Point Cloud')

For more detailed examples, please refer to the Tutorials section. For a detailed description of the individual classes and their methods, refer to the API documentation: