Расчет эквивалентной шумовой температуры антенной системы
Author
In [ ]:
# ================================================================
# РАСЧЁТ ШУМОВОЙ ТЕМПЕРАТУРЫ ПРИЁМНОЙ АНТЕННЫ ЗЕМНОЙ СТАНЦИИ
# Применимость: f = 1…20 ГГц, угол места ε ≥ 5°
# Нормативная база: ITU-R P.618-13
# ================================================================
using Printf
# ================================================================
# МОДУЛЬ 1. ВСПОМОГАТЕЛЬНЫЕ ФУНКЦИИ
# Перевод между дБ и линейным масштабом —
# используется во всех последующих расчётах
# ================================================================
db_to_linear(x_dB) = 10.0^(x_dB / 10.0)
linear_to_db(x) = 10.0 * log10(x)
# ================================================================
# МОДУЛЬ 2. ВХОДНЫЕ ДАННЫЕ
# Для каждого параметра задано значение по умолчанию —
# программа работает сразу без ввода данных
# ================================================================
ε = 30.0 # Угол места антенны, ° (диапазон: 5°…90°)
f_GHz = 8.0 # Рабочая частота, ГГц (диапазон: 1…20 ГГц)
α_dB = 0.5 # Затухание в тракте, дБ (вводить положительным числом)
T_msu = 50.0 # Шумовая температура МШУ, К
const T0 = 290.0 # Стандартная температура (для расчёта шумов тракта)
# ================================================================
# МОДУЛЬ 3. КОЭФФИЦИЕНТ ПЕРЕДАЧИ ВОЛНОВОДНОГО ТРАКТА
# η_в = 10^(−α/10)
# Затухание α — положительное число в дБ, минус в показателе
# степени обязателен: тракт ослабляет сигнал, поэтому η_в < 1
# ================================================================
η_v = db_to_linear(-α_dB)
# ================================================================
# МОДУЛЬ 4. ТРИ СОСТАВЛЯЮЩИЕ ШУМОВОЙ ТЕМПЕРАТУРЫ АНТЕННЫ
#
# T_атм — аппроксимация ITU-R P.618-13, зависимость от f и ε
# T_косм — степенной закон для галактического фона + реликтовое
# излучение 2.7 К; коэф. 0.5 учитывает, что антенна
# принимает излучение только из верхней полусферы
# c·T_З — вклад Земли через боковые лепестки: 23 + 0.2·(90 − ε)
# ================================================================
function calc_T_atm(f_GHz::Float64, ε_deg::Float64)::Float64
ε_eff = max(ε_deg, 5.0) # модель справедлива при ε ≥ 5°
base = 270.0 * (1.0 - exp(-0.1 / sind(ε_eff))) # зависимость от угла места
f_corr = 1.0 + 0.005 * (f_GHz - 10.0)^2 /
(1.0 + 0.01 * f_GHz) # частотная коррекция
return base * f_corr
end
function calc_T_cosm(f_GHz::Float64)::Float64
T_galaxy = 25.0 * f_GHz^(-2.75) # галактический фон (синхротронное излучение)
T_cmb = 2.7 # реликтовое излучение, К — константа
return 0.5 * (T_galaxy + T_cmb) # 0.5 — антенна видит только верхнюю полусферу
end
T_atm_val = calc_T_atm(f_GHz, ε)
T_cosm_val = calc_T_cosm(f_GHz)
cTZ = 23.0 + 0.2 * (90.0 - ε)
T_A = T_atm_val + T_cosm_val + cTZ
# ================================================================
# МОДУЛЬ 5. СУММАРНАЯ ШУМОВАЯ ТЕМПЕРАТУРА ПРИЁМНОЙ СИСТЕМЫ
# T_Σ = T_A · η_в + T₀ · (1 − η_в) + T_пр
# ↑ ↑ ↑
# вклад антенны, шумы волноводного шумы МШУ
# ослабленный трактом тракта
# ================================================================
T_waveguide = T0 * (1.0 - η_v)
T_total = T_A * η_v + T_waveguide + T_msu
# ================================================================
# ВЫВОД РЕЗУЛЬТАТОВ
# ================================================================
println("=" ^ 60)
println(" РАСЧЁТ ШУМОВОЙ ТЕМПЕРАТУРЫ ПРИЁМНОЙ АНТЕННЫ ЗС")
println("=" ^ 60)
println("\n ВХОДНЫЕ ПАРАМЕТРЫ")
println("-" ^ 60)
@printf(" Угол места антенны ε : %6.1f °\n", ε)
@printf(" Рабочая частота f : %6.2f ГГц\n", f_GHz)
@printf(" Затухание в тракте α : %6.2f дБ\n", α_dB)
@printf(" Шумовая температура МШУ T_пр : %6.1f К\n", T_msu)
println("\n ПРОМЕЖУТОЧНЫЕ РЕЗУЛЬТАТЫ")
println("-" ^ 60)
@printf(" Коэф. передачи тракта η_в : %6.4f ( %.3f дБ )\n",
η_v, linear_to_db(η_v))
@printf(" T атмосферы T_атм : %6.2f К\n", T_atm_val)
@printf(" T космоса T_косм : %6.2f К\n", T_cosm_val)
@printf(" T Земли (бок. лепестки) c·T_З : %6.2f К\n", cTZ)
@printf(" Шумовая т-ра антенны T_A : %6.2f К\n", T_A)
@printf(" Вклад волноводного тракта : %6.2f К\n", T_waveguide)
println("\n ИТОГ")
println("-" ^ 60)
@printf(" ▶ СУММАРНАЯ ШУМОВАЯ ТЕМПЕРАТУРА : %6.2f К\n", T_total)
println("=" ^ 60)
# ================================================================
# МОДУЛЬ 6. ПАРАМЕТРИЧЕСКИЙ АНАЛИЗ
# Таблица T_A и T_Σ для углов места 5°…90°
# при фиксированных f, α, T_пр
# Позволяет оценить деградацию системы на малых углах места
# ================================================================
println("\n ПАРАМЕТРИЧЕСКИЙ АНАЛИЗ: T_A и T_Σ по углу места")
@printf(" (f = %.2f ГГц, α = %.2f дБ, T_пр = %.1f К)\n",
f_GHz, α_dB, T_msu)
println("-" ^ 52)
@printf(" %-8s %-14s %-14s\n", "ε (°)", "T_A (К)", "T_Σ (К)")
println("-" ^ 52)
for eps in [5, 10, 15, 20, 30, 45, 60, 90]
ta = calc_T_atm(f_GHz, Float64(eps)) +
calc_T_cosm(f_GHz) +
(23.0 + 0.2 * (90.0 - eps))
ts = ta * η_v + T_waveguide + T_msu # T_msu обязателен в каждой строке
@printf(" %-8d %-14.2f %-14.2f\n", eps, ta, ts)
end
println("-" ^ 52)
# ================================================================
# МОДУЛЬ 7. РАСЧЁТ ПО ФОРМУЛЕ ФРИИСА (опциональный модуль)
#
# Используется, когда T_пр неизвестна из паспорта МШУ
# и вычисляется по структурной схеме приёмника.
#
# Формула Фрииса (все величины — линейные, не дБ):
# NF_Σ = NF₁ + (NF₂−1)/G₁ + (NF₃−1)/(G₁·G₂) + …
# T_пр = (NF_Σ − 1) · 290
#
# Для активации: установите friis_enabled = true
# Заполните массивы NF_dB и G_dB значениями каскадов приёмника
# ================================================================
friis_enabled = false
NF_dB = [1.2, 8.0, 6.0] # Коэф. шума каждого каскада, дБ
G_dB = [25.0, 15.0, 20.0] # Коэф. усиления каждого каскада, дБ
if friis_enabled
n = length(NF_dB)
NF = db_to_linear.(NF_dB)
G = db_to_linear.(G_dB)
NF_total = NF[1]
G_accum = G[1]
for i in 2:n
NF_total += (NF[i] - 1.0) / G_accum
G_accum *= G[i]
end
T_friis = (NF_total - 1.0) * 290.0
T_total_friis = T_A * η_v + T_waveguide + T_friis
println("\n РЕЗУЛЬТАТ РАСЧЁТА ПО ФОРМУЛЕ ФРИИСА")
println("-" ^ 60)
println("\n Каскады приёмника:")
@printf(" %-10s %-14s %-14s\n", "Каскад", "NF (дБ)", "G (дБ)")
println(" " * "-" ^ 42)
for i in 1:n
@printf(" %-10d %-14.2f %-14.2f\n", i, NF_dB[i], G_dB[i])
end
println()
@printf(" Суммарный коэф. шума NF : %6.4f ( %.2f дБ )\n",
NF_total, linear_to_db(NF_total))
@printf(" Шумовая температура T_пр (Фриис) : %6.2f К\n", T_friis)
println("-" ^ 60)
@printf(" ▶ СУММАРНАЯ ШУМОВАЯ ТЕМПЕРАТУРА : %6.2f К\n", T_total_friis)
println("=" ^ 60)
end