简介面向无线通信与移动通信领域的学习者和研究者这份资源围绕自由空间损耗模型、奥村哈塔模型、COST231哈塔模型以及SUI信道模型完成了理论分析并给出MATLAB仿真实现。压缩包共包含21个文件其中20个为MATLAB脚本.m文件1个为Word论文.doc文件总大小仅323KB轻量便携且下载方便。脚本分别对自由空间损耗、奥村哈塔损耗、COST231哈塔损耗以及802.16标准中的SUI信道进行了仿真并绘制了信道特性与功率谱密度对比图Word论文则系统梳理了无线信道的基本概念、各类模型的适用场景和理论公式推导有助于理解移动通信中的抗干扰与抗衰落策略。目前该资源已有1042人学习下载特别适合通信工程专业学生在课程设计、毕业设计或信道建模入门阶段参考使用。1. 无线信道模型仿真从公式到曲线一次配齐无线信道里跑出来的路径损耗曲线不对先怀疑的不是公式而是函数的写法。这套资源是四个 MATLAB 脚本加一份 word 论文把自由空间损耗、Okumura-Hata、COST231-Hata 和 802.16 标准的 SUI 信道模型从公式到仿真曲线全部串了一遍。手里没有现成代码、论文又急着出图的人会看得比较舒服脚本里的参数基本都能直接改。我做链路预算时拿它验证过一组城市宏蜂窝数据曲线量级和商用覆盖工具基本吻合。适合正在做信道仿真课程设计、毕业论文基础仿真或者工作中需要快速出路径损耗对比图的读者。2. 自由空间损耗与 Okumura-Hata从 Friis 公式到城市宏蜂窝2.1 自由空间损耗从 Friis 公式写第一个仿真函数自由空间损耗是所有路径损耗模型的地基。它描述的是发射机和接收机之间没有任何遮挡、只有电磁波在理想介质中扩散时的能量衰减。严格说这不叫信道模型而是一个参考基准其他经验模型都是在它基础上叠加了地形、建筑物、大气等因素的修正项。仿真里最常用的表达式是 Friis 公式的对数形式% a_free_space.m % 自由空间损耗Friis 公式 function L free_space_loss(f_MHz, d_km, Gt_dB, Gr_dB) % f_MHz : 载波频率单位 MHz % d_km : 收发距离单位 km % Gt_dB : 发射天线增益单位 dBi无增益时设为 0 % Gr_dB : 接收天线增益单位 dBi无增益时设为 0 L 32.44 20*log10(f_MHz) 20*log10(d_km) - Gt_dB - Gr_dB; end这个函数里 32.44 是常数项它由光速、球面扩散和单位换算共同决定频率用 MHz、距离用 km 时直接套。20log10(f_MHz) 和 20log10(d_km) 说明自由空间损耗和频率、距离都呈对数线性关系距离每翻一倍损耗增加约 6dB。提示天线增益的符号要注意。Friis 公式里天线增益是加在接收功率上的所以损耗计算里要减去增益值。脚本参数设 0 就是纯路径损耗设具体 dBi 值就变成包含天线增益的链路预算。2.2 Okumura-Hata 模型的城市宏蜂窝公式展开Okumura-Hata 模型是 Okumura 实测曲线被 Hata 拟合成解析式后的结果专门用于城市宏蜂窝环境。它的适用频段是 150~1500MHz基站高度 30~200 米终端高度 1~10 米距离 1~20 公里。超出这个范围可以用但误差会明显变大仿真论文里一般会标注「结果仅供参考」。% b_Okumura_Hata_loss.m % Okumura-Hata 模型城市/郊区/开阔地三类场景 function [L_urban, L_suburban, L_open] okumura_hata(f_MHz, d_km, hb_m, hm_m) if f_MHz 150 || f_MHz 1500 warning(Okumura-Hata 严格适用频段为 150~1500MHz); end % 终端高度修正因子 a_hm中小城市场景 a_hm (1.1*log10(f_MHz) - 0.7)*hm_m - (1.56*log10(f_MHz) - 0.8); % 城市环境基础损耗 L_urban 69.55 26.16*log10(f_MHz) - 13.82*log10(hb_m) - a_hm ... (44.9 - 6.55*log10(hb_m)) * log10(d_km); % 郊区修正比城市损耗低 L_suburban L_urban - 2*(log10(f_MHz/28))^2 - 5.4; % 开阔地修正损耗更低公式为 Hata 给出的经验修正 L_open L_urban - 4.78*(log10(f_MHz))^2 18.33*log10(f_MHz) - 40.98; end三个输出分别对应城市、郊区、开阔地。参数上最关键的是 a_hm它是移动台高度修正因子频率不同时系数不同。如果你在其他教材里看到 a_hm 的表达式不一样大概率是大城市和小城市的区别大城市在 f_MHz 300MHz 时有单独的二次项修正这里用的是中小城市版本仿真入门场景够用。2.3 三个最容易改错的参数位置第一个是基站高度 hb_m。Okumura-Hata 里基站天线高度取的是天线挂高不是海拔也不是楼顶高度如果你把楼高加进去了13.82*log10(hb_m) 这一项会明显压低损耗曲线。第二个是距离 d_km代码里没有加距离范围判断实际使用时要自己保证在 1~20km 内低于 1km 时曲线会偏陡。第三个是频率 f_MHz很多同学把 2.4GHz 直接代进来跑 Okumura-Hata这就是拿错模型了2.4GHz 应该用 COST231-Hata 或者 SUI 模型。改完参数后建议先跑一条频率不变、距离从 1 到 20km 的曲线看斜率是否接近 40dB/decade。Okumura-Hata 的路径损耗指数在 3.5 左右也就是距离每翻倍损耗增加约 10.5dB比自由空间的 6dB 明显更陡。看到这个特征基本说明脚本没跑错。3. COST231-Hata 模型1.5GHz 以上频段的修正与对比3.1 为什么要有 COST231-HataOkumura-Hata 的频段不够用Okumura-Hata 到 1500MHz 就到头了而 GSM1800、3.5GHz 固定无线接入这些场景需要更高频段的路径损耗估计。COST231 项目组在 Hata 公式基础上做了频率修正把适用频段拓展到 1500~2000MHz这也是它名字里带 231 的原因。基站高度、终端高度、距离的适用范围和 Okumura-Hata 基本一致只是系数做了重新拟合。两者在 1500MHz 附近应当非常接近这是验证仿真脚本是否正确的重要依据。如果你的代码在 1500MHz 处两条曲线差了 5dB 以上那一定有一个参数用错了。3.2 仿真代码与系数说明% c_COST231_hata_model.m % COST231-Hata 模型适用 1500~2000MHz 城市宏蜂窝 function L cost231_hata(f_MHz, d_km, hb_m, hm_m, city_type) % city_type: urban 城市 / suburban 郊区 / open 开阔地 if f_MHz 1500 || f_MHz 2000 warning(COST231-Hata 严格适用频段为 1500~2000MHz); end % 终端高度修正因子与 Okumura-Hata 形式一致 a_hm (1.1*log10(f_MHz) - 0.7)*hm_m - (1.56*log10(f_MHz) - 0.8); C 0; % 大城市中心修正项中小城市为 0 if strcmp(city_type, urban_large) C 3; % 大城市密集区域附加损耗 end L 46.3 33.9*log10(f_MHz) - 13.82*log10(hb_m) - a_hm ... (44.9 - 6.55*log10(hb_m)) * log10(d_km) C; endCOST231-Hata 和 Okumura-Hata 的差别集中在三个地方。常数项从 69.55 变成 46.3频率系数从 26.16 变成 33.9前者是因为频率项权重变大后常数项重新平衡。距离衰减系数 (44.9 - 6.55*log10(hb_m)) 跟 Okumura-Hata 完全一样说明基站高度对距离斜率的影响规律是一致的。C 是大城市中心修正项一般取 0 或 3dB仿真对比时建议把 C0 和 C3 的两条线画在一起可以直观看到密集城区的附加损耗。3.3 三个模型的频段分工与曲线特征对比模型适用频率适用距离典型场景对数距离斜率特征自由空间任意任意视距微波中继20dB/decadeOkumura-Hata150~1500MHz1~20km城市宏蜂窝 GSM900约 35~40dB/decadeCOST231-Hata1500~2000MHz1~20km城市宏蜂窝 GSM1800约 38~45dB/decade把这三个模型的曲线画在同一张图里频率都取 1800MHz 时自由空间损耗最低COST231-Hata 最高Okumura-Hata 介于中间但更接近 COST231。如果频率取 900MHzOkumura-Hata 要高于 COST231-Hata因为后者在频段外推时需要谨慎。做课程设计时这张对比图通常是论文里的核心图脚本里已经包含了画图逻辑直接用即可。注意COST231-Hata 原版公式里没有开阔地修正项如果你需要对比开阔地场景很多教材直接套用 Okumura-Hata 的开阔地修正系数这在低频段可以接受高频段建议只画城市和郊区两条线避免引入不必要的争议。4. SUI 信道模型从 802.16 规范到 MATLAB 仿真落地4.1 802.16 规范的三种地形与五抽头结构SUI 模型Stanford University Interim是 IEEE 802.16 宽带无线接入规范里推荐的信道模型用于 2.5GHz 频段固定无线接入系统的性能评估。它把传播环境分成三类地形SUI-1 近似视距的开阔地形SUI-3 中等衰落地形SUI-5 典型城市或林区强衰落地形。每一个地形对应一组抽头参数每个抽头定义了相对时延、功率比例和 K 因子莱斯因子。信道分别与 PSD 仿真脚本就是针对这个模型做的。跟前面两个经验模型最大的区别是SUI 是宽带多径模型输出不是一条损耗曲线而是一组多径抽头的冲激响应或频率响应再通过 PSD 观察多普勒扩展和频率选择性。先看最常用的 SUI-3 地形参数抽头时延(us)功率(dB)K因子(线性)100120.4-12030.9-120第一个抽头带 K 因子代表有直射分量后面两个是瑞利衰落分量。SUI-5 的功率延迟分布更分散时延长达 10us。仿真时要重点观察频率选择性如果相干带宽小于信号带宽就说明这个信道环境对 OFDM 系统来说需要加均衡或者足够的保护间隔。4.2 MATLAB 实现多径信道生成与频率响应% d_SUI_channel.m % SUI-3 信道模型仿真生成信道冲激响应和频率响应 function [h_impulse, H_freq] sui3_channel(fs, num_samples) % fs : 采样率单位 Hz % num_samples: 样本点数 delays_us [0, 0.4, 0.9]; % 相对时延单位 us power_dB [0, -12, -12]; % 各抽头平均功率单位 dB k_factor [1, 0, 0]; % 莱斯K因子0表示瑞利衰落 % 计算各抽头的幅度 amp sqrt(10.^(power_dB/10)); h_impulse zeros(1, num_samples); % 为每个抽头生成独立的复高斯衰落序列 for tap 1:length(delays_us) delay_samples round(delays_us(tap) * fs / 1e6); h_complex (randn(1, num_samples) 1i*randn(1, num_samples)) / sqrt(2); % 根据K因子叠加直射分量 if k_factor(tap) 0 k k_factor(tap); h_complex sqrt(k/(k1)) sqrt(1/(k1)) * h_complex; end % 写入对应时延位置 idx_start delay_samples 1; if idx_start num_samples len min(num_samples - idx_start 1, num_samples); h_impulse(idx_start:end) h_impulse(idx_start:end) ... amp(tap) * h_complex(1:len); end end % 归一化平均功率 h_impulse h_impulse / sqrt(sum(abs(h_impulse).^2)); H_freq fft(h_impulse, num_samples); end这段脚本的思路是先按功率延迟分布确定每个抽头的幅度再为每个抽头生成独立的复高斯随机序列模拟衰落K 因子非零时叠加一个常数直射分量。时延换算成采样点用 delay_samples round(delays_us * fs / 1e6)fs 是采样率换算不对会导致多径位置全部错位。归一化那一步很多人会忽略。不归一化的话仿真得到的信道平均功率不等于 1后续叠加噪声时信噪比会整体偏移做 BER 曲线时结果全乱。我一般跑完会检查 sum(abs(h_impulse).^2) 是否等于 1偏差超过 0.05 就回头查参数。4.3 多普勒频移与 PSD 仿真的细节SUI 模型的 PSD 仿真主要看多普勒扩展对信道时变特性的影响。固定无线接入场景下终端不移动但环境散射体在动所以多普勒频移不能直接取 0。脚本里典型做法是用经典 Jakes 谱或 flat spectrum 作为多普勒谱再通过滤波器成形。常见参数是最大多普勒频移 fD 2Hz 到 100Hz 之间802.16 固定接入通常取 2Hz 或 20Hz 两档。多普勒频移越大信道随时间变化越快OFDM 符号之间的相关性越低。观察方法就是把 H_freq 的时间序列画成瀑布图或直接看 PSD 形状Jakes 谱应该是浴盆形两端翘起中间平坦。这里最容易翻车的是采样率和符号时长的匹配。fD 取 2Hz 时相干时间大约 0.5 秒采样率太低会导致多普勒频谱被混叠。我一般把采样率设为最大多普勒频移的 100 倍以上比如 fD20Hz 就至少取 fs2kHz不然 PSD 曲线高频段会翘出假峰。5. 四模型仿真常见问题排查从波形异常到论文图表对不上5.1 自由空间损耗曲线在近距离处出现负值现象d 取 0.001km 时损耗算出 6dB 或更小甚至出现负的损耗值直觉上不对。原因自由空间损耗公式在距离极近时本身趋近于 32.44 20log10(f)距离项为负值。这在小数点后几位的近距离仿真里会放大数值误差而且实际工程中近场区域存在天线近场效应Friis 公式根本不适用。解决给函数加上距离下限判断。常见做法是 d_km 小于 0.01 时直接赋值为 0.01或者在上层脚本限定仿真距离从 0.1km 起步。论文里如果画了近场曲线需要在图注注明「近场区域仅作趋势参考」。5.2 Okumura-Hata 和 COST231-Hata 在 1500MHz 处接不上现象两条曲线在 1500MHz 附近有 3~5dB 跳变看起来像同一个频点出现了两套结论。原因两个模型的常数项和频率系数不同理论上在边界频点会有偏差。COST231 团队当时是对 Hata 公式的拟合修正并非强制在 1500MHz 处与 Okumura-Hata 严格相等。如果你跑出来的差距超过 5dB大概率是 a_hm 选了大城市版本或者 C 项加错了。解决对比仿真时统一用中小城市修正因子C 项保持 0。如果论文需要平滑过渡可以采用线性插值的方式在 1400~1600MHz 之间做模型切换不过这属于工程处理不是标准做法论文里要写清楚否则容易被审稿人质疑。5.3 SUI 信道冲激响应时延位置错位多径叠在一起现象h_impulse 里三个抽头没有出现在期望位置时延 0.4us 的抽头跑到了和第一个抽头重叠的位置。原因采样率 fs 和时延转换没有统一单位。0.4us 在 fs1MHz 采样率下只有 0.4 个采样点取整后变成 0两路信号直接叠加。解决先用 delays_samples round(delays_us * fs / 1e6) 计算完再检查。建议 fs 至少取 10MHz这样 0.4us 对应 4 个采样点时延分辨率足够冲激响应才能看出清晰的多径间隔。5.4 PSD 曲线高频端出现明显的假峰现象用 pwelch 画信道包络 PSD低频段符合 Jakes 谱形状高频段却翘起来一个尖峰。原因多普勒频移 fD 设置后采样率没有相应提高多普勒谱发生了频谱混叠。另一个常见原因是随机序列波动太大功率谱估计时没有加窗平均。解决把采样率提高到 fD 的 100 倍以上pwelch 加汉宁窗并做 8 段重叠平均。我一般还会对比两次独立运行的结果如果 PSD 形状差异很大说明样本点数不够需要把 num_samples 增大到 2 万以上。5.5 论文里的仿真图与 MATLAB 跑出来的图对不上现象word 论文里贴的曲线和附带的脚本运行结果不一致有的参数对不上有的曲线形状不同。原因资源打包时论文可能对应的是某一版参数脚本后来被修改过又没有同步更新论文。这是课程设计和论文打包最常见的版本管理问题。解决拿到资源先跑一遍脚本核对脚本里的注释参数和论文图表里的标注是否一致。不一致时以脚本为准重新生成图再替换论文插图。我一般会在脚本顶部加一行注释记录生成时间下次修改不会被带偏。6. 验证仿真结果用信噪比曲线和合并技巧判断模型是否靠谱很多人拿到脚本跑完就贴进论文但仿真结果有没有问题看曲线平滑度是不够的。我习惯做一个最朴素的验证给信道加上高斯白噪声画出接收端信噪比随发射功率变化的曲线看趋势是否与理论值吻合。自由空间模型下发射功率每增加 3dB接收信噪比应该增加约 3dB斜率近似为 1SUI 多径信道因为有频率选择性衰落斜率会略低于 1但不会低到 0.5 以下。另一个常用的验证是切换地形参数。把 SUI-1 改成 SUI-5信道冲激响应的时延扩展应当明显变大频率响应的波动也更剧烈。如果两条曲线的频率响应差别不大多半是 K 因子或功率延迟分布参数没有真正生效。我碰到过一次 K 因子判断条件写反瑞利抽头被加上了直射分量整个仿真结果全变了从那以后我每次跑完信道仿真都会强制走一遍参数切换对比。做论文图表时三个小技巧能省不少返工时间。第一MATLAB 的 figure 窗口导出图片时把 FontSize 统一调到 10 以上缩小到 word 单栏宽度约 8.5cm后字号才不会模糊到看不清。第二路径损耗曲线的 y 轴范围建议设成 80~180dB这能同时容纳四个模型的曲线不会因为某一条太高而压缩其他曲线的可视范围。第三SUI 仿真图建议同时画时域冲激响应和频域响应两张子图审稿人看到这两张图就明白你确实理解了多径信道而不只是贴了一个脚本输出。这套资源里的代码结构是按「a 到 d」四个目录组织的每个目录对应一个模型配合论文里的图号和公式编号可以快速定位。如果你需要把它扩展成自己的课程设计最划算的做法是先跑通原始脚本然后只改频率和距离这两个参数重新出图后替换论文插图。希望这篇拆解能让你在信道上少走点弯路祝调试顺利。本文还有配套的精品资源点击获取
