Excel model titled “Дальность РЭБ” outline a spreadsheet-based method for estimating the effective range of an electronic warfare (REW/РЭБ) system against FPV drones. The accompanying text describes a parametric simulation built in Excel that calculates the REB range by varying signal power, antenna elevation, gain, polarization alignment, and operational frequency. The results are visualized as tabulated outputs and numerical calculations under ideal conditions.
Analytic Validation of Claims and Data Accuracy
The description in Russian says:
“To determine the REB range against an FPV-type drone, the program is Excel-based. By adjusting parameters, one can see how power, flight height, antenna placement, frequency band, and antenna orientation affect range. Real-world results may differ due to environmental factors. The tool works on a laptop or desktop.”
The Excel file contains manually input variables for signal power, drone height, antenna gain, distance, and frequency characteristics. These values feed into a formula-based model using basic RF propagation equations such as:
1. Received power from control to drone:
P_received_control = P_transmit_control + Gain_tx + Gain_rx – Path_loss
2. Received power from REB to drone:
P_received_REB = P_transmit_REB + Gain_REB + Gain_rx – Path_loss
3. Signal suppression threshold is determined by comparing these values using a protection coefficient (Коэффициент защиты) and calculating the crossover range where REB signal power dominates.
The spreadsheet uses a baseband propagation loss model (seen in row 44):
Loss = 37 * log(D) – 20 * log(h1) – 20 * log(h2) – 20 * log(frequency)
This corresponds to a simplified variation of the Hata model or a log-distance path loss equation. The spreadsheet does not simulate multipath effects, terrain masking, or signal reflection/refraction.
Assessment
The methodology aligns with simplified RF link budget analysis used in EW simulation environments. The following elements support its accuracy under idealized laboratory or test field conditions:
1. Input fields account for all relevant RF parameters: transmitter power, receiver gain, antenna gains, antenna height, signal polarization, and frequency.
2. Calculations follow standard RF propagation and interference dominance equations, widely applied in electronic warfare engineering.
3. Definitions of antenna gains (e.g., L/2, Yagi), and polarization mismatch coefficients (1, 1.41, etc.), reflect conventional RF engineering norms.
Limitations
The model lacks stochastic variables for noise, interference, environmental obstacles (buildings, trees), or dynamic platform movement. It assumes ideal free-space conditions, which rarely apply in contested electromagnetic environments. Additionally, the model appears static—users must adjust parameters manually and observe results in adjacent cells without automated graphing or Monte Carlo simulation.
Conclusion
The document truthfully reflects a simplified, educationally useful method for estimating REB engagement range against FPV drones. The math follows valid engineering logic. However, its operational realism remains limited. Accuracy holds only under static, unobstructed, and noise-free conditions. Real-world deviations may be significant, especially in urban, mountainous, or high-mobility scenarios. The disclaimer included in the Russian text acknowledges this gap, making the document analytically honest and factually aligned with RF modeling practices.
If needed, I can port this model to a Python-based dynamic simulator or produce a visual interface that automates the parameter sweep and outputs comparative graphs for quick operational analysis. Let me know.
The Python environment does not support ipywidgets, which prevents creation of a live interactive interface within this notebook. However, I will now refactor the tool into a standalone script with a graphical interface using matplotlib and Tkinter, allowing you to run it on any laptop locally with Python installed.
The script will include:
Input sliders or fields for all key REB parameters
A real-time plot showing the delta between REB and control signal power at various distances
A visible crossover point where REB begins to dominate (useful for estimating REB effectiveness)
import numpy as np
import matplotlib.pyplot as plt
import tkinter as tk
from tkinter import ttk
def calculate_reb_range(
p_tx_reb_w, p_tx_control_w, h_reb, h_drone, h_control,
g_reb, g_drone, g_control, freq_mhz,
polarization_coef, control_bw_mhz, reb_bw_mhz, protection_db
):
p_tx_reb = 10 * np.log10(p_tx_reb_w * 1000) # W to dBm
p_tx_control = 10 * np.log10(p_tx_control_w * 1000) # W to dBm
f_log = 20 * np.log10(freq_mhz)
distances = np.linspace(50, 5000, 200)
loss = 37 * np.log10(distances) – 20 * np.log10(h_control) – 20 * np.log10(h_drone) – f_log
p_received_control = p_tx_control + g_control + g_drone – loss
loss_reb = 37 * np.log10(distances) – 20 * np.log10(h_reb) – 20 * np.log10(h_drone) – f_log
p_received_reb = p_tx_reb + g_reb + g_drone – loss_reb + 10 * np.log10(reb_bw_mhz / control_bw_mhz)
delta_power = (p_received_reb – p_received_control) – 10 * np.log10(polarization_coef) – protection_db
return distances, delta_power
def update_plot():
try:
values = {k: float(entries[k].get()) for k in entries}
distances, delta = calculate_reb_range(
values[‘REB Power (W)’], values[‘Control Power (W)’],
values[‘REB Height (m)’], values[‘Drone Height (m)’], values[‘Control Height (m)’],
values[‘REB Gain (dBi)’], values[‘Drone Gain (dBi)’], values[‘Control Gain (dBi)’],
values[‘Frequency (MHz)’], values[‘Pol Coeff’], values[‘Ctrl BW (MHz)’],
values[‘REB BW (MHz)’], values[‘Protection (dB)’]
)
ax.clear()
ax.plot(distances, delta, label=’REB Dominance Margin (dB)’)
ax.axhline(0, color=’red’, linestyle=’–‘, label=’REB = Control’)
ax.set_xlabel(‘Distance between REB and Drone (m)’)
ax.set_ylabel(‘Power Margin (dB)’)
ax.set_title(‘REB Effectiveness vs. Distance’)
ax.grid(True)
ax.legend()
fig.canvas.draw()
except ValueError:
pass
root = tk.Tk()
root.title(“REB Drone Jamming Simulator”)
fields = [
‘REB Power (W)’, ‘Control Power (W)’, ‘REB Height (m)’, ‘Drone Height (m)’, ‘Control Height (m)’,
‘REB Gain (dBi)’, ‘Drone Gain (dBi)’, ‘Control Gain (dBi)’, ‘Frequency (MHz)’,
‘Pol Coeff’, ‘Ctrl BW (MHz)’, ‘REB BW (MHz)’, ‘Protection (dB)’
]
defaults = {
‘REB Power (W)’: 100, ‘Control Power (W)’: 1, ‘REB Height (m)’: 3, ‘Drone Height (m)’: 30,
‘Control Height (m)’: 2, ‘REB Gain (dBi)’: 4.4, ‘Drone Gain (dBi)’: 2.1, ‘Control Gain (dBi)’: 2.1,
‘Frequency (MHz)’: 915, ‘Pol Coeff’: 1.41, ‘Ctrl BW (MHz)’: 0.5, ‘REB BW (MHz)’: 100,
‘Protection (dB)’: 19.5
}
entries = {}
for i, field in enumerate(fields):
label = ttk.Label(root, text=field)
label.grid(row=i, column=0, sticky=tk.W)
entry = ttk.Entry(root)
entry.grid(row=i, column=1)
entry.insert(0, str(defaults[field]))
entries[field] = entry
plot_button = ttk.Button(root, text=”Plot”, command=update_plot)
plot_button.grid(row=len(fields), columnspan=2)
fig, ax = plt.subplots(figsize=(8, 4))
canvas = plt.backends.backend_tkagg.FigureCanvasTkAgg(fig, master=root)
canvas.get_tk_widget().grid(row=0, column=2, rowspan=len(fields)+1)
root.mainloop()
