IRS辅助MIMO保密率优化:坐标下降MATLAB代码实现与避坑指南

发布时间:2026/10/22 20:29:00
IRS辅助MIMO保密率优化:坐标下降MATLAB代码实现与避坑指南 简介这份MATLAB代码资源面向计算机、电子信息工程、数学等专业的学生与研究人员聚焦IRS智能反射表面辅助MIMO系统的保密率最大化问题采用坐标下降算法对反射相位配置进行迭代优化可用于课程设计、期末大作业或毕业设计中的通信系统优化课题。压缩包共12个文件约9KB以m脚本为主辅以zbak备份、md说明与gitattributes配置其中主程序负责调度流程信道建模、坐标下降核心逻辑、固定相位与一般特征值分解下的容量计算、穷举搜索对比等模块分工明确README则交代了参数含义与运行方式。代码支持MATLAB 2014、2019a与2021a采用参数化编程注释详尽附赠案例数据可直接运行便于修改参数观察不同配置下的系统性能并借助穷举搜索验证算法效果。目前已有37人学习适合希望快速上手IRS辅助MIMO保密率优化、理解坐标下降实现细节的读者参考。1. 从一次答辩被问到“保密率怎么算”说起去年帮一个电子信息工程的朋友看毕业设计他做的是 IRS 辅助 MIMO 系统的波束成形答辩前一周跑来找我说老师问了一句“你的保密率曲线横坐标是什么”他当场卡壳。翻他代码一看main.m里参数全是硬编码proposed_algorithm.m里迭代次数写死 50换一组天线数就得手动改七八个地方。这不是个例——IRS 辅助 MIMO 保密率优化这个方向近几年在课程设计和毕设里出现频率很高但大部分同学拿到手的代码要么是论文附录里残缺的几行要么是师兄传下来的“黑匣子”能跑出图但说不清每一步在干什么。这份 MATLAB 代码包解决的就是这个问题。它把坐标下降算法Coordinate Descent用在 IRS 辅助 MIMO 系统的保密率最大化上核心文件proposed_algorithm.m实现了逐个变量更新的迭代逻辑full_search.m提供穷举搜索作为性能上界对比IRS_channel.m负责信道建模MIMO_Capacity_with_fixed_PHI.m和MIMO_Capacity_geneig.m分别处理固定相移和一般特征值分解下的容量计算。参数化编程意味着你改天线数、反射单元数、发射功率这些量的时候不需要动算法主体。适合正在做通信方向课程设计、期末大作业或者毕设的同学也适合想快速验证 IRS 保密率优化思路的研究入门者。2. 坐标下降为什么能用在 IRS 保密率优化上原理与选型2.1 IRS 辅助 MIMO 保密率问题的数学结构先把这个优化问题的骨架搭清楚。系统里有基站Alice、合法用户Bob和窃听者EveIRS 挂在墙上有 N 个反射单元。基站的发射波束成形矩阵记作WIRS 的相移矩阵记作Φ diag(e^{jθ₁}, e^{jθ₂}, …, e^{jθ_N})。保密率定义为合法链路速率减去窃听链路速率R_s log₂det(I H_b Φ G W W^H G^H Φ^H H_b^H / σ_b²) − log₂det(I H_e Φ G W W^H G^H Φ^H H_e^H / σ_e²)其中 G 是基站到 IRS 的信道H_b 和 H_e 分别是 IRS 到 Bob 和 Eve 的信道。优化变量是W和Φ约束是基站发射功率不超过 P_max以及每个反射单元的相移模为 1。这个问题的难点在于W和Φ耦合在一起目标函数对Φ是非凸的。常见做法是交替优化固定Φ优化W再固定W优化Φ反复迭代。但即便固定了W对Φ的优化仍然非凸因为每个反射单元的相移出现在指数上。2.2 为什么选坐标下降而不是交替优化或 SDR交替优化Alternating Optimization是最直观的思路但它有个问题每次更新Φ的时候如果直接用梯度下降或者 SDR半定松弛计算量随反射单元数 N 增长很快。SDR 需要把 N×N 的矩阵变量松弛到更高维N64 的时候求解器就已经很吃力了。坐标下降的思路不一样。它不去同时优化所有 N 个相移而是一次只动一个 θ_n把其他 N−1 个固定住。这样每个子问题变成一维搜索复杂度从 O(N³) 降到 O(N)。虽然需要的迭代次数多了但每次迭代极快总体下来在 N 较大的时候反而更实用。这份代码里proposed_algorithm.m用的就是这种策略。我翻了一下它的结构外层循环控制迭代轮数内层循环遍历每个反射单元对每个 θ_n 在 [0, 2π) 上做细粒度搜索或者用闭式解更新。full_search.m则是把所有 θ_n 的可能取值做笛卡尔积穷举——当然只适合 N 很小的时候跑用来验证坐标下降是否收敛到了全局最优附近。注意坐标下降不保证收敛到全局最优但在 IRS 保密率这类问题上文献里普遍报告它能收敛到局部最优且和穷举搜索的差距在可接受范围内。如果你要做性能对比full_search.m的结果就是你的上界参考。2.3 代码文件分工与调用关系拿到一个代码包先看文件结构再跑能省很多时间。这份代码的文件分工大致如下文件名功能是否需修改main.m主程序设置参数、调用算法、画图是改参数在这里proposed_algorithm.m坐标下降算法核心一般不动full_search.m穷举搜索用于性能对比一般不动IRS_channel.m生成 IRS 相关信道矩阵可改信道模型MIMO_Capacity_with_fixed_PHI.m固定相移下的容量计算一般不动MIMO_Capacity_geneig.m一般特征值分解下的容量一般不动README.md使用说明先读调用链是main.m→IRS_channel.m生成信道 →proposed_algorithm.m迭代优化 → 内部调用MIMO_Capacity_with_fixed_PHI.m或MIMO_Capacity_geneig.m算容量 → 返回结果给main.m画图。full_search.m是独立跑的不参与主流程。3. 跑通第一张保密率曲线参数设置与代码实操3.1 环境确认与文件完整性检查代码标注支持 MATLAB 2014、2019a、2021a。我实测在 2019a 和 2021a 上都能直接跑2014 版本因为一些矩阵函数的写法差异可能需要微调。如果你用的是 2023 之后的版本大概率也能跑但注意geneig相关的函数在新版本里可能有弃用警告。解压后先确认文件齐全。压缩包里除了.m文件还有几个.zbak后缀的文件——这是备份文件不影响运行但说明原始代码可能经历过手动修改。.gitattributes是 Git 配置和 MATLAB 无关。附赠内容里可能有案例数据先解压到和.m文件同一目录下。打开 MATLAB把当前文件夹切到代码所在目录在命令行输入% 检查关键函数是否在路径中 which main which proposed_algorithm which IRS_channel如果三个都返回了正确路径说明环境没问题。如果提示 not found用addpath(genpath(pwd))把当前目录及子目录加进搜索路径。3.2 main.m 里的参数怎么改main.m是整个代码的入口所有可调参数都集中在这里。我一般会先通读一遍把每个参数的含义和取值范围搞清楚再动手。常见的参数包括% 系统参数示例具体变量名以实际代码为准 N 32; % IRS 反射单元数 M 4; % 基站天线数 K 2; % 用户数含窃听者 P_max 1; % 最大发射功率归一化 sigma2 1e-3; % 噪声功率 max_iter 100; % 坐标下降最大迭代次数 tolerance 1e-4; % 收敛容差改参数的时候注意几点N 增大时full_search.m基本跑不动了N8 时穷举空间已经是 8 维N16 就别想了所以性能对比只在 N 较小的时候做。max_iter设太小可能没收敛设太大浪费时间我一般先设 200 跑一次看收敛曲线再根据曲线拐点调整。tolerance控制的是相邻两次迭代保密率的差值小于这个值就停。提示如果你改了 N 或者 M记得检查IRS_channel.m里生成的信道矩阵维度是否匹配。常见翻车现场就是改了天线数但信道生成函数没跟着改跑到一半报维度不一致。3.3 运行主程序并解读输出参数设好后直接运行% 在 MATLAB 命令行执行 main如果一切正常会弹出几个图窗。常见的有保密率随迭代次数的收敛曲线、保密率随发射功率变化的曲线、以及和full_search.m的对比图如果代码里包含了对比逻辑。收敛曲线是你第一个要看的。横轴是迭代次数纵轴是保密率。健康的曲线应该在前几十次迭代快速上升然后逐渐平缓。如果曲线一直在震荡不收敛可能是步长设得太大或者坐标下降的更新顺序有问题。如果曲线上升极慢检查一下每次更新 θ_n 时的搜索粒度是不是太粗。% 典型的收敛曲线绘制代码在 main.m 末尾 figure; plot(1:length(secrecy_rate_history), secrecy_rate_history, b-o); xlabel(Iteration); ylabel(Secrecy Rate (bps/Hz)); grid on; title(Convergence of Coordinate Descent);这段代码里secrecy_rate_history是每次迭代后记录的保密率值proposed_algorithm.m应该返回这个向量。如果没有你需要在算法循环里手动加一行记录。3.4 和穷举搜索做对比验证算法有效性full_search.m的作用是给你一个“标准答案”。它的逻辑是把每个 θ_n 在 [0, 2π) 上离散化成若干点比如 8 个或 16 个然后穷举所有组合找到使保密率最大的那组相移。N4、每维 8 个点时总组合数是 8⁴4096还能跑。N8 就是 8⁸16M已经很难受了。跑对比的典型方式% 先跑坐标下降 [rate_cd, phi_cd] proposed_algorithm(H, G, W, N, max_iter, tolerance); % 再跑穷举搜索仅小 N 适用 [rate_fs, phi_fs] full_search(H, G, W, N, num_points); % 对比 fprintf(Coordinate Descent: %.4f bps/Hz\n, rate_cd); fprintf(Full Search: %.4f bps/Hz\n, rate_fs); fprintf(Gap: %.2f%%\n, (rate_fs - rate_cd) / rate_fs * 100);如果差距在 5% 以内说明坐标下降在这个场景下表现不错。如果差距很大检查一下坐标下降的迭代次数是不是不够或者每次一维搜索的粒度太粗。4. 避坑与排查那些跑不通和跑不对的情况4.1 报错“矩阵维度不一致”现象运行main.m后 MATLAB 报错提示Matrix dimensions must agree通常发生在IRS_channel.m或者容量计算函数里。原因最常见的是改了 N 或 M 之后信道矩阵的维度没有同步更新。比如IRS_channel.m里硬编码了H (randn(N, M) 1j*randn(N, M))/sqrt(2)你把 N 从 32 改成 64但某个中间变量还是按 32 算的。解决打开IRS_channel.m检查所有涉及 N 和 M 的矩阵维度声明。用size()函数在关键步骤打印维度定位是哪一步不匹配。另外注意MIMO_Capacity_geneig.m里如果有特征值分解输入矩阵必须是方阵检查传入的协方差矩阵维度是否正确。4.2 保密率曲线一直为负或者为零现象收敛曲线跑出来全是负数或者一直贴在零附近不动。原因保密率 合法速率 − 窃听速率如果窃听信道比合法信道还好结果就是负的。这通常是因为信道生成时没有区分 Bob 和 Eve 的信道质量或者噪声功率设置不合理。另一个可能是MIMO_Capacity_with_fixed_PHI.m里的 logdet 计算出了数值问题比如矩阵接近奇异时 logdet 返回 -Inf。解决先检查IRS_channel.m里 Bob 和 Eve 的信道增益是否有合理差异。常见做法是让 Bob 的信道增益略高于 Eve或者通过 IRS 的位置来制造差异。然后在容量计算函数里加一个小的正则化项比如log2(det(I A 1e-10*eye(size(A))))避免奇异矩阵导致数值爆炸。4.3 坐标下降不收敛或者震荡现象保密率随迭代次数上下跳动不趋于稳定。原因坐标下降每次只更新一个变量如果更新步长太大或者更新顺序导致目标函数值反复横跳就会震荡。另一个可能是tolerance设得太小算法在最优值附近来回微调但始终达不到退出条件。解决先把max_iter设大一点比如 500观察震荡是否在后期衰减。如果一直震荡检查每次更新 θ_n 时的搜索范围。常见做法是在当前值附近做局部搜索而不是全局重新搜索。比如当前 θ_n 1.2就在 [1.0, 1.4] 范围内以 0.01 为步长搜索而不是在 [0, 2π] 上以 0.1 为步长搜。这样既保证精度又避免大幅跳动。4.4 full_search.m 跑不动或者内存溢出现象运行full_search.m后 MATLAB 卡死或者提示Out of memory。原因穷举搜索的组合数随 N 指数增长。N8、每维 8 个点时是 16M 种组合每种组合都要算一次容量内存和时间都扛不住。解决full_search.m只适合 N ≤ 4 的场景。如果你需要更大 N 的对比基准可以考虑用遗传算法或者粒子群优化来近似全局最优虽然不保证找到真正的最优但比穷举可行。或者干脆只在小 N 时做对比大 N 时只看坐标下降的收敛曲线和理论分析。4.5 换了 MATLAB 版本后函数报错现象在 2019a 上跑得好好的代码换到 2021a 或者更新版本后报错提示某个函数不存在或者参数不对。原因MATLAB 在不同版本间会弃用一些函数或者改变某些函数的默认行为。比如geneig在新版本里可能被eig的某个选项替代或者logdet的调用方式有变化。解决先看报错信息里提到的是哪个函数然后在 MATLAB 文档里查这个函数在当前版本的状态。如果是弃用函数通常文档会给出替代方案。另一个办法是在代码开头加版本判断% 版本兼容处理示例 if verLessThan(matlab, 9.5) % 9.5 对应 2018b % 旧版本写法 [V, D] geneig(A, B); else % 新版本写法 [V, D] eig(A, B); end5. 进阶技巧把坐标下降用到你自己的场景里5.1 替换信道模型从 Rayleigh 到 Rician代码自带的IRS_channel.m大概率用的是 Rayleigh 衰落或者简单的视距模型。如果你要做更贴近实际的仿真可以换成 Rician 衰落通过调整 K 因子来控制视距分量和非视距分量的比例。改法是在信道生成时加一个直射路径项% Rician 信道生成示例 K_factor 10; % Rician K 因子线性值 H_los exp(1j * 2 * pi * rand(N, M)); % 视距分量 H_nlos (randn(N, M) 1j * randn(N, M)) / sqrt(2); % 非视距分量 H sqrt(K_factor / (K_factor 1)) * H_los ... sqrt(1 / (K_factor 1)) * H_nlos;K_factor 越大信道越接近纯视距IRS 的相移优化效果越明显。你可以跑一组 K_factor 从 0 到 20 的对比看保密率怎么变。5.2 把坐标下降和交替优化结合起来纯坐标下降在 N 很大时虽然每次迭代快但总迭代次数可能很多。一个常见的加速策略是外层用交替优化先固定 Φ 用注水算法优化 W再固定 W 用坐标下降优化 Φ反复几轮。这样 W 的优化有闭式解Φ 的优化用坐标下降整体收敛更快。% 交替优化 坐标下降的混合框架 for outer 1:max_outer % 固定 Phi优化 W注水算法 W water_filling(H_eff, P_max, sigma2); % 固定 W用坐标下降优化 Phi [Phi, rate] proposed_algorithm(H, G, W, N, max_iter, tolerance); % 检查外层收敛 if abs(rate - prev_rate) tol_outer break; end prev_rate rate; end这个框架的好处是 W 的更新有理论最优解不会引入额外误差而 Φ 的坐标下降负责处理非凸部分。5.3 验证你的结果三个必查项跑完代码拿到结果后别急着截图放论文里。我一般会做三个检查第一把proposed_algorithm.m的迭代次数设成 1、5、10、50、100看保密率是否单调递增然后趋于平稳。如果中间出现下降说明更新逻辑有问题。第二把 N 从 4 逐步增加到 64看保密率是否随 N 增大而提升。IRS 的物理意义就是反射单元越多波束成形自由度越高保密率应该上升。如果反而下降检查信道生成里 IRS 的路径损耗模型是不是没随 N 调整。第三用full_search.m在小 N 时验证。N4 时坐标下降的结果应该和穷举搜索很接近差距超过 10% 就说明算法实现有问题。注意如果你在论文或报告里用这组代码的结果记得在实验设置里写清楚 MATLAB 版本、N 和 M 的取值、迭代次数和收敛容差。这些参数不同结果可能差很多。5.4 一个容易被忽略的细节相移量化代码里默认的相移是连续值每个 θ_n 可以在 [0, 2π) 上任意取值。但实际 IRS 硬件通常只有有限个相位档位比如 2-bit 量化就是 {0, π/2, π, 3π/2} 四个值。如果你要做更贴近硬件的仿真需要在坐标下降的每一步把更新后的 θ_n 量化到最近的档位% 2-bit 相移量化 quant_levels [0, pi/2, pi, 3*pi/2]; [~, idx] min(abs(angle(phi_n) - quant_levels)); phi_n_quantized exp(1j * quant_levels(idx));量化之后保密率会下降下降幅度取决于量化位数。1-bit 量化只有 0 和 π下降最明显3-bit 以上就接近连续值了。这个对比本身就是一个很好的课程设计扩展点。从那以后我每次拿到新的优化代码都会先在小规模场景下用穷举搜索验证一遍确认算法逻辑没问题再放大规模跑。这个习惯帮我省了很多返工的时间。希望帮到你。本文还有配套的精品资源点击获取

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询