RadarSim implements standard radar signal processing algorithms including detection, filtering, and imaging.
- 1. CFAR Detection
- 2. Pulse Compression
- 3. Doppler Processing
- 4. Range-Doppler Maps
- 5. MTI Filtering
- 6. Clutter Models
- 7. SAR Image Formation
- 8. Probability of Detection
- 9. B-Scope ECM Strobe
- 10. ROC Curve Analysis
- 11. SNR Histogram
- References
File: src/signal/cfar.py
┌─────────────────────────────────────────────────────────┐
│ Ref Cells │ Guard │ CUT │ Guard │ Ref Cells │
│ (N/2) │ (G) │ │ (G) │ (N/2) │
└─────────────────────────────────────────────────────────┘
Threshold:
Where
The A-Scope (Phase 23) shows CFAR cells on mouse hover:
- Red line: Cell Under Test (CUT)
- Grey region: Guard cells
- Green region: Reference cells
RadarSim generates LFM waveforms for improved range resolution:
Where
The matched filter output maximizes SNR:
Pulse Compression Ratio:
Implementation: src/signal/waveforms.py::LFMWaveform
For monostatic radar with radial velocity
-
Resolution:
$\Delta v = \lambda / (2 \cdot N \cdot T_{PRI})$ -
Max Unambiguous Velocity:
$v_{max} = \pm (PRF \cdot \lambda) / 4$
Implementation: src/physics/radar_equation.py
- Collect CPI: Gather N pulses of raw I/Q data.
- Range FFT: FFT along fast-time (range bins).
- Doppler FFT: FFT along slow-time (pulses).
- CFAR: Apply 2D CFAR detection.
Implementation: src/ui/range_doppler.py
File: src/simulation/engine.py
Targets with radial velocity below threshold are rejected as clutter.
Logic:
if abs(target_velocity_radial) < mti_threshold:
target.is_detected = False # ClutterFile: src/physics/clutter.py
Uses Georgia Tech Research Institute (GIT) empirical model based on Douglas Sea State:
Accounts for:
- Sea State (0-6)
- Grazing angle
- Wind direction (implied)
File: src/advanced/sar_isar.py
Where
Where
| Algorithm | Description |
|---|---|
| Range-Doppler (RDA) | Standard SAR processing |
| Backprojection (BPA) | Time-domain focusing |
| Omega-K (ωK) | Wavenumber domain |
| Chirp Scaling (CSA) | Efficient, no interpolation |
Doppler Rate:
Range Cell Migration:
Stolt Interpolation:
File: src/physics/metrics.py
Required SNR for given
Where:
$A = \ln(0.62 / P_{fa})$ $B = \ln(P_d / (1 - P_d))$
For Swerling I targets:
File: src/ui/b_scope.py
When jamming is detected, vertical "noise bars" appear at the jammer azimuth:
Jammer at 30°
│
▼
┌────────║─────────────────────────────────┐
│████████║████████ │ Range
│████████║████████ │ ↑
│████████║████████ ← Yellow strobe │
│████████║████████ │
└────────║─────────────────────────────────┘
Azimuth →
Implementation:
LinearRegionItempool for up to 5 simultaneous jammers- Yellow semi-transparent brush (255, 255, 0, 60)
- Strobe width: 5° centered on jammer azimuth
File: src/ui/analysis/roc_curve.py
Plots
| Model | Fluctuation Type |
|---|---|
| 0 | Non-fluctuating |
| 1 | Slow, Rayleigh |
| 3 | Slow, Chi-square |
Shows current radar operating point on ROC curve.
File: src/ui/analysis/snr_histogram.py
Real-time distribution of detection SNR values:
| Zone | SNR Range | Color |
|---|---|---|
| Weak | < 10 dB | Red |
| Moderate | 10-20 dB | Yellow |
| Strong | > 20 dB | Green |
- Mean SNR
- Median SNR
- Standard Deviation
- Total Detections
- Richards, M.A. - Fundamentals of Radar Signal Processing, 2014
- Cumming & Wong - Digital Processing of SAR Data, 2005
- Rohling, H. - "Radar CFAR Thresholding", IEEE TAES, 1983
- Swerling, P. - "Probability of Detection", IRE Trans, 1960