资讯动态

基于MATLAB的19个六边形蜂窝无人机基站覆盖仿真与可靠性分析

发布时间:2026/10/18 10:45:21 来源:尧图企业网站定制
1. 为什么是无人机基站和六边形蜂窝我最早接触这个方向是在测试一个应急通信仿真项目的时候。地面基站断站、容量过载、偏远地区盲区——每一个场景背后都有一类共同的解法把基站搬到天上去。利用无人飞行器作为空中基站能在几分钟内完成高空部署覆盖范围从几公里到几十公里不等几乎是应对突发通信需求最灵活的手段之一。这个项目的标题里有两个关键词值得先掰开揉碎讲清楚一个是19个六边形蜂窝网络另一个是覆盖范围和可靠性。这两个词决定了整个仿真系统的架构走向。19个六边形蜂窝是蜂窝通信里经典的簇cluster结构。一个中心小区加两圈外围小区按六边形铺开正好是2圈邻居第一圈6个第二圈12个加上中心1个总共19个。这种结构在频率复用、干扰分析里用得非常多因为19个小区既能完整覆盖目标区域又能保证每个小区至少有完整的相邻层干扰采样是评估覆盖和干扰的标准考场。覆盖与可靠性则是所有蜂窝网络设计的落脚点。覆盖不是画个圆就算完它包含信号强度、信干噪比、边缘概率多个维度可靠性更要看统计意义下的表现——比如95%的区域内用户能获得超过某个门限的SINR。这两个指标放在无人机场景下多了一重复杂性无人机的高度可变路径损耗和地面基站完全不同覆盖优化空间更大但误判风险也更高。这个项目适合谁如果你在做无人机通信、应急通信、蜂窝网络规划或者6G空天地一体化相关的研究和竞赛这套仿真框架可以作为起点。它能帮你回答一个很实际的问题假设我有19架无人机悬停在空中组成临时网络它们的覆盖到底能到什么程度可靠性如何参数该怎么调。2. 六边形蜂窝投影与空中基站布局的建模逻辑2.1 从二维蜂窝到三维无人机坐标在MATLAB里搭建19个六边形蜂窝第一反应是画六边形网格。但真正进入仿真时需要先把地面蜂窝和空中基站两层结构分开。地面蜂窝是六边形拼接出的覆盖区域每个蜂窝的中心点坐标直接决定无人机在空中的水平投影位置。无人机的三维坐标可以表示为P_uav(i) [x_center(i), y_center(i), h]其中h是统一的飞行高度水平投影点[x_center(i), y_center(i)]就是第i个六边形小区的中心。这是个很实用的解耦思路水平位置由蜂窝拓扑决定垂直高度作为独立优化变量。这样既保留了蜂窝规划的确定性又给无人机高度优化留出了自由度。19个蜂窝的中心坐标可以用两层循环生成。第一圈6个小区中心分布在以原点为圆心、半径为蜂窝外接圆半径R的圆周上第二圈12个小区分布在半径2R和sqrt(3)R的混合半径上具体位置由六边形的几何关系决定。实际写代码时我更推荐用六边形的平铺公式直接算避免手写坐标容易出错。2.2 六边形半径与站点间距离的关系蜂窝半径的选择直接影响覆盖评估的基准。这里有一个容易混淆的地方六边形的半径可以是外接圆半径即中心到顶点的距离也可以是内切圆半径中心到边中点的距离。在蜂窝网络仿真里通常默认用外接圆半径作为小区半径因为它和基站间距离有简洁的对应关系。对于正六边形平铺相邻小区中心之间的距离站点间距通常叫ISD等于sqrt(3) * R其中R是外接圆半径。这个关系特别重要因为无人机之间的水平间距决定了干扰水平间距越小同频干扰越强间距越大覆盖空隙越大。仿真时站点间距需要根据无人机的工作高度和天线波束宽度来联合调整。我在自己的仿真里通常这样设置参数取值说明小区外接圆半径 R400 m覆盖半径站点间距 ISD693 msqrt(3)*R无人机高度 h300~800 m可优化变量系统带宽20 MHzLTE典型带宽发射功率30 dBm无人机射频输出这里要特别提醒一点当无人机高度超过几百米后地面蜂窝投影和无人机悬停在小区中心正上方的假设仍然成立但覆盖边缘的信号传播距离会明显增加路径损耗也随之上升。所以高度不是越高越好后面第4节会专门讲这个权衡。2.3 用户位置与小区归属划分有了蜂窝网格和无人机坐标下一步就要撒用户。用户通常按均匀分布撒在覆盖区域内这是蜂窝网络仿真最常见的假设。撒完用户后需要判断每个用户属于哪个小区。最直接的办法是计算用户与19个小区中心的水平距离取最小距离对应的那个小区。但这在MATLAB里有个更优雅的写法用dsearchn或者直接构建Voronoi图。[nearest_center_id, dist] dsearchn(center_coords, user_positions);dsearchn做的是最近邻搜索本质上就是Voronoi划分。对六边形平铺来说Voronoi划分结果正好近似六边形网格所以这样写不仅代码简洁结果也更精确——用户归属的判定是连续的不会产生网格边界的离散误差。不过这里有个坑边界用户问题。19个蜂窝覆盖的区域是个近似六边形的形状但边界上的用户计算SINR时它们的小区外未必有其他小区干扰这会低估干扰水平。实际项目中边界处的可靠性指标通常比内部区域好一截但这是仿真边界效应不是真实性能。为了缓解这个问题我一般会把用户撒在一个比蜂窝阵列略微外扩的区域内统计时再排除最外圈边缘3%~5%的用户。3. 空中到地下的链路模型路径损耗与SINR计算3.1 空地链路为什么不能直接套地面模型地面基站仿真的路径损耗模型常用的有Cost231、Okumura-Hata这些它们的适用前提是发射天线和接收天线都在地表附近传播环境以多重散射为主。但无人机在300米高空信号以大角度入射到地面传播特性完全不同。空中基站对地面用户的链路通常采用视距LoS与非视距NLoS混合模型。无人机高度越高视距概率越大但传播距离也越远。这两者是矛盾的。一个常用的简化模型是PL(dB) 20*log10(4*pi*f*d/c) P_LoS * eta_LoS (1 - P_LoS) * eta_NLoS其中d是三维距离f是载频c是光速P_LoS是视距概率eta_LoS和eta_NLoS是额外的穿透损耗因子。视距概率随仰角变化。仰角越高无人机在头顶正上方视距概率越高仰角越低用户在小区边缘视距概率越低。这个特性直接导致了一个现象小区中心的用户链路质量非常好边缘用户则劣化很快。这也正是六边形蜂窝结构里中心-边缘性能差异的物理根源。在MATLAB里我建议把路径损耗写成独立的函数文件因为后面高度优化、功率优化都要反复调用它。function PL U2G_pathloss(Pos_uav, Pos_user, h, f, p_los_para, eta_los, eta_nlos) d_3d sqrt(sum((Pos_uav - Pos_user).^2, 2)); elevation asind(d_3d ./ sqrt(d_3d.^2)); % 更准确做法elevation asind( (h) ./ d_3d ); p_los 1 ./ (1 p_los_para(1) * exp(-p_los_para(2) * (elevation - p_los_para(3)))); PL 20*log10(4*pi*f*d_3d/3e8) p_los*eta_los (1-p_los)*eta_nlos; end注意上面的仰角计算注释里提醒的仰角是高度差除以三维距离的反正弦不要误写成水平距离。3.2 同频干扰与SINR的计算细节SINR信干噪比是所有覆盖评估的核心。对每个用户接收到的信号功率来自它所属的无人机基站干扰则来自其他所有无人机。SINR(u) P_rx_serving(u) / (sum_{i~1} P_rx_interfere(u, i) sigma^2)其中接收功率要计入天线增益和路径损耗。如果19架无人机都用同一频率同频组网干扰就是19-118路这会比较激进地考验系统性能如果做频率复用比如每7个小区一组做复用干扰源数量就明显下降但频谱效率也下降。我实际仿真时发现一个值得注意的现象干扰的主要贡献往往不是全部18路信号而是最近的两三层邻居大概7~12个干扰源。更远的小区因为空间距离大、路径损耗高对SINR的贡献很小。所以在审稿或汇报时如果有人问为什么只算周围两圈干扰可以回答因为更远干扰的功率低于噪声门限几个数量级对SINR的影响可以忽略算进去反而增加计算量。3.3 覆盖率和可靠性的标准定义覆盖率和可靠性是一对容易混用的词。在这个项目里我建议区分两个指标覆盖率Coverage Rate区域内SINR高于某门限比如-3 dB、0 dB、5 dB的用户比例。可靠性Reliability在多次独立快照多帧或多时段下某个用户位置能够持续达到门限的概率。更常用的是考虑小尺度衰落后的统计可靠性但用蒙特卡洛多次撒用户、多次算SINR也能得到统计度量。在MATLAB里覆盖率就是一次撒点后统计coverage_rate mean(sinr_all sinr_threshold);而可靠性需要循环多次比如撒5000个用户、重复100次得到每个位置的覆盖经验概率。如果仿真目标是提升覆盖范围和可靠性那么基准场景和优化场景都要跑同一套评估流程否则指标对比没有意义。4. 无人机部署的关键参数优化高度、下倾角与功率4.1 高度与覆盖半径的物理博弈这不是多此一举的问题——我见过不少项目直接把无人机高度定在500米理由是飞得高覆盖大。但覆盖大不等于覆盖好。无人机高度对覆盖有三个方向的影响升高则视距概率增大路径损耗的额外衰减项变小这部分是增益。升高则三维传播距离增大自由空间路径损耗变大这部分是损耗。升高则覆盖半径增大但边缘区域仰角变小视距概率下降边缘SINR可能恶化。这三个机制叠加起来覆盖率和容量随高度变化的曲线通常是倒U形存在一个最优高度低于它视距不足高于它距离损耗过大。做仿真时建议把高度作为扫描变量比如从100米扫到1000米步长50米或100米画出覆盖率随高度变化曲线。这个曲线几乎每个无人机通信项目都要用到是审稿人最认可的结果类型之一。4.2 天线下倾角决定能量聚焦方向的关键参数无人机天线如果是全向的信号会向四面八方和上下辐射造成大量能量浪费。实际系统中会给无人机装方向性天线并调节下倾角让波束对准目标小区边缘。天线增益模型通常用简化3D方向图G(theta) G_max - 12 * ( (theta - theta_tilt) / theta_3dB )^2 , |theta - theta_tilt| beamwidththeta是相对天线指向的偏离角theta_tilt是下倾角theta_3dB是半功率波束宽度。当无人机高度增加时最优下倾角也应该相应增大使得波束仍然能覆盖到小区边缘。否则会出现波束打到地面太近边缘信号断崖式下跌的情况。这也是实际项目里常见的参数跷跷板高度动了倾角必须跟着动。4.3 功率控制的约束与效果发射功率不是越大越好。单看覆盖功率大了当然覆盖更好但同频干扰也会同步增强。在19个小区同频组网下所有无人机功率同时提升干扰和信号会以同样比例增长——SINR几乎不变只是绝对信号强度上升。真正让功率控制有效果的是非均匀功率分配中心小区可以适当降低功率避免对边缘小区的强干扰边缘小区提升功率弥补较差的路损。这种中心弱、边缘强的功率分配策略在仿真里能显著提升边缘覆盖用户的SINR。我在仿真里常设三档功率位置功率逻辑中心小区27 dBm降低干扰第一圈小区30 dBm标准功率第二圈小区33 dBm补偿边缘路损这个策略简单有效尤其适合应急通信中对边缘覆盖要求高的场景。5. 仿真主循环与结果可视化把覆盖好变成可比较的数字5.1 主脚本的模块化设计这个仿真项目的主脚本我建议按照参数定义-场景生成-链路计算-指标统计-可视化五个模块来组织。这样做的直接好处是想换蜂窝半径、改用户密度、调无人机高度只需要改参数定义区不需要动后面任何代码。一个参考的主脚本结构%% 参数定义 clear; clc; R_cell 400; N_cell 19; h_uav 300; % 可扫描 f_carrier 2e9; P_tx 30; sinr_th 0; % dB N_user 5000; %% 场景生成 % 生成19个六边形小区中心 center_pos generate_hex_centers(N_cell, R_cell); % 随机撒用户 user_pos generate_users(R_cell, center_pos, N_user); %% 链路计算 % 计算每个用户的归属小区 belong_id assign_cell(user_pos, center_pos); % 计算SINR [sinr_all, pl_all] compute_sinr(user_pos, belong_id, center_pos, h_uav, f_carrier, P_tx); %% 指标统计 coverage_rate mean(sinr_all sinr_th); cox5 quantile(sinr_all, 0.05); % 5%分位SINR边缘可靠性代表值 %% 可视化 plot_coverage_map(user_pos, sinr_all, center_pos);这种结构的代码单次仿真跑5000个用户、19个小区规模很小在普通笔记本上几秒就能完成完全不用担心性能。5.2 中心蜂窝坐标生成的实现细节生成19个六边形蜂窝中心是很多人最容易卡住的点。这里给出一个可靠的简洁实现思路。正六边形平铺的中心可以用两个基向量表示v1 [sqrt(3)/2, 1/2] * (sqrt(3)*R_cell); v2 [0, 1] * (sqrt(3)*R_cell);所有蜂窝中心可以表示为center m*v1 n*v2的组合其中m、n取整数。要得到以原点为中心的19个小区取满足norm(m*v1 n*v2) 2.1*R_cell的点再按到原点距离排序。先声明一个递归生成再筛选的办法m_range -3:3; n_range -3:3; [M, N] meshgrid(m_range, n_range); V [M(:)*v1(1) N(:)*v2(1), M(:)*v1(2) N(:)*v2(2)]; dist sqrt(V(:,1).^2 V(:,2).^2); % 取距原点最近的19个 [~, idx] sort(dist); center_pos V(idx(1:19), :);这个写法的好处是如果要扩展到更大的蜂窝阵列只要把筛选条件改成取37个、61个即可逻辑完全不用变。5.3 可视化覆盖率地图与CDF曲线仿真的结果不能只有数字还得有图。我一般出两种图覆盖率地图在覆盖区域撒用户按SINR值着色直接在图上就能看出中心绿、边缘红的分布格局。配合小区边界叠加能直观判断盲区在哪。SINR的CDF曲线把所有用户的SINR画成累积分布函数图。横轴是SINRdB纵轴是概率。这条曲线最重要的信息是曲线左端——最差5%用户的SINR值。这个值代表网络的边缘可靠性比平均SINR更能说明问题。我在最近一次仿真里把高度从200米调到500米覆盖率SINR 0 dB从72%提到84%但5%分位SINR从-4.2 dB降到了-6.5 dB。这就是典型的平均变好、边缘变差现象。只看覆盖率容易被虚假的改善误导必须同时看边缘分位点。6. 仿真里容易翻车的几个细节与调参技巧6.1 边界效应19个小区是孤岛还是无限延展真实的蜂窝网络是无限延展的每个小区四周都有邻居。但仿真里只有19个小区矩阵边缘的小区天然缺少外部干扰。处理这种边界问题有三种常见做法加虚拟小区在19个小区外侧再虚拟一圈发射源只算功率、不画小区。这是最贴近真实的做法但增加额外代码。只统计内部小区用户只撒在中心小区及第一圈范围内评价区域不覆盖最外层小区。简单且实用。周期性边界wrap-around把地图首尾相连模拟无限平面。精度高但复杂度较高。如果对精度要求很高推荐第一种做法。如果只是初版评估覆盖率趋势第二种做法就够了。6.2 随机过程的种子与可复现性撒用户、算视距概率、随机衰落这些环节都会引入随机性。如果不固定随机种子两次仿真结果可能差好几个百分点不同人跑同一份代码结果对不上这在合作项目里非常尴尬。MATLAB里在参数定义区加一行rng(2024);所有随机过程就都能复现。建议把这行放在所有随机函数之前并把它当作代码规范强制执行。6.3 蒙特卡洛次数到底要多少很多人问覆盖率仿真要跑多少次取平均才够答案是取决于性能波动的方差。如果指标是均值覆盖率撒5000个用户做一次误差通常已经很小但如果要评估5%分位SINR这种尾部指标建议至少重复50次以上取分位的平均值或中位数。我自己的经验是先用100个用户、10次快速试跑判断数值稳定性。如果均值标准差小于0.5%就用当前配置正式跑否则增加用户数或重复次数。这套流程比一上来就堆几千次更高效。6.4 参数扫描别用手工做高度优化、功率优化时经常要跑几十组参数。手动改一个跑一遍的效率太低也容易改动错误。写成循环扫描加自动记录h_list 100:100:1000; coverage_results zeros(length(h_list), 1); for k 1:length(h_list) coverage_results(k) sim_coverage(h_list(k)); end plot(h_list, coverage_results);这样一组高度扫描曲线几分钟就出来了还能直接存进表格交给分析工具。优化方向也一目了然。最后再分享一点个人体会做无人机覆盖仿真最重要的不是把代码写得多复杂而是把每个参数背后的物理意义吃透。19个六边形蜂窝不是随便选的数字——它是频率复用和干扰分析里的标准拓扑无人机高度不是越高越好——它和视距概率、路径损耗、天线倾角纠缠在一起。把这几层关系理清了你的仿真结果才有解释力发给别人也才经得起追问。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑