
简介面向卫星通信研究人员与工程师这份文档基于随机几何框架系统讲解低轨星座下行链路的仿真与分析覆盖BPP星座建模、单星/多星场景下的路径损耗与干扰影响评估并结合干扰期望计算方法验证模型有效性。内容以1个docx文档承载压缩包约51KB除理论推导外还给出可运行的Python代码包括参数设置、星座与地面站生成、功率计算、SINR分析与可视化等完整流程适合具备一定编程基础、希望快速上手低轨卫星仿真平台的读者。文档还提出天地一体化网络、大规模星座干扰建模等后续研究方向。该资源已被105人学习浏览可作为研究选题或工程优化的参考起点。1. 从随机几何到低轨星座下行链路仿真先算覆盖概率再谈单条链路做低轨卫星下行链路仿真的人大概率被同一个问题卡住轨道参数有了用户位置也定了为什么算出来的链路预算和论文里的覆盖曲线对不上差别不在损耗公式而在建模对象。传统链路预算把卫星当成固定位置的发射机算一次自由空间损耗就结束低轨星座里用户头顶同时有好几颗卫星距离持续变化同频干扰也在变单点计算没有代表性。随机几何的做法是把卫星位置看成点过程用覆盖概率 P(SINRT) 回答系统级问题。下面按星座建模→损耗计算→干扰分析→验证调参的顺序展开每步都有可运行的 Python 代码和参数表。2. 低轨星座建模与可见性判定Walker 参数、轨道传播和点过程映射2.1 Walker-Delta 星座生成T、P、F 怎么定代码怎么写低轨星座仿真的第一步是生成卫星位置。大多数论文和开源代码用的是 Walker-Delta 星座三个参数把结构定死T 是卫星总数P 是轨道面数F 是相位因子。T/P 颗卫星均匀分布在每个轨道面内各轨道面的升交点赤经在 0 到 2π 均匀排列相邻轨道面之间再错开 F·360°/T 的相位。这样设计的星下点轨迹在纬度和经度方向都有良好覆盖均匀性仿真时不容易把星座结构问题误判成算法问题。圆轨道近似对低轨下行的损耗和干扰统计足够用。轨道半径取 a6371h给定倾角 i、升交点赤经 Ω 和相位角 θ地心赤道坐标可以直接由两次旋转得到import numpy as np def walker_delta_snapshot(T, P, F, inc_deg, h_km): 返回 T x 3 的地心赤道坐标数组单位 km圆轨道近似t0 时刻快照 a 6371.0 h_km sats [] per_plane T // P for p in range(P): raan 2 * np.pi * p / P # 升交点赤经在 0~2pi 均匀排布 for s in range(per_plane): theta 2 * np.pi * s / per_plane 2 * np.pi * F * p / T # 轨道面内向量 [cos theta, sin theta, 0] 旋转到地心赤道系 c_o, s_o np.cos(raan), np.sin(raan) c_i, s_i np.cos(np.radians(inc_deg)), np.sin(np.radians(inc_deg)) x a * (c_o * np.cos(theta) - s_o * np.sin(theta) * c_i) y a * (s_o * np.cos(theta) c_o * np.sin(theta) * c_i) z a * (np.sin(theta) * s_i) sats.append([x, y, z]) return np.array(sats)F 只影响面间相位错开量不影响覆盖的几何均匀性但对时间切片上的瞬时覆盖影响明显常见取 F1。T 必须能被 P 整除否则星座本身就不是 Walker 结构。轨道高度 h 直接决定轨道半径和可见弧段长度550 km 和 1200 km 两档是低轨仿真里最常用的对照值。2.2 从星座到点过程PPP、二项点过程与硬核点过程怎么选星座生成之后随机几何要回答的是卫星位置用什么点过程描述。严格说 Walker 星座是确定结构每一颗卫星的位置随时可由轨道根数推出不存在随机性。随机几何的价值在于当星座规模大、轨道面多仿真只需要统计特性时把卫星位置当成球面上的二项点过程N 个点独立均匀分布在半径 a 的球面上或泊松点过程能得到解析的干扰统计量这是蒙特卡洛给不出的。PPP 和二项点过程的差别在 N 的随机性。PPP 的卫星数本身服从泊松分布强度 λN/(4πa²) 是平均面密度二项点过程固定 N更适合描述星座一共就这么多颗卫星的实际约束。几百颗以上的大规模星座用 PPP 做干扰分析误差不大因为干扰统计主要由距离分布尾部决定小星座或要精确刻画极区覆盖时二项点过程更稳。若星座还有最小星间距离约束比如同一轨道面内卫星不能重叠用硬核点过程对 PPP 采样结果做稀释先撒点再剔除距离过近的点。提示仿真里最常用的做法不是从 PPP 采样而是直接采样二项点过程——固定 N在球面上均匀撒点跑完统计后再和 PPP 理论曲线对比。两边对得上说明仿真逻辑没有结构性问题。2.3 最小仰角与可见卫星集合地心角公式和筛选代码用户能看到哪些卫星由最小仰角决定。仰角是视线与用户当地水平面的夹角比距离更能反映遮挡和大气损耗。给定轨道高度 h 和最小仰角 ε_min最大可见地心角 ψ_max 为ψ_max arccos( (R/(Rh))·cos ε_min ) − ε_min其中 R 为地球半径 6371 km。仰角越低可见弧段越长但斜距也越大、损耗越高。典型数值轨道高度ε_min10°ε_min25°ε_min40°550 km15.0°8.5°5.2°1200 km24.0°15.3°9.9°表中是最大地心角。可见卫星筛选代码def visible_sats(user_ecef, sat_ecef, elev_min_deg): 筛选仰角不低于门限的卫星返回索引、仰角(度)、斜距(km) r_u np.linalg.norm(user_ecef) vis_idx, elevs, ranges [], [], [] for i, sat in enumerate(sat_ecef): r_s np.linalg.norm(sat) cos_psi np.dot(user_ecef, sat) / (r_u * r_s) psi np.arccos(np.clip(cos_psi, -1.0, 1.0)) d np.sqrt(r_u**2 r_s**2 - 2 * r_u * r_s * cos_psi) sin_e (r_s * cos_psi - r_u) / d # 斜距三角形正弦定理 elev np.degrees(np.arcsin(np.clip(sin_e, -1.0, 1.0))) if elev elev_min_deg: vis_idx.append(i); elevs.append(elev); ranges.append(d) return np.array(vis_idx), np.array(elevs), np.array(ranges) sats walker_delta_snapshot(T120, P6, F1, inc_deg53.0, h_km550) lat, lon np.radians(40.0), np.radians(116.0) # 北纬40度东经116度 user 6371.0 * np.array([np.cos(lat)*np.cos(lon), np.cos(lat)*np.sin(lon), np.sin(lat)]) idx, elev, dist_km visible_sats(user, sats, 25.0) print(f可见卫星数: {len(idx)})仰角公式 sin ε(r_s·cosψ−r_u)/d 的推导关键在斜距三角形用户、地心、卫星三点构成三角形用户处当地水平面垂直于地心连线把视线角换算到水平面即得仰角。用这个函数逐颗卫星判断就得到任意时刻用户的可见卫星数量和斜距分布这正是后续损耗计算和干扰分析共同的输入。注意 user_ecef 和 sat_ecef 必须同一长度单位上面统一用 km。3. 下行链路损耗计算自由空间损耗、大气吸收与天线增益的链路预算3.1 自由空间损耗斜距是唯一变量下行链路损耗的主体是自由空间损耗只由斜距 d 和波长 λ 决定L_fs(4πd/λ)²。用 3.1 节算出的斜距直接代入注意单位统一。550 km 轨道高度下用户正上方约 550 km25° 仰角时约 1124 km10° 仰角时约 1817 km。同一颗服务卫星从升起到离开斜距变化超过三倍换算成功率是近 10 dB 的波动——低轨下行仿真不能取固定距离的原因就在这里。def fspl_db(d_km, freq_hz): 自由空间损耗d_km 为斜距(km)freq_hz 为载波频率(Hz) lam 3e8 / freq_hz return 20 * np.log10(4 * np.pi * d_km * 1e3 / lam) print(fspl_db(1124, 12e9)) # 约 175.0 dB12 GHz 下 1124 km 斜距约为 175 dB28 GHz 下同样距离约为 182 dB频率每翻一倍损耗增加 6 dB。这解释了为什么 Ka 波段低轨系统仰角门限通常取得更高——低仰角大斜距在 Ka 段的代价比 Ku 段大得多。3.2 大气吸收的简化模型天顶损耗加仰角修正大气损耗和频率、仰角、天气都有关完整建模需要 ITU-R P.676 的逐层积分。仿真里常见做法是给一个天顶损耗加仰角修正的解析近似把氧吸收和水汽损耗压成一个等效高度天顶方向路径最短损耗最小越接近水平方向大气路径越长。近似表达式L_atm(ε) L_z / sin(ε δ)其中 L_z 是天顶损耗dBε 是仰角δ 是等效折射修正角。12 GHz 晴朗天气 L_z 取 0.3 dB 左右δ 取 2° 到 5° 在文献里都有人用28 GHz 的 L_z 可到 1 dB 以上。雨衰在第一版仿真里建议先不建模只作为固定余量加 2 到 3 dB。原因是雨衰空间相关性强同时影响信号和干扰链路如果简单地对每条链路乘独立随机因子会人为放大干扰波动导致覆盖概率的方差估算失真。等覆盖趋势对上了再加入时空相关的雨衰模型更合理。3.3 链路预算表组装发射功率、天线增益与接收功率接收功率的链路预算式是P_r(dBm) P_t(dBm) G_t(dB) G_r(dB) − L_fs(dB) − L_atm(dB)卫星侧 G_t 用点波束增益典型 30 到 40 dBi用户侧 G_r 取决于终端手持终端几 dBi固定终端 30 dBi 以上。下行仿真里最容易犯的错是把干扰链路的 G_t 也按主瓣算——干扰卫星的波束不指向目标用户实际进入用户接收机的是旁瓣要在仿真里给干扰链路一个波束隔离度比如主瓣增益减 20 dB。链路预算项数值备注轨道高度550 km圆轨道下行频率12 GHzKu 波段卫星发射功率33 dBm约 2 W卫星天线增益 G_t32 dBi点波束用户天线增益 G_r30 dBi固定终端最小仰角25°可见性门限斜距 25°1124 km由 ψ_max 算出自由空间损耗175.0 dB12 GHz大气损耗1.2 dB25° 仰角晴天接收功率−81.2 dBm未含雨衰热噪声功率−98 dBm20 MHz含 3 dB 噪声系数def link_budget(p_t_dbm, g_t_db, g_r_db, d_km, freq_hz, l_atm_db0.0): return p_t_dbm g_t_db g_r_db - fspl_db(d_km, freq_hz) - l_atm_db print(link_budget(33, 32, 30, 1124, 12e9, 1.2)) # 约 -81.2 dBm表中接收功率和噪声功率的差值就是无干扰时的 SNR 基底约 16.8 dB。这个值决定了 SINR 阈值 T 的取值范围如果仿真目标覆盖率对应的 T 高于 16.8 dB那不是干扰问题是单链路预算本身不够先把功率和天线调好再谈干扰。4. 干扰分析与覆盖概率随机几何闭式解与蒙特卡洛仿真对照4.1 干扰源集合怎么定全频复用、波束隔离和服务星选择SINR 的定义式是 P_s/(IN)干扰 I 是所有同频发射机在用户处的接收功率之和。低轨星座里哪些卫星算干扰取决于频率复用方案每个波束用独立频率时同频干扰只来自同频波束整个星座共用频率时干扰源就是用户可见卫星里除服务星之外的所有卫星。最激进的全频复用设置是服务星选可见卫星中仰角最高的其余全部按同频干扰处理每条干扰链路乘一个旁瓣隔离因子。这个设置对干扰偏保守但作为上限估计很有价值。在星座高度统一的假设下仰角最高与斜距最短是等价的因为可见范围内地心角越大斜距越长多壳层星座或异质星座里两者才会出现分歧。因此 4.2 节的理论推导用最近卫星做服务星蒙特卡洛里用最高仰角两者可以对齐。如果仿真里两种服务星选择策略的覆盖概率差出 2 dB 以上先查可见卫星集合里是否有被低仰角大斜距污染的距离边界情况。4.2 随机几何给出的闭式解α4 时覆盖概率与星座密度无关把球面局部展开成切平面把干扰卫星近似看成强度为 λ 的平面 PPP假设瑞利衰落、路径损耗指数固定 α、服务星为最近卫星、发射功率归一化。对瑞利衰落求期望后覆盖概率可以写成对最近距离 r 的积分P_c ∫ 2πλr·e^(−πλr²)·L_I(T·r^α) dr其中 2πλr·e^(−πλr²) 是最近卫星距离的概率密度L_I 是干扰的拉普拉斯变换。α4 时干扰积分有闭式解代入后 λ 恰好约掉得到一个只依赖阈值 T 的表达式P_c 1 / (1 √T·arctan(√T))代入数字看规律T0 dB 时约 0.560T10 dB 时约 0.200T20 dB 时约 0.064。覆盖概率随门限按 T^(−1/2) 量级衰减。干扰受限时覆盖概率与星座密度无关直觉解释是α4 下星座加密信号和干扰同步变强最近距离分布的变化被干扰项抵消。低轨真实传播接近 α2但由于斜距有 500 km 以上的下限干扰积分不会像平面 α2 那样发散实际有效 α 落在 2 到 3 之间。闭式解的价值在于给蒙特卡洛程序一个可以精确对齐的靶子import numpy as np def coverage_ppp_alpha4(t_db): 干扰受限、瑞利衰落、alpha4、最近卫星服务下的闭式覆盖概率 t 10 ** (t_db / 10) return 1.0 / (1.0 np.sqrt(t) * np.arctan(np.sqrt(t))) print(coverage_ppp_alpha4(10)) # 约 0.200验证思路是把蒙特卡洛里的自由空间损耗从 (4πd/λ)² 临时改成 (4πd/λ)⁴同样只保留信号与干扰、关闭噪声跑出的覆盖概率应该落在这个闭式解附近。对得上说明仿真里的星座采样、可见性筛选和 SINR 累加逻辑没有写错对不上先查干扰截断和距离单位。4.3 蒙特卡洛仿真把二项点过程、可见性和 SINR 串起来蒙特卡洛的做法是重复 N 次独立撒星座实验每次从二项点过程采样卫星位置算可见性确定服务星累加干扰判断 SINR 是否超过门限最后统计覆盖率。每次 drop 之间必须重新撒点保证样本独立否则置信区间公式会失效。def mc_coverage(n_drop, n_sat, r_orb_km, elev_min, t_db, f_hz, p_t_w, g_t_db, g_r_db, iso_lin, lat_deg40.0, lon_deg116.0, seed7): 二项点过程下的覆盖概率蒙特卡洛估计返回覆盖比例 rng np.random.default_rng(seed) R_e 6371.0 lat, lon np.radians(lat_deg), np.radians(lon_deg) user R_e * np.array([np.cos(lat)*np.cos(lon), np.cos(lat)*np.sin(lon), np.sin(lat)]) n_ok, n_tot 0, 0 noise_w 1.38e-23 * 290 * 20e6 * 2 # 20MHz含3dB噪声系数 gain 10 ** ((g_t_db g_r_db) / 10) for _ in range(n_drop): z rng.uniform(-1, 1, n_sat) # 球面均匀采样 az rng.uniform(0, 2*np.pi, n_sat) sxy np.sqrt(np.maximum(0.0, 1 - z**2)) sats r_orb_km * np.stack([sxy*np.cos(az), sxy*np.sin(az), z], axis1) idx, elev, d_km visible_sats(user, sats, elev_min) n_tot 1 if len(idx) 0: continue # 无可见卫星记为未覆盖 i_s np.argmax(elev) # 服务星取仰角最高 p_s p_t_w * gain / (4*np.pi*d_km[i_s]*1e3*f_hz/3e8)**2 d_i np.delete(d_km, i_s) d_i np.sort(d_i)[:20] # 最近20颗干扰源远处贡献可忽略 p_i iso_lin * p_t_w * gain / (4*np.pi*d_i*1e3*f_hz/3e8)**2 sinr p_s / (np.sum(p_i) noise_w) if sinr 10 ** (t_db / 10): n_ok 1 return n_ok / n_tot if n_tot else float(nan) print(mc_coverage(10000, 120, 6921.0, 25.0, 10.0, 12e9, 2.0, 32, 30, 0.01))参数说明n_sat 是每次撒的卫星总数r_orb_km 是轨道半径iso_lin 是旁瓣隔离的线性值−20 dB 对应 0.01noise_w 里乘 2 是把 290K 热噪声加上 3 dB 噪声系数。干扰截断取最近 20 颗的理由是低轨斜距按 d² 衰减第 20 颗以后的干扰贡献累计小于 0.1 dB截断数翻倍后覆盖率曲线不动说明截断安全。没有可见卫星的 drop 计入分母但不计入分子得到的是无条件覆盖概率如果论文里给的是给定至少一颗可见卫星的条件覆盖概率两边的分母口径必须一致。仿真参数取值说明卫星数 N120二项点过程轨道半径6921 km550 km 轨道最小仰角25°可见性门限频率/带宽12 GHz / 20 MHzKu 下行发射功率2 W卫星侧增益和62 dB3230干扰隔离−20 dBiso_lin0.01采样次数10⁴置信区间见下章5. 仿真结果验证与参数调优置信区间、采样次数和三个常见坑5.1 置信区间与采样次数覆盖率的估计是伯努利统计量N 次独立 drop 后估计值 p̂ 的 95% 置信区间半宽约为 1.96·√(p̂(1−p̂)/N)。def ci_half_width(p_hat, n, z1.96): return z * np.sqrt(p_hat * (1 - p_hat) / n)p̂0.9 时N10³ 半宽约 ±0.019N10⁴ 约 ±0.006N10⁵ 约 ±0.002。开跑前先用 p̂0.5 估算最大半宽要保证 ±0.01 的精度至少 10⁴ 次。覆盖率曲线陡峭的区域0.3 到 0.7 之间建议上到 5×10⁴ 次因为该区间 SIR 对参数变化最敏感采样不足会把参数差异淹没在噪声里。5.2 三个常见坑与检查手段第一个坑是时间相关性。直接用 Walker 快照连续推进时间得到的每个 drop 之间空间位置强相关置信区间公式不成立。每个 drop 前重新随机化相位或整体旋转星座保证样本近似独立。第二个坑是干扰截断不收敛。只取最近 5 颗干扰星会系统性高估覆盖率因为远处干扰数量多、总和不可忽略。把截断数从 5 调到 50SINR 的 CDF 位移小于 0.1 dB 才算收敛不收敛就加大截断而不是用加权近似补。第三个坑是噪声功率单位。链路预算表里用 dBm代码里必须换算成 W在程序入口统一。kTB 计算用 1.38e-23·T·B20 MHz、290K 下约 −101 dBm漏掉 3 dB 噪声系数会让低 SINR 区间的覆盖率整体偏高 3 dB结论失真却不明显。参数调优的顺序也值得固定下来先调单链路预算让无干扰 SNR 达标再开干扰对比理论闭式解校验程序最后扫阈值 T 画覆盖率曲线。把噪声功率也填进链路预算表每次改动只动一个参数覆盖率曲线的每次移动都能解释得清仿真才真正可信。本文还有配套的精品资源点击获取