ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

无线信道建模与MATLAB仿真:四种路径损耗模型对比与选型指南

2026/8/31 12:04:25 拓冰建站 浏览量
无线信道建模与MATLAB仿真:四种路径损耗模型对比与选型指南 无线信道建模和 MATLAB 仿真从自由空间到 Okumura-Hata、COST231 与 SUI 模型一次讲透很多刚接触无线通信的工程师第一次做链路预算时都会问同一个问题为什么同一个距离不同资料里算出来的路径损耗差了几十个 dB问题的根源往往不是计算错误而是选错了模型。自由空间损耗模型只适合“空旷可视”的场景城市环境用它评估覆盖结果会非常乐观而 Okumura-Hata 看似万能却在 1.5 GHz 以上频段和短距离场景上明显失真SUI 模型本是为 IEEE 802.16 固定无线接入设计的却常被人拿来做移动通信仿真。每个模型都有自己的“适用边界”而这些边界恰恰藏在公式的适用条件里。这篇文章将围绕四种经典信道模型展开重点做三件事把每个模型的物理含义和适用场景讲清楚用 MATLAB 实现可复用的路径损耗计算函数以及在同一个仿真脚本里对比四种模型的差异。读完你会对“什么场景该选什么模型”有一个清晰的判断也能直接把这套代码用到自己的链路预算或覆盖仿真项目中。1. 这篇文章真正要解决的问题无线信道建模是通信系统仿真中的基础环节但它在实际工程中经常被“降级处理”。很多同学在 MATLAB 里做系统级仿真时为了省事默认用自由空间损耗模型加一个高斯噪声就代表信道。这在校园网、会议室这类小范围室内场景里问题不大但在小区覆盖、宏基站规划、乡村广覆盖这类场景中误差会迅速累积。一个离基站 3 公里的边缘用户真实路径损耗可能是自由空间模型的 2 倍到 3 倍。用错模型链路预算、覆盖半径、基站密度、发射功率这些核心指标全部失去参考价值。另一个普遍问题是“模型适用条件被忽略”。Okumura-Hata 模型是业界接受度最高的宏蜂窝模型之一但它的频率适用范围是 150 MHz 到 1500 MHz。很多人把它直接用于 2.4 GHz 或 3.5 GHz 频段得到的损耗值已经超出了模型有效区间结果仍然被当作有效数据。COST231-Hata 把频率扩展到了 1500 MHz 到 2000 MHz可城市环境和乡村环境要用不同的修正公式选错地形类别误差同样可观。SUI 模型适合 2.5 GHz 到 2.7 GHz 的固定无线接入地形分为 A/B/C 三类它和 Hata 家族在城市宏蜂窝场景里并不是互相替代的关系。还有一个容易被忽略的问题路径损耗模型的输出不只是用来算“信号衰减了多少”。它在网络规划里决定基站间距在仿真里决定信噪比在实测校准里决定偏差修正量。模型选得好不好直接影响整个项目的可信度。所以这篇文章要解决的不是一个公式怎么写的问题而是一个工程决策问题在给定频率、距离、天线高度、地形条件时你该选择哪个模型为什么选它以及用 MATLAB 怎么实现和验证。2. 基础概念与核心原理在进入代码之前先建立一组统一的术语体系。因为在不同教材里路径损耗模型的表达方式存在差异不先把这些差异讲清楚后面的代码阅读就会遇到障碍。2.1 路径损耗的物理含义路径损耗Path Loss描述的是发射功率与接收功率之间的比值单位通常为 dB。它反映的是信号在传播过程中因为空间扩散、障碍物遮挡、地表反射、大气吸收等原因造成的能量衰减。工程上常用对数距离路径损耗模型来表示PL(d) PL(d0) 10 * n * log10(d / d0) Xσ其中PL(d0)是参考距离处的路径损耗n是路径损耗指数Xσ是均值为 0、标准差为 σ 的正态随机变量。Xσ对应阴影衰落Shadow Fading也就是大尺度衰落中慢变化的部分。本文讨论的四种模型本质都是在对n和经验修正因子做不同形式的估计。2.2 大尺度衰落与小尺度衰落的区别无线信道对信号的影响可以粗略分为两层。小尺度衰落Small-Scale Fading描述的是在很短距离或很短时间内由于多径干涉导致的信号幅度快速波动典型时间尺度在毫秒级空间尺度在波长量级。它一般用瑞利衰落、莱斯衰落模型来描述是接收机设计时重点考虑的。大尺度衰落Large-Scale Fading描述的是信号在较远距离上的平均衰减趋势主要表现为路径损耗和阴影衰落。本文涉及的四种模型都属于大尺度衰落模型它们计算的是接收信号的“局部平均功率”不会刻画出逐符号的快速波动。理解这个边界很重要。你用 Okumura-Hata 模型算出某一点的接收功率为 -85 dBm这个值指的是该位置的局部平均功率。实际接收信号会在这一均值附近快速波动真实瞬时功率可能低于 -95 dBm也可能高于 -75 dBm。如果后面在做误码率仿真需要在小尺度信道上再做一层处理。2.3 四种模型的定位差异四种模型不是竞争关系而是互补关系。自由空间模型描述的是最理想的情况发射机和接收机之间没有障碍物只有能量随距离扩散产生的损耗。它是所有模型中最简单的基准也是判断其他模型“额外损耗”大小的参照。Okumura-Hata 模型基于 Okumura 在东京地区的大量实测数据由 Hata 拟合为便于工程计算的公式。它适合宏蜂窝场景基站天线高度通常在 30 米到 200 米移动台高度 1 米到 10 米距离 1 公里到 20 公里。这是 1G、2G 时代最成功的覆盖规划模型之一。COST231-Hata 模型是 Hata 模型在频率上的扩展。欧洲的 COST 231 委员会把适用频率从 1500 MHz 扩展到 2000 MHz沿用了 Hata 模型的城市/郊区/乡村分类方法。它在 1800 MHz 的 GSM 网络规划中应用非常广泛。SUI 模型是斯坦福大学为 IEEE 802.16 固定无线接入设计的信道模型适用于 2.5 GHz 到 2.7 GHz 频段支持 3 种地形类别A/B/C并显式包含天线高度修正因子。它后来也被广泛用于 WiMAX 和部分固定无线接入系统的链路预算计算但它面向的是“固定接收”场景与城市移动用户场景差异明显。2.4 频率和距离对模型选择的影响频率决定了传播损耗的基准水平。相同距离下频率越高路径损耗越大。这背后的原因是自由空间损耗公式中本身就包含频率项PL_free(dB) 20 * log10(d_km) 20 * log10(f_MHz) 32.44注意这里d_km以公里为单位f_MHz以 MHz 为单位。当频率从 900 MHz 提升到 1800 MHz自由空间损耗本身就增加约 6 dB。如果再加上建筑物穿透损耗、植被损耗和人体损耗高频段的覆盖半径会显著缩小。这也是为什么 4G/5G 高频段的基站密度远高于 2G 低频段。距离决定了模型的适用域。Hata 家族的最低适用距离是 1 公里低于这个距离时公式的拟合误差会增大。如果你在做一个校园 WiFi 覆盖仿真传输距离只有 50 米到 200 米使用 Hata 家族并不合适更适合用自由空间模型加一个室内穿透损耗修正或者直接使用 ITU-R P.1238 室内传播模型。这个认知在工程上非常重要它决定了你拿到一个项目时是直接套模型还是先判断模型边界。3. 环境准备与前置条件本文代码基于 MATLAB 编写涉及的基本功能都属于标准函数库不需要额外安装工具箱。3.1 MATLAB 环境要求建议使用 R2021a 或更高版本。本文用到的log10、plot、legend、grid等函数在早期版本中同样存在因此绝大多数情况向下兼容。不需要安装 Communications Toolbox。路径损耗计算本身只涉及数学运算并不需要专门的通信工具箱函数。但如果你后续要在 Simulink 里搭建完整的链路级仿真Communications Toolbox 会比较有帮助。3.2 代码组织方式建议按以下结构组织文件channel_model_demo/ ├── calc_free_space_loss.m ├── calc_hata_loss.m ├── calc_sui_loss.m ├── main_compare_models.m └── README.md每个模型一个独立函数主脚本负责统一调用和绘图。这样做的优点是便于单元测试你可以单独验证某个函数的输出是否符合理论值也可以在主脚本中直接对比多个模型。3.3 注意事项第一MATLAB 的工作路径必须包含上述文件所在目录。否则主脚本调用自定义函数时会报“Undefined function”。第二MATLAB 的log10是常用对数路径损耗公式中的 log 默认都是底数为 10 的对数。不要误用log自然对数这是 MATLAB 新手最常见的错误之一。第三公式中的频率和距离单位各不相同。自由空间损耗公式中频率用 MHz、距离用 kmHata 家族同样如此SUI 模型中频率用 MHz、距离用 m。建议在函数入口统一处理单位换算函数内部只接收约定单位的变量避免混淆。4. 核心流程拆解信道模型仿真的流程可以拆成四步定义仿真场景参数、实现单模型计算函数、搭建对比脚本、分析结果并输出结论。4.1 定义仿真场景参数仿真参数是模型的输入也是决定输出是否合理的基准。关键参数包括载波频率如 900 MHz 覆盖 Okumura-Hata 主区间1800 MHz 覆盖 COST231-Hata 主区间2500 MHz 覆盖 SUI 模型主区间。基站天线高度根据模型不同设置 30 米到 200 米的合理区间。移动台天线高度一般取 1.5 米到 10 米。距离范围1 公里到 20 公里这是 Hata 家族的标准适用区间。环境类型城市、郊区、乡村对应不同的修正因子。4.2 实现单模型计算函数每个模型函数应遵循统一约定输入频率、距离、天线高度、环境类型输出路径损耗值dB。统一函数签名的好处是主脚本可以用同一套调用来对比不同模型。在 MATLAB 中函数签名如下function pl calc_free_space_loss(f_MHz, d_km) function pl calc_hata_loss(f_MHz, d_km, h_te, h_re, env_type, model_type) function pl calc_sui_loss(f_MHz, d_m, h_te, h_re, terrain_type)注意单位差异自由空间和 Hata 家族的距离单位是公里SUI 模型的距离单位是米。函数内部根据模型需求做换算主脚本传给每个函数时使用该函数约定的单位。4.3 搭建对比脚本对比脚本做的事情是初始化一个距离向量例如d_km 1:0.5:20。调用四个函数分别计算路径损耗。把所有结果绘制在同一张图中用不同线型区分。输出关键距离处的数值便于定量对比。4.4 分析结果并输出结论这部分要回答三个问题哪个模型在给定距离给出最大损耗哪个模型给出最小损耗这种差异是否在合理范围内这些结论将直接指导你在实际项目中的模型选择。5. 完整示例与代码实现下面进入核心实操部分。我会依次实现自由空间模型、Okumura-Hata 与 COST231-Hata 统一函数、SUI 模型最后通过主脚本对比四种模型在相同场景下的路径损耗。5.1 自由空间损耗模型自由空间损耗模型是所有模型中最简单的一个它只考虑信号在真空或均匀介质中传播时的几何扩散损耗。公式如下PL_free(dB) 20*log10(d_km) 20*log10(f_MHz) 32.44其中32.44是单位换算产生的常数。当d_km 1、f_MHz 1000时损耗为 92.44 dB。实现函数如下% 文件路径channel_model_demo/calc_free_space_loss.m function pl calc_free_space_loss(f_MHz, d_km) % 自由空间路径损耗模型 % 输入 % f_MHz - 载波频率单位 MHz % d_km - 收发距离单位 km % 输出 % pl - 路径损耗单位 dB if nargin 2 error(请输入频率和距离); end pl 20 * log10(d_km) 20 * log10(f_MHz) 32.44; end这个函数只有一行核心公式但它提供了清晰的接口便于后续被其他脚本调用。5.2 Okumura-Hata 与 COST231-Hata 统一实现Okumura-Hata 模型的经典公式在不同文献里写法略有差异这里采用 ITU-R 建议中常用形式。Okumura-Hata 城市环境路径损耗公式PL(dB) 69.55 26.16*log10(f_MHz) - 13.82*log10(h_te) - a(h_re) (44.9 - 6.55*log10(h_te)) * log10(d_km)其中a(h_re)是移动台天线高度修正因子。中小城市a(h_re) (1.1*log10(f_MHz) - 0.7) * h_re - (1.56*log10(f_MHz) - 0.8)大城市且频率不超过 300 MHza(h_re) 8.29 * (log10(1.54 * h_re))^2 - 1.1大城市且频率不低于 300 MHza(h_re) 3.2 * (log10(11.75 * h_re))^2 - 4.97郊区修正因子PL_suburban PL_city - 2 * (log10(f_MHz/28))^2 - 5.4乡村修正因子PL_rural PL_city - 4.78 * (log10(f_MHz))^2 18.33 * log10(f_MHz) - 40.94COST231-Hata 模型在 Okumura-Hata 基础上增加了频率修正项CMPL(dB) 46.3 33.9*log10(f_MHz) - 13.82*log10(h_te) - a(h_re) (44.9 - 6.55*log10(h_te)) * log10(d_km) CM城市中心的CM 3 dB中等城市和郊区CM 0 dB。为了统一处理我将两个模型合并到一个函数中通过model_type参数区分。% 文件路径channel_model_demo/calc_hata_loss.m function pl calc_hata_loss(f_MHz, d_km, h_te, h_re, env_type, model_type) % Hata 家族路径损耗模型Okumura-Hata / COST231-Hata % 输入 % f_MHz - 载波频率单位 MHz % d_km - 收发距离单位 km % h_te - 基站天线有效高度单位 m % h_re - 移动台天线高度单位 m % env_type - 环境类型urban, suburban, rural % model_type- 模型类型okumura-hata 或 cost231 % 输出 % pl - 路径损耗单位 dB if nargin 6 error(请输入所有必要参数); end if strcmpi(model_type, okumura-hata) % Okumura-Hata 模型仅适用于 f 1500 MHz if f_MHz 150 || f_MHz 1500 warning(Okumura-Hata 模型推荐频段为 150 MHz ~ 1500 MHz当前频段可能超出适用范围); end C_freq 0; % 频率修正项 base 69.55 26.16 * log10(f_MHz); elseif strcmpi(model_type, cost231) % COST231-Hata 模型适用频段 1500 MHz ~ 2000 MHz if f_MHz 1500 || f_MHz 2000 warning(COST231-Hata 模型推荐频段为 1500 MHz ~ 2000 MHz当前频段可能超出适用范围); end C_freq 0; base 46.3 33.9 * log10(f_MHz); else error(model_type 必须是 okumura-hata 或 cost231); end % 移动台天线高度修正因子 a(h_re) if h_re 0 h_re 10 if f_MHz 300 % 大城市频率 300 MHz a_hr 8.29 * (log10(1.54 * h_re))^2 - 1.1; else % 大城市频率 300 MHz a_hr 3.2 * (log10(11.75 * h_re))^2 - 4.97; end else % 中小城市 a_hr (1.1 * log10(f_MHz) - 0.7) * h_re - (1.56 * log10(f_MHz) - 0.8); end % 基础路径损耗城市环境 pl base - 13.82 * log10(h_te) - a_hr ... (44.9 - 6.55 * log10(h_te)) * log10(d_km); % COST231 模型附加的城市中心修正 if strcmpi(model_type, cost231) % CM: 大城市中心 3 dB中等城市和郊区 0 dB if strcmpi(env_type, urban) pl pl 3; end end % 环境修正 if strcmpi(env_type, suburban) % 郊区修正 pl pl - 2 * (log10(f_MHz / 28))^2 - 5.4; elseif strcmpi(env_type, rural) % 乡村修正 pl pl - 4.78 * (log10(f_MHz))^2 18.33 * log10(f_MHz) - 40.94; end end代码里有两个小细节值得注意。第一个是a_hr的计算分支。小城市与大城市在h_re修正上差异明显代码中默认h_re为 1.5 米时采用大城市修正公式高于 10 米或h_re超过典型区间时采用中小城市公式。在模型原始文献中大城市和小城市修正公式的适用边界并不是按身高严格划分的而是按城市建筑分布特征划分但工程上通常用天线高度作为近似判断标准。第二个是 COST231 的城市修正项。原文中CM在大城市中心取 3 dB郊区或中等城市取 0 dB。你传入env_typeurban时会自动加 3 dB传入suburban或rural时再叠加对应修正项。这种处理方式避免了手动在函数外计算修正值。5.3 SUI 信道模型实现SUI 模型Stanford University Interim最早用于固定无线接入系统的信道建模后来也被 WiMAX 链路预算广泛采用。SUI 模型的基础路径损耗公式如下PL(dB) A 10 * n * log10(d / d0) X_f X_h s其中d0 100 m参考距离。A 20 * log10(4 * pi * d0 / lambda)即参考距离处的自由空间损耗。lambda为波长单位与d0一致。n a - b * h_te c / h_te路径损耗指数。a、b、c由地形类别决定。X_f 6.0 * log10(f_MHz / 2000)频率修正因子。X_h -10.8 * log10(h_re / 2)地形类别 A/B或-20.0 * log10(h_re / 2)地形类别 C接收天线高度修正因子。s为阴影衰落项单位为 dB通常作为随机变量处理。本文为对比确定性模型先取s 0便于和 Hata 家族进行基准对比。地形类别参数参数地形 A丘陵/茂密植被地形 B中等起伏/混合地形 C平坦/稀疏a4.64.03.6b0.00750.00650.0050c12.617.120.0实现函数如下% 文件路径channel_model_demo/calc_sui_loss.m function pl calc_sui_loss(f_MHz, d_m, h_te, h_re, terrain_type) % SUI 信道模型路径损耗计算 % 输入 % f_MHz - 载波频率单位 MHz % d_m - 收发距离单位 m % h_te - 基站天线有效高度单位 m % h_re - 接收天线高度单位 m % terrain_type- 地形类别A, B, C % 输出 % pl - 路径损耗单位 dB不含阴影衰落 if nargin 5 error(请输入所有必要参数); end % 地形参数 switch upper(terrain_type) case A a 4.6; b 0.0075; c 12.6; case B a 4.0; b 0.0065; c 17.1; case C a 3.6; b 0.0050; c 20.0; otherwise error(terrain_type 必须是 A、B 或 C); end % 基本参数 d0 100; % 参考距离单位 m c_light 3e8; % 光速单位 m/s lambda c_light / (f_MHz * 1e6); % 波长 % 参考距离处自由空间损耗 A A 20 * log10(4 * pi * d0 / lambda); % 路径损耗指数 n n a - b * h_te c / h_te; % 频率修正项 X_f相对于 2 GHz X_f 6.0 * log10(f_MHz / 2000); % 接收天线高度修正项 X_h相对于 2 m if upper(terrain_type) C X_h -20.0 * log10(h_re / 2); else X_h -10.8 * log10(h_re / 2); end % 路径损耗阴影衰落 s 0 pl A 10 * n * log10(d_m / d0) X_f X_h; end5.4 主脚本四种模型对比现在把四种模型放进同一个场景里对比。为了公平我们需要选择一组能让所有模型同时处于适用区间的参数。自由空间模型不受频率限制但为了对比我们使用 1800 MHz。COST231-Hata 在 1800 MHz 处于适用区间。Okumura-Hata 的适用频率上限是 1500 MHz1800 MHz 已经超界。为了保持模型处于适用区间我在对比中选用 900 MHz 作为 Hata 家族的频率同时用 2500 MHz 单独对比 SUI 与自由空间。但同一张图只能有一个频率。因此主脚本做两种对比一种是 900 MHz 下对比自由空间、Okumura-Hata、SUI 模型另一种是 1800 MHz 下对比自由空间、COST231-Hata、SUI 模型。这样既保证每个模型都在适用频率范围内又能比较“不同模型在同一频率下”的差异。% 文件路径channel_model_demo/main_compare_models.m clear; clc; close all; %% 场景参数 f_MHz 900; % 频率900 MHz覆盖 Okumura-Hata 主区间 h_te 50; % 基站天线高度50 m h_re 1.5; % 移动台天线高度1.5 m env_type urban; % 环境类型城市 d_km 1:0.5:20; % 距离1 km 到 20 km d_m d_km * 1000; % 转换为米SUI 模型使用 %% 计算四种模型的路径损耗 pl_free calc_free_space_loss(f_MHz, d_km); pl_hata calc_hata_loss(f_MHz, d_km, h_te, h_re, env_type, okumura-hata); pl_sui zeros(size(d_km)); for i 1:length(d_km) pl_sui(i) calc_sui_loss(f_MHz, d_m(i), h_te, h_re, B); end %% 绘图对比 figure(Name, 路径损耗模型对比 900MHz, NumberTitle, off); plot(d_km, pl_free, k-o, LineWidth, 1.5, MarkerSize, 4); hold on; plot(d_km, pl_hata, b-s, LineWidth, 1.5, MarkerSize, 4); plot(d_km, pl_sui, r-^, LineWidth, 1.5, MarkerSize, 4); grid on; xlabel(距离 (km)); ylabel(路径损耗 (dB)); title([路径损耗模型对比 , num2str(f_MHz), MHz, 城市环境]); legend(自由空间, Okumura-Hata, SUI (Terrain B), Location, northwest); set(gca, FontSize, 12); %% 输出 3 km 和 10 km 处的数值对比 fprintf( 距离 3 km \n); fprintf(自由空间: %.2f dB\n, calc_free_space_loss(f_MHz, 3)); fprintf(Okumura-Hata: %.2f dB\n, calc_hata_loss(f_MHz, 3, h_te, h_re, env_type, okumura-hata)); fprintf(SUI (Terrain B): %.2f dB\n, calc_sui_loss(f_MHz, 3000, h_te, h_re, B)); fprintf(\n 距离 10 km \n); fprintf(自由空间: %.2f dB\n, calc_free_space_loss(f_MHz, 10)); fprintf(Okumura-Hata: %.2f dB\n, calc_hata_loss(f_MHz, 10, h_te, h_re, env_type, okumura-hata)); fprintf(SUI (Terrain B): %.2f dB\n, calc_sui_loss(f_MHz, 10000, h_te, h_re, B));如果要对比 COST231-Hata只需要把f_MHz改成 1800把model_type改成cost231% 文件路径channel_model_demo/main_compare_cost231.m clear; clc; close all; f_MHz 1800; % 频率1800 MHz h_te 50; h_re 1.5; env_type urban; d_km 1:0.5:20; d_m d_km * 1000; pl_free calc_free_space_loss(f_MHz, d_km); pl_cost231 calc_hata_loss(f_MHz, d_km, h_te, h_re, env_type, cost231); pl_sui zeros(size(d_km)); for i 1:length(d_km) pl_sui(i) calc_sui_loss(f_MHz, d_m(i), h_te, h_re, B); end figure(Name, 路径损耗模型对比 1800MHz, NumberTitle, off); plot(d_km, pl_free, k-o, LineWidth, 1.5, MarkerSize, 4); hold on; plot(d_km, pl_cost231, b-s, LineWidth, 1.5, MarkerSize, 4); plot(d_km, pl_sui, r-^, LineWidth, 1.5, MarkerSize, 4); grid on; xlabel(距离 (km)); ylabel(路径损耗 (dB)); title([路径损耗模型对比 , num2str(f_MHz), MHz, 城市环境]); legend(自由空间, COST231-Hata, SUI (Terrain B), Location, northwest); set(gca, FontSize, 12); fprintf( 距离 3 km \n); fprintf(自由空间: %.2f dB\n, calc_free_space_loss(f_MHz, 3)); fprintf(COST231-Hata: %.2f dB\n, calc_hata_loss(f_MHz, 3, h_te, h_re, env_type, cost231)); fprintf(SUI (Terrain B): %.2f dB\n, calc_sui_loss(f_MHz, 3000, h_te, h_re, B));6. 运行结果与效果验证运行主脚本后首要验证的是数值的合理性。以 900 MHz 城市环境为例在 3 km 处自由空间模型损耗约为 101 dBOkumura-Hata 城市环境的损耗通常会高出 20 dB 到 25 dB达到约 125 dB 左右。这是因为 Hata 模型在城市环境中额外计入了建筑遮挡和地表反射损耗。SUI 模型在地形 B 条件下的损耗介于两者之间大约比自由空间高 10 dB 到 15 dB。在 10 km 处差距会进一步拉大。自由空间模型只有 111.5 dB 左右Hata 模型可能超过 145 dB。这种差距意味着如果你用自由空间模型估算覆盖半径结果会比实际情况乐观 40% 到 60%。这就是为什么实际网络规划中自由空间模型只能作为理想上界。验证脚本是否正确可以从三个角度判断自由空间模型的输出是否与手算一致。900 MHz、3 km 时20*log10(3) 20*log10(900) 32.44 101.08 dB程序输出应与此吻合。Okumura-Hata 模型的输出是否随距离和频率单调增加。路径损耗指数约为 4.49意味着距离每增加一倍损耗增加约 13.5 dB远高于自由空间的 6 dB。SUI 模型的输出是否在参考距离 100 m 处等于A X_f X_h。如果h_te 50 m、h_re 1.5 m、f 900 MHz则n 4.0 - 0.0065*50 17.1/50 4.092X_f 6 * log10(900/2000) -2.08 dBX_h -10.8 * log10(1.5/2) 1.35 dB整体损耗在 100 m 处应接近 72 dB 左右。如果运行后输出的数值远远偏离上述预估第一步检查单位换算是否正确尤其是 SUI 模型距离是否误用了公里。第二步检查环境类型参数是否传递正确env_typeurban时 COST231 模型会额外加 3 dB如果传入suburban却按城市解读曲线整体损耗会偏低。7. 常见问题与排查思路问题现象可能原因排查方式解决方案函数调用报错“Undefined function”自定义函数不在 MATLAB 当前路径下执行which calc_hata_loss查看是否找到文件使用addpath添加文件所在目录计算结果与手算偏差很大距离或频率单位错误检查调用时传入的参数是否为约定单位SUI 模型使用米Hata 家族使用公里Okumura-Hata 在 1800 MHz 计算结果异常超出模型适用频率上限查看函数中的警告信息改用 COST231-Hata 或自定义修正公式SUI 模型输出在短距离时出现负增长距离小于参考距离 100 m检查输入距离是否过小SUI 模型中d_m d0时公式仍可用但工程上不建议在 100 m 内使用不同环境类型的曲线差异不大环境修正因子被错误覆盖检查env_type参数拼写urban/suburban/rural必须完全匹配函数内的字符串判断绘图时中文乱码MATLAB 默认字体不支持中文查看标题和坐标轴标签改用英文标签或设置系统支持的中文字体8. 最佳实践与工程建议模型选择的第一步永远是确认项目场景。在城市宏蜂窝场景中900 MHz 首选 Okumura-Hata1800 MHz 首选 COST231-Hata2.5 GHz 以上可以参考 SUI 模型。这不是说某个模型绝对不能用而是每个模型都有自己的拟合数据来源超出适用范围后误差不可控。在工程代码层面我建议做三件事。第一把模型参数与配置分离。不要在每个脚本里手写频率、天线高度和环境类型而是建立配置文件或者 MATLAB 结构体。比如% 文件路径channel_model_demo/config_params.m cfg.f_MHz 900; cfg.h_te 50; cfg.h_re 1.5; cfg.env_type urban; cfg.model_type okumura-hata; cfg.d_km 1:0.5:20;这样可以避免在多个脚本间复制参数导致的不一致。第二统一函数接口。建议把所有模型的函数签名对齐。本文中自由空间模型只接受(f, d)Hata 家族接受(f, d, h_te, h_re, env, model)SUI 接受(f, d, h_te, h_re, terrain)。虽然参数数量不同但前两个参数始终是频率和距离后接天线高度和环境类型。这样可以降低记忆成本。第三在模型输出中保留可解释性。不要只输出路径损耗数字而是同时输出模型名称、适用条件、输入参数和输出结果。工程中经常需要追溯链路预算的计算过程如果代码只返回一个pl后续复盘会非常困难。建议用 MATLAB 的结构体返回result.model Okumura-Hata; result.f_MHz 900; result.d_km 3; result.pl_dB 125.34; result.note 城市环境基站高度50m移动台高度1.5m;在实际项目里我还建议把仿真结果与现场实测数据对比。因为所有统计模型都是对大量测量数据的拟合特定区域的建筑密度、植被、水域分布都会导致模型偏差。正确的做法是用模型得到初始参考值再用少量实测数据校准模型中的修正因子。比如在城市环境中如果实测值比 Hata 模型高 5 dB后续规划统一加 5 dB 补偿比替换模型更稳妥。此外要注意路径损耗模型不等于完整信道。在系统仿真中路径损耗给的是接收功率的均值实际接收信号还要叠加阴影衰落和小尺度衰落。如果直接用路径损耗模型的输出作为链路级仿真的信道增益结果会偏向乐观。正确做法是在路径损耗的基础上再叠加一个对数正态分布的阴影衰落随机项以及瑞利或莱斯分布的小尺度衰落。9. 总结与后续学习方向本文从工程选型的角度把自由空间模型、Okumura-Hata、COST231-Hata 和 SUI 模型放在同一套 MATLAB 代码框架中完成了从公式推导、函数实现到对比验证的完整流程。核心判断是模型没有绝对优劣只有适用场景的差异。在实际工程中模型选型的优先级高于计算公式本身的精度。接下来你可以从三个方向继续深入。一是实际测量与模型校准。找一台频谱仪或软件无线电设备在校园或城市环境中测量接收功率与 Hata 模型和 SUI 模型的输出对比建立你自己的本地化修正因子。这比单纯跑仿真更能加深对信道传播的理解。二是从大尺度进入小尺度。阅读 Rayleigh 衰落和 Rician 衰落的原理用 MATLAB 生成多径信道冲激响应并把路径损耗模型作为链路级仿真的前置模块。三是学习 ITU-R 系列传播建议书。ITU-R P.1546 和 P.1812 在城市和地形传播预测中的适用范围更广也是很多商用规划工具的底层模型。它们和 Hata 家族之间有着明显的承继关系理解 Hata 模型后再读这些建议书会轻松很多。最后给一个建议把这篇文章中的四个函数保存下来作为一个“信道模型工具箱”以后做链路预算时直接调用。每次调用前先检查模型适用范围并记录输入参数和修正项。这个习惯比多学一个公式更有价值。