Radar Simulation
Simulate FMCW radar systems and analyze received signals
🚧
Under Construction
This tutorial is currently being developed and will be available soon.
Overview
PyRFDT provides comprehensive tools for simulating automotive radar systems, including FMCW (Frequency-Modulated Continuous Wave) radars. This tutorial demonstrates how to set up a radar simulation, configure radar parameters, and analyze the received signals.
Basic Radar Setup
Creating a Radar Object
from rfdt import server, ObjectFactory
# Create a radar-equipped vehicle
radar_vehicle = ObjectFactory.create_cube(
size=[4.5, 2.0, 1.5],
position=[0, 0, 0],
name="RadarVehicle"
)
# Add Radar component
radar_vehicle.add_component("Radar")
radar = radar_vehicle["Radar"]
# Configure radar parameters
radar.frequency = 77e9 # 77 GHz (automotive radar band)
radar.bandwidth = 4e9 # 4 GHz bandwidth
radar.tx_power = 10.0 # 10 dBm transmit power
radar.num_chirps = 128 # Number of chirps per frame
radar.num_samples = 256 # Samples per chirp
radar.fov = 120.0 # Field of view (degrees)
radar.max_range = 200.0 # Maximum detection range (meters)
server.console.log(f"Radar configured at {radar.frequency/1e9:.1f} GHz")Adding Target Objects
# Create target objects
target1 = ObjectFactory.create_cube(
size=[2.0, 1.5, 1.5],
position=[50, 0, 0],
name="Target1"
)
# Set material properties (affects radar cross-section)
target1.add_component("Material")
target1["Material"].permittivity = 3.0
target1["Material"].conductivity = 0.5
# Add velocity component for Doppler simulation
target1.add_component("Velocity")
target1["Velocity"].velocity = [10, 0, 0] # Moving at 10 m/s
server.console.log(f"Target created at {target1['Transform'].position}")Running the Simulation
Simulate and Capture Data
# Run radar simulation
result = radar_vehicle["Radar"].simulate()
# Access received signal
rx_signal = result["rx_signal"] # Complex baseband signal
range_fft = result["range_fft"] # Range FFT
doppler_fft = result["doppler_fft"] # Range-Doppler map
server.console.log(f"Simulation complete: {rx_signal.shape}")
server.console.log(f"Detected {len(result['detections'])} targets")
# Visualize results
import numpy as np
# Plot range profile
range_bins = np.arange(result["range_fft"].shape[0])
range_values = np.abs(result["range_fft"][:, 0])
server.results.plot(range_bins, range_values,
title="Range Profile",
xlabel="Range Bin",
ylabel="Magnitude")
server.results.commit(message="Range Profile")