Інструмент планування радіо
Бригадне покриття
Зона Френеля
Радіохвиля — не лазерний промінь. Вона потребує вільного простору навколо прямої лінії між передавачем і приймачем. Перша зона Френеля: еліпсоїд з радіусом F1 = sqrt(λ×d/4). При 300 МГц і 10 км: F1 = 50м. Якщо дерево або пагорб входить у цю зону — сигнал слабшає 6-20 дБ. Lisa 26 розраховує F1 для кожної пари і показує де Fischer 26 потрібен як relay.
Практика: перед розгортанням сигналіст завантажує DEM району, вводить планові позиції підрозділів, Lisa 26 генерує карту покриття та рекомендує де поставити додаткові MANET ретранслятори або де Fischer 26 мусить кружляти.
Автоматичне перепланування
Під час бою підрозділи рухаються. Мертві зони змінюються. Lisa 26 перераховує покриття в реальному часі на основі GPS/MGRS позицій всіх MANET вузлів. Якщо батальйон рухається за пагорб і втрачає зв'язок — Lisa 26 автоматично рекомендує Fischer 26 змінити орбіту для relay або розмістити наземний ретранслятор на вершині.
DEM + позиції вузлів + Френель = карта покриття. Зелене — зв'язок. Червоне — мертва зона. Fischer 26 закриває більшість прогалин з висоти 200м.
← Частина Platoon Integration
Implementation
# pip install numpy
# Radio Coverage Planner — Fresnel Zone + LOS Analysis
import numpy as np
import math
def radio_coverage(tx_pos, tx_height_m, rx_positions, freq_mhz,
dem_data=None):
"""Calculate radio coverage from transmitter to multiple receivers."""
results = []
for rx_pos in rx_positions:
distance_km = haversine_km(tx_pos, rx_pos)
# Free space path loss
fspl = 20*math.log10(distance_km) + 20*math.log10(freq_mhz) + 32.44
# Fresnel zone radius at midpoint
wavelength = 300 / freq_mhz
f1_radius = math.sqrt(wavelength * distance_km * 1000 / 4)
# Line of sight (simplified, flat earth + height)
los_clear = tx_height_m > f1_radius * 0.6 # 60% Fresnel clearance
# Link budget
rx_power = 33 + 2 + 2 - fspl # tx_dbm + tx_gain + rx_gain - fspl
margin = rx_power - (-110) - 10 # noise floor - required SNR
results.append({
"position": rx_pos,
"distance_km": distance_km,
"fspl_db": fspl,
"fresnel_radius_m": f1_radius,
"los_clear": los_clear,
"margin_db": margin,
"link_ok": margin > 0 and los_clear
})
return results
def haversine_km(pos1, pos2):
R = 6371
dlat = math.radians(pos2[0] - pos1[0])
dlon = math.radians(pos2[1] - pos1[1])
a = math.sin(dlat/2)**2 + math.cos(math.radians(pos1[0])) * math.cos(math.radians(pos2[0])) * math.sin(dlon/2)**2
return R * 2 * math.asin(math.sqrt(a))
# Fischer 26 at 300 m AGL, checking coverage to 10 ground nodes
tx = (65.8, 17.5) # Norrbotten
nodes = [(65.8 + i*0.05, 17.5 + i*0.02) for i in range(10)]
coverage = radio_coverage(tx, 200, nodes, 300)
for c in coverage:
print(f" {c['distance_km']:.1f}km: margin={c['margin_db']:.0f}dB {'✓' if c['link_ok'] else '❌'}")
Практичне використання
Перед кожним вильотом: ISR-оператор вводить висоту Fischer 26, позицію GCS, і рельєф між ними. Інструмент показує: чи є LOS (пряма видимість), яка зона Френеля вільна, і яка максимальна дальність зв\'язку. Якщо LOS блокований пагорбом — оператор змінює висоту або траєкторію. Це запобігає втраті зв\'язку в польоті — проблема, що коштує €3 000 (ціна Fischer 26) кожного разу, коли трапляється.
Інструмент інтегрований у Lisa 26 COP: перед кожним вильотом автоматично перевіряє LOS між запланованими маршрутними точками і позицією GCS. Якщо будь-яка точка не має LOS — інструмент пропонує альтернативну висоту або додаткову маршрутну точку для обходу перешкоди. Результат: 0% втрат зв\'язку через непередбачувані рельєфні блокування.
Пов'язані розділи
Джерела
FSG-A документація v2.0. Український досвід 2022-2026.