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

ISAC多域优化:电磁成形与网络协作的交替迭代框架

ISACIntegrated Sensing And Communication通信感知一体化最近在无线通信圈子里热度一直没下来过尤其到了5G-A和6G预研阶段几乎每个做物理层和网络层的团队都在往这个方向靠。说白了ISAC的核心诉求就是让一套系统、一份频谱、一组硬件同时干两件事既给用户传数据又像雷达一样感知周围环境。这个项目我前后折腾了大概两个月最后搭出来一套从电磁成形到网络协作的多域优化框架配套MATLAB仿真代码跑通了全流程。今天把整个设计和实现过程拆开讲一遍包括每个决策背后的考虑、踩过的坑、调参的经验希望对正在做类似方向的人有帮助。先明确一下这套框架解决什么问题。单点做ISAC其实有不少现成方案比如在OFDM符号里插入感知训练序列或者设计双功能波形同时兼顾通信和雷达指标。但一旦把尺度放到多基站、多用户的网络层面事情就变复杂了——每个基站的波束成形不仅影响本小区的通信用户和感知目标还会对邻区产生干扰。这时候如果只做单点波形优化网络整体性能天花板非常低。所以这套框架的思路是把ISAC系统拆成两个域来联合优化分别是电磁成形域负责波形级设计和网络协作域负责基站间协同和资源分配再通过交替迭代把它们拧在一起。以下是完整的项目拆解、理论建模、代码实现和问题排查记录。1. 项目背景与整体设计思路1.1 ISAC到底在解决什么问题先聊聊ISAC本身。过去几十年通信和雷达是两个完全分开的体系通信系统追求频谱效率和吞吐量雷达系统追求探测精度和目标参数估计性能。两者各用各的频段、各用各的硬件、各走各的协议栈。但问题在于无线频谱是稀缺资源硬件成本也在逐年上升如果能在同一套设备上同时实现通信和感知等于直接省下一套系统的开销。ISAC最早被关注是在5G阶段真正大规模讨论是进入6G研究之后。学术界和工业界给它定了不少目标比如通感融合、感知辅助通信、通信辅助感知等等。从物理层来看ISAC最核心的挑战在于同一份发射波形既要保证通信用户能解出数据对应通信性能指标比如SINR、速率又要保证感知目标能被准确探测对应感知性能指标比如CRB、检测概率。这两个目标在资源上往往是冲突的——功率就那么多频带就那么多如何分配、如何设计波束方向就是多域优化存在的意义。1.2 为什么是多域优化而不是单点设计刚开始动手做这个项目的时候我也想过走捷径直接把已知的通信波束成形算法和雷达波形设计方法组合一下先通信后感知两个步骤各自最优。做完初版仿真后发现问题很明显——性能曲线很难看尤其是在多基站场景下互相干扰把增益吃掉了一大截。原因在于通信和感知之间存在域的隔阂。单点优化只关注一个基站、一个时刻、一个目标但真实系统里一个基站发射的信号会同时影响多个通信用户和多个感知目标包括本小区和邻区的基站之间也有协作关系比如协调波束方向、分配功率、共享感知结果。这种情况下必须把问题拆成不同的域来建模再把域间的耦合关系显式处理掉才能得到全局意义上的好解。多域优化框架的典型分层是电磁成形域做波形级设计也就是发射波束成形矩阵、功率分配、波形参数波形时长、带宽、载波数等目标是让发射信号在空间上既覆盖通信用户、又照射感知目标。网络协作域做系统级设计也就是多基站间的协作模式、资源块调度、用户关联、功率预算分配目标是避免小区间干扰、挖掘协作增益。两个域不是孤立的——波束成形决定了每个基站的干扰图案网络协作决定了每个基站能用的功率和频带。所以这个项目的核心方法论就是交替优化Alternating Optimization, AO在电磁成形域和网络协作域之间来回迭代让两边逐步收敛到一个联合优解。1.3 适用场景与项目目标这套框架主要面向多基站ISAC网络场景具体点说就是在l个宏基站或小基站组成的区域里每个基站挂载多天线阵列同时服务k个单天线通信用户并探测d个感知目标。目标函数是系统级通信速率和感知能力的加权组合通过调整波束成形和功率分配来逼近性能边界。这套方法适合谁参考如果你在做6G通感一体化相关研究或者正在处理多小区MIMO波束成形的联合优化问题再或者你的课题涉及雷达通信频谱共享那这套框架的思路和代码可以直接拿过来改。如果你是刚接触ISAC的新手这篇文章也会帮你把通感一体化的建模、求解和仿真流程理顺。2. 电磁成形域从波形设计到波束调优2.1 电磁成形域的核心指标设计电磁成形域优化直接对信号波形做文章是整个框架物理层面的基础。在ISAC系统里同一个发射信号要同时承担通信和感知两个任务所以首先得定义清楚怎么衡量通信性能和感知性能。通信侧最常用的是用户的信干噪比SINRSignal to Interference plus Noise Ratio。这个指标直接反映用户接收信号的质量底噪和干扰一大SINR就掉速率自然上不去。在ISAC场景里感知信号对通信用户来说其实是额外的干扰源——基站为了感知目标可能在某个方向上打了很强的波束这个波束如果扫到通信用户用户SINR就会恶化。所以在电磁成形域需要把通信用户的SINR约束做成硬约束或者放进目标函数里加权。感知侧常用指标包括雷达的克拉美-罗界CRBCramér-Rao Bound、互信息MI或者信干噪比SINR。CRB是对目标参数估计误差的下界物理含义是无论用什么无偏估计器目标距离/角度/速度的估计方差都不可能小于这个值。所以CRB越小感知精度越高。这里我做一个简化处理把感知性能目标写成目标处波束增益或CRB的形式跟通信SINR统一到一个优化框架里。2.2 波束成形优化问题的建模电磁成形域的核心优化变量是基站的发射波束成形向量。假设某个基站有N根发射天线服务K个用户则用户k的接收信号为y_k h_k^H w_k s_k Σ_{j≠k} h_k^H w_j s_j z_k其中h_k是用户k到基站的信道向量w_k是基站分配给用户k的波束成形向量s_k是数据信号z_k是噪声。接收端对用户k的SINR为SINR_k |h_k^H w_k|² / (Σ_{j≠k} |h_k^H w_j|² σ²)感知目标处如果基站发射信号经过目标反射回来接收信号强度取决于目标方向的天线增益。令a(θ_d)为目标方向的导向矢量则该方向上的波束发射功率为|a(θ_d)^H W|²_F其中W是所有波束成形向量组成的矩阵。这个值越大表明发射能量越集中到目标方向感知能力越强。那么电磁成形域优化问题可以写成maximize Σ_k R_k μ · Σ_d P_d subject to SINR_k ≥ γ_k, ∀k Σ_k ||w_k||² ≤ P_max其中R_k是用户速率P_d是目标方向发射功率μ是感知性能加权系数γ_k是用户最低SINR要求P_max是基站最大发射功率。这个优化问题本质上是非凸的因为目标函数里有SINR这样的分式形式还有多个变量之间的乘积耦合。直接用常规凸优化工具求解会非常困难。项目里我采用的是半定松弛SDRSemidefinite Relaxation方法做处理。2.3 为什么用SDR求解SDR的思想说起来不复杂把二次型的优化问题通过引入秩1半定矩阵W_k w_k w_k^H转化成一个以矩阵为变量的半定规划问题。原本对w_k的非凸约束变成对W_k的线性约束加上W_k半正定和秩1约束。去掉秩1约束后问题就变成了凸的半定规划SDPSemidefinite Programming可以用CVX等工具箱高效求解。当然松弛之后求出来的W_k极大概率不是秩1的需要做秩1恢复常见方法是取最大特征值对应的特征向量或者用高斯随机化Gaussian randomization来近似。这一步是电磁成形域里最容易出错的地方后面第五部分会单独讲。SDR的好处在于它能在一个多项式时间内给出一个接近全局最优的上界而且算法成熟MATLAB里CVX工具箱封装得很好写起来几十行代码就能搞定。缺点也很明显——大规模天线阵列下矩阵维度太大求解速度慢而且秩1恢复存在一定的随机性需要多次随机化取最优结果。3. 网络协作域从单点优化到联合调度3.1 资源分配与功率控制电磁成形域做完之后得到的是每个基站独立的波束成形方向和功率分配这时候还没有考虑基站之间的协作。网络协作域要解决的问题是在多基站共存的场景下如何协调各基站的资源使全局性能最优。这里有两层意思。第一层是功率资源分配。每个基站的功率预算P_max是固定的但基站之间可以协调各自的实际发射功率比如让感知任务重的基站多分点功率让通信负载高的基站也得到相应资源。这个可以用一个全局功率分配向量p [p_1, p_2, ..., p_B]来表示每个元素是基站b的发射功率上限。第二层是用户调度与资源块分配。在多用户场景里不同用户可能在不同频段上被服务基站可以决定在哪个时频资源块上给哪个用户发数据。这个在频域上做资源调度可以避免同频干扰。对于ISAC系统还有一个额外的自由度感知任务需要专门的感知波束这些波束也占用发射功率和带宽。所以网络协作域的本质是在通信用户集合和感知目标集合之间做资源调剂。3.2 多基站协作的耦合关系如果只是各自独立做功率分配那其实谈不上协作。真正的协作体现在对耦合干扰的显式建模上。在多基站ISAC场景里基站1发射的信号不仅服务自己小区的用户还会干扰基站2的用户同时它的感知波束可能照射到基站2的覆盖区域。这时候基站1的功率决策会影响基站2的通信和感知性能。类似一个公共资源池的问题——每个基站都在占用网络级的干扰预算。考虑干扰后的全局用户SINR为SINR_k p_{b(k)} |h_{b,k}^H w_k|² / (Σ_{j≠k} p_{b(j)} |h_{b(j),k}^H w_j|² σ²)注意这里的信道下标h_{b,k}表示基站b到用户k的信道b(j)是服务用户j的基站。也就是说用户k受到的干扰来自所有其他基站服务的所有其他用户。基站间协作的目标就是要选择一个功率分配向量p使得所有用户的SINR都满足要求同时各个基站都能完成感知任务。这个网络级问题同样是典型非凸问题而且变量维度比电磁成形域更大。我采用的解法是先固定波束成形来自电磁成形域的输出把功率分配问题转化成几何规划GPGeometric Programming求解。GP是一类可以被高效求解的非线性优化问题它的标准形式里允许目标函数和约束里出现单项式monomial和多项式posynomial结构而SINR约束恰好能通过变量代换转成这种形式。3.3 交替优化框架两个域怎么玩起来两个域的变量在物理含义上是不同的电磁成形域的变量是波束向量网络协作域的变量是基站功率和调度指示。它们之间又互相依赖——功率变了最优波束方向也会变波束方向变了干扰图案也就变了功率分配的可行域也随之改变。这正是交替优化AO框架的用武之地。整个算法流程是初始化随机生成基站波束成形矩阵设置功率分配为均匀分配。循环迭代 a. 固定功率分配在电磁成形域求解SDR问题得到新的波束成形向量 b. 固定波束成形在网络协作域求解GP问题得到新的功率分配向量 c. 计算联合性能指标如果两次迭代的目标函数值之差小于阈值则停止否则回到步骤a。输出最终波束成形矩阵和功率分配向量。这个迭代框架的优点在于两个子问题都是可解的凸优化或准凸问题每次迭代的目标函数值非减如果目标函数设计得当最终收敛到一个局部最优解。后面我实际跑下来确实能看到目标函数值随迭代次数单调上升并稳定收敛说明框架的数学性质是可靠的。4. MATLAB代码实现的关键环节4.1 代码整体结构整套仿真代码基于MATLAB R2022b编写依赖CVX工具箱推荐使用CVX 2.2版本搭配SDPT3或Mosek求解器。代码结构上分了四个模块main_ISAC_AO.m主入口脚本负责系统参数设置、初始化、调用各模块并输出结果图表。init_system.m初始化系统参数包括基站位置、用户位置、感知目标位置、信道生成、天线阵列设置。opt_beamforming.m电磁成形域优化内部调用CVX求解SDR问题包含秩1恢复逻辑。opt_power_allocation.m网络协作域优化内部调用CVX求解几何规划问题。下面逐个模块说关键实现。4.2 系统初始化与信道建模系统参数我设成了这样B 3个基站可以改成更多每个基站配备N 8根发射天线均匀线阵ULA服务K 6个用户每个基站2个探测D 3个感知目标。载波频率设为28GHz带宽100MHz基站最大发射功率P_max 1W30dBm噪声功率谱密度-174dBm/Hz。信道生成部分用标准的毫米波多径信道模型function H generate_channels(B, K, N, params) % B: 基站数量, K: 用户数量, N: 天线数量 % 输出H: B*K个信道向量每个是N*1 H cell(B, K); for b 1:B for k 1:K % 角度域生成用户分布在基站120度扇区内 theta (rand-0.5) * 2 * pi / 3; % 阵列导向矢量ULA半波长间距 a exp(1j * pi * (0:N-1). * sin(theta)) / sqrt(N); % 路径增益距离相关瑞利衰落 dist norm(params.bs_pos(b,:) - params.user_pos(k,:)); path_loss 10^(-(32.4 20*log10(params.fc/1e9) 20*log10(dist/1e3)) / 20); fading (randn 1j*randn) / sqrt(2); H{b,k} path_loss * fading * a; end end end这里注意几点毫米波信道稀疏性很强我在代码里简化为视距主导的单径模型真实场景里如果有反射径可以叠加几条不同角度的路径分量。路径损耗模型用了5G NR标准的自由空间扩展形式如果仿真的是Sub-6G频段参数需要调整。感知目标的导向矢量类似function A generate_steering_matrix(N, target_angles) % target_angles: 感知目标相对基站的角度向量 A zeros(N, length(target_angles)); for d 1:length(target_angles) A(:,d) exp(1j * pi * (0:N-1). * sin(target_angles(d))) / sqrt(N); end end代码里我额外做了一步把感知目标的波束方向也纳入电磁成形域的优化目标中这样波束成形矩阵既能服务通信用户又能在目标方向形成高增益。4.3 核心优化函数的实现要点电磁成形域SDR求解的核心代码是这个function W_opt opt_beamforming(H, A, params, p) % H: 信道集合, A: 感知导向矩阵, p: 功率分配向量(来自网络域) N params.N; K params.K; cvx_begin sdp quiet variable W(N, N, K) hermitian semidefinite % 优化目标最大化通信速率 感知增益 rate_sum 0; for k 1:K hk H{params.user_bs(k), k}; % 服务基站信道 interference 0; for j 1:K if j ~ k hj H{params.user_bs(k), j}; % 干扰信道 interference interference p(params.user_bs(j)) * hk * W(:,:,j) * hk; end end interference interference params.noise_power; % 用log_det形式近似速率或者用SINR约束 % 为简化此处用SINR线性化后的形式 rate_sum rate_sum 0.5 * log(1 p(params.user_bs(k)) * real(hk * W(:,:,k) * hk) / interference); end % 感知项所有目标方向上波束增益之和 sensing_gain 0; for d 1:params.D at A(:,d); for k 1:K sensing_gain sensing_gain at * W(:,:,k) * at; end end maximize(rate_sum params.mu * sensing_gain) subject to for k 1:K hk H{params.user_bs(k), k}; p(params.user_bs(k)) * real(hk * W(:,:,k) * hk) params.SINR_req * ... (sum(p(params.user_bs(j)) * real(hk * W(:,:,j) * hk) for j ~ k) params.noise_power); end % 每基站功率约束 for b 1:params.B sum_k_W 0; for k 1:K if params.user_bs(k) b sum_k_W sum_k_W trace(W(:,:,k)); end end sum_k_W p(b); end cvx_end % 秩1恢复高斯随机化 W_opt zeros(N, N, K); for k 1:K Wk W(:,:,k); [V, D] eig(Wk); [~, idx] max(diag(D)); w sqrt(max(D(idx,idx), 0)) * V(:,idx); W_opt(:,:,k) w * w; end end这里面有几个实现细节值得展开讲目标函数里log(1 SINR)是非凸的SDR之后速率项仍然非凸。我在代码里用了一个近似把对数速率项替换为线性加权项或者用MMMajorization-Minimization算法在每个迭代点线性化。更简单的方式是直接对SINR做约束、对速率下界做优化这个在CVX里更容易实现。感知增益项我用了所有用户波束在目标方向的增益之和没有单独配置感知专用波束。这样简化了变量数量代价是如果某个目标方向跟所有用户的通信方向差别很大感知增益可能不够。实际系统里可以考虑额外加一路感知专用波束代价是增加一个波束向量变量。功率约束上我用的trace(W)近似每基站的发射功率因为W w w^H时trace(W) ||w||²恰好等于这个波束消耗的功率。CVX里用trace(W)可以直接写出线性约束非常方便。网络协作域的实现相对简单因为GP可以直接基于SINR表达式建立function p_opt opt_power_allocation(H, W, params) % 固定波束W优化功率分配p B params.B; K params.K; cvx_begin quiet variable p(B) maximize(prod(p)) % 简化最大化总功率效率 subject to for k 1:K b params.user_bs(k); signal_power params.p_max * abs(H{b,k} * W(:,:,k) * H{b,k}); % 发射功率部分 interference 0; for j 1:K if j ~ k bj params.user_bs(j); interference interference p(bj) * params.p_max * abs(H{b,k} * W(:,:,j) * H{b,k}); end end % SINR约束改成p的线性形式 signal_power * p(b) params.SINR_req * (interference params.noise_power); end sum(p) B * params.P_max; cvx_end p_opt p; end简化处理了一下功率分配问题我设的是各基站功率上限p(b)变量是基站间如何分配总功率预算。因为SINR约束可以改写成关于p的线性不等式信号功率部分也是p的线性项整体问题虽然名义上是几何规划实际上在线性规划框架内就能解决CVX可以自动识别。4.4 代码运行效果与调试技巧跑完整个交替优化流程定义性能指标通信侧所有用户的平均速率 / 总速率感知侧所有目标方向的总波束增益或者CRB的倒数综合指标加权和我在一个典型的3基站场景里跑了迭代20轮之后综合指标趋于收敛。性能曲线大致规律是前几轮上升非常快第5轮之后增速放缓到15轮左右基本平稳。这说明交替优化框架的收敛性在实际工况下表现很好。调试的时候有几个技巧分享每轮迭代后打印SDR求解状态和GP求解状态。如果CVX返回SeDuMi numerical problems多半是矩阵条件数太大试着把功率归一化一下或者改求解器为SDPT3。秩1恢复出来的波束性能会跟SDR解出的性能有一点点差距这是正常的。如果差距太大比如超过3dB把高斯随机化次数调大从默认50次调到200次取最优。信道生成时要检查路径损耗是否合理。毫米波频段距离100米时路径损耗大概是80dB左右如果仿出来的信道增益异常大或异常小先检查单位是否统一——我用的是米和HzdB和线性值之间注意换算。5. 常见问题与排查实录5.1 求解器求解不稳定的处理CVX配合SDPT3跑中小规模问题通常没问题但ISAC系统一旦基站数超过5、天线数超过16SDP变量维度就会指数上涨SDPT3开始变得很慢甚至报错。这种情况我的处理办法是换成Mosek求解器。CVX里直接写cvx_solver mosekMosek对SDP问题的数值稳定性比SDPT3好收敛速度也快只是需要额外安装license学术邮箱可以申请免费版。把矩阵变量维度降下来。比如按基站拆分子问题而不是一次性求解所有基站的联合问题。虽然会损失一部分全局最优性但换来的是求解稳定性和速度。5.2 秩1恢复失败的应对SDR求解出来的W_k往往是高秩矩阵直接取最大特征向量做秩1近似有时候性能掉得厉害。我在调试中发现问题出在目标函数是速率和感知增益的加权和权重μ设置不当会导致最优解在高秩区域徘徊。解决办法是先扫描μ的取值比如从0.01到1做对数间隔采样看哪个μ下秩1恢复后的性能最好再固定这个μ跑迭代。另外高斯随机化次数也很关键——随机化实际上是在解空间附近搜索更好的秩1向量次数越多越接近松弛解的性能。我在最终代码里把随机化次数设成了200。5.3 交替优化不收敛或振荡有时候目标函数不收敛甚至在两个值之间振荡。这通常是两个子问题之间的耦合太紧、步长太大的表现。处理手段在电磁成形域的输出上加一个阻尼因子damping factor。比如更新波束矩阵时新的W (1-α)W_old αW_newα取0.5左右能大幅提高稳定性。检查SINR约束是否在交替中一直被满足。如果网络协作域把某个基站的功率降得太低电磁成形域可能无法满足用户SINR要求两轮下来目标值就会波动。解决办法是在网络协作域里保留功率下限约束不要让某一项资源被优化到灭绝。5.4 参数调整速查表放一张调参表方便直接查参数影响调参建议感知加权系数μμ越大系统越偏向感知性能通信速率下降从0.01起步逐步增大观察综合指标曲线SINR Requirement γ用户最低SINR过高会导致不可行一般设5-10dB超过15dB在干扰密集场景下容易无解天线数N空间自由度N越大波束越窄感知波束增益越强仿真初期用8或16代码跑通了再上调高斯随机化次数秩1恢复质量次数越多效果越好但耗时工程调试用50最终出图用200功率阻尼因子α影响交替迭代稳定性收敛正常时设1震荡时设0.56. 实操总结与延伸方向最后再分享一点个人体会。这个项目我最初以为难点在波束成形理论做下来发现真正的工程瓶颈在两个地方一是SDR之后的秩1恢复它决定了理论优化和实际波束之间的gap处理不好整个框架就是在自嗨二是交替优化两个域之间的数值稳定性需要对每个子问题的物理解释做充分理解才能写出有效的约束条件而不只是套CVX公式。如果你想在这个项目基础上继续扩展有几个方向我觉得值得做一是把单目标感知扩展到多目标跟踪场景。感知目标不是静止的它们会移动波束需要在时间维度上做预测和更新这可以引入卡尔曼滤波和预测波束成形的思路。二是加一个时间维度的调度层。目前框架是静态优化实际系统里感知任务和通信任务是间歇性发生的如果能把任务到达时间建模成随机过程可以做机会主义的资源分配。三是换一个求解框架不用SDR而用流形优化Manifold Optimization直接约束波束向量为单位模量或等模量。流形优化适合恒模约束的阵列设计收敛速度和性能在小规模系统里比SDR随机化更好值得一试。代码方面我做了完整的注释包括所有参数设置、函数说明和仿真脚本跑main_ISAC_AO.m即可出结果。有不清楚的地方欢迎在评论区交流一起把ISAC多域优化这块做得更扎实。
分享:

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

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