Spaces:
Runtime error
Runtime error
import numpy as np | |
class Target: | |
def __init__(self, position, velocity, rcs): | |
self.position = np.array(position) | |
self.velocity = np.array(velocity) | |
self.rcs = rcs # Radar Cross Section | |
class RadarSimulation: | |
def __init__(self, radar_position, radar_range, radar_frequency, c=3e8): | |
self.radar_position = np.array(radar_position) | |
self.radar_range = radar_range | |
self.radar_frequency = radar_frequency * 1e9 # Convert GHz to Hz | |
self.c = c # Speed of light in m/s | |
self.targets = {} | |
self.positions = {} | |
self.doppler_shifts = {} | |
self.snr_values = {} | |
self.rssi_values = {} | |
def add_target(self, name, position, velocity, rcs): | |
target = Target(position, velocity, rcs) | |
self.targets[name] = target | |
self.positions[name] = [] | |
self.doppler_shifts[name] = [] | |
self.snr_values[name] = [] | |
self.rssi_values[name] = [] | |
def run_simulation(self, time_steps, dt, loop_frequency=0.1): | |
for step in range(time_steps): | |
# Example specific behavior: Drone makes loops | |
if "drone" in self.targets: | |
self.targets["drone"].velocity[1] = 10 * np.sin(loop_frequency * step) | |
for name, target in self.targets.items(): | |
target.position += target.velocity * dt | |
distance = np.linalg.norm(target.position - self.radar_position) | |
if distance != 0: | |
relative_velocity = np.dot(target.velocity, target.position - self.radar_position) / distance | |
doppler_shift = self.radar_frequency * (relative_velocity / self.c) | |
signal_strength = target.rcs / (distance ** 2) | |
else: | |
relative_velocity = 0 | |
doppler_shift = 0 | |
signal_strength = np.inf | |
noise = 1e-3 | |
snr = signal_strength / noise if distance != 0 else np.inf | |
rssi = (target.rcs * signal_strength * self.radar_frequency) / (distance ** 2) if distance != 0 else np.inf | |
rssi_dBm = 10 * np.log10(rssi / 1e-3) if rssi > 0 else -np.inf | |
self.positions[name].append(target.position.tolist() if distance <= self.radar_range else [np.nan, np.nan]) | |
self.doppler_shifts[name].append(doppler_shift if distance <= self.radar_range else np.nan) | |
self.snr_values[name].append(snr if distance <= self.radar_range else np.nan) | |
self.rssi_values[name].append(rssi_dBm if distance <= self.radar_range else np.nan) | |
def get_simulation_data(self): | |
return { | |
"positions": self.positions, | |
"doppler_shifts": self.doppler_shifts, | |
"snr_values": self.snr_values, | |
"rssi_values": self.rssi_values | |
} |