ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

5G路径损耗与天线方向图仿真:从Friis公式到阵列波束赋形

5G路径损耗与天线方向图仿真:从Friis公式到阵列波束赋形 简介一份面向5G通信初学者和MATLAB使用者的课程资源包聚焦路径损耗建模与天线辐射方向图仿真两大主题。资源共7个文件含6个MATLAB脚本和1个mp4教程视频压缩包仅845KB。脚本覆盖从基础环境设置、路径损耗模型Friis传输方程、Okumura-Hata模型到天线对象创建与三维方向图绘制的完整流程视频演示具体操作步骤便于边看边练。包内文件命名清晰主脚本Runme.m可直接运行func目录存放辅助函数配合教程视频可快速复现典型仿真案例。内容还兼顾多径效应、阴影衰落等5G传播场景以及主瓣宽度、副瓣电平等天线关键指标分析适合用于课程设计、期末复习或无线通信方向入门实践。已有132人学习下载可作为MATLAB天线仿真与5G信道分析的快速上手参考。1. 从 Friis 公式到天线阵列5G 仿真里的“损耗”和“方向图”为什么必须一起看5G 基站天线的发射功率往往只有 200 mW 左右和 4G 宏站动辄 40 W 的输出相比小了两个数量级但在密集城区覆盖效果反而更好。这种反直觉现象的关键不在功率而在 5G 使用了更高频段和更大的天线阵列天线把能量集中到特定方向等效增益拉高了十几 dB从而抵消了高频路径损耗带来的额外衰减。换句话说路径损耗和天线辐射方向图从来不是两个独立的计算步骤而是同一条无线链路里共同决定覆盖半径的两个变量。很多刚接触 5G 物理层的工程师一上来就照着公式算路损却忘了把天线增益随角度的变化塞进链路预算结果仿真出来的覆盖范围和实测差出一大截。本资源包里的 MATLAB 仿真代码就是把 3GPP 路径损耗模型和天线方向图放在同一个框架里一边算传播衰减一边画增益分布再配合教程视频把 Runme.m 跑熟就能把 5G 链路里最核心的两个量一次摸清。下面先从路径损耗建模讲起再进入天线方向图仿真和阵列波束扫描最后落到资源包的实际运行与调试。2. 5G 路径损耗建模从 Friis 公式到 3GPP TR 38.901 UMi 模型2.1 高频带来的损耗问题为什么不能拿 2G 时代的公式硬套5G NR 的载波频率从 600 MHz 一直延伸到 52.6 GHz当前全球主流部署集中在 3.5 GHzn78和 4.9 GHzn79附近而 4G 重耕频段里的 1.8 GHzn3和 2.6 GHzn41也还在继续承担打底覆盖。对比同一距离下的自由空间损耗3.5 GHz 比 1.8 GHz 多出近 6 dB 衰减这意味着手机收到的信号会明显变弱。频率升高后波长缩短接收天线有效面积变小这是物理层面不可回避的代价。所以查看 5G 基站或 5G 天线最新版 2023 参数时会发现天线增益普遍标到 15 dBi 甚至更高目的就是补偿高频路损。另一个容易被忽略的点是同步信号解调。PSS/SSS 在 5G NR 中的含义是主同步信号和辅同步信号手机开机后要在 5 ms 半帧内盲检这两组序列以完成时间和频率同步。若路径损耗超出预期同步信号信噪比低于检测门限小区就会表现为“搜索不到网络”。因此在做 5G 覆盖仿真时路径损耗模型选得准不准直接影响后续对同步信号、业务信道和波束管理效果的判断。2.2 用 MATLAB 实现 Friis 传输方程和对数距离模型不考虑任何遮挡的自由空间模型是最容易上手的起点也就是 Friis 传输方程。它表达的是发射功率经过天线增益放大后在接收端能收到多少的信号。自由空间路径损耗的工程表达式为PL_fspl_dB 20lg(d) 20lg(f) 20lg(4π/c)其中 d 为距离f 为频率c 为光速。在 MATLAB 中可以一次算出一组距离对应的损耗值画成曲线会很直观。常见的写法是% fspl_sweep.m clear; close all; clc; f 3.5e9; % 载波频率 3.5 GHz对应 n78 频段 d 10:10:500; % 距离向量从 10 米到 500 米 c 2.99792458e8; % 光速 lambda c / f; L_fspl (4 * pi * d / lambda).^2; % 线性路损值 L_fspl_dB 10 * log10(L_fspl); % 转换为 dB 单位 plot(d, L_fspl_dB, LineWidth, 1.6); xlabel(距离 (m)); ylabel(自由空间路损 (dB)); title([FSPL at , num2str(f/1e9), GHz]); grid on;这里 d 是长度向量lambda 是电磁波波长核心计算利用 MATLAB 的向量化能力一次完成 50 个距离点的路损。10*log10负责把线性功率比转成 dB方便后续和天线增益、发射功率做加减法。观察曲线会发现距离每增加一倍路损增加约 6 dB这就是自由空间传播每倍程 6 dB 的由来。若只看百米级覆盖这个模型已经能给出量级参考但城市环境存在楼宇遮挡和反射直接套用会明显低估路损。因此工程上更常用对数距离路径损耗模型PL_dB PL(d0) 10nlg(d/d0) Xσ其中 PL(d0) 是参考距离处的自由空间路损n 是路径损耗指数Xσ 是均值为 0、标准差为 σ 的高斯阴影衰落。下面是一个封装好的函数方便在不同脚本里调用function PL logdistance_pathloss(d, d0, n, sigma, f) % d : 距离向量单位 m % d0 : 参考距离单位 m % n : 路径损耗指数 % sigma : 阴影衰落标准差单位 dB % f : 工作频率单位 Hz c 2.99792458e8; lambda c / f; PL0 20*log10(4*pi*d0/lambda); % 参考距离处自由空间路损 shadow sigma * randn(size(d)); % 每次生成独立随机阴影衰落 PL PL0 10*n*log10(d/d0) shadow; end需要注意randn引入的随机性只有在蒙特卡洛仿真中才合理单次取点会有抖动。路损指数 n 在密集城区通常取 3.0 到 4.5完全开阔地接近 2σ 在城区取 6 到 8 dB。如果想稳定复现同一场景可以把随机种子锁定或者将 sigma 设为 0。2.3 3GPP TR 38.901 UMi-Street Canyon 模型与参数表实际 5G 网络规划里Friis 公式通常只用来做视距空旷场景的估算3GPP 在 TR 38.901 中定义的 UMi-Street Canyon 模型更适合城区微站。基站天线高度通常低于楼顶信号沿街道传播存在明显的地物散射。该模型将 LOS 和 NLOS 分开建模对 3.5 GHz、基站高度 10 m、终端高度 1.5 m 的配置LOS 路径损耗可简化为PL_UMi_LOS 32.4 21log10(d3D) 20log10(fc)其中 fc 单位为 GHzd3D 是基站到终端的空间直线距离。NLOS 则要加入终端高度修正项。把两个公式封装成一个函数代码上并不复杂function PL umi_street_canyon(fcGHz, d3D, hUT, los) % fcGHz : 频率单位 GHz % d3D : 三维距离单位 m % hUT : 终端高度单位 m % los : 1 表示视距0 表示非视距 if los 1 PL 32.4 21*log10(d3D) 20*log10(fcGHz); else PL 35.3*log10(d3D) 22.4 21.3*log10(fcGHz) - 0.3*(hUT - 1.5); end end这个简化版本省略了 TR 38.901 中关于入射角修正的项教学仿真误差在 12 dB 内工程规划时必须查完整表格。调用时可以直接对比 LOS 和 NLOS 的差异% umi_pathloss_compare.m fc 3.5; % GHz d3D 50:20:1000; % 三维距离采样 PL_los umi_street_canyon(fc, d3D, 1.5, 1); PL_nlos umi_street_canyon(fc, d3D, 1.5, 0); semilogy(d3D, PL_los, -, d3D, PL_nlos, --); grid on; legend(LOS, NLOS, Location, northwest);注意这里用了semilogy距离轴显示为对数。这样更容易看出 NLOS 曲线的斜率明显大于 LOS因为非视距条件下信号要走更多反射绕射路径。3GPP 对该场景给出了多组推荐参数表 1 列出了与仿真最相关的几项参数LOSNLOS说明路损指数近距离段2.03.5百米以内的衰减速度路损指数远距离段3.53.8超过断点距离后急剧上升阴影衰落标准差4 dB7 dB用于随机抖动仿真断点距离 dBP约 60 m 3.5 GHz不适用与基站高度相关两曲线通常会在 400 到 600 米之间拉开差距。这也对应了 5G 密集城区站间距往往只有 300 到 400 米的工程事实距离再远NLOS 路损就会快速吞掉信噪比余量。2.4 仿真结果判读看曲线前先问自己三个问题跑出路径损耗曲线并不等于完成了任务还要确认计算过程没有单位错误。常见错误之一是公式中带入的 fc 单位是 GHz但手算时却用 Hz导致结果差出几十 dB。第二检查参考距离 d0 处的路损是否与 Friis 公式结果吻合如果对不上说明代码里波长或常数写错。第三观察阴影衰落标准差设置是否合理sigma 超过 10 dB 时同一位置两次仿真可能差 20 dB 以上覆盖判断会失真。对于更贴近 5G 大规模天线的场景还可以把 2D 距离和三维距离区分开因为基站和终端之间存在高度差。把频率、天线高度、场景标识都放在脚本头部集中定义后续换到 n77 或 n79 频段时只改一个变量就能重新生成整套基坑曲线。3. 天线辐射方向图仿真偶极子、微带贴片与 Antenna Toolbox 绘图3.1 方向图里最该关注的指标增益、波束宽度、旁瓣和前后比路径损耗决定了信号随距离平均衰减多少而天线方向图决定了这些能量被分配到了哪些方向。方向图本质上是一个三维增益分布图但工程上通常用两个正交切面来分析即水平面和垂直面。在看方向图时先关注四个量主瓣增益、半功率波束宽度、第一副瓣电平、前后比。增益表示天线把输入功率集中到某个方向的能力单位通常写为 dBi即相对全向辐射体的分贝值。波束宽度越窄能量越集中但覆盖范围也随之减小。副瓣电平过高会把能量泄漏到不需要的方向造成对其他用户的干扰。前后比用来衡量后向辐射抑制能力基站天线一般要求大于 25 dB。5G 基站天线的方向图不是固定的而是通过调整各阵元相位来改变波束指向和形状。这种“电调下倾”和“波束扫描”的能力使天线方向图仿真比 4G 时代复杂许多。用 MATLAB 做方向图仿真的路径有两条一条是用 Antenna Toolbox 中的dipole、patchMicrostrip等实体天线对象另一条是用 Phased Array System Toolbox 中的phased.ULA、phased.URA理想阵列。前者关注天线物理尺寸和电磁特性后者更适合系统级波束仿真。资源包里的 func 目录中一般会存在这类绘制函数下面先从单天线开始。3.2 用 Antenna Toolbox 建立偶极子和微带贴片方向图半波偶极子是最基础的天线模型虽然不直接用于基站但理解它的方向图是理解阵列的基础。半波偶极子在水平面近似全向在垂直面呈“8”字形直接导入模型就能观察% dipole_pattern.m d dipole; % 创建偶极子天线对象 d.Length 0.95 * (3e8 / 3.5e9); % 0.95 倍波长考虑末端缩短效应 d.Width 0.01 * (3e8 / 3.5e9); % 振子线宽远小于波长 figure; pattern(d, 3.5e9);pattern(h, freq)是 Antenna Toolbox 的核心绘图函数第一个参数是天线对象第二个参数是频率。这里把振子长度取 0.95 个波长是因为终端效应会让实际谐振频率偏低工程上常做相应缩短。运行后得到的三维图形是一个面包圈状的区域z 轴方向是零陷。把这种天线装在基站上能量会大量辐射到天上和地下效率很低所以实际 5G 天线必须用贴片或阵列。再看微带贴片天线% patch_pattern.m patch patchMicrostrip; % 创建矩形微带贴片天线 patch.Frequency 3.5e9; % 中心频率 3.5 GHz patch.Length 28.4e-3; % 贴片长度约 0.33 个介质波长 patch.Width 38.2e-3; % 贴片宽度决定谐振阻抗 figure; pattern(patch, 3.5e9); title(Patch Antenna 3.5 GHz);微带贴片天线方向图主瓣指向贴片法线方向增益通常在 6 到 8 dBi比偶极子高出不少。Length和Width是按 3.5 GHz 附近标准公式计算的近似值工作中可以直接用patchMicrostrip的默认参数再根据实际情况微调。执行pattern函数后图形窗口会自动显示最大增益、波束宽度和方向性等数据这些数据可以直接读到链路预算里。如果运行的 MATLAB 版本较旧没有patchMicrostrip可以用microstripPatch等别名具体以doc patchMicrostrip为准。3.3 从三维方向图提取切面数据用于链路预算三维方向图适合观察全貌但写入链路预算时需要具体的二维切面。比如基站天线安装时水平面切面对应不同方位角上的增益覆盖垂直面切面对应下倾角的配置。可以用 pattern 函数直接指定角度范围pattern(patch, 3.5e9, 0, -90:90); % 方位角固定为 0 度俯仰角从 -90 到 90这行代码生成的是垂直面方向图横轴是俯仰角纵轴是增益。如果希望同时拿到数值而不是只看图可以把结果赋给矩阵[pat, az, el] pattern(patch, 3.5e9, -180:180, -90:90);pat 是一个二维矩阵每行对应一个方位角每列对应一个俯仰角单位默认为 dBi。有了这个矩阵就能在脚本里用max函数找到主瓣峰值再沿某个方向回溯半功率点算出精确的 3 dB 波束宽度。做覆盖仿真时可以把 pat 作为查找表按终端相对基站的方位角和俯仰角查表取增益值然后和路径损耗叠加。这个步骤就是路径损耗和方向图真正结合的地方。4. 5G 天线阵列与波束赋形用阵因子综合方向图并验证波束扫描4.1 均匀线性阵列的阵因子推导及物理含义单个贴片天线的方向图是固定的5G 天线则通过阵列把波束“捏”出来。均匀线性阵列ULA是最简单的阵列形式N 个阵元等间距排开间距 d 通常取工作波长的一半。当所有阵元以相同相位激励时波束指向阵列法线方向若各阵元的相位按固定步进递增波束就会发生偏转。阵因子 AF 的表达式为AF(θ) Σ_{n0}^{N-1} exp(j·n·(k·d·sinθ φ))其中 k 为波数φ 为相邻阵元相位差。这一求和可以写成等比数列的闭式解避免 for 循环。MATLAB 代码如下% ula_af.m N 8; % 阵元数量 d_lambda 0.5; % 阵元间距为 0.5 个波长 theta0 20; % 期望波束指向角度 theta linspace(-90, 90, 1801); % 方位角扫描范围 phi -2*pi*d_lambda*sind(theta0); % 相邻阵元相位差 psi 2*pi*d_lambda*sind(theta) phi; % 空间相位差 AF sin(N*psi/2) ./ (N*sin(psi/2)); % 阵因子闭式解 AF_dB 20*log10(abs(AF) eps); plot(theta, AF_dB, LineWidth, 1.5); xlabel(偏转角 (deg)); ylabel(阵因子 (dB)); title([ULA 阵因子 N, num2str(N), , 波束指向 , num2str(theta0), °]);这段代码中sind使用角度制直接和日常习惯匹配。phi的计算保证在 theta 等于 theta0 时所有阵元的相位差恰好让信号同向叠加。sin(N*psi/2) ./ (N*sin(psi/2))把等比求和化为闭合形式分母加eps防止除以零。从仿真结果可以看到主瓣出现在 20° 位置第一副瓣比主瓣低约 13.3 dB这是等幅等间距 ULA 的理论极限。若想压低副瓣可以引入切比雪夫加权或泰勒加权这是工程中常用的方向图综合手段。4.2 阵元数、阵元间距和栅瓣之间的取舍设计天线阵列时阵元数 N 决定增益和波束宽度。阵元数翻倍增益约增加 3 dB但波束变窄覆盖角度变小。阵元间距 d 则影响更大间距变大后阵列物理口径变大波束更窄但超过一定阈值会出现栅瓣。栅瓣是方向图上和主瓣等强度的额外波瓣会把能量辐射到错误方向对系统造成严重干扰。判断栅瓣是否出现的近似条件是d/λ 1 / (1 |sinθmax|)其中 θmax 是最大扫描角。表 4-1 给出几个典型参数组合下的对照关系可以直接拿去做设计参考。阵元数 N阵元间距 d/λ波束指向主瓣宽度约值栅瓣情况40.50°25°无80.530°12°无副瓣升高81.030°12°有约 -50° 出现160.50°6°无这也是为什么 5G 基站天线参数里阵元间距基本都标 0.5 至 0.6 个波长很少超过 0.7。一旦扫描角变大0.6 波长比 0.5 波长更容易触发栅瓣设计时需要反复权衡。4.3 用 MATLAB 计算三维方向图并与工具箱结果对照阵因子模型假设阵元是全向天线但真实阵列的单元是贴片或偶极子总方向图等于单元方向图和阵因子相乘这就是方向图乘积定理。为了更好地逼近真实 5G 天线可以先用理想 URA 算波束再确认波束形状% array_pattern_3d.m M 8; % 行阵元数 N 8; % 列阵元数 freq 3.5e9; lambda 3e8 / freq; ura phased.URA(Size, [M N], ElementSpacing, lambda/2); steer phased.SteeringVector(SensorArray, ura, PropagationSpeed, 3e8); w steer(freq, [30; 10]); % 方位角 30 度俯仰角 10 度 figure; pattern(ura, freq, -180:180, -90:90, Weights, w);phased.URA创建的是一个均匀矩形阵列Size指定行数和列数ElementSpacing指定阵元间距。phased.SteeringVector根据给定角度计算各阵元的激励权值其中 [30; 10] 的前一个元素是方位角后一个是俯仰角。pattern函数会绘制三维方向图可以旋转观察主瓣指向和目标角度是否一致。如果电脑上没有安装 Phased Array System Toolbox也可以用sidelobe函数或者手动计算阵因子再与单元方向图相乘得到的结果与工具箱基本一致。两种方法的差异主要来自单元方向图建模精度在做系统级仿真时这个差必须考虑进去。5. 把资源包里的 Runme.m 跑起来目录解读、运行环境与疑难杂症5.1 解压后应该看到的文件结构与每个文件的作用压缩包下载到本地后是matlab_(含教程)5G路径损耗和天线辐射方向图的matlab仿真.7z要用 7-Zip 或资源管理器解压到纯英文路径下比如D:\5G_matlab。解压后会得到同名文件夹里面最核心的三个元素是Runme.m、func目录和教程.mp4。Runme.m是主脚本按照流程依次调用路径损耗计算函数和天线方向图绘制函数最后输出图形和数值结果。func目录存放被封装的 m 函数比如对应第 2 章的路损模型、第 3 章的方向图提取、第 4 章的阵列方向图综合。教程.mp4是实操演示视频适合第一遍先按视频操作第二遍再自己打开代码逐行看。整个过程可以理解为Runme.m 相当于总控台func 是动力系统视频是操作手册。三者配合起来才有完整的仿真复现能力。5.2 运行前用 5 分钟做一次环境检查安装 MATLAB 时若只勾选了基础组件很可能缺少 Antenna Toolbox 或 Phased Array System Toolbox。启动 Runme 之前建议先执行下面的环境检查命令% env_check.m ver(matlab); ver(antenna); ver(phased);如果ver(antenna)返回空或提示产品未安装那么后续执行 pattern 函数时会报出 “Undefined function pattern”。此时需要回到安装界面添加组件。通过 matlab 下载安装教程获得的安装包通常支持增量安装在 MATLAB 的“附加功能”里登录账户勾选对应工具箱即可不必重装整个软件。环境确认完切换到解压目录再执行cd D:\5G_matlab\matlab_5G_pathloss_antenna addpath(genpath(pwd)); % 递归添加当前目录及所有子目录到搜索路径 run Runme.maddpath(genpath(pwd))会把func以及任何嵌套子目录一次性加入 MATLAB 搜索路径避免出现函数文件存在却找不到的报错。run Runme.m是脚本的执行命令效果等同于在编辑器中按 F5但不会受到当前工作区目录的影响。5.3 调试中最高频的 3 个坑与排查思路第一个坑是中文路径问题。MATLAB 老版本对中文路径支持不稳定压缩包解压到“下载”目录时路径中常出现中文导致脚本里load或cd报错这时把工程整体移动到D:\5G_matlab再运行即可。第二个坑是工作区变量污染。如果之前执行过其他脚本工作区里已有的theta、d等变量会覆盖 Runme 中的同名变量造成维度不匹配或图形异常。在脚本开头加入clear; close all; clc;是最稳妥的做法若需要保留部分数据则用clearvars -except精确清理。第三个坑是不同 MATLAB 版本之间函数名的变化例如pattern函数的参数列表在 R2021a 后新增了多处扩展而patternCustom也被标注为旧式接口。遇到旧脚本在新版本中报错时先执行doc pattern查看当前版本的语法再决定改成新式写法还是保留旧调用。也可以用phased.URA替代部分 Antenna Toolbox 功能减少对具体工具箱版本的依赖。5.4 把仿真结果导出成报告可用图的小技巧Runme 运行后生成的方向图直接截图会带上 MATLAB 的灰色背景和边框放进技术报告不够干净。推荐用exportgraphics代替saveas可以精确控制分辨率并生成白底图片。代码很简单% export_figures.m f1 figure(1); exportgraphics(f1, pathloss_umi.png, Resolution, 150); f2 figure(2); exportgraphics(f2, array_pattern_3p5GHz.png, BackgroundColor, white);Resolution设置为 150出图清晰度足够印刷阅读BackgroundColor设为 white 能去掉 MATLAB 默认的深色底让曲线更干净。如果运行的 MATLAB 版本在 R2020a 之前exportgraphics不可用可以改用print(f1, -dpng, -r300, pathloss_umi.png)效果接近。导出后再配合第 3.3 节提到的方向图矩阵把主瓣增益和半功率波束宽度通过fprintf打印到命令行一并以文本形式附在报告中最终结果比单纯贴一张图更有说服力。本文还有配套的精品资源点击获取
返回列表