ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

基于MATLAB的5G-MIMO NOMA与OMA性能对比仿真实现

基于MATLAB的5G-MIMO NOMA与OMA性能对比仿真实现 简介基于5G-MIMO系统的NOMA与OMA性能对比MATLAB仿真资源面向通信专业学生、科研人员及5G非正交多址技术初学者用于解决NOMA与OMA在MIMO场景下可达速率分析、性能对比和仿真复现问题。资源提供完整的MATLAB仿真主程序代码含中文注释覆盖MIMO-NOMA与MIMO-OMA的可达速率计算重点实现用户功率分配因子a1、a2下的串行干扰删除SIC信号解析可直观对比不同信噪比下R1n、R12n、R2n与R1o、R2o的曲线或数值差异帮助理解NOMA通过功率域复用带来的频谱效率提升。资源共5个文件包括1个m脚本、1个avi格式的仿真操作录像、3张jpg结果截图整体压缩包仅574KB小巧便于下载。操作录像使用Windows Media Player即可播放详细演示MATLAB左侧当前文件夹路径的设置步骤与运行流程避免因路径错误导致程序无法运行。目前已有959人学习适合需要快速上手NOMA仿真的初学者参考。按录像提示配置环境后即可复现完整对比结果并在此框架上扩展多用户场景。1. 5G-MIMO多址接入的选型困境NOMA与OMA的性能分水岭5G基站侧天线规模从4G的8端口扩展到64端口之后一个容易被忽略的问题是大规模天线带来的空间自由度到底该配什么样的多址策略。正交多址OMA把时间、频率或码字资源切分成互不重叠的正交块调度简单、干扰可控是4G时代的默认选项但到了5G-MIMO场景用户配对带来的复用增益往往被OMA的正交隔离白白浪费。NOMA非正交多址让多个用户在同一个资源块上叠加传输靠功率域区分用户再用串行干扰消除SIC还原信号。本文基于MATLAB 2022a仿真脚本对比两种多址方式在MIMO信道模型下的可达速率并把功率分配系数、SIC解码条件和信噪比的影响逐项拆开。适合正在做5G物理层链路仿真、以及需要把多址算法从公式落到可复现代码的通信工程师阅读。2. NOMA与OMA的速率模型SIC解码与功率域复用的公式拆解2.1 功率域NOMA的核心思路NOMA与OMA的差异不在调制编码方式而在多址资源的划分逻辑。OMA把资源块正交切分给不同用户最简单的模型就是两个用户各占一半时隙UE1用前半段UE2用后半段彼此完全不产生干扰。代价是每个用户拿到的资源都被砍半频谱效率的天花板被正交约束锁死。5G的大规模MIMO虽然能通过波束赋形提升信噪比但OMA的资源切割方式仍然限制了多用户复用增益。NOMA的做法刚好相反在同一个时频资源块上把两个用户的信号线性叠加。叠加时按功率分配系数a1和a2分配发射功率其中a1 a2 1信道条件差的远端用户UE1分配更大的功率信道条件好的近端用户UE2分配较小的功率。接收端处理顺序也不一样UE2先通过SIC把UE1的信号解出来并从混合信号中减去再解自己的信号UE1则把UE2的信号当作干扰直接解自身信号。这样两个用户都能用满整个资源块只是各自付出了干扰或复杂度代价。2.2 可达速率公式的物理含义先看仿真脚本里NOMA部分的三个核心速率表达式% MIMO-NOMA 可达速率 R1n log2(1 pt(u)*a1.*g1./(pt(u)*a2.*g1 no)); R12n log2(1 pt(u)*a1.*g2./(pt(u)*a2.*g2 no)); R2n log2(1 pt(u)*a2.*g2/no);R1n是远端用户UE1的可达速率。分子pt(u)*a1.*g1是UE1自身信号在接收端的功率分母由pt(u)*a2.*g1加上噪声功率no组成其中pt(u)*a2.*g1是UE2信号对UE1造成的同频干扰。这个SINR表达式直接反映了功率域NOMA的核心UE1用高功率换取抗干扰能力但代价是必须承受UE2信号的部分泄漏。R12n是UE2对UE1信号的解码速率。注意它的结构与R1n几乎一样只是信道增益换成了g2。这意味着UE2必须先成功解出UE1的信号才能执行SIC而这一步的SINR取决于a2在g2信道上造成的自干扰。如果R12n低于UE1的目标速率SIC就会失败UE2只能把UE1信号当作纯干扰性能会急剧劣化。R2n是SIC完成之后UE2解自身信号的速率。此时干扰项已经被消除分母只剩噪声no。这行公式说明了一个容易被忽视的事实UE2虽然在功率分配上吃亏但SIC把这个亏补了回来最终几乎等效于用全带宽、无干扰地传输自己的信号。2.3 功率分配系数与SIC的约束关系功率分配系数不是随意取的它要同时满足三个约束a1大于a2保证UE1能先被解出来a2又不能太小否则UE2的R2n会变得很低同时R12n必须足够高以保证SIC成立。下表是仿真里常用的参数设定和约束逻辑参数含义典型取值约束条件a1UE1远端功率分配系数0.7~0.9必须大于a2保证SIC第一步可解a2UE2近端功率分配系数0.1~0.3需满足R12n不低于UE1目标速率pt基站总发射功率按SNR反推配合no归一化a1a2恒为1g1/g2MIMO接收合并后的等效信道增益瑞利信道生成通常g2大于g1体现远近差异实际工程里这套约束会变成调度器的选人条件信道增益差异大的两个用户才适合凑成NOMA配对。如果g1和g2非常接近功率域叠加带来的增益会消失NOMA甚至会因为SIC解调余量不足而劣于OMA。这个边界条件在第四章仿真结果里会看得非常明显。3. MATLAB 2022a仿真实现信道生成、速率循环与曲线绘制3.1 仿真场景与参数配置这个仿真脚本的目标不是复现完整5G协议栈而是验证一个核心趋势在MIMO信道下NOMA的总可达速率是否持续优于OMA。所以建模粒度放在物理层的等效信道和速率公式上不涉及具体的调制映射、信道编码和HARQ流程。参数配置围绕信道统计特性和功率分配展开。常见做法是单小区双用户模型基站天线数在4到64之间取值信道按瑞利衰落生成。接收端按最大比合并处理把多天线信号合并成等效标量信道这样速率公式里的g1、g2就代表合并后的信道功率增益。SNR从0dB扫到30dB观察两个用户在两种多址方式下的总速率曲线。3.1.1 关键参数表参数名设置选择理由用户数K2双用户是所有NOMA研究的最小可验证模型基站天线数Nt4先验证单天线等效模型后续可扫16/64SNR扫描范围0~30 dB覆盖5G链路实际工作区间功率分配a1/a20.8/0.2初始值第四章再做扫描优化信道模型瑞利衰落多径传播的标准统计模型归一化噪声no1简化计算SNR由pt控制3.2 信道生成与速率计算代码% mimo_noma.m 基于5G-MIMO的NOMA与OMA性能对比 % MATLAB 2022a 直接运行 clear; clc; Nt 4; % 基站天线数 SNR_dB 0:2:30; % 信噪比扫描 a1 0.8; a2 0.2; % NOMA功率分配系数 no 1; % 归一化噪声功率 pt 10.^(SNR_dB/10)*no; % 由SNR反推发射功率 % 生成MIMO信道接收端做最大比合并 H1 (randn(1,Nt)1j*randn(1,Nt))/sqrt(2); H2 (randn(1,Nt)1j*randn(1,Nt))/sqrt(2); g1 sum(abs(H1).^2); % UE1等效信道增益 g2 sum(abs(H2).^2); % UE2等效信道增益 % 预分配结果矩阵 R_noma zeros(length(SNR_dB), 2); R_oma zeros(length(SNR_dB), 2); for u 1:length(SNR_dB) % NOMA 可达速率 R1n log2(1 pt(u)*a1*g1/(pt(u)*a2*g1 no)); R12n log2(1 pt(u)*a1*g2/(pt(u)*a2*g2 no)); R2n log2(1 pt(u)*a2*g2/no); R_noma(u,:) [R1n, R2n]; % OMA 可达速率等分时隙系数0.5 R1o 0.5*log2(1 pt(u)*g1/no); R2o 0.5*log2(1 pt(u)*g2/no); R_oma(u,:) [R1o, R2o]; endH1和H2按标准瑞利分布生成每个元素实部虚部分别服从均值为0、方差为0.5的正态分布除以sqrt(2)后功率归一化到1。g1和g2用sum(abs(H).^2)做最大比合并把多天线接收能量累加起来。这里和原脚本里mean(abs(H).^2)的差别在于mean得到的是单天线平均增益适合做统计平均sum等效于MRC合并后瞬时接收功率更贴合单次信道实现。循环体内pt(u)随着SNR_dB逐点变大。R1n的分母里pt(u)a2g1代表UE2对UE1造成的同频干扰这个干扰功率和信号功率同步增长所以NOMA的速率不会像OMA那样随SNR线性上升而是逐渐逼近一个由功率比决定的上限。OMA的0.5系数来自时隙等分如果改成频域等分系数同样是0.5不做资源分割的NOMA没有这个系数。3.3 补充SIC约束判断与绘图上面的循环假设SIC理想成立实际仿真建议加上一个约束判断当R12n低于R1n时说明SIC无解此时UE2的速率应按带干扰的方式重新计算if R12n R1n R2n log2(1 pt(u)*a2*g2/no); % SIC成功 else R2n log2(1 pt(u)*a2*g2/(pt(u)*a1*g2 no)); % SIC失败 end这段判断的价值在于能直观看到高a1配置下SIC的工作边界。如果不加这个分支R_noma曲线会在低SNR区显得过于乐观给出一种“NOMA永远更好”的错误暗示。绘图部分把两个用户速率按行求和得到总吞吐率进行对比figure; plot(SNR_dB, sum(R_noma,2), r-o, LineWidth, 1.5); hold on; plot(SNR_dB, sum(R_oma,2), b--s, LineWidth, 1.5); legend(NOMA总速率, OMA总速率); xlabel(SNR (dB)); ylabel(可达速率 (bit/s/Hz)); grid on; title(5G-MIMO下NOMA与OMA可达速率对比);3.4 仿真录像与运行环境注意资源包里的仿真操作录像0015.avi可以用Windows Media Player直接播放内容是从MATLAB启动到跑出结果图的完整过程。录像里特别强调了一个环境问题MATLAB左侧的当前文件夹路径必须切换到mimo_noma.m所在目录。否则脚本中涉及结果图片保存的相对路径会落到其他目录造成“明明跑完了却找不到输出”的错觉。三张截图1.jpg、2.jpg、3.jpg分别对应不同阶段的曲线形态建议跑完脚本后先和截图对比一下总趋势再进入参数调优环节。4. 仿真结果分析SNR增益、功率分配扫描与SIC边界调优4.1 不同SNR下NOMA的增益变化SNR从0dB升到30dB的过程中NOMA总速率曲线始终在OMA上方但两者的差距并非均匀扩大。低SNR段噪声占主导SIC的解调余量不足NOMA的叠加增益被噪声掩盖差别可能只有几个百分点。SNR超过10dB之后功率域叠加的优势才真正释放出来NOMA相对OMA的增益可以稳定在30%到50%之间具体数值取决于g1与g2的差距。这里要特别区分是总速率增益还是单用户增益。远端用户UE1在NOMA下是全面正收益它既拿到了全部带宽又拿到了更高功率而近端用户UE2在a2较小时单独速率可能反而不如OMA它的“赚头”来自SIC消除干扰后的无干扰传输。所以汇报时不要笼统说NOMA性能更好要说清楚是在什么用户配对和功率分配前提下。4.2 功率分配系数扫描与最优区间固定SNR在20dB把a1从0.5扫到0.95观察总速率变化a1_scan 0.5:0.05:0.95; R_total zeros(length(a1_scan), 1); pt_fix 10^(20/10) * no; % 固定20dB SNR for i 1:length(a1_scan) a1 a1_scan(i); a2 1 - a1; R1n log2(1 pt_fix*a1*g1/(pt_fix*a2*g1 no)); R2n log2(1 pt_fix*a2*g2/no); R_total(i) R1n R2n; end [best_val, idx] max(R_total); fprintf(最优a1 %.2f对应总速率 %.3f bit/s/Hz\n, ... a1_scan(idx), best_val);运行后会看到总速率曲线呈单峰形态a1靠近0.5时UE1功率不足a1靠近0.95时UE2功率不足峰值通常出现在0.8附近。这个单峰就是功率分配的“甜点区”。工程上不会追求精确最优值而是选一个平台区间的中间点因为实际信道在快速变化精确最优值没有意义。4.3 用户配对与信道差异的边界把g2与g1的比值从1调到10观察NOMA相对OMA的增益变化会看到一条清晰的增长曲线比值越接近1增益越小比值大于5之后增益趋于饱和。这解释了为什么5G-NOMA系统的调度器要做用户配对——把信道差异大的用户放在同一资源块差异小的用户分开调度。如果从仿真转算法验证这个配对逻辑比单纯的速率公式更有工程价值。反过来当g1等于g2时NOMA的SIC基本失效R1n和R12n的数值趋于一致总速率可能和OMA打平甚至更低。这时候查看曲线会发现NOMA曲线与OMA曲线发生交叉这是检验你的仿真是否自洽的一个重要标志。4.4 调试经验与高频错点速率出现NaN或Inf先查pt(u)在低SNR时是否为0再查no是否被误设置为向量。R2n比R1n还小大概率把a1和a2写反了或者SIC成功判断条件写成了R12n小于R1n。曲线毛刺过多单次信道生成的随机性太大把g1、g2改成多次信道取均值或者增加蒙特卡洛重复次数。中文注释乱码旧版脚本可能是GBK编码在MATLAB的编辑器里调成UTF-8编码重新打开。运行报错提示“维数不匹配”检查原脚本里对多天线信道求平均或求和的维度MATLAB 2022a对行列向量的隐式扩展很严格。5. 把仿真脚本改造成可复用验证工具函数化与退化测试5.1 函数化封装第一步是把mimo_noma.m里的核心速率计算抽成独立函数输入SNR、天线数、功率系数、信道增益输出两种多址的总速率矩阵。这样后续做蒙特卡洛循环或者批量参数扫描就不用反复复制粘贴脚本代码。函数签名可以设计成function [R_noma, R_oma, R12n] noma_oma_rates(SNR_dB, Nt, a1) % 返回三种速率R12n可单独用于SIC边界分析 no 1; pt 10.^(SNR_dB/10)*no; H1 (randn(1,Nt)1j*randn(1,Nt))/sqrt(2); H2 (randn(1,Nt)1j*randn(1,Nt))/sqrt(2); g1 sum(abs(H1).^2); g2 sum(abs(H2).^2); % 后续计算与主脚本一致 end调用时用蒙特卡洛方式对同一组SNR重复跑200次把每条速率曲线平均后再绘图能显著消除瑞利信道的随机性。200次仿真的运行时间在普通笔记本上不超过几秒可以用最简单的for循环实现。5.2 退化测试验证公式实现验证仿真代码是否正确最有效的手段不是对照论文算例而是做两组退化测试。第一组把a1设为1、a2设为0此时NOMA退化为单用户全带宽传输R_noma应当严格等于log2(1 pt*g1/no)如果和OMA的0.5系数结果不一致说明功率系数归一化写错了。第二组把g1和g2设为相等NOMA总速率应当逐渐趋于OMA如果此时还会出现NOMA明显高于OMA的情况说明SIC条件判断被跳过了。退化测试通过之后再跑正式的参数扫描结果才有可信度。最后留一个习惯所有结果图保存时把a1、Nt、随机种子一并写进文件名或图注方便回溯哪条曲线对应哪组条件。本文还有配套的精品资源点击获取
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进