完整的EME(月面反射通信)链路预算计算系统,实现了从发射到接收的完整信号链路和噪声分析
-
几何与多普勒模块
- 实时月球位置计算
- 地月距离变化分析
- 多普勒频移计算
- 支持JPL Horizons星历数据
-
路径损耗模块
- 自由空间传播损耗(双程)
- 月球散射损耗(雷达截面积模型)
- 大气气体衰减(频率相关)
- 低仰角路径延长效应
-
极化损耗模块(集成Faraday Rotation)
- 空间几何旋转(视差角)
- 法拉第旋转(电离层双折射)
- 月面反射极化反转
- Jones矩阵完整计算
- 支持任意极化类型(线性、圆极化、椭圆极化)
-
噪声温度模块
- 天空噪声温度(408MHz地图缩放)
- 地面溢出噪声(仰角相关)
- 馈线热噪声
- 接收机噪声链路
- 系统噪声温度综合
-
SNR与余量模块
- 接收信号功率计算
- 信噪比分析
- 月球天平动衰落余量
- 链路可行性判断
EMELinkBudget/
├── src/
│ ├── EMELinkBudget.h/cpp # 主计算引擎
│ ├── LinkBudgetTypes.h # 参数和结果结构定义
│ ├── GeometryCalculator.h/cpp # 几何与多普勒计算
│ ├── PathLossCalculator.h/cpp # 路径损耗计算
│ ├── PolarizationModule.h/cpp # 极化模块适配器
│ ├── NoiseCalculator.h/cpp # 噪声温度计算
│ ├── SNRCalculator.h/cpp # SNR与余量计算
│ ├── FaradayRotation.h/cpp # 法拉第旋转核心(原有模块)
│ ├── IonospherePhysics.h/cpp # 电离层物理模型
│ ├── MaidenheadGrid.h # 网格定位系统
│ ├── Parameters.h # 基础参数定义
│ └── main_linkbudget.cpp # 示例程序
├── data/
│ ├── calendar.dat # 月球星历数据
│ └── WMMHR.COF # 世界磁场模型
└── doc/
// 运行 main_linkbudget_interactive.cpp
// 程序会引导你输入所有参数
EME Link Budget Calculator - Interactive Mode
================================================================================
TX (DX) Station Configuration
Callsign []: W1ABC
Maidenhead Grid Locator (e.g., FN20xa) []: FN20xa
→ Latitude: 41.7083 deg
→ Longitude: -73.9583 deg
Polarization Configuration:
1. Linear Horizontal
2. Linear Vertical
3. RHCP
4. LHCP
5. Custom
Select polarization [1.0]: 1
// ... 继续输入其他参数 ...
Link Status: VIABLE - QSO possible!
LINK MARGIN: 7.5 dB#include "EMELinkBudget.h"
// 创建链路参数
LinkBudgetParameters params;
params.frequency_MHz = 144.0;
params.txPower_dBm = 50.0; // 100W
params.txGain_dBi = 20.0;
params.rxGain_dBi = 20.0;
params.rxNoiseFigure_dB = 0.5;
// 设置站点(使用Maidenhead网格)
MaidenheadGrid::gridToLatLon("FN20xa",
params.txSite.latitude, params.txSite.longitude);
MaidenheadGrid::gridToLatLon("PM95vr",
params.rxSite.latitude, params.rxSite.longitude);
// 设置月球星历和电离层数据
params.moonEphemeris.rightAscension = deg2rad(180.0);
params.moonEphemeris.declination = deg2rad(15.0);
params.ionosphereData.vTEC_DX = 25.0;
params.ionosphereData.vTEC_Home = 30.0;
// 执行计算
EMELinkBudget linkBudget(params);
LinkBudgetResults results = linkBudget.calculate();
// 检查结果
if (results.calculationSuccess) {
std::cout << "Link Margin: " << results.snr.linkMargin_dB << " dB\n";
std::cout << "Link Viable: " << results.snr.linkViable << "\n";
}std::vector<double> frequencies = {50.0, 144.0, 432.0, 1296.0, 2400.0};
for (double freq : frequencies) {
params.frequency_MHz = freq;
EMELinkBudget calc(params);
LinkBudgetResults res = calc.calculate();
std::cout << freq << " MHz: "
<< "Margin = " << res.snr.linkMargin_dB << " dB\n";
}P_RX = P_TX + G_TX + G_RX - L_FS - L_moon - L_atm - L_pol - L_feed
SNR = P_RX - P_Noise
Link Margin = SNR - M_fading - SNR_required
自由空间损耗:
L_FS = 20·log₁₀(4πR/λ)
月球散射损耗:
L_moon = -10·log₁₀(ρ·πR_moon²/4π) ≈ 51.5 dB
法拉第旋转:
Ω = (0.23647/f²) · sTEC · B_parallel
系统噪声温度:
T_sys = T_ant_eff + T_rx
T_ant_eff = T_ant/L + T_phy·(1-1/L)
极化损耗因子:
PLF = |⟨J_RX | R(Φ_down)·M_moon·R(Φ up)·J_TX⟩|²
- JPL Horizons: 月球星历
- IONEX/GLOTEC: 电离层TEC数据
- WMM: 地磁场模型
- 408MHz全天图: 天空噪声温度
- 手动输入所有参数
- 简化的天空噪声模型
- 基于赤纬的银河纬度估算
项目提供两种模式:
-
交互式模式 (main_linkbudget_interactive.cpp) - 默认启用
- 支持用户输入所有参数
- 适合日常使用和实验
-
演示模式 (main_linkbudget.cpp)
- 预配置的示例
- 适合快速测试和学习
切换方法:编辑 EMELinkBudget.vcxproj,设置对应文件的 <ExcludedFromBuild> 标签
# 使用Visual Studio
# 打开 EMELinkBudget.slnx
# 选择 main_linkbudget.cpp 作为启动项
# 编译并运行
# 或使用命令行(需要配置编译器)
cl /EHsc /std:c++17 /I"src" src/*.cpp系统已通过以下验证:
- 实际EME QSO数据验证
-
数据源集成
- JPL Horizons API
- 实时IONEX数据下载
- 408MHz天空地图加载
-
高级功能
- 时间序列分析(月球轨道周期)
- 最佳通联时间预测
- 多站点同时分析
-
用户界面
- 图形化界面
- 实时监控
- 结果可视化
- ITU-R P.676: Attenuation by atmospheric gases
- ITU-R P.372: Radio noise
- Faraday Rotation in EME Communications (ARRL)
- Moon Bounce Calculator (VK3UM)
- WSJT-X User Guide
MIT License
Izumi Chino@BI6DX
基于原有的Faraday Rotation模块扩展而成