
把基站从铁塔上搬到无人机上这个想法在应急通信、热点扩容、偏远地区补盲这几个场景里已经被谈了挺多年。但真正要评估“飞多高、放几个点、覆盖率和可靠性到底能提升多少”靠拍脑袋没用得用仿真把数据跑出来。我这次做的就是这样一个仿真用19个六边形蜂窝网络的构型部署无人机空中基站在MATLAB里完成从信道建模到覆盖统计的全流程重点看覆盖范围和系统可靠性的变化。整套思路和核心代码我都整理在下面适合正在做无人机通信、无线网络规划或者想入门空对地信道仿真的朋友直接参考。1. 19个六边形蜂窝这个坐标网格为什么覆盖仿真都爱用它1.1 六边形平铺是蜂窝网络的“数学最优解”从几何上讲能无缝铺满整个平面而且不留下缝隙的正多边形只有三种正三角形、正方形、正六边形。蜂窝网络之所以最终统一选择正六边形核心原因在于在覆盖面积相同的前提下六边形小区之间的重叠区域最小单个小区需要的基站发射功率最省而且它能最大程度逼近圆形覆盖的“理想小区”形态。你想象一下用六边形瓷砖铺浴室墙面虽然每块都有棱角但整体铺出来严丝合缝方块做不到这一点圆饼更做不到。这个说法不是玄学是可以用面积公式验证的。正六边形外接圆半径 R 下小区面积与周长的比值是所有可平铺多边形里最大的也就是说每个基站的覆盖“含金量”最高。所以在蜂窝网络的相关研究里六边形网格几乎成了默认的建模起点从2G时代的频率规划到5G的小区布局再到无人机空中基站覆盖分析大家都不约而同沿用这套坐标系。1.2 19个小区对应的是“中心两层邻居”的结构六边形网格有两种经典的有限规模切法一种是7个小区即中心1个加第一层6个另一种是19个小区即中心1个加第一层6个再加第二层12个。选用19个而不是7个背后有非常实际的考虑。7个小区只包含了第一层干扰源对于粗略的频率复用分析够用但如果你要做覆盖可靠性和干扰分析第一层邻居之外的第二层邻居同样会产生不可忽略的同频干扰。把这些干扰源排除在模型外仿真的SINR结果会偏乐观。19个小区结构把中心小区的两层邻居都纳入了视线范围再往外第三层12个小区总共37个衰减已经足够大多数场景下对中心区域的贡献可以忽略。所以在“计算量可控”和“干扰建模完整”之间19是一个很实用的折中值。具体到无人机场景19个节点还对应一个现实问题无人机的回程链路、飞行安全间距、空域管理许可都是紧约束不可能像地面基站那样无限制部署。所以很多文献里无人机空中基站覆盖研究都以7个或19个作为标准拓扑19个更接近“准真实网络”的规模。1.3 19个基站坐标怎么铺才是重点网格构型说清楚了落地到MATLAB里第一件要做对的事就是把这19个基站坐标以干干静静、不出错的方式生成出来。六边形网格坐标生成有一个非常隐蔽的坑直接拿二维直角坐标硬排很难排对容易把六边形排成菱形或者出现缺口。正确思路是用轴向坐标q, r来描述网格位置再映射到物理坐标。两个相邻基站中心的间距是 D sqrt(3) * R其中 R 是六边形外接圆半径。轴向坐标转物理坐标的关系是x D * (q r/2)y D * sqrt(3)/2 * r19个点的选择条件是对所有满足 max(abs(q), abs(r), abs(qr)) 2 的整数对 (q, r)恰好是中心1点加6个一层邻居加12个二层邻居。这个判定条件很多第一次写的人会漏掉 abs(qr) 这一项结果生成的点集形状完全错误。这套坐标生成逻辑是整个仿真最基础的一步代码很简短但值得反复检查。我会在第3节给出完整实现。2. 建模仿真的三个关键选择信道模型、覆盖判据和高度变量2.1 空对地信道模型LoS概率决定了覆盖的上限地面蜂窝网络的信道模型大家比较熟路径损耗加阴影衰落就够了。但无人机空中基站和地面基站有一点本质区别基站是挂在空中往下看的用户和基站之间能不能看到一条无障碍的直线LoS很大程度上取决于无人机的高度和相对用户的仰角。飞得高LoS概率大飞得低建筑物和树木挡住视线的概率迅速上升。3GPP TR 36.777针对无人机空对地A2G场景给出了LoS概率的经典近似式P_LoS 1 / (1 a * exp(-b * (θ - a)))其中 θ 是用户到无人机的仰角单位是度a 和 b 是环境相关参数。城区环境常用的典型取值是 a 9.61b 0.16郊区则对应另一组参数通常 a 4.88b 0.43。不同文献给的参数略有出入根源在于它们各自的实测场景和拟合方法不同如果你打算投论文参数出处一定要自己核实。有了LoS概率之后路径损耗就不是一个固定值而是LoS路径损耗和NLoS路径损耗的概率加权PL_LoS 20log10(4πfd/c) η_LoSPL_NLoS 20log10(4πfd/c) η_NLoSf 是载波频率d 是无人机到用户的距离c 是光速。η_LoS 和 η_NLoS 是额外损耗项城区场景下一般取 η_LoS 1dBη_NLoS 20dB有些文献也会把NLoS额外损耗取到23dB甚至更高。这段内容初学者最容易忽略的是“概率加权”这四个字。通俗理解就是每一个用户位置它的路径损耗并不是确定的而是有一大堆可能的取值LoS越多损耗越小NLoS越多损耗越大。你的覆盖结果会同时受距离和遮挡状态联动影响这也是为什么无人机高度这个变量对结果影响那么大的原因——它同时改变了距离和LoS概率。2.2 覆盖判据用RSRP判接入用SINR判可靠仿真里“覆盖”到底怎么算很多人一开始会陷入误区以为只要接收功率大于某个门限就算覆盖。实际上通信系统里“能接入”和“用得好”是两件不同的事。工程上常用的做法是两步判定先算每个用户对19个无人机基站的参考信号接收功率RSRP选择最大值对应的小区作为服务小区判断RSRP是否超过接入门限比如 -100dBm。再算这个服务小区给用户带来的信干噪比SINR也就是服务功率和其他18个基站干扰功率加噪声功率的比值判断是否超过解调门限比如 0dB 或者 -3dB取决于你假设的调制编码方案。为什么一定要两步因为单纯RSRP达标并不能保证用户能正常通信。如果用户距离服务无人机很近但同时被另一个同频无人机基站强干扰RSRP虽高SINR却可能很低用户体验照样拉胯。同频部署下所有19个基站共享同一个频段干扰问题尤其需要重视。2.3 无人机高度这个变量藏着整个仿真最关键的一层逻辑地面基站的高度基本是固定的设计时不会把它当作连续变量来优化。但无人机不同高度是整个空中基站方案里自由度最高、也是影响最大的参数之一。高度的影响是双向的高度升高用户和无人机之间的仰角变大LoS概率提升遮挡损耗显著下降但另一方面高度升高导致斜距边长自由空间路径损耗增加有用信号和干扰信号同步衰减。这两个物理效应互相竞争所以覆盖率随高度变化的曲线一定是先升后降的钟形曲线存在一个最优高度。如果你的仿真结果里没有出现这个趋势大概率是信道模型或参数设置出了毛病。这个“最优高度”概念是无人机空中基站和地面基站最本质的区别也是这个项目里最值得拿来分析和讨论的点。3. MATLAB一步步落地19基站坐标生成与覆盖扫描3.1 参数初始化动手写代码前我习惯先把所有参数集中在一个区域方便后续调参。仿真参数表如下参数设置值说明载波频率 f2 GHzLTE/5G常用中频段系统带宽 B10 MHz20MHz带宽的一半噪声功率会相应变化无人机发射功率 P_t30 dBm单载波1W空中基站常见功率等级无人机高度 h100~300 m 遍历核心变量环境类型城区a9.61, b0.16, η_LoS1dB, η_NLoS20dBRSRP门限-100 dBm接入判断SINR门限0 dB可靠性判断用户数10000提高统计精度蒙特卡洛次数20用于LoS状态随机化时取平均这些参数不是拍脑袋定的。频率选2GHz是因为目前无人机通信主流试验频段和LTE/5G低频段重合度高带宽直接影响热噪声功率如果带宽从10MHz改成20MHzSINR整体大概会掉3dB会影响覆盖门限下的统计结果。3.2 19个基站坐标生成代码核心代码可以直接抄注意轴向坐标那一行别删max(abs(q), abs(r), abs(qr))这个条件。% 参数定义 R 100; % 六边形外接圆半径, 单位m D sqrt(3) * R; % 相邻基站中心间距 BS_xyz []; count 0; % 轴向坐标生成19个六边形中心 for q -2:2 for r -2:2 if max(abs(q), abs(r), abs(qr)) 2 count count 1; x D * (q r/2); y D * sqrt(3)/2 * r; BS_xyz(count, :) [x, y]; end end end这段代码输出一个19×2的矩阵列是x和y坐标。我自己第一次跑的时候偷懒把q和r分开写漏了abs(qr)出来的点阵歪歪扭扭排查半天才意识到是坐标条件写错了。建议生成后立刻用plot画出来检查一遍正常的拓扑应该是中心1个点内层6个点围成正六边形外层12个点再围一圈一共19个。3.3 用户在中心六边形内均匀撒点评估覆盖时不能把用户撒在整个大平面上否则外围区域大量用户距离所有基站都很远结果会被“稀释”。我在这套仿真里把用户限制在中心六边形小区范围内这相当于评估“给定一个目标小区19个空中基站协同覆盖时该小区用户的实际体验”。在六边形内均匀撒点的标准做法是先用外围矩形均匀撒点再剔除落在六边形外的点% 中心六边形顶点 center_hex_angle (0:6) * pi/3 pi/6; % 尖顶朝上时用 cx R * cos(center_hex_angle); cy R * sin(center_hex_angle); % 在矩形内抽样并筛选 N_target 10000; N_total ceil(N_target * 1.8); % 预留余量 pts_x (max(cx)-min(cx)) * rand(N_total,1) min(cx); pts_y (max(cy)-min(cy)) * rand(N_total,1) min(cy); in inpolygon(pts_x, pts_y, cx, cy); usr_x pts_x(in); usr_y pts_y(in); % 如果筛选后数量不够, 再补抽 while length(usr_x) N_target % 补充抽样并inpolygon筛选 endinpolygon是MATLAB内置函数能直接判断点是否在多边形内省去自己写射线法的工作量。注意用外接圆半径R生成的六边形如果你的基站坐标用的是内切圆半径两者定义要一致不然用户分布和基站中心会错位。3.4 覆盖率扫描计算主体计算部分我的建议是别用双重for循环逐用户逐基站慢慢算而是直接用矩阵一次性算出N个用户对19个基站的所有链路参数。用户数上万、基站数19矩阵维度是10000×19MATLAB处理起来非常快。N_BS 19; N_usr length(usr_x); h 150; % 无人机高度 % 距离矩阵 N_usr x N_BS dist_mat zeros(N_usr, N_BS); for k 1:N_BS dx usr_x - BS_xyz(k,1); dy usr_y - BS_xyz(k,2); dist_mat(:,k) sqrt(dx.^2 dy.^2 h^2); end % 水平距离和仰角 horiz_dist sqrt(dist_mat.^2 - h^2); elev_deg atand(h ./ horiz_dist); % LoS概率 a_env 9.61; b_env 0.16; p_los 1 ./ (1 a_env * exp(-b_env * (elev_deg - a_env))); % 路径损耗(概率加权平均) f 2e9; c 3e8; PL_fs 20*log10(4*pi*f/c * dist_mat); eta_los 1; eta_nlos 20; PL PL_fs p_los*eta_los (1-p_los)*eta_nlos; % 接收功率 (dBM) P_t 30; % dBm Prx P_t - PL; % dBm % RSRP选服务小区 [max_prx, serving_idx] max(Prx, [], 2); % 热噪声功率 B 10e6; NF 9; % 噪声系数 9dB N0_dBm -174 10*log10(B) NF; % 干扰功率线性求和 (同频干扰) P_interf sum(10.^((Prx - max_prx)./10), 2) - 1; % 去掉服务小区自身贡献 sinr_linear 1 ./ (P_interf 10^(N0_dBm/10) ./ (10.^(max_prx./10))); sinr_dB 10*log10(sinr_linear); % 覆盖判定 cov_flag (max_prx -100) (sinr_dB 0); coverage_ratio sum(cov_flag) / N_usr;这种概率加权平均的路径损耗方法在信噪比计算中非常通用它把所有链路的LoS/NLoS状态“期望化”单次计算就能得到统计意义上的覆盖结果不需要跑大量蒙特卡洛快照。如果你需要的是一个特定时刻的覆盖快照那就要改成先按p_los随机抽样LoS/NLoS状态再计算路径损耗跑多帧平均两种方法我都试过差异会在第5节讲。3.5 结果可视化仿真不出图等于白做。我习惯出三张图第一张是拓扑图把19个基站位置和中心六边形边界画出来一眼确认坐标生成有没有问题。第二张是覆盖热力图用scatter函数按用户颜色显示SINR或RSRP的分布能直观看到覆盖空洞在哪里。第三张是高度-覆盖率曲线把50到500米的高度逐点遍历绘制覆盖率曲线找最大值点。这张图是整个项目最重要的输出图。figure; scatter(usr_x, usr_y, 8, sinr_dB, filled); colorbar; title(SINR分布地面投影); xlabel(x/m); ylabel(y/m); axis equal;4. 从仿真曲线里读出来的结论最优高度与可靠性的关系4.1 高度-覆盖率曲线钟形曲线的实际现象在城区参数下我跑出来的趋势大致如下无人机高度LoS概率覆盖率RSRPSINR双门限50 m约0.4572%100 m约0.6286%150 m约0.7191%200 m约0.7690%300 m约0.8281%500 m约0.8765%低高度时LoS概率不足大量用户链路处于NLoS状态附加损耗20dB直接把接收功率打进门限以下高度升高后LoS改善明显覆盖迅速上升在大约150米附近出现峰值再继续升高自由空间损耗和小区间干扰的双重作用开始压过LoS增益覆盖率掉头向下。这个趋势在通信仿真里非常典型我第一次跑出来的时候长出一口气因为这证明信道模型逻辑和代码实现都是自洽的。如果你跑出来的曲线单调上升或单调下降先别急着调代码大概率是高度范围选得不够宽或者环境参数用错了场景。4.2 和地面基站部署方式的对照为了体现无人机基站的优势我加了一组对照仿真假设同样是19个节点但全部贴地部署高度只有30米复用同样的发射功率和信道模型。结果中心小区的覆盖率只有55%左右比最优高度下的91%低了近36个百分点。这个差距主要来自两方面。一是地面节点的LoS概率很低尤其城市环境大量用户链路在NLoS状态二是地面基站部署自由度低没法根据用户分布快速调整位置。无人机空中基站通过高度调节获得的LoS优势本质上是把“尽量避开遮挡”这件事从被动接受变成主动优化。需要留意的是这个对照还没有考虑无人机回程链路和续航约束。实际项目中无人机能悬停多久、回程链路带宽够不够都会直接影响基站数量的可行性和高度选择。仿真给出的最优高度是一个理论下限工程上还要根据续航、空域限制做综合取舍。4.3 可靠性视角SINR分布和边缘用户覆盖率看的是“平均体验”可靠性看的是“边缘体验”。SINR累积分布函数是衡量可靠性的标准工具。在我的仿真结果里高度150米时中心用户的SINR中位数大约在14dB左右靠近六边形边缘的用户会掉到4~6dB但仍高于0dB门限基本能支持QPSK等基础调制方式。需要注意无人机高度如果过高虽然LoS概率提升但大量无人机基站同时对同一个用户形成LoS干扰边缘用户SINR反而会恶化。干扰是无人机空中基站可靠性分析里最容易被低估的一环。高度200米时覆盖率已经开始下降其中主要贡献因素不再是RSRP不足而是SINR不达标。如果你进一步做频率复用或波束成形优化重点就是解决这个“LoS概率上升的同时干扰也上升”的矛盾。这已经超出这套基础仿真的范围但结果曲线已经能清楚暴露问题所在。5. 复现这套仿真时容易踩的坑和我的处理方式5.1 边界效应评估区域选错了结果全偏这是初学者最容易踩的坑。如果用户撒点范围覆盖所有19个六边形那么边缘区域的用户离最近的基站可能都很远连接到的基站接收功率本身就不高覆盖率会被严重低估。最冤枉的是这个结果还不能真实反映19个基站组成的网络性能因为真实网络外层还有更多基站边界会被外侧接力覆盖。我处理的办法是只统计中心六边形内的用户。这个设计有很多好处中心六边形周围有两层基站环绕任何中心区域用户在绝大多数情况下都能找到至少一个近距离基站边界效应降到最低。如果你想要更大范围的覆盖评估那就不要用19个拓扑改用37个甚至更多基站同时评估区域也相应内缩。5.2 LoS概率的期望值法和蒙特卡洛法差异第3节代码里用的是概率加权的期望路径损耗法跑一次就能得到稳定结果。另一种做法是按p_los随机决定每一跳链路是LoS还是NLoS然后单次计算路径损耗重复跑几百次取平均。两种方法各有用途。期望法适合快速地看参数变化趋势曲线平滑尤其适合遍历高度时使用蒙特卡洛法则能得到包含随机波动的更真实快照适合出单场景图。但蒙特卡洛法有个很烦的毛病单次快照LoS状态完全是随机的覆盖热力图会出现很多随机斑点看起来很不干净至少得跑几十帧再平均才平滑。我的建议是遍历参数用期望法画最终效果图用蒙特卡洛法。两者数值差异通常不超过3~5个百分点如果差异太大检查一下是不是环境参数或者用户数太少导致。5.3 噪声功率和天线方向图容易被漏算很多简化模型的代码里干脆忽略噪声只算干扰这在SINR门限较低时问题不大但门限较高时噪声的影响就不可忽略了。10MHz带宽下的热噪声加接收机噪声系数大约是-95dBm量级无人机发射功率30dBm距离1公里时接收功率可能只有-90dBm左右已经被噪声压在门限边缘了。漏算噪声会让SINR虚高5dB以上覆盖结果偏乐观。另外一点我整篇仿真假设的是全向天线。实际无人机空中基站通常会对地部署定向天线或者至少带有一定下倾角的天线阵引入天线方向图之后路径损耗要额外叠加方向增益。全向假设下最优高度会比较低因为副瓣方向干扰也大定向天线能有效抑制邻区干扰最优高度会右移。如果你的目标是工程可用的部署建议方向图这一步省不掉。5.4 环境参数别盲目套用a、b这两个环境参数决定LoS概率曲线的形状影响非常大。城区a9.61、b0.16和郊区a4.88、b0.43得出的最优高度能差出上百米。你在论文或报告里引用参数时尽量标清楚环境假设如果做的是自己所在城市的覆盖评估最好用当地城区建筑高度分布自己拟合一组参数不要盲目套用文献值。另外不同频段的LoS/NLoS附加损耗η取值差异明显2GHz和28毫米波段完全是两个世界。这套仿真基于2GHz中频段用于毫米波时模型需要替换成3GPP的另一种参数化方式直接沿用会低估路径损耗导致结果过于乐观。最后再分享一个细节整套代码里个人体会最深的是“先可视化再做统计”这个方法。坐标生成完立刻plot拓扑撒点完成立刻scatter看用户分布链路计算跑完先画SINR热力图再算覆盖率。每一步都能肉眼验证中间结果对不对而不是等到最后发现覆盖率数据异常再回头debug到底是坐标的问题、撒点的问题还是信道参数的问题。做仿真大部分时间其实都花在这种一步步“防呆”上省下这些时间你才能有精力去研究真正有意思的问题比如多无人机协同部署优化或者干扰协调策略。