ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

主动RIS辅助ISAC系统波束成形设计与MATLAB仿真实现

主动RIS辅助ISAC系统波束成形设计与MATLAB仿真实现 简介本资源是一套面向电子信息工程、通信与信号处理方向本科生及初级研究者的MATLAB实践代码聚焦主动可重构智能表面RIS辅助的通感一体化ISAC系统波束成形设计与性能评估问题适用于课程设计、毕业设计及算法验证场景。压缩包共68个文件含49个核心MATLAB函数.m、3个预置信道与场景数据.mat、2个备份脚本.asv、11个临时备份文件.zbak及1个README说明文档整体大小2.44MB代码采用参数化架构关键变量集中定义于parafor_BS.m等配置模块波束方向图绘制plotbeampattern.m、通信/雷达SINR计算calcommSINR.m/calRadarSINR.m、RIS功率建模calRISpower.m及凸优化可行性检验Convex Opt testfeasible.m等功能模块划分清晰注释详实便于理解算法流程与调试修改。已有70人学习下载配套案例数据可直接运行显著降低通感融合系统建模仿真门槛。 做“主动RIS辅助ISAC系统的波束成形设计与性能分析”这个课题时我在MATLAB里前前后后写了两周多的仿真代码中间推翻重来了不止一次。这个方向最近在无线通信圈子里确实火RIS和ISAC都是6G预研的热点两者叠加之后既能用智能超表面改善通感一体化系统的覆盖又能通过主动反射单元补偿路径损耗解决了被动RIS“乘性衰落”导致增益兑现不了的老大难问题。这篇文章就从我自己实际跑通这套系统仿真的角度把系统建模、波束成形设计、MATLAB实现细节和踩过的坑全部摊开讲适合正在做RIS-ISAC方向课题的研究生以及想快速把论文仿真跑起来的工程师参考。1. 项目背景与系统设计思路1.1 为什么选主动RIS做ISAC刚开始接触这个题目时我心里其实有个疑问被动RIS都研究这么多年了发射端加个智能超表面控制相位工程上更简单为什么非要引入“主动RIS”这个概念后来把两者的链路预算一算就明白了。被动RIS本质上只能调相位反射信号幅度的最大值就是1。在实际部署中基站到RIS再到用户的级联信道是两条链路相乘路径损耗会累计这就是所谓的乘性衰落问题。RIS虽然能把信号“聚”向某个方向但总链路衰减往往还是很大。用在通信里还能靠波束成形勉强补回来但用在ISAC系统里问题就大了——感知目标回波本身就是双程损耗再加上RIS的乘性损耗感知信噪比经常低到无法检测目标。主动RIS就不一样每个反射单元内部集成了放大电路反射系数可以写成 a_n e^{jφ_n}其中幅度 a_n 可以大于1相当于在反射的同时做了一级信号增强。这样一来RIS到用户的链路损耗、目标回波路径的损耗都能在反射面这个环节获得补偿。放到ISAC场景中感知回波信噪比能提升不少通信覆盖范围也能有效扩展。当然代价也很直接——每个主动单元都引入放大噪声而且有源电路带来额外功耗这个需要在建模里如实体现否则结果会过度乐观。1.2 系统架构与仿真参数设计我实现的系统模型是一个典型的下行ISAC场景基站配备 Nt 根发射天线服务 K 个单天线用户附近部署了一个含 N 个反射单元的主动RIS。基站发射的信号一路送去给用户做通信另一路经过RIS反射或直接照射到目标再经目标反射回基站接收机用于目标探测与参数估计。系统框图可以简单理解成三个角色基站、RIS、用户外加一个感知目标。基站完成发射波束成形RIS完成反射相位和幅度调控用户端只需要单天线接收。感知部分则直接复用基站接收模块这是ISAC“硬件复用”的核心思想。仿真参数的设置上我参照了常见的毫米波系统配置参数数值说明基站天线数 Nt8均匀线阵半波长间隔用户数 K2单天线用户RIS单元数 N32后续可扫16/64做对比载波频率28 GHz毫米波ISAC典型频段信道模型莱斯信道K因子10dB含视距分量基站总功率 Pt30 dBm等功率分配迭代RIS放大功率上限20 dBm主动放大模块总功率约束噪声功率谱密度-174 dBm/Hz带宽100 MHz设置完这些参数就可以开始搭信号模型了。这个阶段最容易犯的错误是忽略维度匹配我后面讲到MATLAB实现时会专门说这个问题。2. 系统建模与优化问题构建2.1 信号模型与主动RIS噪声系统建模是整个项目的地基信号模型写错后面优化做得再漂亮也白搭。我采用基带等效模型基站发射信号为 x Ws其中 W ∈ C^{Nt×K} 是发射波束成形矩阵s 是满足 E[ss^H]I 的数据流向量。定义 BS-RIS 信道 GN×Nt、RIS-User 信道 hr,kN×1、BS-User 直连信道 hd,kNt×1那么用户 k 的接收信号为y_k (hd,k^H hr,k^H Θ G) W s hr,k^H Θ zr zk其中 Θ diag(a e^{jφ_1}, ... , a e^{jφ_N}) 是RIS反射系数矩阵a 是公共放大增益φ_n 是第 n 个单元的相移。zr 是主动RIS内部放大电路引入的噪声向量每个元素方差为 σr²zk 是用户接收噪声方差为 σ²。这里有个非常关键的细节主动RIS引入的噪声跟反射系数有关。经过Θ之后泄露到用户端的噪声功率是 a²||hr,k^H diag(e^{jφ})||²σr²。这个噪声功率不再是一个常数而是会随着RIS相位和幅度变化优化时需要把它放在SINR表达式的分母里一起处理。很多初学者会把主动RIS噪声当作固定噪声加到分母这样表面上简化了实际却会得到错误的优化结果。信号模型写清楚之后感知部分采用单目标点模型。基站接收到的目标回波信号为r β b(θ) s nβ 是目标反射系数b(θ) 是取决于目标角度 θ 的回波导向向量n 是接收机噪声。感知性能用目标角度 θ 的克拉美-罗界CRB来衡量CRB越大说明参数估计越不准我们需要约束它在一个可接受范围内。2.2 优化目标、约束与算法框架优化问题需要同时兼顾通信和感知性能。通信侧的目标是最大化所有用户的频谱效率之和感知侧则把CRB作为一个约束条件强制系统在满足感知精度要求的前提下最大化通信速率。这样比较符合ISAC系统的实际工作模式——感知通常是任务底线通信在此基础上追求最优。数学上可以写成max_{W, φ, a} Σ_{k1}^K log2(1 SINR_k)s.t. Tr(WW^H) ≤ Pta² · Tr(diag(e^{jφ}) G W W^H G^H diag(e^{-jφ})) ≤ PrCRB(θ) ≤ εa ≥ 1, |φ_n|1第一个约束是基站发射功率限制第二个是主动RIS的总放大功率限制第三个是感知CRB约束。这个优化问题非凸且耦合严重变量W、φ、a相互纠缠直接联合优化几乎不可能业界常规做法是交替优化AO算法。我的算法框架分三步迭代固定φ和a优化W。这一步可以用正则化迫零RZF波束成形也可以用上行对偶注水功率分配求WMMSE解工程上RZF实现简单、性能稳定。固定W和a优化φ。此时问题变成带单位模约束的相位优化用流形优化Manopt工具箱求解复杂度比SDR低不少。固定W和φ优化a。这一步有闭式解由于目标函数关于a单调递增直接取满足功率约束的最大值即可。整体迭代一直到目标函数变化小于阈值或者达到最大迭代次数。实际跑下来这个AO框架收敛性很稳定通常在20到30次迭代内就能收敛。3. MATLAB实现信道生成与算法核心代码3.1 信道生成莱斯信道与导向矢量信道生成是MATLAB仿真里最容易被轻视却最影响结果的部分。我这里采用莱斯信道模型视距分量通过导向矢量构造。基站侧Nt天线均匀线阵的导向矢量为a_BS(θ) [1, e^{jπ sinθ}, ..., e^{jπ(Nt-1)sinθ}]^TRIS侧同理。生成BS-RIS信道G时视距分量用双方位的导向矢量外积得到非视距分量用循环复高斯随机矩阵。下面是我在项目里实际使用的信道生成函数function [G, Hd, Hr] generate_channels(Nt, K, N, Kfac_dB) % 生成BS-RIS信道G(NxNt)、RIS-User信道Hr(NxK)、BS-User直连信道Hd(NtxK) % Kfac_dB为莱斯K因子 kf 10^(Kfac_dB/10); % 随机到达/离开角度简化单径视距 theta_br pi*rand(1,N); % BS-RIS到达角 theta_bt pi*rand(1,Nt); % BS侧发射角 A_RIS exp(1j*pi*(0:N-1).*sin(theta_br)); % N x 1 导向矢量 A_BS exp(1j*pi*(0:Nt-1).*sin(theta_bt)); % Nt x 1 导向矢量 % BS-RIS信道 G_los A_RIS * A_BS; G_nlos (randn(N,Nt) 1j*randn(N,Nt))/sqrt(2); G sqrt(kf/(1kf))*G_los sqrt(1/(1kf))*G_nlos; % RIS-User信道每个用户独立生成 Hr zeros(N, K); for k 1:K theta_r pi*rand(1,N); A_r exp(1j*pi*(0:N-1).*sin(theta_r)); Hr(:,k) sqrt(kf/(1kf))*A_r sqrt(1/(1kf))*(randn(N,1)1j*randn(N,1))/sqrt(2); end % BS-User直连信道 Hd (randn(Nt,K) 1j*randn(Nt,K))/sqrt(2); end有一点必须强调这个函数里视距分量用了简化的单径模型适合算法验证。如果要做更贴近实际部署的仿真建议换成Saleh-Valenzuela多径毫米波信道模型并加入路径损耗系数。路径损耗如果不加所有信道方差都是1功率约束和噪声设置会失真。信道生成后最好逐链路归一化检查确保平均信道增益在合理范围。我曾经因为忘记除以sqrt(2)导致噪声相对功率异常结果优化出来的性能曲线整体偏移排查了很久。3.2 交替优化核心代码交替优化是整个仿真工程的主循环。我先把框架贴出来再逐个函数解释。function [W_opt, theta_opt, a_opt, se_hist] ao_design(G, Hd, Hr, Pt, Pr, sigma2, sigma2_r, max_iter, tol) [N, Nt] size(G); K size(Hd, 2); % 初始化解 theta exp(1j*2*pi*rand(N,1)); % 随机初始相位 a 1.5; % 公共放大增益初始值 W zeros(Nt,K); se_hist zeros(max_iter,1); for iter 1:max_iter % 1. 固定Theta优化W Theta a * diag(theta); Heq Hd Hr * Theta * G; % K x Nt 等效信道 alpha_reg sigma2 / Pt; % 正则化系数 W Heq / (Heq*Heq alpha_reg*eye(K)); % RZF波束成形 % 对W功率归一化到Pt W W * sqrt(Pt / trace(W*W)); % 2. 固定W和a用流形优化更新相位theta theta optimize_phase_manopt(theta, a, G, Hd, Hr, W, sigma2, sigma2_r); % 3. 固定W和theta更新a取功率约束边界 Theta_unit diag(theta); pr_ris trace(Theta_unit * G * (W*W) * G * Theta_unit); a min(a, sqrt(Pr / max(pr_ris, 1e-12))); % 计算当前频谱效率 se_hist(iter) compute_sum_rate(theta, a, G, Hd, Hr, W, sigma2, sigma2_r); if iter 1 abs(se_hist(iter) - se_hist(iter-1)) tol break; end end W_opt W; theta_opt theta; a_opt a; end相位优化这一步我用的Manopt工具箱它把单位模约束抽象成复圆流形不需要自己去处理投影和回缩写起来非常干净function theta_opt optimize_phase_manopt(theta0, a, G, Hd, Hr, W, sigma2, sigma2_r) % 在复圆流形上优化RIS相移最大化和速率 manifold complexcirclefactory(length(theta0)); problem.M manifold; problem.cost (t) -compute_sum_rate(t, a, G, Hd, Hr, W, sigma2, sigma2_r); problem.egrad (t) -compute_grad_phase(t, a, G, Hd, Hr, W, sigma2, sigma2_r); options.maxiter 100; options.verbosity 0; [theta_opt, ~] trustregions(problem, theta0, options); end这里的核心是compute_sum_rate和梯度函数。梯度计算有两种方式手推复梯度公式或者用MATLAB的符号工具箱自动求导。前期项目推进建议直接用数值梯度验证手推公式验证通过后再上梯度公式可以省去大量调试时间。我没有把完整梯度代码贴出来因为它对每个系统模型都不同但是计算和速率这个函数一定要写对。3.3 性能指标计算频谱效率与CRB频谱效率计算要严格对应信号模型。用户k的SINR表达式为SINR_k |heq_k^H w_k|² / (Σ_{j≠k} |heq_k^H w_j|² a²σr²||hr,k^H diag(e^{jφ})||² σ²)这里分母第二项就是主动RIS放大噪声注意它是关于a和φ的函数不是常数。function se compute_sum_rate(theta, a, G, Hd, Hr, W, sigma2, sigma2_r) [N, Nt] size(G); K size(Hd,2); Theta a * diag(theta); Heq Hd Hr * Theta * G; Hr_theta Hr * Theta; % K x N se 0; for k 1:K hk Heq(:,k); % 等效信道第k列 signal abs(hk * W(:,k))^2; interf 0; for j 1:K if j ~ k interf interf abs(hk * W(:,j))^2; end end ris_noise a^2 * sigma2_r * norm(Hr_theta(k,:))^2; sinr signal / (interf ris_noise sigma2); se se log2(1 sinr); end endCRB的计算相对独立。我采用单目标角度估计模型CRB是Fisher信息矩阵的逆。代码实现如下function crb compute_crb(W, target_theta, Nt, beta, sigma2) % 目标角度估计CRBW为发射波束成形矩阵 a_t exp(1j*pi*(0:Nt-1)*sin(target_theta)); % 发射导向矢量 a_dot 1j*pi*cos(target_theta)*(0:Nt-1).*a_t; % 对角度求导 R_s W*W; num a_dot * R_s * a_dot; den abs(a_dot * R_s * a_t)^2 / (a_t * R_s * a_t); J 2*abs(beta)^2/sigma2 * real(num - den); crb 1 / J; end这属于点目标角度CRB的简化标量形式对单目标场景足够用。实际项目里如果目标是多目标或需要同时估计距离和角度需要把Fisher矩阵扩展成多维再求逆。4. 性能分析收敛性与方案对比4.1 算法收敛性与复杂度交替优化的收敛性是这套算法的第一关验指标。我在仿真中记录每一轮迭代的和速率值绘制了收敛曲线。实测下来RZF波束成形加流形优化的组合通常在20轮左右就能达到稳定值。初始相位随机选择的情况下多次独立运行最终收敛点大致相同这说明算法在给定参数下陷入局部最优的波动是可控的。但是这里有个经验之谈如果初始相位选得特别差算法可能收敛到比较低的局部最优。实际项目里我采用多起点策略随机初始化10组相位各自跑完取和速率最高的一组。增加这一步骤之后基线性能大约提升了5%到10%代价是仿真时间变成10倍。对于追求较快迭代的调试阶段可以先把初始化次数降到3组正式出结果时再加大。复杂度方面每次迭代中RZF求解涉及K×K矩阵求逆复杂度是O(K³)可以忽略流形优化是主要开销每次迭代需要计算目标函数与梯度大约是O(N·Nt·K)的矩阵乘法量级。当N从32增加到128时单轮运行时间大约增加3倍整体仿真时间还能接受不需要专门做并行优化。4.2 主动RIS与被动RIS的对比这个项目最核心的成果就是主动与被动RIS的对比。我把主动RIS的公共放大增益a固定为1时就退化为被动RIS只有相位控制。同样仿真参数下两者的性能差异非常明显。在中等SNR区间主动RIS辅助的ISAC系统相比被动RIS有大约3到5 bps/Hz的和速率增益。这个增益一方面来自主动RIS放大信号本身另一方面来自它把级联信道增益抬高后波束成形端的等效信道正交性更好用户间干扰被有效压低。感知侧CRB的对比更夸张主动RIS在同等发射功率下可以把目标角度CRB降低一个数量级左右这对雷达感知任务来说是一个跨越性的提升。当然性能提升不是免费的。主动RIS每个单元都有功率放大器硬件成本和功耗远高于被动RIS。从系统设计角度如果感知精度要求不高、覆盖距离近被动RIS依然是更经济的选择只有在远距离探测或强干扰场景主动RIS的性能优势才真正值回票价。4.3 关键参数敏感性分析我把RIS单元数N从16扫到64观察性能变化。结果符合预期单元数增加时可控自由度增多波束更窄指向性更强和速率与感知CRB都同步改善。但提升逐渐饱和从32到64的增益明显小于从16到32。这意味着在真实工程中盲目堆单元数不是明智策略找到性能拐点才划算。另一个值得关注的参数是基站发射功率Pt与RIS放大功率Pr的配比。我把两者固定一个、变化另一个发现当RIS功率与基站功率比例失衡时系统性能会进入瓶颈区。一个直观的结论是主动RIS的放大能力应随着基站功率同步增加否则RIS链路会先饱和通信与感知的增益都被限制住。这个现象我建议大家在项目里画一张二维热力图非常直观。感知CRB约束的松弛度也对结果影响很大。CRB约束越紧系统被迫把更多功率分配给感知波束通信谱效下降越明显。我的做法是给CRB约束一个可调权重在固定感知任务精度要求时选择刚好满足约束的CRB阈值避免过度消耗通信资源。5. 调试实录与避坑经验5.1 维度与代数操作坑这个项目里的矩阵维度确实是重灾区。最典型的错误是把RIS相移向量theta直接当对角矩阵用某一次算等效信道时写成了Hd Hr * theta * G维度直接对不上。正确的写法是Hr * diag(theta) * G。还有一个我差点忽略的问题计算RIS功率约束时需要考虑的是G * W而不是W * G。主动RIS的输入信号是从基站侧过来的所以RIS输出功率和G*W的秩、功率分布直接相关。公式写反的话功率约束会完全错误。5.2 主动RIS噪声的建模影响我最初为了简单把主动RIS的放大噪声当作一个常数功率加到接收端结果在低SNR区间的性能曲线完全不合理——RIS单元数越多、放大倍数越大系统性能反而越差。排查之后才发现问题出在噪声建模上。主动RIS的噪声是随反射系数变化的经过相位调控之后泄露到用户方向上的噪声功率会随着相位的不同而改变不能简单等效成常数。正确的做法是像我前面代码那样把噪声项写成a²σr²||hr,k^H diag(e^{jφ})||²放在SINR分母里参与优化。修改之后在低SNR区间系统性能改善显著因为相位优化可以主动把放大噪声导向非用户方向相当于对噪声进行了空域抑制。这一点其实是主动RIS从性能潜力向实际收益转化的重要机制。5.3 信道随机性导致的结果波动这算是所有无线通信仿真都会遇到的共性问题。单次信道实现下优化结果的方差非常大尤其当用户数多、RIS单元多时不同信道快照下的和速率可能相差3到5 bps/Hz。直接拿单次结果说事很容易得出错误结论。项目中的标准做法是蒙特卡洛仿真。每次生成一组随机信道跑完整的AO优化记录和速率与CRB最后对所有实验取平均。在我的配置下至少跑200次信道实现曲线的置信区间才能收得比较窄。如果你只是想看趋势最少也要跑50次。另外建议在代码里固定随机数种子这样才能保证实验结果可复现。我之前因为忘记固定rng改了一个参数后前后结果对不上查了半天才发现是随机数流变了时间成本特别高。把rng(2024)这种种子值放在脚本开头是个好习惯。5.4 初始化策略与收敛性优化流形优化的性能对初始点敏感前文提过多起点初始化。在实际仿真中我建议把初始化次数也做成参数调试阶段设小正式实验设大。另外一个实战技巧是用被动RIS优化后的相位作为主动RIS的初始相位这样主动RIS相位优化在后续迭代中更容易收敛到高质量解。还有个细节是CRB约束的epsilon值不要设成0。感知CRB永远是一个正数把约束设成0会导致优化问题不可行迭代过程中会出现NaN。给它留一点裕量比如设为目标工作点上CRB值的1.2倍系统性能会更稳。写在最后这个项目的MATLAB实现整体不算难但细节密集。最花时间的地方不是优化算法本身而是把信号模型、噪声项、功率约束和维度匹配这些容易出错的地方逐一理清。如果你也在跑类似的RIS-ISAC仿真建议先搭一个极简的被动RISMRT的基线版本跑通框架再加入主动RIS、流形优化、CRB约束这些模块一步步往上加。模块多了之后排查问题会很痛苦有一个可以对比的基线能省下大量时间。希望这些经验能帮你在MATLAB里少踩几个坑。本文还有配套的精品资源点击获取
返回列表