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: