EW SYSTEMS CALCULATOR

Electronic Warfare — Interactive calculations, formulas, and term definitions

EW Systems Calculator — Based on "Electronic Warfare Systems Vol. I" by G.M. Thomas

📡

Radar & Counter-Radar

Radar range equation, J/S ratio, spot/barrage jamming, DRFM, Friis transmission

🎯

Electronic Attack

Required jammer EIRP, escort jammer J/S, power budget, jamming effectiveness

👁

ESM / SIGINT

PDW clustering, TDOA geolocation, Cramér-Rao bound, detection probability

🛰

Navigation Warfare

GPS jamming range, required J/S for NAVWAR, CRPA antenna pattern, spoofing

🔭

IR / Electro-Optical

Planck's law, LWIR detection SNR, matched filter, sensor fusion, quantum SNR

📻

EW Receivers

Noise figure, receiver sensitivity, IQ imbalance, superheterodyne design

How to Use

Select a domain from the top navigation or sidebar. Each calculator shows:
  • Term definitions — what each variable means in EW context
  • Formula — the governing equation
  • Interactive inputs — enter your parameters
  • Computed result — with operational interpretation
  • Python snippet — the equivalent code from the book

Radar Systems & Counter-Radar Techniques — Ch. 7

📡 Radar Range Equation

Ch. 7.1
Radar Range Equation — determines the maximum range at which a radar can detect a target. Fundamental to all radar performance analysis and jamming effectiveness.
P_t
Transmit power (W)
G_t
Transmit antenna gain
G_r
Receive antenna gain
σ
Radar cross-section of target (m²)
λ
Wavelength (m)
S_min
Minimum detectable signal (W)
R_max = [ (P_t · G_t · G_r · σ · λ²) / ((4π)³ · S_min) ]^(1/4)
Watts
linear (e.g. 30 dB → 1000)
linear
m² (1 m² ≈ fighter aircraft)
GHz (X-band ~10 GHz)
Watts (≈ -100 dBm typical)
Max Detection Range
km
▶ Python snippet
import numpy as np

def radar_range(Pt, Gt, Gr, sigma, freq_GHz, S_min):
    """Radar range equation — returns max range in km"""
    lam = 3e8 / (freq_GHz * 1e9)          # wavelength
    numerator   = Pt * Gt * Gr * sigma * lam**2
    denominator = (4 * np.pi)**3 * S_min
    R_max = (numerator / denominator)**(1/4)    # metres
    return R_max / 1e3                           # km

🔇 Radar Jamming J/S Ratio

Ch. 7.4
Jamming-to-Signal (J/S) Ratio — the ratio of jammer power received at the radar receiver to the target echo power. J/S > 0 dB means the jamming masks the target; higher is more effective. Must exceed radar's burn-through threshold.
P_j
Jammer transmit power (W)
G_j
Jammer antenna gain toward radar
G_t
Radar transmit antenna gain
R_j
Jammer-to-radar range (km)
R_t
Target-to-radar range (km)
σ
Target RCS (m²)
J/S = (P_j · G_j · 4π · R_t²) / (P_t · G_t · σ) · (R_j)⁻²
[dB] = P_j(dBW) + G_j(dB) + 10log(4π) + 20log(R_t) − P_t(dBW) − G_t(dB) − 10log(σ) − 20log(R_j)
Watts
linear (20 dB → 100)
Watts
linear
km
km
J/S
dB
▶ Python snippet
import numpy as np

def compute_js_ratio(Pj, Gj, Pt, Gt, sigma, Rt_km, Rj_km):
    """Jamming-to-Signal ratio for self-protection or escort jamming.
    Returns J/S in dB. Positive means jamming dominates."""
    Rt = Rt_km * 1e3
    Rj = Rj_km * 1e3
    # Power ratio (linear)
    js_linear = (Pj * Gj * 4 * np.pi * Rt**2) / (Pt * Gt * sigma * Rj**2)
    js_dB = 10 * np.log10(js_linear)
    return js_dB

# Operational note: J/S > 0 dB masks target; typical ERP requirement: 6–20 dB

📶 Friis Transmission Equation

Ch. 3–4
Friis Transmission Equation — the received power in a free-space RF link. Foundation for all EW link budgets: radar, communications jamming, and ES interception range.
P_r
Received power (W)
P_t
Transmit power (W)
G_t, G_r
Tx/Rx antenna gains (linear)
λ
Wavelength = c/f
R
Range (m)
P_r = P_t · G_t · G_r · (λ / 4πR)²
Watts
linear
linear
GHz
km
Received Power
dBm
▶ Python snippet
import numpy as np

def friis(Pt_W, Gt, Gr, freq_GHz, R_km):
    """Friis transmission — returns received power in dBm"""
    lam = 3e8 / (freq_GHz * 1e9)
    R   = R_km * 1e3
    Pr  = Pt_W * Gt * Gr * (lam / (4 * np.pi * R))**2
    return 10 * np.log10(Pr * 1e3)   # dBm

Electronic Attack (EA) / ECM — Ch. 5–6

📡 Required Jammer EIRP

Ch. 5.3
EIRP (Effective Isotropic Radiated Power) — the product of transmitter power and antenna gain. Determines how much ERP a jammer must produce to achieve a specified J/S at a given range. This is the key jammer sizing calculation.
EIRP_jam
Required jammer EIRP = P_j × G_j (W)
J/S_req
Required J/S ratio (linear)
P_t · G_t
Radar EIRP (W)
σ
Target RCS (m²)
R_j
Jammer-to-radar range (m)
R_t
Target-to-radar range (m)
EIRP_jam = (J/S_req · P_t · G_t · σ · R_j²) / (4π · R_t²)
dB (6 dB = safe mask threshold)
Watts
linear (35 dB → 3162)
km
km
Required EIRP
dBW
▶ Python snippet
import numpy as np

def required_jammer_eirp(js_req_dB, Pt, Gt, sigma, Rt_km, Rj_km):
    """Compute required jammer EIRP (dBW) to achieve specified J/S.
    Follows Listing 5.9 from the book."""
    js_req = 10**(js_req_dB / 10)         # dB → linear
    Rt = Rt_km * 1e3
    Rj = Rj_km * 1e3
    # Required EIRP = J/S * (Pt*Gt*sigma) / (4*pi) * (Rj/Rt)^2
    eirp_linear = js_req * Pt * Gt * sigma * (Rj / Rt)**2 / (4 * np.pi)
    eirp_dBW    = 10 * np.log10(eirp_linear)
    return eirp_dBW, eirp_linear

eirp_dBW, eirp_W = required_jammer_eirp(6, 50e3, 3162, 1, 100, 110)
print(f"Required EIRP: {eirp_dBW:.1f} dBW ({eirp_W/1e3:.2f} kW)")

✈️ Escort Jammer J/S

Ch. 5.3.2
Escort Jammer — a dedicated jamming aircraft flying near the strike package. Unlike self-protection jamming (same platform), the escort jammer trades proximity for protection of multiple platforms. Key trade: maximize J/S while minimising own radar return.
P_j
Jammer transmit power (W)
G_j
Jammer antenna gain toward radar
G_r
Radar receive antenna gain
R_j
Escort-to-radar range
R_t
Target-to-radar range
H[J/S] = (P_j · G_j · G_r / (4πR_j)²) / (P_t · G_t · G_r · σ / ((4π)³ · R_t⁴ · λ²))
Simplified: J/S [dB] = EIRP_j(dBW) − 20log(R_j) − Radar_EIRP(dBW) + 10log(σ) + 20log(R_t)
Watts
linear (25 dB → 316)
Watts
linear
km
km
GHz
Escort J/S
dB
▶ Python snippet
import numpy as np

def escort_js(Pj, Gj, Pt, Gt, sigma, Rj_km, Rt_km, freq_GHz):
    """Escort Jammer J/S ratio.
    Uses full bistatic radar equation vs one-way jammer path."""
    lam = 3e8 / (freq_GHz * 1e9)
    Rj, Rt = Rj_km*1e3, Rt_km*1e3
    # Jammer signal at radar receiver (one-way)
    Sj = (Pj * Gj * lam**2) / (4 * np.pi * Rj)**2
    # Target echo at radar receiver (two-way)
    Se = (Pt * Gt * sigma * lam**2) / ((4*np.pi)**3 * Rt**4)
    js = 10 * np.log10(Sj / Se)
    return js

# G_r cancels (same receive antenna sees both jammer and target)

Electronic Support Measures / SIGINT — Ch. 4

👁 ES Intercept Range

Ch. 4.1
ES Intercept Range — how far an Electronic Support receiver can detect an emitter, given the emitter's EIRP, the ES system sensitivity, and free-space path loss. ES receivers typically operate at much lower thresholds than radar receivers, giving them much longer intercept ranges than the radar's own detection range.
EIRP
Emitter EIRP = P_t × G_t (W)
G_es
ES receive antenna gain
S_es
ES receiver sensitivity (W)
λ
Wavelength
R_es = (λ/4π) · √(EIRP · G_es / S_es)
Watts
linear (35 dB)
linear (omnidirectional = 1)
dBm (typical ES: −100 to −130 dBm)
GHz
ES Intercept Range
km
▶ Python snippet
import numpy as np

def es_intercept_range(Pt, Gt, Ges, S_es_dBm, freq_GHz):
    """ES receiver intercept range — returns km"""
    lam    = 3e8 / (freq_GHz * 1e9)
    S_es   = 10**(S_es_dBm/10) * 1e-3     # dBm → W
    EIRP   = Pt * Gt
    R = (lam / (4 * np.pi)) * np.sqrt(EIRP * Ges / S_es)
    return R / 1e3

# ES typically intercepts 2–5× radar's own detection range

📍 TDOA Geolocation Accuracy (CRLB)

Ch. 4.1
TDOA (Time Difference of Arrival) — passive geolocation by measuring when a signal arrives at multiple sensors. The Cramér-Rao Lower Bound (CRLB) gives the theoretical minimum position error achievable given SNR and timing precision.
σ_t
Timing measurement noise (seconds)
c
Speed of light (3×10⁸ m/s)
N_obs
Number of independent TDOA observations
SNR
Signal-to-noise ratio at each sensor (linear)
σ_pos ≈ c · σ_t / √N_obs
σ_t (CRLB) = 1 / (2π · B · √(2·SNR)) where B = signal bandwidth
MHz
dB
sensor pairs (min 2 for 2D fix)
Position CRLB (1σ)
m
▶ Python snippet
import numpy as np

def tdoa_crlb(BW_MHz, snr_dB, N_obs):
    """Cramér-Rao Lower Bound for TDOA position accuracy."""
    B    = BW_MHz * 1e6
    snr  = 10**(snr_dB / 10)
    c    = 3e8
    # Timing noise standard deviation (CRLB)
    sigma_t = 1 / (2 * np.pi * B * np.sqrt(2 * snr))
    # Position error
    sigma_pos = c * sigma_t / np.sqrt(N_obs)
    return sigma_pos   # metres (1σ)

# Example: 10 MHz BW, 20 dB SNR, 3 pairs → sub-10m accuracy

Navigation Warfare (NAVWAR) — Ch. 9

🛰 GPS Jamming Range

Ch. 9.1
GPS Jamming Range — the radius within which a ground jammer can deny GPS to a receiver. GPS signals are extremely weak (~−130 dBm at surface), so relatively low-power jammers can deny GPS over large areas. The equation uses the legacy C/A code performance model.
P_j
Jammer transmit power (W)
G_j
Jammer antenna gain
J/S_req
Required J/S to deny GPS (typically 10–35 dB for C/A)
G_r
GPS receiver antenna gain (typically ~3 dB)
C/N₀
GPS signal carrier-to-noise density (dB-Hz)
R_jam = (λ/4π) · √(P_j · G_j · G_r / (J/S_req · S_gps))
where S_gps ≈ −130 dBm (L1 C/A surface received power)
Watts
linear (omni = 1)
dB (C/A code: ~20–35 dB)
linear (patch antenna ≈ 3 dB → 2)
Jamming Radius
km
▶ Python snippet
import numpy as np

def gps_jam_range(Pj_W, Gj, js_req_dB, Gr=2.0):
    """GPS L1 C/A jamming radius (km).
    For the legacy C/A code, R_c = 1/(23 × 10^-3), G_c = 0, J/S ≥ 10 dB,
    maintaining lock: J/S ≥ 10-25 dB, acquisition: J/S ≥ 25-35 dB."""
    f_L1    = 1575.42e6   # L1 frequency Hz
    lam     = 3e8 / f_L1
    S_gps   = 10**(-130/10) * 1e-3   # −130 dBm → W
    js_req  = 10**(js_req_dB/10)
    R = (lam / (4*np.pi)) * np.sqrt(Pj_W * Gj * Gr / (js_req * S_gps))
    return R / 1e3

print(f"10W omni jammer @ J/S=20dB: {gps_jam_range(10,1,20):.1f} km")

Infrared & Electro-Optical Countermeasures — Ch. 10

🌡 Planck's Law — Blackbody Spectral Radiance

Ch. 10.1 Eq.10.1
Planck's Law — describes the spectral power distribution of radiation from a blackbody at temperature T. Fundamental to IR signature prediction, missile seeker design, and IRCM effectiveness. Peak wavelength shifts to shorter wavelengths at higher temperatures (Wien's Law: λ_peak = 2898/T μm).
B(λ,T)
Spectral radiance (W/m²/sr/m)
h
Planck constant = 6.626×10⁻³⁴ J·s
c
Speed of light = 3×10⁸ m/s
k
Boltzmann constant = 1.381×10⁻²³ J/K
λ
Wavelength (μm)
T
Temperature (K)
B(λ,T) = 2hc² / λ⁵ · 1/(exp(hc/λkT) − 1)
Kelvin (jet exhaust ~800–1100 K)
μm (MWIR band: 3–5 μm)
Spectral Radiance
W/m²/sr/μm
▶ Python snippet
import numpy as np

h = 6.626e-34; c = 3e8; k = 1.381e-23

def planck_radiance(lam_um, T):
    """Spectral radiance of blackbody (W/m²/sr/m).
    lam_um: wavelength in micrometres, T: temperature in Kelvin"""
    lam = lam_um * 1e-6                          # μm → m
    B = (2*h*c**2 / lam**5) / (np.exp(h*c/(lam*k*T)) - 1)
    return B * 1e-6                               # → W/m²/sr/μm

# Wien's Law peak wavelength
wien_peak = 2898 / T   # μm

🎯 IR Sensor Detection SNR

Ch. 10.2 Eq.10.41
IR Detection SNR — signal-to-noise ratio for an electro-optical sensor detecting a target against background clutter. Determines probability of detection and false-alarm rate. Background-limited detection is the typical regime for airborne IRCM seekers.
SNR
Signal-to-noise ratio (linear)
η
Detector quantum efficiency (0–1)
Φ_s
Signal photon flux (photons/s)
Φ_b
Background photon flux (photons/s)
N
Number of detector samples integrated
SNR = η·Φ_s·√N / √(η·(Φ_s + Φ_b))
Background-limited: SNR_BLIP ≈ √(η·Φ_s·N) / √(Φ_b)
photons/s
photons/s
0–1 (InSb detector ~0.6–0.8)
frames / dwell time samples
SNR
dB
▶ Python snippet
import numpy as np

def ir_detection_snr(phi_s, phi_b, eta, N):
    """IR detector SNR — background-limited detection model.
    Returns SNR in dB and detection regime label."""
    signal  = eta * phi_s * np.sqrt(N)
    noise   = np.sqrt(eta * (phi_s + phi_b))
    snr     = signal / noise
    blip    = phi_b / phi_s          # background-to-signal ratio
    regime  = "BLIP" if blip > 10 else "Shot-noise limited"
    return 10*np.log10(snr), regime

# Detection threshold: SNR > 5–15 dB depending on P_fa requirement

📊 Wien's Displacement Law — Peak Wavelength

Ch. 10.1
Wien's Displacement Law — the wavelength at which a blackbody emits maximum spectral power. Determines which IR band (SWIR 1–2.5μm, MWIR 3–5μm, LWIR 8–12μm) to use for detecting a given target. Engine exhausts (~800–1100 K) peak in MWIR; cool fuselages (~300 K) peak in LWIR.
λ_peak = 2898 / T [μm]
Kelvin
Peak Wavelength
μm

EW Receivers & Signal Processing — Ch. 11

📻 Receiver Noise Figure & Sensitivity

Ch. 11.1 Eq.11.3
Noise Figure (NF) — how much the receiver degrades the signal-to-noise ratio of the input signal, expressed in dB. A perfect receiver has NF = 0 dB. EW receivers trade NF against bandwidth: wide-open receivers (for intercept) tolerate higher NF; superheterodyne receivers achieve lower NF over narrower bands.
NF
Noise Figure (dB)
F
Noise factor (linear) = SNR_in/SNR_out
T₀
Reference temperature = 290 K
kT₀B
Thermal noise floor = −174 dBm/Hz at 290 K
NF = 10·log₁₀(F)
S_min = kT₀B · F · SNR_min = −174 + NF + 10·log₁₀(B) + SNR_min [dBm]
dB (typical EW Rx: 4–12 dB)
MHz
dB
Receiver Sensitivity
dBm
▶ Python snippet
import numpy as np

def receiver_sensitivity(NF_dB, B_MHz, SNR_min_dB):
    """Minimum detectable signal power (dBm).
    kT0 = −174 dBm/Hz at 290 K standard temperature."""
    kT0_dBm_Hz = -174.0
    S_min = kT0_dBm_Hz + NF_dB + 10*np.log10(B_MHz*1e6) + SNR_min_dB
    return S_min

# Typical superheterodyne EW receiver: NF=6dB, B=10MHz → −108dBm sensitivity
# Wide-open receiver: NF=12dB, B=1GHz → −72dBm (much lower sensitivity)

🔧 IQ Imbalance — Image Rejection Ratio

Ch. 11.1 Eq.11.4
IQ Imbalance — imperfections in the I/Q mixer of a direct-conversion (zero-IF) or superheterodyne receiver. Amplitude imbalance (α) and phase imbalance (φ) create an image signal that leaks into the desired channel, degrading signal purity. Image Rejection Ratio (IRR) quantifies this.
α
Amplitude imbalance (linear ratio, ideal = 1.0)
φ
Phase imbalance (degrees, ideal = 0°)
IRR
Image Rejection Ratio (dB) — higher is better
IRR = 10·log₁₀( (1 + α·cos φ)² + (α·sin φ)² ) / ( (1 − α·cos φ)² + (α·sin φ)² )
ratio (1.05 = 5% error ≈ 0.4 dB)
degrees (1–5° typical)
Image Rejection Ratio
dB
▶ Python snippet
import numpy as np

def iq_image_rejection(alpha, phi_deg):
    """Image Rejection Ratio for IQ imbalance.
    alpha: amplitude imbalance (linear), phi: phase imbalance (degrees)."""
    phi = np.radians(phi_deg)
    num = (1 + alpha*np.cos(phi))**2 + (alpha*np.sin(phi))**2
    den = (1 - alpha*np.cos(phi))**2 + (alpha*np.sin(phi))**2
    irr = 10 * np.log10(num / den)
    return irr

def correct_iq(y, alpha, phi_deg):
    """Estimate IQ correction using least-squares ."""
    phi = np.radians(phi_deg)
    # Correction matrix
    A = np.array([[1, 0],
                  [-np.sin(phi)/alpha, np.cos(phi)/alpha]])
    iq = np.vstack([y.real, y.imag])
    corrected = A @ iq
    return corrected[0] + 1j*corrected[1]

🎖 EW Mission Planner — Operational & Tactical Planning Tool

⚠ Threat System

GHz
Watts
linear (35 dB)
km
m² (your aircraft)
Hold Ctrl to select multiple

✈ Own EW Assets

Watts
linear (30 dB)
km from threat radar
km from threat radar

📋 EW Mission Assessment

Configure threat and own-force parameters, then click RUN ASSESSMENT.

📄 EW Mission Brief (OPORD Format)

Configure threat and assets, then click RUN ASSESSMENT to generate brief.

📡 Integrated Air Defence System (IADS) Threat Reference

EW Terms Glossary