Как рассчитать надёжность связи на низких частотах.
Как рассчитать надёжность связи на низких частотах
Этот пример моделирует ключевые параметры системы спутниковой связи и рассчитывает два важнейших показателя: бюджет линии связи и вероятность обнаружения сигнала. Пройдя по шагам этого кода, вы сможете:
- Рассчитать потери сигнала на трассе с учетом геометрии (наклонная дальность, радиогоризонт), атмосферы и замираний.
- Оценить отношение сигнал/шум (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 θ₀)— ключевой параметр для следующих расчётов потерь.
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;
D_surface = R_earth * θ0
println("Дальность по поверхности Земли: $(round(D_surface, digits=1)) км")
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)) км")
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)) км")
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: Соответствует результату расчёта бюджета.
L_fs = 32.45 + 20*log10(D_slant) + 20*log10(f_MHz)
println("Ослабление в свободном пространстве: $(round(L_fs, digits=2)) дБ")
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)) дБ")
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)) дБВт")
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)) дБВт")
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)) дБ/К")
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)))")
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).
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))")
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))")
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)")
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)
Вывод
В этом примере мы реализовали строгий научный подход к оценке реального канала связи:
- Расчёт геометрии трассы с учётом сферичности Земли и рефракции.
- Полный энергетический бюджет линии (Link Budget) по модели Фрииса-ITU.
- Оценку качества приёма в шумах (термодинамика + коэффициент шума).
- Математически корректный прогноз надёжности связи на основе вероятностной модели (статистическая теория обнаружения).
- Проверку чувствительности системы к изменению частоты (50 МГц).
Код демонстрирует, как классические формулы радиотехники и теории связи превращаются в рабочий инструмент расчёта надёжности систем. Его можно использовать как базу для более сложных моделей, включая влияние интерференции, типов модуляции и кодирования.