/radarsimpy

Radar Simulator built with Python and C++

Primary LanguagePythonGNU General Public License v3.0GPL-3.0

Windows Test Linux Test MacOS Test

Documentations Download

RadarSimPy

logo

A Radar Simulator for Python

RadarSimPy is a powerful and versatile Python-based Radar Simulator that models radar transceivers and simulates baseband data from point targets and 3D models. Its signal processing tools offer range/Doppler processing, direction of arrival estimation, and beamforming using various cutting-edge techniques, and you can even characterize radar detection using Swerling’s models. Whether you’re a beginner or an advanced user, RadarSimPy is the perfect tool for anyone looking to develop new radar technologies or expand their knowledge of radar systems.

Key Features

  • Radar Modeling

    • Radar transceiver modeling
    • Arbitrary waveform
    • Phase noise
    • Phase/amplitude modulation
    • Fast-time/slow-time modulation
  • Simulation

    • Simulation of radar baseband data from point targets
    • Simulation of interference
    • Simulation of radar baseband data from 3D modeled objects/environment (#raytracing)
    • Simulation of target's RCS (#raytracing)
    • Simulation of LiDAR point cloud from 3D modeled objects/environment (#raytracing)
  • Signal Processing

    • Range/Doppler processing
    • Direction of arrival (DoA) estimation
      • MUltiple SIgnal Classification (MUSIC) DoA estimations for a uniform linear array (ULA)
      • Root-MUSIC DoA estimation for a ULA
      • Estimation of Signal Parameters via Rational Invariance Techniques (ESPRIT) DoA estimation for a ULA
      • Iterative Adaptive Approach (IAA) for amplitude and phase estimation
    • Beamformer
      • Capon beamformer
      • Bartlett beamformer
    • Constant false alarm rate (CFAR)
      • 1D/2D cell-averaging CFAR (CA-CFAR)
      • 1D/2D ordered-statistic CFAR (OS-CFAR)
  • Characterization

    • Radar detection characteristics based on Swerling's models

Dependence

Installation

Download the pre-built module, and put the radarsimpy folder within your project folder as shown below:


  • Windows

    • your_project.py
    • your_project.ipynb
    • radarsimpy
      • __init__.py
      • radarsimcpp.dll
      • scene.xxx.pyd
      • ...

  • Linux

    • your_project.py
    • your_project.ipynb
    • radarsimpy
      • __init__.py
      • libradarsimcpp.so
      • scene.xxx.so
      • ...

Acceleration

This module supports CPU/GPU parallelization. CPU parallelization is implemented through OpenMP. GPU parallelization (CUDA) has been added since v6.0.0.

    CPU (x86_64) CPU (ARM64) GPU (CUDA)
Windows ✔️   ❌️   ✔️        
Linux ✔️   ❌️   ✔️        
MacOS ✔️ ❌️   ❌️        

performance

Coordinate Systems

  • Scene Coordinate

    • axis (m): [x, y, z]
    • phi (deg): angle on the x-y plane. 0 deg is the positive x-axis, 90 deg is the positive y-axis
    • theta (deg): angle on the z-x plane. 0 deg is the positive z-axis, 90 deg is the x-y plane
    • azimuth (deg): azimuth -90 ~ 90 deg equal to phi -90 ~ 90 deg
    • elevation (deg): elevation -90 ~ 90 deg equal to theta 180 ~ 0 deg
  • Object's Local Coordinate

    • axis (m): [x, y, z]
    • yaw (deg): rotation along the z-axis. Positive yaw rotates the object from the positive x-axis to the positive y-axis
    • pitch (deg): rotation along the y-axis. Positive pitch rotates the object from the positive x-axis to the positive z-axis
    • roll (deg): rotation along the x-axis. Positive roll rotates the object from the positive z-axis to the negative y-axis
    • origin (m): [x, y, z]
    • rotation (deg): [yaw, pitch, roll]
    • rotation rate (deg/s): [yaw rate, pitch rate, roll rate]

Usage Examples

The source files of these Jupyter notebooks are available here.

Build

Building radarsimpy requires to access the source code of radarsimcpp. If you don't have access to radarsimcpp, please use the pre-built module.

  • Windows CPU
build_win.bat
  • Windows CUDA
build_win_cuda.bat
  • Linux CPU
./build_linux.sh
  • Linux CUDA
./build_linux_cuda.sh

API Reference

Please check the Documentation