宏小区覆盖仿真:从链路预算到MATLAB覆盖云图的完整流程
2026/9/23 2:31:53 网站建设 项目流程

简介:本资源为北京邮电大学移动通信仿真与规划课程设计实验2的配套资料,面向通信工程、电子信息类专业学生及移动网络规划初学者,聚焦宏小区覆盖仿真这一核心实验场景。包内共8个文件,以7个MATLAB源程序(.m)和1份Word实验报告(.docx)为主,压缩包约2.92MB,源程序覆盖定向天线增益计算、路径损耗模型、最佳站点选择与多场景主流程等模块,报告则记录实验步骤与结果分析。资源围绕定向天线增益仿真与宏小区覆盖实验展开,读者可借助开源代码完成覆盖仿真、撰写实验报告并开展拓展实验,理解基站选址与天线增益对覆盖效果的影响。目前已有511人学习下载,适合需要完成同类课程设计或希望快速上手移动网络仿真规划的学习者参考借鉴。

1. 宏小区覆盖仿真到底在算什么:从一门课设到一套可复用的规划流程

移动通信仿真与规划这门课里,实验2「宏小区覆盖」通常是学生第一次真正把链路预算、传播模型和覆盖预测串起来的地方。它要解决的核心问题很朴素:给定基站站址、发射功率、天线挂高和倾角,在城区或郊区的地图上,把每个点的接收电平算出来,再判断哪些地方能通、哪些地方是弱覆盖或盲区。源程序加报告的组合,意味着这套东西不只是跑个图交差,而是要求你能改参数、能解释曲线、能对着一张覆盖云图说出「这里为什么掉下去了」。

适合谁看:正在做这个课设、被 Okumura-Hata 或 COST-231 公式绕晕的同学;已经工作、需要快速搭一个覆盖预测原型来验证站址的网优新人;以及想把 MATLAB 仿真和规划流程打通、不想每次重写脚本的工程师。下面按「模型怎么选 → 代码怎么写 → 图怎么出 → 坑在哪」的顺序讲,参数和命令都能直接抄。

2. 传播模型选型与链路预算:宏小区覆盖的计算底座

2.1 为什么宏小区优先用 Okumura-Hata 和 COST-231

宏小区覆盖的典型场景是基站挂高 30 米上下、覆盖半径 1 到 20 公里、终端在 1.5 米左右。这个尺度上,自由空间公式太乐观,射线追踪又太重,工程上最稳的是 Okumura-Hata 系列经验模型。它把路径损耗拆成频率、距离、基站高度、终端高度和地形修正几项,输入少、算得快,适合做覆盖云图这种要遍历成千上万个栅格点的任务。

城区场景我一般用 COST-231 Hata,因为它把频率上限推到 2 GHz,正好覆盖常见的 1800 MHz 和 2100 MHz 频段。郊区或开阔地则退回 Okumura-Hata 的郊区修正形式。选型不是玄学,关键看两点:你的频段是否超过 1500 MHz,以及你的环境是密集城区还是郊区。超过就上 COST-231,没超过且地形开阔就用经典 Hata。

链路预算的作用是把发射端和接收端之间的所有增益和损耗列清楚,最后得到允许的最大路径损耗。公式是:最大路径损耗 = 发射功率 + 天线增益 - 线缆损耗 - 接收灵敏度 - 余量。余量里通常包含阴影衰落余量、穿透损耗和干扰余量。这个值算出来之后,反代回传播模型就能求出小区半径,这是覆盖规划的起点。

2.2 链路预算的参数表与计算步骤

下面这张表是我做课设和实际规划时都会填的,参数值按常见宏站配置给,你按自己题目改。

参数符号典型值说明
发射功率TxPower43 dBm约 20 W,宏站常见
基站天线增益Gtx18 dBi定向天线
线缆与接头损耗Lcable2 dB含跳线
接收灵敏度RxSens-110 dBm视业务速率而定
阴影衰落余量Lshadow8 dB边缘覆盖概率 90% 左右
穿透损耗Lpen15 dB室内深度覆盖另算
干扰余量Lint3 dB负载相关

计算步骤:先把发射功率换算成 dBm,加上天线增益,减去线缆损耗,得到等效全向辐射功率 EIRP。再用 EIRP 减去接收灵敏度和各项余量,得到最大允许路径损耗。这个结果直接决定后面传播模型反解出来的半径是否合理。如果算出来半径只有几百米,先别怀疑模型,回头检查余量是不是给太大了。

2.3 用 MATLAB 实现路径损耗计算的最小函数

function L = pathloss_cost231(f, hb, hm, d, env) % f : 频率,单位 MHz % hb : 基站天线有效高度,单位 m % hm : 终端天线高度,单位 m % d : 收发距离,单位 km % env : 'urban' 或 'suburban' % COST-231 Hata 城区路径损耗 a_hm = (1.1*log10(f) - 0.7)*hm - (1.56*log10(f) - 0.8); L_urban = 46.3 + 33.9*log10(f) - 13.82*log10(hb) ... - a_hm + (44.9 - 6.55*log10(hb))*log10(d) + 3; if strcmp(env, 'suburban') % 郊区修正:减去 2*(log10(f/28))^2 + 5.4 L = L_urban - 2*(log10(f/28))^2 - 5.4; else L = L_urban; end end

逻辑说明:先算终端高度修正因子 a_hm,它随频率和终端高度变化,很多人直接抄常数导致结果偏差。城区公式里的 +3 是城市中心修正项,郊区场景要减掉。参数 f 用 MHz,d 用 km,这是 Hata 系列的标准单位,混用米和公里是最常见的翻车点。调用时如果 d 传成米,损耗会大得离谱,图上一片黑。

提示:d 必须大于 0.1 km,Hata 系列在近距离不适用,近点建议切自由空间模型。

3. 覆盖云图生成:从单点计算到栅格遍历

3.1 栅格化地图与站址坐标的建立

覆盖预测的本质是对地图上每个栅格点算一次路径损耗,再和链路预算的门限比较。所以第一步是把地图栅格化。课设里通常给一张区域图或一组边界坐标,我一般用 meshgrid 生成规则栅格,分辨率取 50 米或 100 米。分辨率越高图越细,但计算量按平方增长,课设规模用 100 米足够看出覆盖形态。

站址坐标要和地图坐标系一致。常见做法是用经纬度,但仿真里更省事的是转成平面直角坐标,单位米。如果题目只给经纬度,用简单的等距投影换算即可,小范围内误差可接受。多个站址就存成矩阵,每行一个站的 x、y、高度和方位角。

3.2 遍历计算与覆盖判决的代码骨架

% 区域范围与栅格 x = 0:100:5000; % 东西向 0~5 km,步长 100 m y = 0:100:5000; [X, Y] = meshgrid(x, y); % 站址:x, y, 高度, 发射功率(dBm) sites = [2500, 2500, 30, 43]; % 链路预算得到的最大允许路径损耗 Lmax = 43 + 18 - 2 - (-110) - 8 - 3; % 约 158 dB RSS = -inf(size(X)); % 接收电平初始化 for k = 1:size(sites,1) d = sqrt((X - sites(k,1)).^2 + (Y - sites(k,2)).^2) / 1000; % km d(d < 0.1) = 0.1; % 避免近距离模型失效 L = pathloss_cost231(1800, sites(k,3), 1.5, d, 'urban'); rss_k = sites(k,4) + 18 - 2 - L; % 接收电平 RSS = max(RSS, rss_k); % 多站取最强 end % 覆盖判决 covered = RSS >= -110; imagesc(x, y, RSS); colorbar; caxis([-130 -60]);

逻辑说明:d 除以 1000 把米换成公里,这是接上一节函数的关键。RSS 初始化为负无穷,保证第一个站的结果能覆盖它。多站场景用 max 取最强信号,模拟终端选择最优小区。covered 是逻辑矩阵,可以直接统计覆盖率。caxis 固定色标范围,方便不同方案对比,不然每次自动缩放会让图看起来差不多。

参数说明:步长 100 对应 100 米分辨率;Lmax 算出来约 158 dB,如果实际损耗超过它就算不上。接收灵敏度 -110 dBm 是业务门限,改成 -100 会让覆盖收缩,这个参数最敏感,报告里要写清楚依据。

3.3 覆盖率统计与弱覆盖区域标记

光有云图不够,报告里通常要一个覆盖率数字。直接对 covered 矩阵求均值即可得到面积覆盖率。但更有价值的是把弱覆盖区域单独标出来,比如 RSS 在 -110 到 -100 之间的边缘区域,这些地方是后续加站或调倾角的重点。

coverage_ratio = mean(covered(:)) * 100; weak = (RSS >= -110) & (RSS < -100); fprintf('覆盖率: %.2f%%, 弱覆盖栅格数: %d\n', coverage_ratio, sum(weak(:)));

这段代码输出两个指标,覆盖率给结论,弱覆盖数给优化方向。如果覆盖率低于 90%,先看弱覆盖是不是集中在边缘,是的话调天线方位角或加站比改模型更有效。

4. 天线方向图与多站协同:让覆盖图接近真实网络

4.1 定向天线增益的方向性建模

前面用的 18 dBi 是全向假设,实际宏站是定向天线,水平面有 65 度左右的波束宽度,垂直面有下倾角。不做方向性建模,覆盖图会是一个个圆,和真实网络差很远。常见做法是用高斯方向图近似,水平增益随方位角偏离主瓣而下降。

function g = antenna_gain(phi, phi0, theta, theta_tilt) % phi : 终端相对站点的方位角,度 % phi0 : 天线主瓣方位角,度 % theta : 终端相对站点的俯仰角,度 % theta_tilt: 天线下倾角,度 % 水平面:3dB 波束宽度 65 度 g_h = -min(12*((phi - phi0)/65).^2, 20); % 垂直面:3dB 波束宽度 10 度 g_v = -min(12*((theta - theta_tilt)/10).^2, 20); g = 18 + g_h + g_v; % 18 为最大增益 end

逻辑说明:偏离主瓣越远,衰减越大,用平方项近似,并限制最大衰减 20 dB 防止出现极端值。phi 和 theta 要用 atan2 从坐标差算出来。这个函数替换掉常数增益后,覆盖图会出现明显的主瓣方向和背向凹陷,和真实站型接近。

参数说明:65 和 10 是典型波束宽度,不同天线型号不同,报告里要注明来源或假设。下倾角 theta_tilt 一般 3 到 8 度,调它可以把能量压向地面,减少越区覆盖。

4.2 多站干扰与最强小区选择

多站场景下,终端不是只收一个站,而是收到多个站的信号。仿真里通常按最强接收电平选服务小区,同时把其他站的信号当作干扰。课设层面不一定要求算 SINR,但至少要把服务小区标出来,这样能看出站间边界是否合理。

RSS_all = -inf([size(X), size(sites,1)]); for k = 1:size(sites,1) % ... 计算 rss_k ... RSS_all(:,:,k) = rss_k; end [RSS, serving] = max(RSS_all, [], 3);

serving 矩阵记录每个栅格由哪个站服务,用不同颜色画出来就是小区边界图。如果两个站的服务边界严重偏斜,说明功率或下倾角配置不均衡,这是规划要调的地方。

4.3 站址调整的迭代思路

覆盖不达标时,不要盲目加功率。先看弱覆盖区域的位置:如果在两个站中间,考虑调整方位角让主瓣对准;如果在边缘,考虑加站或升高天线;如果是室内穿透问题,加功率效果有限,得靠室分。我一般按「调方位角 → 调下倾角 → 调功率 → 加站」的顺序试,每次只改一个变量,记录覆盖率变化,这样报告里能说清楚每个参数的作用。

5. 宏小区覆盖仿真常见问题与排查

5.1 覆盖图全黑或全亮

现象:imagesc 出来的图要么一片深色要么一片亮色,看不出覆盖形态。原因通常是路径损耗单位错了,d 传成米导致损耗巨大,或者链路预算门限算错,Lmax 大得离谱。解决:在循环里打印第一个栅格的 d 和 L 值,和手算结果对一下。d 应该是公里量级,L 在 100 到 160 dB 之间。

5.2 近距离出现异常高损耗

现象:站点附近几个栅格损耗比远处还大。原因是 Hata 模型在 d 小于 0.1 km 时失效,公式里的 log10(d) 会给出不合理结果。解决:加一个下限,d(d < 0.1) = 0.1,或者近距离切换成自由空间模型。这个坑很隐蔽,因为图上只表现为站点中心有个小暗点。

5.3 多站覆盖出现明显接缝

现象:两个站的服务边界是一条生硬的直线,或者某站覆盖被完全压制。原因是只用了常数增益,没有方向性,或者功率配置差异太大。解决:引入天线方向图,检查各站的方位角和下倾角是否合理。如果还是接缝生硬,看是不是栅格分辨率太粗,边界处取整造成的。

5.4 覆盖率统计和目视不符

现象:图上看着覆盖挺好,算出来覆盖率只有 70%。原因是 covered 判决用的门限和色标范围不一致,或者边缘弱覆盖区域面积比视觉上大。解决:把 covered 矩阵叠加到图上画等高线,确认判决边界和色标对应。另外检查是否有 NaN 栅格被算进均值。

5.5 运行速度慢到跑不完

现象:栅格数一多,循环要跑几分钟甚至更久。原因是 MATLAB 里逐点循环效率低。解决:把距离和损耗计算向量化,用矩阵运算代替 for 循环。上面给的代码已经是向量化写法,如果还慢,把分辨率从 50 米降到 100 米,计算量降到四分之一。

6. 从课设到可复用工具:参数化与结果验证的进阶做法

把实验2做成一门课设容易,做成一套下次还能用的工具,关键在参数化和验证。我习惯把频率、站址、天线参数、门限全部写进一个配置结构体,主脚本只读配置,这样换场景不用改代码。

cfg.freq = 1800; cfg.sites = [2500, 2500, 30, 43, 0, 5]; % x,y,h,pwr,azimuth,tilt cfg.rx_sens = -110; cfg.shadow = 8; cfg.res = 100; cfg.env = 'urban';

配置化之后,验证就方便了。验证分两层:一是单点验证,手算一个已知距离的路径损耗,和函数输出对比,误差应在 1 dB 以内;二是趋势验证,固定其他参数只改距离,损耗应随距离单调增加,只改频率,损耗应随频率增加。如果趋势不对,多半是公式里的系数抄错了。

另一个进阶点是把结果导出成 CSV 或 GeoTIFF,方便在 GIS 里叠加真实地图。课设报告里如果能附一张叠加了路网的覆盖图,说服力比纯色块强很多。导出时注意坐标系一致,栅格的 x、y 要和地图投影对应。

我踩过最深的一个坑是:早期做覆盖预测时,为了图好看把色标范围调得很窄,结果报告里的覆盖率和图给读者的印象完全对不上,被追问了半天。后来养成习惯,色标范围固定成链路预算门限到最大接收电平,图和数据永远一致。这个习惯比任何模型调参都值钱。希望帮到你。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询