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")

Continue Learning