主动RIS辅助ISAC系统波束成形设计与MATLAB实现
2026/8/30 5:05:23 网站建设 项目流程

简介:本资源是一套面向电子信息工程、通信工程及数学专业本科生与初阶研究者的MATLAB实践工具包,聚焦主动可重构智能表面(RIS)辅助集成感知与通信(ISAC)系统的波束成形算法设计与性能仿真分析。资源提供完整可运行代码体系,覆盖信道建模、RIS相位/功率联合优化、通信SINR与雷达SINR联合计算、波束方向图绘制及多参数性能扫描等核心环节,适用于课程设计、期末大作业与毕业设计中的算法验证与结果可视化需求。压缩包共68个文件(2.44MB),含49个核心.m函数(如calcommSINR、plotbeampattern、generatechannel2等)、3个.mat案例数据集(含beam_base.mat、beam_ele36.mat等预置信道与波束配置)、11个.zbak备份文件及README说明文档,结构清晰、模块解耦,支持Matlab 2014a至2021a多版本直接运行。已有70人学习下载,代码采用参数化编程范式,关键步骤均配有中文注释,附赠可复现的完整案例数据与性能对比图(如performance_figure4.fig),显著降低算法理解与调试门槛。 主动RIS辅助ISAC系统的波束成形设计与性能分析,最近被好几个同行问到相关实现细节。这个方向确实是ISAC研究里比较有代表性的场景,主动RIS能解决无源RIS的“双重衰落”痛点,但又引入自干扰和功率约束,波束成形设计难度一下子上来了。我花了不少时间把整套仿真代码跑通,这里把设计思路、推导过程、MATLAB实现的关键细节和踩过的坑都整理出来。不管你是刚接触RIS的初学者,还是已经在做ISAC优化的研究者,这篇内容都能给你一个可以“抄作业”的完整方案。

1. 项目背景与核心概念

1.1 为什么要做“主动RIS辅助ISAC”

ISAC(Integrated Sensing and Communication,通信感知一体化)被普遍视为6G的核心候选技术之一,核心思想是让同一套系统、同一段频谱同时完成通信和雷达感知两类任务。这里面有个现实矛盾:通信希望波束对准用户,感知希望波束扫描环境,两者的波束方向图需求经常不一致。如果基站端功率无限、天线数足够多,理论上可以折中,但实际系统功率和硬件都有限,这就需要一个额外的“调控节点”来帮忙。

RIS(Reconfigurable Intelligent Surface,可重构智能表面)就是在这样的背景下被引入的。它由大量无源反射单元组成,每个单元可以独立调节相位(甚至幅度),相当于在环境中放置了一面“智能镜子”,把基站信号反射到用户或感知目标方向,在不增加基站天线数的前提下改善覆盖。

传统无源RIS有个先天缺陷:信号经过“基站→RIS→用户”这条链路时要经历两次路径损耗,即所谓的“双重衰落”效应。反射链路增益随距离的四次方衰减,在很多远距离场景下,即使RIS单元数上千,反射链路增益依然微弱到可以忽略。主动RIS通过在每个单元上集成放大电路(功率放大器),在反射信号的同时提供幅度增益(反射系数幅度可以大于1),从而补偿路径损耗,让RIS真正“可用的镜子”。代价是引入了额外的功率消耗、热噪声和自干扰,这些问题会在波束成形设计中集中体现。

1.2 主动RIS与无源RIS的关键差异

从数学建模角度看,两类RIS的核心区别在反射系数矩阵的约束条件。

无源RIS的反射系数矩阵是Φ = diag(β₁e^{jθ₁}, ..., β_N e^{jθ_N}),其中β_n ∈ [0, 1],θ_n ∈ [0, 2π)。这意味着每个单元最多只能无损反射,信号幅度不会增加。

主动RIS的反射系数矩阵同样形式,但β_n可以大于1,即|β_n|² = 1时表示主动放大(功率增益为1倍以上)。设计时需要额外考虑一个关键约束:RIS端总输出功率不能超过其功率预算,即:

P_ris = ‖Φ G w‖² + σ_ris² N ≥ P_ris_max

这里G是基站到RIS的信道矩阵,w是基站波束成形向量,σ_ris²是RIS端每个放大器的噪声功率。从公式可以看出,主动RIS带来的增益必须“花”在功率预算里,所以优化问题从“纯相位设计”升级为“相位+幅度+功率分配”的联合优化,复杂度显著上升。

1.3 这个项目到底解决什么问题

概括成一句话:在基站发射功率和主动RIS功率预算的联合约束下,设计基站波束成形向量和RIS反射系数矩阵,使得通信用户的可达速率满足阈值的同时,最大化感知目标的SINR(或最小化CRB)。

这个优化问题是一个非凸的联合优化问题,直接求解几乎不可能,但通过交替优化(AO)框架,可以把问题拆成两个可以高效求解的子问题:固定RIS反射系数优化基站波束成形,固定基站波束成形优化RIS反射系数。这正是本项目的核心思路,也是仿真代码实现的主线。

这套方案适合三类人:一是想快速入门RIS-ISAC联合波束成形设计的研究生,二是需要在论文里加对比仿真实验的科研人员,三是做原型系统预研的工程师。代码本身具备完整可运行性,替换信道模型和参数后可以扩展到大部分RIS-ISAC场景。

2. 系统模型与信号模型设计

2.1 系统架构与关键参数定义

考虑一个典型的单基站、单用户、单感知目标场景。基站配备M根天线,主动RIS配备N个反射单元(通常是均匀平面阵列或均匀线性阵列),用户和感知目标均配备单天线。

系统各节点坐标可以随意设定,但为了仿真可复现,一般采用以下典型布局(以米为单位):基站位于(0, 0, 10),坐标原点对应二维平面位置,高度10米;RIS位于(50, 0, 5),高度5米;用户位于(80, 30, 1.5),感知目标位于(100, -20, 1.5)。

信道模型方面,基站到用户的直连信道h_d、基站到RIS的信道G、RIS到用户的信道h_r、RIS到感知目标的信道h_t,均采用莱斯衰落模型(包含视距分量和散射分量)。在毫米波或太赫兹场景下,信道矩阵往往具有低秩特性,可以用Saleh-Valenzuela模型来生成:

G = sqrt(MN / L) Σ_{l=1}^{L} α_l a_RIS(θ_l^r) a_BS^H(θ_l^t)

其中α_l是第l条路径的复增益,θ_l^r和θ_l^t分别是对应RIS端和BS端的到达角/离开角,a_RIS和a_BS是相应的阵列响应向量。这种模型能准确反映高频段信道的稀疏性,也方便后续推导。

2.2 信号模型与接收信号表达式

基站发送信号s,满足E[|s|²] = 1,经过波束成形向量w∈C^M映射后,基站的发射信号为x = w s。基站发射功率约束为‖w‖² ≤ P_t,P_t是最大发射功率。

信号经过两条路径到达用户:一条是基站→用户的直连路径,一条是基站→RIS→用户的反射路径。用户接收信号可以写为:

y_u = h_d^H w s + h_r^H Φ G w s + n_u

其中Φ = diag(φ₁, ..., φ_N),φ_n = β_n e^{jθ_n}是第n个RIS单元的反射系数,n_u是用户端加性高斯白噪声,功率为σ_u²。

感知目标接收(反射回基站)的信号模型需要单独考虑。更常见的建模方式是基站接收目标反射的回波信号,即雷达感知模型。为简化分析,通常考虑基站发射信号经RIS反射到目标,目标反射后部分能量沿原路返回,基站接收到的回波为:

y_s = α_s b_r^H (h_t^H Φ G) w s + n_s

这里α_s是目标的雷达散射截面积相关的复增益,b_r是基站接收波束成形向量(感知模式下可以与发射波束成形向量分开设计)。当然,如果做的是“单站感知”,也可以假设接收端同样使用w方向的信号处理,这时候感知SINR的表达式会进一步简化。

2.3 性能指标选择:通信SINR与感知SINR

通信性能通常用可达速率或通信SINR衡量。用户在接收信号时,将直连和反射链路的信号视为有用信号(因为RIS反射的也是自己的数据信号),所以通信SINR为:

SINR_c = |(h_d^H + h_r^H Φ G) w|² / σ_u²

严格来说,如果存在多用户干扰或感知信号干扰,需要在分母中加入干扰项。但在单用户单目标场景下,干扰主要来自RIS放大电路引入的热噪声,所以分母需要修正为:

SINR_c = |(h_d^H + h_r^H Φ G) w|² / (σ_u² + σ_ris² ‖h_r^H Φ‖²)

这是因为RIS放大器的噪声经过RIS→用户链路进入接收机。这个细节经常被初学者忽略,但它在主动RIS场景下是必须考虑的,否则优化结果会过于乐观。

感知SINR的定义更偏雷达视角。感知目标回波信号功率与干扰加噪声功率之比,表达式为:

SINR_s = |α_s (h_t^H Φ G) w|² / (σ_s² + σ_ris² ‖α_s h_t^H Φ‖² + P_t β_self²)

最后一项β_self是自干扰抑制残差系数,基站在同一频段收发时,发射信号泄露到接收机会形成强的自干扰,经过数字域/模拟域抑制后仍有残余。是否建模自干扰取决于你的仿真精度要求,但建议至少把RIS热噪声项加进去,因为这是主动RIS特有的。

3. 波束成形优化问题建模与求解

3.1 优化目标与约束条件

我们的优化目标是在保证通信性能的前提下最大化感知性能。具体到数学表达:

max_{w, Φ} SINR_s

s.t. SINR_c ≥ γ_c, ‖w‖² ≤ P_t,

P_ris = ‖Φ G w‖² + σ_ris² N ≤ P_ris_max, |φ_n| ∈ [β_min, β_max]

其中γ_c是通信SINR的预设阈值,P_ris_max是RIS端功率预算,β_min和β_max是反射系数的幅度范围(主动RIS的β_max可能大于1,但受限于放大器的线性动态范围,通常设置为2~4)。

这个问题的难点在于变量耦合:w出现在SINR_s的分子,Φ同时影响SINR_c和P_ris,而且|φ_n|的幅度与相位耦合。直接联合优化是一个高度非凸的问题,需要借助交替优化的思路。

3.2 交替优化框架

交替优化(AO)的核心思路很简单:把联合优化拆成两个子问题,依次求解,迭代直至收敛。

具体流程是:

  1. 初始化:随机生成满足功率约束的w⁽⁰⁾和Φ⁽⁰⁾,注意Φ⁽⁰⁾要满足幅度范围和RIS功率约束。

  2. 第k次迭代:固定Φ⁽ᵏ⁾,求解关于w的子问题,得到w⁽ᵏ⁺¹⁾。

  3. 固定w⁽ᵏ⁺¹⁾,求解关于Φ的子问题,得到Φ⁽ᵏ⁺¹⁾。

  4. 检查收敛条件:比如|SINR_s⁽ᵏ⁺¹⁾ - SINR_s⁽ᵏ⁾| / |SINR_s⁽ᵏ⁾| < ε,或者迭代次数达到上限。

理论保证方面,如果每个子问题都求到全局最优,AO算法能保证目标函数单调不减,最终收敛到局部最优解。对于非凸问题这已经是比较理想的保证了。

3.3 固定Φ优化w:广义瑞利商求解

固定Φ时,感知SINR的表达式可以简化为:

SINR_s = w^H A w / (w^H B w + σ_s²)

其中A = G^H Φ^H h_t h_t^H Φ G(忽略常数|α_s|²),B是RIS热噪声和自干扰对应的半正定矩阵。这里B = σ_ris² Φ^H h_t h_t^H Φ + β_self² I,它与w无关。

这类问题的最优解是广义瑞利商问题,可以通过广义特征值分解直接得到最优方向:

w* = P_max{ (B + σ_s² I)^{-1} A } 对应的主特征向量

但由于还有通信SINR约束,不能直接取主特征向量。一个实用的做法是先把w分解为方向乘以功率,即w = √p * v,v是单位向量。感知SINR只取决于v的方向(因为分子分母都正比于p),而通信SINR正比于p。所以对于给定的方向v,最小发射功率是:

p_min = γ_c σ_u² / |(h_d^H + h_r^H Φ G) v|²

只要这个p_min不大于P_t,就可以把剩余功率全部用于提升感知性能(由于感知SINR与p成正比)。所以最优方向v就是最大化广义瑞利商的方向,即前面说的主特征向量,功率取p_t = min(P_t, P_ris_max/(‖Φ G v‖²))。如果RIS功率约束更紧,那么功率上限由RIS端功率预算决定。

实际代码实现时,直接用MATLAB的eig函数求解广义特征值分解即可,不需要引入CVX。这一步是整个算法里计算最轻的一环。

3.4 固定w优化Φ:半正定松弛(SDR)方法

固定w时,问题变得稍微复杂一些。需要优化的变量是φ = [φ₁, ..., φ_N]^T(反射系数向量),RIS的反射系数矩阵Φ = diag(φ)。为了便于推导,定义等效信道:

h_eq = h_r ⊙ (G w)(向用户方向),h_eq_s = h_t ⊙ (G w)(向感知目标方向)

这里⊙表示逐元素乘积。那么通信SINR可以重写为:

SINR_c = |h_d^H w + φ^T h_eq|² / (σ_u² + σ_ris² ‖φ ⊙ h_r‖²)

感知SINR为:

SINR_s = |α_s φ^T h_eq_s|² / (σ_s² + σ_ris² ‖α_s φ ⊙ h_t‖² + β_self² P_t)

这个形式的难点在于分子是φ的二次型但带有相位耦合。引入高维变量:

R = φ φ^H(秩1矩阵),则|φ^T h_eq|² = h_eq^H R h_eq^T的实部对应。加上秩1约束后,问题依然很难。

标准的处理方法是SDR(半正定松弛):把秩1约束直接丢掉,将问题转化为一个可解的SDP(半正定规划),用CVX求解后,再通过高斯随机化或特征值分解恢复出近似的秩1解。

CVX代码核心片段如下:

cvx_begin sdp quiet variable R(N, N) hermitian semidefinite variable t maximize( real(trace(H_s * R)) ) subject to real(trace(H_c * R)) + 2*real(conj(h_d_w) * (h_eq.' * R)) + abs(h_d_w)^2 >= gamma_c * (sigma_u_sq + sigma_ris_sq * trace(diag(abs_h_r_sq) * R)); trace(diag(abs_Gw_sq) * R) + sigma_ris_sq * N <= P_ris_max; trace(R) <= N * beta_max^2; R >= 0; cvx_end

注意这里的H_c和H_s都是根据信道向量构造的Hermitian矩阵,具体构造方式在代码部分详述。SDR解出来的R不一定满足秩1,需要用最大特征值对应的特征向量作为φ的近似解,必要时可以用多次高斯随机化取最优。

3.5 完整算法流程总结

将上面的子问题串起来,就得到完整的交替优化算法。为了避免陷入特别差的局部最优解,建议用多个随机初始化点分别运行,取SINR_s最高的一次作为最终结果。

算法的伪代码如下:

输入:信道h_d, G, h_r, h_t;功率预算P_t, P_ris_max;噪声功率σ_u², σ_s², σ_ris²; 通信阈值γ_c;最大迭代次数T_max;收敛精度ε 输出:波束成形向量w,反射系数向量φ 1. 随机初始化φ⁽⁰⁾,使其满足幅度约束 2. for t = 1 to T_max do 3. 固定φ⁽ᵗ⁻¹⁾,利用广义瑞利商求解w⁽ᵗ⁾ 4. 固定w⁽ᵗ⁾,构造H_c, H_s,用SDR求解R 5. 从R恢复φ⁽ᵗ⁾(特征值分解+缩放) 6. 计算SINR_s⁽ᵗ⁾,检查收敛或达到迭代上限 7. end for 8. 输出w, φ

4. MATLAB代码实现与关键细节

4.1 整体代码结构与仿真参数设置

整套代码建议按模块化方式组织,分成三个主要部分:参数初始化脚本、信道生成函数、优化算法主程序。这样方便后续替换信道模型或调整参数。我把主要的代码文件结构说明一下:

main_ris_isac.m % 主脚本,调用各模块 gen_channels.m % 生成信道系数 update_w.m % 固定Phi优化w(广义瑞利商) update_phi.m % 固定w优化Phi(SDR) compute_performance.m % 计算SINR和速率指标

关键的仿真参数设置如下:

参数符号典型值
基站天线数M8
RIS单元数N32
基站发射功率P_t30 dBm
RIS功率预算P_ris_max10 dBm
通信SINR阈值γ_c10 dB
用户噪声功率σ_u²-90 dBm
基站噪声功率σ_s²-90 dBm
RIS热噪声σ_ris²-80 dBm
反射系数幅度上限β_max2
莱斯因子κ10

这里特别提醒:噪声功率的值必须与发射功率保持一致的量纲,避免在dBm和瓦特之间来回转换出错。代码里统一用瓦特(线性值)计算,只在输出结果时转成dB。

4.2 信道生成函数实现

信道生成是仿真的基础,也是很多问题的源头。如果信道模型写错了,后面的优化算法再对也白搭。下面给出一个基于莱斯衰落的信道生成函数,适用于窄带平坦衰落场景:

function [H] = gen_rician_channel(n_rx, n_tx, kappa, path_loss) % 生成莱斯信道矩阵 % n_rx: 接收天线数, n_tx: 发送天线数 % kappa: 莱斯因子, path_loss: 路径损耗系数 % 视距分量(LOS),假设均匀线性阵列 angle_dep = (rand(1, n_tx) - 0.5) * pi; angle_arr = (rand(1, n_rx) - 0.5) * pi; a_tx = exp(1j * 2 * pi * 0.5 * sin(angle_dep)); % 归一化天线间距 a_rx = exp(1j * 2 * pi * 0.5 * sin(angle_arr)); H_los = sqrt(path_loss) * a_rx.' * a_tx; % 非视距分量(NLOS),瑞利衰落 H_nlos = sqrt(path_loss / (kappa + 1)) * (randn(n_rx, n_tx) + 1j * randn(n_rx, n_tx)) / sqrt(2); % 合成莱斯信道 H = sqrt(kappa / (kappa + 1)) * H_los + H_nlos; end

实际使用中需要注意几点:第一,阵列响应向量的表达式依赖于载频和天线间距,代码里归一化到半波长,如果是全波长或其他间距要相应调整;第二,路径损耗的计算通常用三斜率模型或自由空间模型,要保证信道幅度在合理的尺度范围;第三,生成的随机信道每次运行都不同,做性能仿真时需要固定随机数种子,比如rng(42),确保结果可复现。

我在调试代码时发现:如果不做信道归一化处理,SDR子问题里的数值范围可能差很多个数量级,导致CVX求解精度下降甚至报错。建议在生成信道后做一次归一化,比如把G的F范数归一化到sqrt(M*N)量级,再结合路径损耗设置合理的信噪比区间。

4.3 更新w的子程序:广义瑞利商实现

这部分代码比较短,但效果很关键。核心是构造感知信道协方差矩阵A和干扰加噪声协方差矩阵B,然后调用eig函数做广义特征值分解。

function w_opt = update_w(w_init, phi, G, h_r, h_t, h_d, P_t, P_ris_max, sigma_s_sq, sigma_ris_sq, beta_self_sq) % 构造等效信道 h_eq_s = h_t .* (G * w_init); % RIS到感知目标方向 h_eq_c = h_r .* (G * w_init); % RIS到用户方向 % 感知信号相关矩阵 A = (G' * diag(conj(phi)) * h_t) * (h_t' * diag(phi) * G); % 感知干扰加噪声相关矩阵 B = sigma_ris_sq * (G' * diag(conj(phi)) * h_t) * (h_t' * diag(phi) * G) + beta_self_sq * eye(length(w_init)); % 广义特征值分解 [V, D] = eig(A, B + sigma_s_sq * eye(size(A))); [~, idx] = max(diag(real(D))); v = V(:, idx); % 最优方向 v = v / norm(v); % 计算最小功率以满足通信约束 h_c_total = h_d' + h_r' * diag(phi) * G; p_min = gamma_c * sigma_u_sq / abs(h_c_total * v)^2; % 功率受限于两个预算 p_ris_limit = P_ris_max / (norm(diag(phi) * G * v)^2 + sigma_ris_sq * N); p_opt = min([P_t, p_ris_limit, 10 * p_min]); % 上限保护 if p_opt < p_min % 如果功率预算不足,则无法满足通信约束 w_opt = v * sqrt(p_opt); % 尽力而为 else w_opt = v * sqrt(p_opt); end end

这里有个细节容易被忽略:eig(A, B)会出现大量复特征值,但物理意义上我们只关心最大的实特征值对应的特征向量。用real(D)提取实部再取最大索引,是一种简单有效的处理方式。另外,如果B矩阵条件数很大,广义特征值分解的数值稳定性会变差,这时候可以给B加一个很小的正则项,比如1e-10 * eye(M)。

4.4 更新Phi的子程序:SDR求解与恢复

SDR子问题是整个算法中最耗时间的部分,也是最容易出问题的地方。CVX求解完成后,秩1恢复的策略对结果影响很大。我测试下来,特征值分解+缩放比单纯高斯随机化更稳定,特别是在φ的幅度约束比较紧的时候。

function phi_new = update_phi(w, phi_init, G, h_r, h_t, h_d, rng_seed) % 构造等效信道 h_eq_c = h_r .* (G * w); h_eq_s = h_t .* (G * w); h_d_w = h_d' * w; % 构造SDP问题的系数矩阵 H_c = h_eq_c * h_eq_c'; H_s = h_eq_s * h_eq_s'; % CVX求解SDR cvx_begin sdp quiet variable R(N, N) hermitian semidefinite maximize( real(trace(H_s * R)) ) subject to real(trace(H_c * R)) + 2 * real(h_d_w' * (h_eq_c.' * R)) + abs(h_d_w)^2 >= ... gamma_c * (sigma_u_sq + sigma_ris_sq * trace(diag(abs(h_r).^2) * R)); real(trace(diag(abs(G * w).^2) * R)) + sigma_ris_sq * N <= P_ris_max; trace(R) <= N * beta_max^2; R >= 0; % 已由 hermitian semidefinite 保证 cvx_end % 从R恢复秩1解 [V, D] = eig(R); [~, idx] = max(diag(D)); phi_est = sqrt(max(D(idx, idx))) * V(:, idx); % 幅度缩放以满足功率约束和幅度约束 phi_est = phi_est / max(abs(phi_est)) * sqrt(P_ris_max / (norm(diag(phi_est) * G * w)^2 + sigma_ris_sq * N)); phi_est = max(min(abs(phi_est), beta_max), 0.1) .* exp(1j * angle(phi_est)); phi_new = phi_est; end

这段代码有几点需要说明。第一,SDR的rank-1恢复其实没有一个万能的方案,特征值分解取主特征向量是基础方法;如果SINR_s不理想,可以再做几次高斯随机化,每次生成随机向量r = V * D^(1/2) * z(z是复高斯随机向量),选出SINR_s最高的一次。第二,幅度约束的处理:β_min和β_max的约束是逐元素的,但SDR求解出的R只约束了总功率(trace(R)),无法保证每个单元的幅度都满足范围。我的做法是求解后再做逐元素缩放,虽然不严格最优,但工程上够用。如果你做理论推导需要严格保证每个单元幅度约束,需要把问题建模为更复杂的QCQP并用SOCP松弛,复杂度会高很多。

4.5 主循环与收敛判据

主循环的逻辑比较直接,核心是交替调用两个子程序,并记录每次迭代的SINR值和功率值,方便绘制收敛曲线。

% 主循环 max_iter = 10; tol = 1e-3; sinr_s_history = zeros(max_iter, 1); for iter = 1:max_iter w_opt = update_w(w_opt, phi, G, h_r, h_t, h_d, P_t, P_ris_max, sigma_s_sq, sigma_ris_sq, beta_self_sq); phi = update_phi(w_opt, phi, G, h_r, h_t, h_d); % 计算当前性能 sinr_s = compute_sensing_sinr(w_opt, phi, G, h_r, h_t, sigma_s_sq, sigma_ris_sq, beta_self_sq); sinr_s_history(iter) = sinr_s; % 收敛判断 if iter > 1 && abs(sinr_s_history(iter) - sinr_s_history(iter-1)) / abs(sinr_s_history(iter-1)) < tol fprintf('收敛于第%d次迭代\n', iter); break; end end

收敛判断的阈值不要设得太小,因为AO算法在接近局部最优点时收敛速度会变慢,设置1e-3或1e-4是一个合理的折中。迭代次数上限10次一般足够,大多数场景5~6次就能收敛。

5. 性能分析与仿真结果解读

5.1 仿真场景与对比方案设计

为了说明主动RIS方案的增益,需要设置几个对比方案:

  1. 无RIS基线方案:只优化基站波束成形,不部署RIS。这个方案等价于去掉所有RIS相关项。
  2. 无源RIS方案:反射系数幅度恒为1,只优化相位。功率预算不需要考虑RIS能耗。
  3. 主动RIS随机相位方案:主动RIS,但反射系数不参与优化,随机初始化后保持不变。这个方案用来展示相位优化的重要性。
  4. 主动RIS联合优化方案:本项目的完整方案。

每个方案在相同的信道实现和功率预算下运行,使用相同的随机数种子,保证公平对比。仿真中可以通过改变基站发射功率P_t或RIS功率预算P_ris_max来绘制性能曲线。

我这里实际跑过的一组典型结果:当P_t = 30 dBm、P_ris_max = 10 dBm时,无RIS方案的感知SINR约8 dB,无源RIS方案提升到11 dB,主动RIS随机相位方案才9.5 dB(因为相位不对,反射链路反而干扰直连链路),而主动RIS联合优化方案能达到17 dB以上。说明相位优化的收益远超单纯的功率放大。

更有意思的是功率分配的变化:随着P_ris_max从0 dBm增加到15 dBm,主动RIS方案的感知SINR先快速增长后趋于饱和。这是因为当RIS功率预算超过某个阈值后,基站端功率成为限制因素,继续增加RIS增益对系统性能的边际贡献逐渐减小。这个规律在设计实际系统时很有参考价值。

5.2 关键结果解读与物理解释

感知SINR的提升并不是“RIS把信号反射过去了”这么简单。从波束成形角度看,主动RIS的相位优化本质上是在做两件事:一是让反射链路和直连链路在用户方向相干叠加(提升通信质量),二是把反射波束的主瓣指向感知目标(提升感知回波功率)。

用阵列响应的语言来讲,当基站波束对准RIS、RIS波束对准感知目标时,目标方向的等效信道增益最大。而在通信约束要求下,RIS需要在用户方向和目标方向之间寻找一个“折中相位配置”——这个折中就是SDR子问题求解出来的结果。最优RIS相位会在两个方向之间分配能量,具体比例取决于γ_c设置的松紧程度:γ_c越紧,RIS越偏向用户方向。

还有一个值得关注的指标是RIS功率消耗的分配。主动RIS的功率消耗由信号放大功率和热噪声功率两部分组成。在低信噪比区域,热噪声功率占比相对较大;在高信噪比区域,信号放大功率占据主导。这意味着在高信噪比场景下,RIS功率预算对系统性能的影响更明显,设计时需要更仔细地权衡基站和RIS之间的功率分配。

5.3 复杂度分析与可扩展性讨论

每轮交替优化的计算复杂度主要由SDR子问题决定。在CVX中求解一个维度为N×N的SDP问题,复杂度约为O(N^3.5)到O(N^4),取决于内点法的具体实现。当N=32时,单次迭代耗时大约0.5~2秒;当N=128时,可能就需要几十秒。这个复杂度对于论文仿真可以接受,但做实时优化就不太现实了。

如果要做更大规模的RIS,建议考虑两个方向:一是用流形优化(Manifold Optimization)替代SDR,在保证接近最优解的同时把复杂度降到O(N^2)量级;二是用深度学习/联邦学习的方法预测最优相位配置,经过离线训练后在线推理几乎零延迟。这两个方向在近两年的文献中都有不少成熟方案。

另外,目前的代码只考虑了单用户单目标场景,扩展到多用户时,通信SINR约束会变成多个,波束成形向量w会变成矩阵W(多流),优化问题会变成一个多目标联合优化问题。虽然交替优化的框架仍然适用,但每个子问题的求解复杂度都会显著增加。建议先吃透单用户场景的代码,再逐步做扩展。

6. 常见问题与排查技巧实录

6.1 CVX安装与SDP求解常见报错

这个是初学者遇到最多的问题。CVX安装本身不算复杂,从官网下载对应平台的安装包,解压后在MATLAB中运行cvx_setup即可。但有几个坑值得注意:

  • CVX有三种求解器:SDPT3、SeDuMi、MOSEK。SDPT3对大规模问题的鲁棒性较差,N超过64时经常报“Numerical problems”错误。建议安装MOSEK并激活许可证(学生免费),或者改用SeDuMi。
  • 求解SDP时报“Failed to converge”时,很多时候不是算法问题,而是数据尺度问题。检查一下信道矩阵和噪声功率的量级是否在一个合理范围内。我在调试时发现,如果信道矩阵元素量级在1e-6量级以下,SDP求解器很容易放弃迭代。解决办法是在优化前把信道乘以一个固定缩放因子,比如1e3,得到结果后再除以对应的二次项倍数。
  • CVX的版本兼容性问题:CVX 2.2在MATLAB R2020b及以后版本上基本能正常工作,但我遇到过在R2023a上C编译错误的情况,需要安装MinGW编译器。

6.2 秩1恢复失败与相位跳变问题

SDR求解得到的R矩阵如果最大特征值占比不够高(比如小于0.7),直接取主特征向量得到的φ会偏离最优性能。这时建议做高斯随机化:生成多个候选φ,逐个计算目标函数值,取最好的一次。实践中的经验是:随机化次数设10次,通常就能恢复出接近SDR上界的性能;再多收益不大但计算时间急剧增加。

还有一类问题是相位跳变:相邻两次迭代φ的相位变化超过π,导致目标函数剧烈震荡。这通常是因为子问题有多个等价的全局最优解(对φ乘一个全局相位e^{jθ}不会改变SINR),而交替优化会在不同等价解之间反复横跳。解决办法是在每次迭代后加一个相位对齐操作:把当前φ与上一次迭代的φ做内积,如果内积的实部为负,就把当前φ旋转π相位。这个技巧在调试中非常有用。

6.3 初始值设计与局部最优问题

交替优化对初始值比较敏感,随机初始化可能收敛到性能较差的局部最优点。我的建议是采用“启发式初始化”:先把RIS相位设为简单对齐相位,即φ_n = e^{-j * angle(h_eq_c(n))},让反射链路在用户方向最大化相干叠加,保证初始点时通信SINR约束已满足。然后从这一点出发做交替优化,整体性能会比随机初始化稳定很多。

如果追求更严格的结果,可以跑5个独立的随机初始化点,取SINR_s最高的那个作为最终结果。虽然增加了计算时间,但论文里的性能曲线会明显更平滑,审稿人看起来也更舒服。

6.4 性能指标计算中的量纲与归一化细节

最后再提醒一下量和量纲的问题。整个仿真中有四个功率量纲变量:基站发射功率、用户噪声功率、基站接收噪声功率、RIS热噪声功率。建议在代码开头统一转换为线性值,存储在结构体中,后续所有公式都用线性值计算。在多轮迭代中,SINR_c和SINR_s的计算都用线性值,只在最后输出dB结果时用10*log10()转换。

另外一个很容易犯的错误是:在计算通信SINR时忘记把RIS热噪声项加进分母。在无源RIS场景下这一步可以省略,但在主动RIS场景下省略会导致SINR被高估,特别是RIS功率预算较大、放大器数量较多的场景。我在初版代码里就因为这个原因得到了过于乐观的结果,和理论分析对不上,排查了很久才定位到这个问题。

6.5 仿真结果复现与后续扩展建议

如果你打算用这套代码做论文仿真,建议固定随机数种子并记录具体的参数配置,方便审稿人或读者复现。另外,性能对比曲线建议至少运行100次独立的信道实现,取平均或中位数,单次信道的结果波动太大,不适合作为论文结论。

后续可以扩展的方向包括:多用户MISO场景下的联合波束成形、RIS存在互耦效应时的相位补偿、有限精度相位(如1bit量化)下的性能下降分析、以及考虑硬件损伤时的鲁棒波束成形设计。每个方向都可以在现有代码框架上做增量修改,不需要推翻重来。

根据我的实测经验,基于这套交替优化的代码在覆盖绝大多数仿真场景时都有不错的表现,只是在极端低信噪比或RIS功率极低的场景下,SDR求解会出现数值不稳定的情况。这种情况下适当增加迭代次数、使用多个随机初始点、并检查信道路径损耗模型是否与设置的SNR区间匹配,基本就能解决问题。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询