This document describes the physics models implemented in RadarSim's core engine.
The fundamental radar range equation calculates received power from a target:
Where:
| Symbol | Description | Units |
|---|---|---|
| Received power | W | |
| Transmitted power | W | |
| Transmit antenna gain | linear | |
| Receive antenna gain | linear | |
| Wavelength ( |
m | |
| Radar Cross Section (RCS) | m² | |
| Target range | m | |
| System losses | linear |
Implementation: src/physics/radar_equation.py::_calculate_signal_power_jit()
Where:
-
$k = 1.380649 \times 10^{-23}$ J/K (Boltzmann constant) -
$T_0 = 290$ K (Standard reference temperature) -
$B$ = Noise bandwidth (Hz) -
$F_n$ = Receiver noise figure (linear)
Implementation: src/physics/radar_equation.py::_calculate_snr_jit()
For parabolic antennas, gain is approximated from beamwidth:
Where
Reference: Skolnik, "Radar Handbook", 3rd Ed., Eq. 6.9
RadarSim implements the ITU-R Recommendation P.676-12 for atmospheric gas attenuation, covering frequencies up to 1000 GHz.
Where:
-
$\gamma_o$ = Oxygen specific attenuation (dB/km) -
$\gamma_w$ = Water vapor specific attenuation (dB/km) -
$d$ = One-way path length (km) - Factor of 2 accounts for two-way radar path
Key absorption features:
- 60 GHz complex: Strong O₂ resonance (~15 dB/km at peak)
- 118.75 GHz line: Secondary O₂ absorption
# Normalized pressure and temperature
rp = pressure_hpa / 1013.25
rt = 288.0 / temperature_k
# 60 GHz peak
if 57 < frequency_ghz < 63:
gamma_o = 15.0 * rp * (rt ** 0.5)Key absorption lines:
- 22.235 GHz: Primary H₂O line
- 183.31 GHz: Strong H₂O line (~30 dB/km in humid conditions)
Implementation: src/physics/atmospheric.py::ITU_R_P676
RadarSim now implements specific attenuation due to rain:
Where:
-
$R$ : Rain rate (mm/hr) -
$k, \alpha$ : Frequency-dependent coefficients (Horizontal polarization)
| Freq (GHz) | ||
|---|---|---|
| 10 (X-Band) | 0.0101 | 1.276 |
| 20 (K-Band) | 0.0367 | 1.154 |
| 35 (Ka-Band) | 0.0751 | 1.099 |
Implementation: src/simulation/engine.py step loop
RadarSim implements all four Swerling models for realistic RCS fluctuation:
| Model | Distribution | Decorrelation | Physical Basis |
|---|---|---|---|
| Swerling I | Exponential | Scan-to-scan | Many equal scatterers |
| Swerling II | Exponential | Pulse-to-pulse | Many equal, fast variation |
| Swerling III | Chi-squared (4 DOF) | Scan-to-scan | One dominant + many small |
| Swerling IV | Chi-squared (4 DOF) | Pulse-to-pulse | Dominant + small, fast |
def apply_swerling_fluctuation(rcs_mean: float, model: int) -> float:
if model == 1 or model == 2:
# Exponential distribution (Rayleigh amplitude)
return np.random.exponential(rcs_mean)
elif model == 3 or model == 4:
# Chi-squared with 4 DOF
return np.random.gamma(2, rcs_mean / 2)
else:
return rcs_mean # Swerling 0 (non-fluctuating)Implementation: src/physics/rcs.py::SwerlingModel
To account for atmospheric refraction, RadarSim uses the standard 4/3 effective Earth radius model:
Where
The LOS check uses raymarching with 100+ steps:
for i in range(num_steps):
# Interpolate position along ray
t = i / num_steps
ray_x = radar_x + t * (target_x - radar_x)
ray_y = radar_y + t * (target_y - radar_y)
# Calculate ray height with Earth curvature
ray_alt = radar_alt + t * (target_alt - radar_alt)
ray_alt -= earth_curvature_drop(distance * t)
# Check against terrain
terrain_height = terrain_map.get_elevation(ray_x, ray_y)
if ray_alt < terrain_height:
return False # Blocked by terrainMaximum detection range limited by horizon:
For radar height
Implementation: src/physics/terrain.py::TerrainMap
RadarSim implements amplitude-comparison monopulse for sub-beamwidth angular accuracy.
The error signal
Theoretical Accuracy:
$$ \sigma_\theta = \frac{\theta_{3dB}}{k_m \sqrt{2 \cdot SNR}} $$
Where
Implementation: src/tracking/monopulse.py
-
Range:
$R_{max} = c / (2 \cdot PRF)$ -
Velocity:
$V_{max} = (\lambda \cdot PRF) / 4$
Targets traveling at multiples of the blind speed will appear stationary (zero Doppler) due to aliasing: $$ V_{blind} = n \cdot \frac{\lambda \cdot PRF}{2} $$
Implementation: src/ui/analysis/ambiguity_plot.py
RadarSim models clutter as a statistical process that degrades the effective SNR:
| Type | Distribution | Typical |
|---|---|---|
| Ground | Weibull | -15 to -25 dB |
| Sea | GIT Model (Douglas Sea State) | -20 to -45 dB |
| Rain | Marshall-Palmer | Variable ( |
Implementation: src/physics/clutter.py
-
Skolnik, M.I. (2008). Radar Handbook, 3rd Edition. McGraw-Hill.
- Chapter 2: Radar equation fundamentals
- Chapter 6: Antenna theory
- Chapter 7: RCS models
-
ITU-R P.676-12 (2019). Attenuation by atmospheric gases. International Telecommunication Union.
-
Barton, D.K. (2005). Radar System Analysis and Modeling. Artech House.
- Swerling models derivation
-
Blake, L.V. (1980). Radar Range-Performance Analysis. Artech House.
- 4/3 Earth model origins
Document generated for RadarSim v1.0.0