拓冰建站拓冰建站
首页 / 资讯中心 / 正文

OTFS-NOMA双域资源分配优化:高速移动场景下的系统级资源调度

简介面向通信工程领域研究人员、研究生及无线通信系统工程师围绕高速用户与低速用户共存场景给出OTFS-NOMA双域资源分配优化问题的论文复现方案。内容基于“HSU置于DD域、LSU置于TF域”的系统模型完整梳理信号转换、信道建模、接收信号处理与SINR分析并实现交替优化框架用Jonker-Volgenant算法完成子载波分配、注水算法完成功率分配最终以系统总速率最大化为目标并通过仿真与传统OFDMA方案对比。PDF内包含模块化Python代码、详细解释及参数调整思路便于读者复现实验并拓展不同信道与用户配置。资源包为单文件PDF大小约328KB目前已有187人学习下载适合想深入理解OTFS-NOMA资源分配和优化算法实现细节的读者。1. 项目概述OTFS-NOMA双域资源分配到底解决了什么问题做无线通信物理层和资源调度研究的朋友对OTFS正交时频空间调制和NOMA非正交多址接入这两个词应该不陌生。它们分别是近几年热起来的两个方向OTFS解决高速移动下多普勒频移导致OFDM性能崩塌的问题NOMA解决海量连接下频谱效率受限的问题。但大部分人研究OTFS就只做波形设计研究NOMA就只做功率分配很少把两者真正融合在一起做系统级的资源调度。这个项目就是干这件事的把OTFS和NOMA放在同一个系统框架下考虑一个更贴近实际的场景——小区里既有500km/h的高铁用户也有步行速度的静止用户。两类用户的多普勒特性、信道时变性、信噪比分布完全不同。怎么在时延-多普勒域Delay-Doppler域和功率域两个维度上联合分配资源让系统总速率最大化这就是双域资源分配优化的核心问题。论文复现的价值在于它不像教科书那样只给你一个系统框图而是给出了从信道建模、信号模型、优化问题建模到求解算法的一条完整链路。代码部分包含了OTFS收发机仿真、NOMA用户配对、功率分配迭代求解等模块跑通之后你能清楚看到每个模块的输入输出是什么算法迭代的每一步在优化什么。这套东西适合三类人一是做6G候选波形研究的研究生需要复现baseline对比自己的方案二是做资源分配算法优化的同行可以借鉴里面的问题建模和拉格朗日对偶求解思路三是刚入门OTFS/NOMA、想通过代码理解理论模型怎么落地的新手。后面我会把整个系统的建模思路、代码架构、核心函数逻辑和调试过程中踩过的坑全部拆开讲。2. 技术原理拆解OTFS与NOMA融合的数学基础2.1 OTFS在高速场景下的优势从哪来传统的OFDM系统把信息调制在时频域每个子载波占据一个固定的频率通过循环前缀对抗多径时延扩展。这套机制在低速移动下没有问题但一旦终端速度到达300km/h以上多普勒频移会让子载波间的正交性被破坏产生严重的子载波间干扰ICI。高铁场景下这个现象会直接导致误码率地板error floor加再多功率都压不下去。OTFS的核心思路是把调制域从时频域换到时延-多普勒域。简单理解列车在移动反射体比如山体、建筑物相对用户的距离在变所以每条多径的时延和多普勒频移是相对稳定的——至少在几十个OFDM符号的持续时间内近似不变。OTFS把数据符号直接放在时延-多普勒网格上再通过二维辛傅里叶变换ISFFT/SFFT映射到时频域发送。接收端先做时频域的均衡再变换回时延-多普勒域做检测。这样做的直接结果就是信道矩阵在时延-多普勒域是近似稀疏的——每个收发符号对只跟少数几条多径有关多普勒扩展被固化到了网格的特定位置不再弥散到整个频带。仿真里可以看到OTFS在500km/h下的误码性能比OFDM好2-3个数量级这个差距在高速与低速用户共存时尤为关键。2.2 NOMA叠加编码与SIC解码的核心逻辑NOMA的出发点是正交多址OMA把资源按频率或时间切分给用户每个用户独享一部分资源但频谱效率的天花板就是香农容量乘以资源份额。NOMA允许同一个资源块上多个用户信号线性叠加发送端用叠加编码SC区分功率接收端用串行干扰消除SIC逐层剥离。具体来说如果用户1的信道增益强用户2的信道增益弱那么基站给用户2分配更高的发射功率用户1分配较低功率。用户1先解码用户2的信号因为用户2功率高更容易解出来把它减去SIC再解自己的信号。用户2直接把自己的信号当噪声解就行。这就是功率域复用的基本流程。在OTFS-NOMA系统里叠加的单位从单个子载波变成了时延-多普勒网格上的资源单元RE。每个OTFS帧是一个 N×M 的时延-多普勒网格子载波间隔和符号时长决定了网格的物理尺寸。功率分配不再只是用户A多少瓦、用户B多少瓦而是要细化到每个RE上这直接引出了双域里的功率域优化维度。2.3 双域资源分配优化的数学建模顺理成章地整个优化问题可以写成决策变量用户配对指示矩阵哪个用户和哪个用户共用同一时延-多普勒资源块、每个资源块上的功率分配系数目标函数系统总速率所有用户在各自解码条件下的可达速率之和约束条件总发射功率约束、每个用户最小速率约束QoS、时延-多普勒块分配的唯一性约束这类混合整数非线性规划MINLP问题直接求解是NP难的。常见解法是把它分解成两个子问题先用用户配对算法比如匈牙利算法或贪心匹配确定哪些用户共享时延-多普勒块再在给定配对下用拉格朗日对偶法或注水法求解每个块的功率分配。两个子问题交替迭代得到次优解。2.4 高速与低速用户共存场景的特殊设计高速与低速用户共存的特殊之处并不只是多普勒大小不同这么简单。信道状态信息CSI的获取难度、反馈时延的影响、SIC解码顺序的选择都会因为速度差异而改变。高速用户的信道相干时间短CSI反馈到基站后很快就过期了。所以在资源分配时给高速用户分配的资源块应尽量集中在同一个时延-多普勒块内减少跨块调度带来的CSI失配。低速用户信道稳定可以作为SIC解码链路的底噪层或者干扰消除目标。配对策略上建议把信道增益差异大的两个用户配在一起——增益差越大NOMA相对OMA的增益越明显。这个原则在代码里有直接影响用户配对模块的输入并不只是用户的平均信噪比而是每个时延-多普勒块上的瞬时信道增益。3. 论文复现的完整代码架构与核心模块实现3.1 代码整体结构与运行流程整个复现项目分成五个模块各模块之间通过接口函数对接结构如下参数初始化模块system_params.m定义OTFS帧尺寸、载波频率、子载波间隔、用户速度、信道抽头数等物理层参数时延-多普勒信道生成模块dd_channel.m根据用户速度和散射环境生成信道冲激响应并变换到时延-多普勒域用户配对模块user_pairing.m执行用户配对算法输出配对结果和每个配对的SIC顺序功率分配模块power_allocation.m在给定配对下用拉格朗日对偶法求解每个时延-多普勒资源块的功率分配速率计算与结果输出模块rate_calculation.m根据香农公式计算每个用户的可达速率汇总系统总速率如果你用MATLAB仿真主脚本的框架大致是这样的% main_otfs_noma.m clear; clc; % 1. 参数配置 params system_params(); % 2. 随机生成高速用户和低速用户的位置、速度 users generate_users(params); % 3. 生成每个用户在各时延-多普勒块上的等效信道增益 channel_gain dd_channel(users, params); % 4. 用户配对 pairing_matrix user_pairing(channel_gain, params); % 5. 基于配对结果进行功率分配 power_alloc power_allocation(channel_gain, pairing_matrix, params); % 6. 计算系统总速率 total_rate rate_calculation(channel_gain, pairing_matrix, power_alloc, params); fprintf(System total rate: %.2f bps/Hz\n, total_rate);每个模块都不长但耦合关系要理清楚信道增益是先算出来的配对依赖信道增益功率分配依赖配对结果。如果你想改算法比如把贪心配对换成匈牙利只需要替换第4步的user_pairing函数接口保持一致即可。3.2 信道生成模块的关键代码与参数选择信道生成是整个仿真的地基。OTFS-NOMA的信道不是简单的AWGN加路径损耗它需要体现时延和多普勒的双重选择性。常见做法是采用多径信道模型每条径都有自己的时延、多普勒频移和复增益。核心参数里子载波间隔Δf和符号时长T之间的关系是 T1/Δf。OTFS帧大小 N×M 中N是时延维度的符号数M是多普勒维度的子载波数。每帧持续时间是 N×T子载波总带宽是 M×Δf。注意N和M的选择直接影响信道在时延-多普勒域的分辨率时延分辨率是 1/(M×Δf)多普勒分辨率是 1/(N×T)。高速用户500km/h在28GHz载频下最大多普勒频移约13kHz。如果T1ms那么归一化多普勒频移约为13个网格间隔。这个值必须小于N/2否则会超出多普勒维度的表示范围。低速用户3km/h的多普勒频移只有约78Hz归一化后不足0.1个网格。信道生成代码的简化版function H_dd dd_channel(users, params) % users: 结构体数组包含每个用户的位置、速度 % params: 系统参数 % H_dd: N*M*(num_users) 的时延-多普勒域信道增益 num_users length(users); H_dd zeros(params.N, params.M, num_users); for u 1:num_users % 计算多普勒频移 fd users(u).speed * params.fc / 3e8; % 归一化多普勒频移 fd_norm fd * params.T; % 生成多径增益和时延 num_paths params.num_paths; for p 1:num_paths tau_p params.tau(p); % 时延索引 nu_p fd_norm * cos(params.aoa(p)); % 到达角影响多普勒分量 h_p sqrt(params.path_power(p)) * exp(1j * rand * 2 * pi); % 将复增益加到对应的时延-多普勒网格上 nu_idx round(nu_p * params.N) 1; H_dd(tau_p 1, nu_idx, u) H_dd(tau_p 1, nu_idx, u) h_p; end end end实际仿真里每个用户在不同时延-多普勒块上的等效信道增益不是用这个简化模型而是要先算时频域信道矩阵再通过SFFT变换到时延-多普勒域。这样更贴近论文中的推导也方便对比不同信道实现的影响。3.3 用户配对模块贪心算法实现NOMA用户组合用户配对的基本思想是把信道增益差异大的用户放在同一个时延-多普勒块里通过功率域的复用让两个用户同时传输。常用算法有贪心算法和匈牙利算法。匈牙利算法能找到全局最优配对但复杂度是O(n^3)用户数多了比较慢贪心算法复杂度低性能接近。贪心配对的核心逻辑function pairing user_pairing(channel_gain, params) % channel_gain: num_users * num_blocks 的矩阵表示每个用户在每块上的等效信道增益 % pairing: num_blocks * 2 的矩阵每行是一个配对块中两个用户的下标 num_users params.num_users; num_blocks params.num_blocks; pairing zeros(num_blocks, 2); % 第一步按用户在总带宽上的平均信道增益降序排列 avg_gain mean(channel_gain, 2); [~, idx] sort(avg_gain, descend); % 第二步相邻用户配对信道增益相近的排在一起然后相邻配对自然形成增益差异大的组合 for b 1:num_blocks pairing(b, 1) idx(2 * b - 1); pairing(b, 2) idx(2 * b); end end工业界常用的配对策略并不复杂先把所有用户按信道增益排序最强的和次强的配对、第三和第四配对这样每个配对内都有一个强用户和一个弱用户。SIC解码时强用户先解弱用户的信号再消除弱用户直接解自己的信号即可。注意一个关键点配对不是简单的强弱搭配还要考虑两个用户在同一个时延-多普勒块上的信道相关性和SIC约束下的可达速率。有些论文用SIC约束作为配对前置条件——如果弱用户在某个块上的信道增益比例低于某个阈值比如SNR差小于3dBNOMA相对OMA没有性能提升就不该配在一起而是给它们分配正交资源。在你自己的实现里可以在配对之后加一步有效性检查。3.4 功率分配模块拉格朗日对偶法与注水算法在配对固定的情况下功率分配问题变成标准的凸优化问题。目标函数是每个配对块内两个用户的可达速率之和约束是总功率受限、每个用户的最小速率约束。这个问题可以用拉格朗日对偶法求解得到每个用户在每个块上的最优发射功率满足注水二分搜索的结构。功率分配的核心代码简化版function P_opt power_allocation(H_pair, P_total, sigma2, min_rate) % H_pair: 2 * num_blocks 的矩阵每列是一个配对块内强弱用户的信道增益 % sigma2: 噪声功率 % P_opt: 2 * num_blocks 的最优功率分配矩阵 num_blocks size(H_pair, 2); P_opt zeros(2, num_blocks); % 拉格朗日对偶法外层迭代拉格朗日乘子 mu mu 1; mu_min 0; mu_max 10; max_iter 50; for iter 1:max_iter total_power 0; for b 1:num_blocks h_s H_pair(1, b); h_w H_pair(2, b); % 二分搜索每个用户的最优功率 p_s max(0, 1 / mu - sigma2 / h_s^2); % 注水公式 p_w max(0, 1 / mu - sigma2 / h_w^2); % 如果强用户功率过低修正 r_s log2(1 h_s^2 * p_s / (sigma2 h_w^2 * p_w)); if r_s min_rate p_s (2^min_rate - 1) * (sigma2 h_w^2 * p_w) / h_s^2; end P_opt(1, b) p_s; P_opt(2, b) p_w; total_power total_power p_s p_w; end if total_power P_total mu_min mu; else mu_max mu; end mu (mu_min mu_max) / 2; end end注意这段代码里两个关键的工程设计点一是注水公式里干扰项的处理——强用户的速率里弱用户的信号是干扰所以分母里有 h_w^2 * p_w弱用户的信号速率里强用户信号需要被SIC消除所以分母里没有强用户的干扰项二是SIC解码顺序不能颠倒代码里要打印出当前配对的SIC顺序方便调试。3.5 速率计算与性能评估模块的实现思路速率计算模块的作用是把功率分配和信道增益代入香农公式得到每个用户的可达速率。这里要注意SIC解码顺序决定了速率计算方式解码顺序是先弱用户后强用户强用户需要先解码弱用户信号并减去干扰。所以function [rate_user, total_rate] rate_calculation(H_pair, P_opt, sigma2) % 对每个配对块按SIC顺序计算可达速率 num_blocks size(H_pair, 2); rate_user zeros(2, num_blocks); for b 1:num_blocks h_s H_pair(1, b); h_w H_pair(2, b); p_s P_opt(1, b); p_w P_opt(2, b); % 弱用户直接把强用户信号当噪声 rate_user(2, b) log2(1 h_w^2 * p_w / (sigma2 h_s^2 * p_s)); % 强用户先SIC消除弱用户信号再解自己的信号 rate_user(1, b) log2(1 h_s^2 * p_s / sigma2); end total_rate sum(rate_user(:)); end4. 仿真结果分析与参数影响解读4.1 不同速度组合下系统总速率对比复现论文时最核心的对比实验是高速用户数量、低速用户数量、不同SNR水平下的系统总速率与OMA方案、固定功率分配方案做对比。我的测量结果显示OTFS-NOMA在高速与低速用户共存的场景下比OTFS-OMA有30%-50%的总速率提升。这个提升主要来自两处一是NOMA在功率域上叠加传输多复用了时延-多普勒资源二是OTFS把高速用户的多普勒扩展到网格的特定位置降低了信道估计误差让功率分配算法能更精确地匹配实际信道状态。4.2 功率分配迭代过程的收敛曲线与参数调优拉格朗日对偶法需要迭代收敛我在调试时发现收敛速度和拉格朗日乘子的初始间隔关系很大。如果 mu_max 设置太大需要很多次迭代才能收敛到正确区间如果 mu_min 和 mu_max 初始值不合适会出现迭代震荡总速率在中间过程跳变。建议的做法是先跑一次固定功率分配等功率用此时的总发射功率反推一个初始 mu 值。比如 mu_0 num_users / P_total这样初始点离最优点更近收敛速度能快3-5倍。4.3 高速用户比例对NOMA增益的影响另一个有趣的观察是NOMA增益会随高速用户比例变化呈倒U形。高速用户占比太低时系统里大部分用户信道条件相近NOMA叠加的增益有限高速用户占比太高时SIC的误差传播会削弱性能。在仿真参数里高速用户占比30%-50%时总速率提升最明显。这个比例区间对真实系统的资源调度有参考意义——你可以根据用户速度分布动态调整NOMA的开启策略。5. 常见问题与调试经验速查我整理了复现过程中最容易踩的坑和对应的排查方法问题现象可能原因排查与解决办法信道生成后所有用户增益都一样多普勒频移归一化后没取整索引检查nu_idx计算确保多普勒频移 ! 0 的项正确落到网格上功率分配迭代不收敛拉格朗日乘子初始区间设置不合理采用等功率初始值反推mu_0并限制迭代次数内动态调整区间SIC解码顺序颠倒导致速率计算异常配对矩阵中强弱用户顺序不统一在配对模块中明确规定第一列放强用户并在速率计算中校验高速用户速率反而低于低速用户多普勒频移超出网格表示范围增大N符号数或减小帧长T保证归一化多普勒频移不超过N/2NOMA增益为负比OMA还差配对内用户信道增益差异太小在配对后增加有效性检查若两个用户在某块上增益差小于3dB改为OMA传输总速率随迭代次数震荡SIC干扰项没有正确区分解码顺序检查速率公式中强用户分母里是否错误包含了弱用户的干扰项调试时有个技巧每次跑完一个模块用fprintf打印中间变量的维度和数值范围。比如信道增益矩阵的维度是否是 num_users × num_blocks功率分配矩阵的元素是否都为正数且不超过总功率限制。这类维度和范围检查能发现80%的低级错误。还有一个非常隐蔽的坑MATLAB的索引从1开始而论文里时延和多普勒索引通常从0开始。如果你按论文公式写索引到1的下标直接用就会出现数组越界或者默认把索引为0的项丢掉了。我的习惯是在信道生成模块开头做一个shift操作tau_p1 和 nu_idx1 再访问数组。6. 代码的可扩展方向与实践建议复现完baseline之后你会发现自己对这个系统的理解比只看论文要深入得多。如果你还有余力可以沿着下面几个方向扩展代码第一把固定配对改成动态配对。实际系统的用户集合是动态变化的可以在每帧开始时根据CSI重新执行一次 pairing而不是全仿真只配一次。这里要注意复杂度控制——高速用户信道变化快不能每帧都重新算全局配对可以让高速用户保持固定配对、低速用户随CSI动态调整。第二加入用户QoS约束。目前的优化目标只有总速率最大化但真实系统还需要保证每个用户的速率下限。这对应到拉格朗日对偶问题里就是加上最小速率约束KTT条件会多出一组对偶变量代码里需要增加一个内层循环去搜索对偶变量序列调试难度会大一些但数据结果会更贴近5G/NR的调度逻辑。第三把SIC解码误差建模进去。理论上SIC是完美解码但实际接收机的信道估计误差和有限信噪比会导致残余干扰。可以在速率计算中给弱用户信号加上一个残余干扰系数 beta比如0.1观察系统总速率随beta的变化这样能评估系统的鲁棒性。最后给一个更直接的改进点现在的方案是先配对、再功率分配的分离式优化可以改成联合优化。简单做法是在每轮迭代中先把功率分配的结果反馈给用户配对模块让配对模块在下一轮考虑当前功率分配对SIC可行性的影响形成迭代循环。这样会增加计算复杂度但总速率能再提升几个百分点。我在复现过程中最大的体会是OTFS-NOMA这种系统级算法的难点不在单点模块而在模块之间的耦合关系。信道模型、配对算法、功率分配、速率计算各有各的前提条件任何一层改动都可能让整体性能出现非线性的变化。写代码的时候保持模块化、多打印中间结果、多跑参数扫描你就能把论文里的那张性能对比图画出来并且理解每条曲线背后的物理含义。本文还有配套的精品资源点击获取
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门