Документация Engee
Notebook

Как рассчитать надёжность связи на низких частотах

Этот пример моделирует ключевые параметры системы спутниковой связи и рассчитывает два важнейших показателя: бюджет линии связи и вероятность обнаружения сигнала. Пройдя по шагам этого кода, вы сможете:

  • Рассчитать потери сигнала на трассе с учетом геометрии (наклонная дальность, радиогоризонт), атмосферы и замираний.
  • Оценить отношение сигнал/шум (SNR) на входе приемника.
  • На самом деле предсказать вероятность успешного приема сигнала в условиях шумов, что является основой для любых реальных систем связи и радиолокации.

Этот пример — отличная практическая иллюстрация к таким фундаментальным темам, как уравнение Фрииса, уравнение радиолокации и теория обнаружения сигналов.

Детальный анализ кода

1. Геометрия Земли и атмосферная рефракция

  • R_earth = 6371.0 — используется средний радиус Земли (≈6371 км), стандартное значение в спутниковых расчётах.
  • R_equiv = 8500.0 — вводится эффективный радиус Земли (4/3 R_earth) ≈ 8500 км. Исправление учётом рефракции в стандартной атмосфере (ITU-R P.310-9) — критично для оценки кривизны трассы распространения радиоволн.
  • D_horizon рассчитывается через теорему Пифагора: √((R+h)² - R²) — точное геометрическое выражение для длины отрезка касательной к окружности Земли, выходящей из точки на высоте h. Суммирование горизонтов передатчика и приёмника даёт дальность прямой радиовидимости.
  • D_slant — наклонная дальность по теореме косинусов: √(R₁² + R₂² - 2·R₁·R₂·cos θ₀) — ключевой параметр для следующих расчётов потерь.
In [ ]:
using SpecialFunctions

R_earth = 6371.0
R_equiv = 8500.0
f_MHz = 49.0
P_tx_W = 100.0
Δf_MHz = 0.025
Δf_Hz = Δf_MHz * 1e6

φN = 0.965167; λN = 1.448623; ΔhN0 = 0.162; h_ant_tx = 0.016; h_tx = ΔhN0 + h_ant_tx
φM = 0.0; λM = 1.666789; ΔhM = 0.0

G_tx_dBi = 22.0
G_rx_dBi = 35.0
NF_dB = 3.0
pfa = 1e-5
T0 = 290.0

θ0 = 0.981489
h_rx = 36423.578;
In [ ]:
D_surface = R_earth * θ0
println("Дальность по поверхности Земли: $(round(D_surface, digits=1)) км")
Дальность по поверхности Земли: 6253.1 км
In [ ]:
D_horizon_rx = sqrt((R_equiv + h_rx)^2 - R_equiv^2)
D_horizon_tx = sqrt((R_equiv + h_tx)^2 - R_equiv^2)
D_radio_vis = D_horizon_rx + D_horizon_tx
println("Дальность прямой радиовидимости: $(round(D_radio_vis, digits=1)) км")
Дальность прямой радиовидимости: 44167.1 км
In [ ]:
R_tx = R_earth + h_tx
R_rx = R_earth + h_rx
D_slant = sqrt(R_tx^2 + R_rx^2 - 2*R_tx*R_rx*cos(θ0))
println("Наклонная дальность: $(round(D_slant, digits=1)) км")
Наклонная дальность: 39609.3 км

2. Расчёт бюджета линии связи (Link Budget)

  • Потери в свободном пространстве (Free Space Path Loss, FSPL): L_fs = 32.45 + 20·log10(D_slant) + 20·log10(f_MHz) — широко распространённая в инженерии форма уравнения Фрииса. Константа 32,45 при D_slant [км] и f_MHz — эталонный базис для всех последующих расчётов (ITU-R P.525).
  • Суммарные потери: В модели включаются L_atm, L_rain, L_fading, L_pol.
  • Мощность на входе приёмника: Базовое уравнение баланса мощностей: P_rx = P_tx + G_tx + G_rx - L_total.
  • Мощность теплового шума: Рассчитывается по формуле Найквиста: N = 10·log10(k·T0·Δf) c постоянной Больцмана k = 1.38·10⁻²³ Дж/К. Добавление коэффициента шума NF (в дБ) даёт полную мощность шумов на выходе приёмника.
  • SNR: Соответствует результату расчёта бюджета.
In [ ]:
L_fs = 32.45 + 20*log10(D_slant) + 20*log10(f_MHz)
println("Ослабление в свободном пространстве: $(round(L_fs, digits=2)) дБ")
Ослабление в свободном пространстве: 158.21 дБ
In [ ]:
L_atm = 0.02
L_rain = 0.0
L_fading = 3.0
L_pol = 3.0
L_add = L_atm + L_rain

L_total = L_fs + L_add + L_fading + L_pol
println("Атмосферные/дождевые потери: $(round(L_add, digits=2)) дБ")
println("Запас на замирания (Fading): $(L_fading) дБ")
println("Поляризационные потери: $(L_pol) дБ")
println("Полные потери (L_total): $(round(L_total, digits=2)) дБ")
Атмосферные/дождевые потери: 0.02 дБ
Запас на замирания (Fading): 3.0 дБ
Поляризационные потери: 3.0 дБ
Полные потери (L_total): 164.23 дБ
In [ ]:
P_tx_dBW = 10*log10(P_tx_W)
P_rx_dBW = P_tx_dBW + G_tx_dBi + G_rx_dBi - L_total
println("Мощность на входе приёмника: $(round(P_rx_dBW, digits=2)) дБВт")
Мощность на входе приёмника: -87.23 дБВт
In [ ]:
N_thermal_dBW_Hz = 10*log10(1.38e-23 * T0)
N_total_dBW = N_thermal_dBW_Hz + NF_dB + 10*log10(Δf_Hz)
println("Мощность теплового шума: $(round(N_total_dBW, digits=2)) дБВт")
Мощность теплового шума: -157.0 дБВт
In [ ]:
T_sys = T0 * 10^(NF_dB / 10)
G_over_T = G_rx_dBi - 10*log10(T_sys)
println("Системная шумовая температура T_sys: $(round(T_sys, digits=1)) К")
println("Отношение усиления к шуму G/T: $(round(G_over_T, digits=2)) дБ/К")
Системная шумовая температура T_sys: 578.6 К
Отношение усиления к шуму G/T: 7.38 дБ/К
In [ ]:
SNR_dB = P_rx_dBW - N_total_dBW
SNR_lin = 10^(SNR_dB / 10)
println("SNR: $(round(SNR_dB, digits=2)) дБ (линейное: $(round(SNR_lin, digits=2)))")
SNR: 69.77 дБ (линейное: 9.47974362e6)

3. Анализ обнаружения сигнала в шумах (Detection Theory)

3.1. Расчёт порога обнаружения по заданной вероятности ложной тревоги (P_fa)
Порог Q_fa устанавливается по формуле: Q_fa = √(-2·ln(P_fa)). Это точное решение интеграла хвоста нормального распределения — стандартный метод расчёта порога для детектирования сигнала в гауссовском шуме по критерию Неймана-Пирсона. При P_fa = 10⁻⁵ получаем порог Q_fa ≈ 4,7985 — корректно.

3.2. Вычисление вероятности правильного обнаружения (P_d)
Вероятность обнаружения для нефлуктуирующего (Swerling 0) сигнала в гауссовом шуме вычисляется через Q-функцию Маркума, которая сводится к дополнительной функции ошибок erfc: P_d = 0,5·erfc( (Q_fa - √(2·SNR_lin)) / √2 ). Этот подход — базовый для моделирования «жёсткого» решения («сигнал присутствует/отсутствует») и описан в классической литературе (Skolnik, Van Trees).

In [ ]:
Q_fa = sqrt(-2 * log(pfa))
arg = (Q_fa - sqrt(2 * SNR_lin)) / sqrt(2)
P_d = clamp(0.5 * erfc(arg), 0.0, 1.0)
println("Порог Q_fa: $(round(Q_fa, digits=4))")
println("Вероятность обнаружения P_d: $(round(P_d, digits=6))")
Порог Q_fa: 4.7985
Вероятность обнаружения P_d: 1.0
In [ ]:
f2_MHz = 50.0
L_fs2 = 32.45 + 20*log10(D_slant) + 20*log10(f2_MHz)
L_total2 = L_fs2 + L_add + L_fading + L_pol
P_rx_dBW2 = P_tx_dBW + G_tx_dBi + G_rx_dBi - L_total2
SNR_dB2 = P_rx_dBW2 - N_total_dBW
SNR_lin2 = 10^(SNR_dB2 / 10)
arg2 = (Q_fa - sqrt(2 * SNR_lin2)) / sqrt(2)
P_d2 = clamp(0.5 * erfc(arg2), 0.0, 1.0)

println("\nРезультаты для частоты $(f2_MHz) МГц")
println("SNR: $(round(SNR_dB2, digits=2)) дБ")
println("Вероятность обнаружения: $(round(P_d2, digits=6))")
Результаты для частоты 50.0 МГц
SNR: 69.59 дБ
Вероятность обнаружения: 1.0
In [ ]:
println("\nЗАКЛЮЧЕНИЕ")
if P_d > 0.999
    println("Сигнал устойчив, P_d ≈ 1.0")
elseif P_d > 0.9
    println("Сигнал стабилен, P_d = $(round(P_d, digits=3))")
else
    println("Вероятность обнаружения недостаточна: P_d = $(round(P_d, digits=3))")
end
println("Полные потери: $(round(L_total, digits=2)) дБ")
println("Шумы: $(round(N_total_dBW, digits=2)) дБВт")
println("Теория: Link Budget (ITU-R), Detection Theory (Skolnik, Van Trees)")
ЗАКЛЮЧЕНИЕ
Сигнал устойчив, P_d ≈ 1.0
Полные потери: 164.23 дБ
Шумы: -157.0 дБВт
Теория: Link Budget (ITU-R), Detection Theory (Skolnik, Van Trees)
In [ ]:
results = Dict(
    "SNR_dB" => round(SNR_dB, digits=2),
    "P_d" => P_d,
    "P_rx_dBW" => round(P_rx_dBW, digits=2),
    "L_total" => round(L_total, digits=2),
    "G_over_T_dB_per_K" => round(G_over_T, digits=2),
    "Frequency_MHz" => f_MHz
)
println("\nСтруктурированные результаты: ", results)
Структурированные результаты: Dict("L_total" => 164.23, "SNR_dB" => 69.77, "G_over_T_dB_per_K" => 7.38, "P_d" => 1.0, "Frequency_MHz" => 49.0, "P_rx_dBW" => -87.23)

Вывод

В этом примере мы реализовали строгий научный подход к оценке реального канала связи:

  • Расчёт геометрии трассы с учётом сферичности Земли и рефракции.
  • Полный энергетический бюджет линии (Link Budget) по модели Фрииса-ITU.
  • Оценку качества приёма в шумах (термодинамика + коэффициент шума).
  • Математически корректный прогноз надёжности связи на основе вероятностной модели (статистическая теория обнаружения).
  • Проверку чувствительности системы к изменению частоты (50 МГц).

Код демонстрирует, как классические формулы радиотехники и теории связи превращаются в рабочий инструмент расчёта надёжности систем. Его можно использовать как базу для более сложных моделей, включая влияние интерференции, типов модуляции и кодирования.