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: