智能反射面安全传输复现:随N变化的保密速率曲线与MATLAB实现

发布时间:2026/10/20 19:07:11
智能反射面安全传输复现:随N变化的保密速率曲线与MATLAB实现 简介面向通信安全方向毕业设计的一套 MATLAB 论文复现包主题是智能反射面IRS/RIS随单元数 N 变化的安全性能分析。内容围绕 N 值对信号定向性、干扰抑制与保密速率的影响展开既覆盖均匀线性阵列ULA与均匀矩形阵列URA两种天线构型下的 IRS 仿真也给出基于 SDR半定松弛方法的相位优化实现可直接对照论文调整参数、观察不同 N 值下安全性能曲线。压缩包共 7 个文件以 4 个 mlx 实时脚本和 1 个 m 脚本为主体另有 1 个 png 结果图和 1 个 fig 图形文件整体仅 87KB小巧轻便便于研读和二次开发。已有 2147 人学习下载。对正在完成 IRS 安全通信方向毕业设计、希望高效复现论文核心实验的用户这套代码能省去从零搭建模型的时间从 N 范围扫描、ULA/URA 信道构建到 SDR 求解与结果可视化链路完整还能借助实时脚本理解每一步数学推导的代码实现。1. 为什么论文复现要单独把“随N变化”拉出来做复现智能反射面IRS安全传输的论文时最难的不是把保密速率的公式敲对而是把“反射单元数 N 从 16 扫到 128”这条曲线跑得和论文趋势一致。N 一旦变大信道矩阵规模变、优化变量变、迭代收敛速度变脚本里任何一处维度写反曲线就会表现出完全不合理的跳变。很多复现者把精力都花在算法推导上等到画图才发现曲线形状和论文差得离谱回头排查全是 N 相关的边界问题。这篇笔记就把“随 N 变化”这部分单独拆开讲从系统模型、优化求解到 MATLAB 仿真脚本给你一条能直接照着跑通、能验证结果正确性的路径。2. 复现之前的底子系统模型、信道假设与保密速率计算2.1 反射面在安全场景里到底在优化什么智能反射面在物理层安全里的作用不是把信号“放大”而是通过调整每个反射单元的相位让合法用户接收到的信号同相叠加、窃听者接收到的信号反相抵消。等效来看IRS 在基站波束成形之外又提供了一组可调的相位自由度这组自由度能显著改变合法信道和窃听信道之间的质量差距。所以复现的第一步是把系统模型里的人、信道、信号走向全部明确下来否则后面所有代码都是在糊涂账上盖房子。我复现时用的一套标准模型是基站配置 M 根天线发送单流信号给一个单天线合法用户同时存在一个单天线窃听者IRS 上有 N 个反射单元每个单元只调相位、不改变幅度。信道包括基站到 IRS 的矩阵、IRS 到合法用户的向量、IRS 到窃听者的向量再叠加基站到两个用户的直达信道。这个模型在绝大多数 IRS 安全论文里是默认配置区别只在于是否带路径损耗、是否考虑空间相关、是否允许连续相移。2.2 遗忘率最高的两个前提CSI 误差与离散相移论文里的安全性能曲线几乎都建立在“合法用户和窃听者的信道状态信息CSI基站全部已知”这个假设上。实际复现时这个假设带来的效果是保密速率计算出来的是一个理论上限任何信道估计误差都会让这个值往下掉。如果你复现的曲线明显高于同参数下的其他论文先别高兴很可能是你把窃听者信道假设成未知或者部分已知相当于给窃听者加了限制等于变相拉高了安全性。另一个常见前提是相移连续性。很多论文先给连续相移的性能上界再给 1-bit 或 2-bit 量化相移的损失曲线。复现“随 N 变化”时两条曲线都需要跑因为 N 增大后量化损失的比例会变化这是论文里一个重要的观察点。如果不做离散量化只在连续相移下扫描 N曲线会过于平滑和真实部署场景差距很大。2.3 保密速率的闭式表达式与单位换算保密速率的定义是合法用户信道容量减去窃听者信道容量的正数部分单位是 bit/s/Hz。对单天线用户来说合法用户的信噪比 γ_B |h_B^H w|² / σ_B²窃听者 γ_E |h_E^H w|² / σ_E²保密速率 R_s max(0, log2(1 γ_B) - log2(1 γ_E))。这里最容易被坑的是 σ² 的单位仿真里功率 P 是线性值噪声功率 σ² 也是线性值但很多人习惯用 dB 表示信噪比画图时单位不统一曲线整体平移看着就像复现错了。另一个数学细节是 log2 前面的系数。如果系统用了复数基带模型容量公式是 log2(1 SNR)这是对的但有些论文为了和实数模型对应会在式子前乘 1/2。复现前先确认目标论文的系数约定否则你的曲线会整体差一倍而且这种误差从曲线上看不出来只能靠数值核对。复现之前把模型画成一张信号流图把每个矩阵的维度标在旁边。我习惯用 M4、N64 的默认参数跑通单点再去扫描 N 的变化趋势。单点能对上理论值扫描曲线才有意义。3. 求解方案怎么选从交替优化到闭式相移3.1 核心思路先固定相移解波束成形再固定波束成形解相移IRS 安全传输的优化问题有两个变量块基站波束成形向量 w 和 IRS 相移矩阵 Φ。它们耦合在信噪比表达式里直接联合优化是非凸的论文里最通用的做法是交替优化AO把问题拆成两个子问题。固定 Φ 时等效信道变成一个普通的点对点信道最优 w 是最大比发送MRT固定 w 时优化 Φ 仍然非凸这一块是复现的重头戏也是算法选择的分水岭。复现“随 N 变化”曲线时我不建议一上来就上高阶算法。先用交替优化框架搭一个基线然后对比论文里的算法步骤看它是在 w 更新还是 Φ 更新上做了近似。大部分论文会在 Φ 更新上用半正定松弛SDR或者 MM 算法个别论文会用逐元素坐标上升。你复现的目标不是“复现出完全一样的数值”而是“复现出同样的趋势和量级”所以算法的选择和论文保持同一种复杂度等级就够了。3.2 连续相移的 MM 解法与离散相移的处理连续相移时Φ 的对角元是模为 1 的复数即每个单元有一个在 [-π, π] 内连续的相位。坐标上升法把每个 θ_n 单独拎出来固定其他 n-1 个相位用一维搜索找使保密速率最大的相位值。复现时我用 16 个均匀分布的候选相位做一维搜索精度够了而且代码简单、不依赖外部工具箱如果追求更高精度候选数加到 64但运行时间会明显变长。离散相移的处理更简单先在连续相移解出来后把每个 θ_n 量化到距离最近的 1-bit 或 2-bit 候选点上。注意这里有个细节直接量化连续最优解不一定得到离散约束下的最优解但作为复现“随 N 变化”的近似手段完全够用。论文里画量化曲线时通常是用离散候选相位直接做坐标上升而不是事后量化两条曲线在高 N 区域会有肉眼可见的差距。3.3 初始化与迭代次数阈值要设多大才算收敛交替优化对初始值敏感这是复现时最容易翻车的地方。随机初始化 Φ 跑出来的保密速率可能比精心初始化的结果低 20% 到 30%。我常用的做法是先用忽略窃听者信道的相位对齐初始化 Φ——让每个反射单元的相位对准合法用户的信道相位再在这个基础上做交替优化迭代。这个初始化有明确的物理含义收敛快复现曲线也更稳定。迭代终止条件我一般设成连续两轮保密速率变化小于 1e-4同时限制最大迭代次数 50 轮。N 越大每轮坐标上升的计算量越大如果 50 轮还不收敛优先怀疑信道生成或维度问题而不是盲目把迭代次数加到 200。有人会把阈值设到 1e-6曲线精度没有明显提升运行时间却翻了好几倍这是复现里的典型过度设计。3.4 那篇论文的“随N曲线”通常长什么样“随 N 变化”的图在论文里一般有两条横轴趋势保密速率随着 N 增大而上升但增速逐渐放缓最后趋于饱和。原因是 IRS 提供的相位自由度变多但每增加一个单元带来的边际增益在下降。窃听信道也同时变强合法用户的相对优势被稀释。复现时如果画出来的曲线是近似线性增长、没有饱和趋势多半是相位更新没有做对导致 IRS 没有真正抑制窃听者。很多论文还会在这张图里放一条“无 IRS”的平直线作为基线以及一条“只优化基站波束成形、IRS 随机相位”的对照曲线。复现时我建议三条线一起画无 IRS 的保密速率、IRS 随机相位的保密速率、IRS 优化相位的保密速率。如果优化后的曲线不能明显高于随机相位说明你的相位更新算法没有生效这种问题从单条曲线上很难看出来但三条线一对比立刻现原形。4. 用 MATLAB 复现随 N 变化的保密速率曲线4.1 复现总流程与脚本结构复现脚本我习惯拆成四个模块参数配置、信道生成、优化求解、统计画图。参数配置单独放最前面扫 N 时只改一个数组信道生成封装成函数保证每次调用生成独立的随机信道优化求解接受信道系数和 N 作为输入返回优化后的保密速率最后在主脚本里循环 N 做蒙特卡洛平均。这样拆开的好处是排查问题时能单独验证每一块的输入输出不会因为某个环节错误导致整条曲线失真。主脚本的结构大致是% 主脚本扫描 IRS 单元数 N绘制优化后的保密速率曲线 clear; close all; clc; M 4; % 基站天线数 P 1; % 发射功率线性值 sigma2 1e-2; % 噪声功率线性值对应 SNR 20 dB N_list 16:16:128; % 反射单元数扫描范围 MC 50; % 每个 N 值做 50 次信道实现并取平均 Rs_opt zeros(length(N_list), 1); Rs_rand zeros(length(N_list), 1); Rs_noIRS zeros(length(N_list), 1); for idx 1:length(N_list) N N_list(idx); Rs_sum 0; Rs_rand_sum 0; Rs_noIRS_sum 0; for mc 1:MC [HB, HE, HBI, HIB] gen_channels(M, N); % 生成信道 Rs_sum Rs_sum solve_irs(HB, HE, HBI, HIB, M, N, P, sigma2); Rs_rand_sum Rs_rand_sum solve_irs_rand(HB, HE, HBI, HIB, M, N, P, sigma2); Rs_noIRS_sum Rs_noIRS_sum solve_no_irs(HB, HE, M, P, sigma2); end Rs_opt(idx) Rs_sum / MC; Rs_rand(idx) Rs_rand_sum / MC; Rs_noIRS(idx) Rs_noIRS_sum / MC; fprintf(N%d 完成Rs_opt%.4f\n, N, Rs_opt(idx)); end代码逻辑说明主循环把 N 扫描和蒙特卡洛平均分成两层内层每轮生成一次随机信道调用三种求解函数分别对应优化 IRS 相位、随机 IRS 相位、没有 IRS 三种配置。外层把每个 N 点的平均结果存进数组最后用于画图。参数说明MC 设为 50 是精度和时间的折中追求平滑曲线可以加到 200N_list 用 16 的步长是为了让曲线足够密同时每个 N 点的计算量可控。4.2 信道生成函数维度最容易写反的地方信道生成是维度错误的高发区。基站到 IRS 的信道矩阵 G 的维度是 N × MIRS 到用户的信道向量 h_r 的维度是 N × 1基站到用户的直达信道 h_d 的维度是 M × 1。等效信道是 h_d h_r^H Φ G 的共轭转置关系任何一个维度写反后面所有计算都会静默出错。function [HB, HE, G, hr, he, hd_B, hd_E] gen_channels(M, N) % 生成 IRS 辅助安全通信的完整信道集合 % 返回等效信道 HB、HE 以及原始信道矩阵/向量 % 瑞利衰落信道方差按路径损耗缩放 loss_B 10^(-0.6); % 合法用户链路路径损耗对应 6 dB loss_E 10^(-0.3); % 窃听者链路路径损耗对应 3 dB窃听者距离更近 G sqrt(1/2) * (randn(N, M) 1j*randn(N, M)); hr sqrt(loss_B/2) * (randn(N, 1) 1j*randn(N, 1)); he sqrt(loss_E/2) * (randn(N, 1) 1j*randn(N, 1)); hd_B sqrt(loss_B/2) * (randn(M, 1) 1j*randn(M, 1)); hd_E sqrt(loss_E/2) * (randn(M, 1) 1j*randn(M, 1)); % 先返回原始信道等效信道在求解函数里组装 HB struct(hd, hd_B, hr, hr, G, G); HE struct(hd, hd_E, he, he, G, G); end逻辑说明这个函数把直达信道和 IRS 相关信道分开返回方便在求解函数里自由组装。路径损耗通过 loss_B 和 loss_E 控制这里故意把窃听者的路径损耗设得比合法用户小模拟窃听者更靠近基站或 IRS 的场景。参数说明randn 生成的复高斯随机变量除 sqrt(2) 是让实部虚部方差各为 0.5保证生成的信道向量模的期望是 1路径损耗系数可以按你的场景调整但建议保持合法用户链路质量整体优于窃听链路否则保密速率经常为零。4.3 交替优化求解函数坐标上升更新 IRS 相位function Rs solve_irs(HB, HE, M, N, P, sigma2, iter_max) % 交替优化MRT 波束成形 坐标上升更新 IRS 相位 % 返回一次信道实现下的保密速率 Phi exp(1j * 2*pi * rand(N, 1)); % 随机初始化相位 % 预生成坐标上升的候选相位 phase_candidates linspace(-pi, pi, 32); for it 1:iter_max % 组装等效信道 G HB.G; h_eff_B HB.hd G * (conj(HB.hr) .* Phi); h_eff_E HE.hd G * (conj(HE.he) .* Phi); % 最大比发送波束成形 w sqrt(P) * h_eff_B / norm(h_eff_B); % 固定 w坐标上升更新每个反射单元相位 Rs_prev compute_Rs(w, Phi, HB, HE, sigma2); for n 1:N best_phase angle(Phi(n)); best_Rs -inf; for q 1:length(phase_candidates) Phi_try Phi; Phi_try(n) exp(1j * phase_candidates(q)); Rs_try compute_Rs(w, Phi_try, HB, HE, sigma2); if Rs_try best_Rs best_Rs Rs_try; best_phase phase_candidates(q); end end Phi(n) exp(1j * best_phase); end % 判断收敛 Rs_new compute_Rs(w, Phi, HB, HE, sigma2); if abs(Rs_new - Rs_prev) 1e-4 break; end end Rs max(0, Rs_new); end逻辑说明求解函数分成三个阶段。第一阶段组装等效信道G 是 N×M 矩阵的共轭转置乘以 conj(HB.hr) .* Phi 的结果相当于 IRS 相移矩阵作用后的级联信道这里的逐元素乘法模拟了 Φ 是对角阵的特性避免了显式构造 N×N 矩阵大幅减少内存占用。第二阶段是固定 Φ 更新 w标准 MRT 闭式解功率归一化到 P。第三阶段是固定 w 逐单元更新 Φ每个单元尝试 32 个候选相位保留保密速率最大的那个。参数说明iter_max 我通常在主脚本里传 20N 越大收敛越慢可以适当增大到这个值的两倍phase_candidates 的密度直接决定相位优化精度32 个候选对应约 5 比特量化精度对趋势复现足够。4.4 画图与曲线对比三条线放在一起才可信% 绘制随 N 变化的保密速率曲线 figure; plot(N_list, Rs_noIRS, k--, LineWidth, 1.5); hold on; plot(N_list, Rs_rand, b-o, LineWidth, 1.5); plot(N_list, Rs_opt, r-s, LineWidth, 1.5); grid on; xlabel(IRS 反射单元数 N); ylabel(保密速率 (bit/s/Hz)); legend(无 IRS, IRS 随机相位, IRS 优化相位, Location, northwest);画图这段没有复杂的计算逻辑但有一个容易忽略的点三条曲线必须用同一组随机信道种子生成否则对比没有意义。我的做法是在主脚本最前面用 rng(42) 固定随机种子保证每次运行结果可复现。无 IRS 的保密速率是一条几乎水平的直线随机相位曲线随 N 缓慢上升优化相位曲线上升更快、但也趋于饱和。如果你画出来的三条线差距太小优先检查 Φ 的更新是否真的在最大化保密速率而不是只优化了合法用户的信道增益。5. IRS 复现避坑记录从曲线异常到结果不可信5.1 复现时保密速率出现负值现象跑出来保密速率是负数和论文里的非负曲线完全对不上。原因单次信道实现下窃听者的信道质量比合法用户还好log2(1 γ_B) - log2(1 γ_E) 就变成负数但物理上保密速率定义是非负的负值表示“无法保证安全传输”应该截断为 0。解决要么在最终输出时用 max(0, Rs)要么把单次结果先截断再取平均。注意顺序——先截断后平均是先对每次信道实现取 0再平均反映的是“平均安全传输能力”先平均后截断是另一种统计口径复现前先想清楚你要哪个含义两种结果在低信噪比区域差很多。5.2 增加反射单元数后性能反而下降现象随着 N 从 16 增加到 128优化后的保密速率曲线在某个点之后开始下降和论文趋势相反。原因这是典型的相位搜索精度不足。N 增大后坐标上升每轮要更新 N 个相位每个相位只做 32 个候选的一维搜索组合优化的搜索空间随 N 指数膨胀局部最优问题变严重另一个原因是蒙特卡洛次数太少大 N 下信道方差变大少数几次高窃听信道质量的实现拉低了平均值。解决把相位候选数从 32 提到 64迭代次数从 20 提到 40同时把 MC 从 50 提到 100。这两个操作都能缓解下降趋势但运行时间会翻倍建议先用小 N 区间验证趋势再扩大到完整范围。5.3 N 增大后运行时间爆炸现象N16 时几秒就跑完一个点N128 时一个点要跑几分钟扫完整条曲线要一小时以上。原因坐标上升的复杂度是 O(N × Q × iter_max)其中 Q 是候选相位数量N 线性增大、迭代次数也增大总计算量是二次增长再加上外层蒙特卡洛循环时间自然爆炸。解决不要盲目减少 MC而是先做三件事——去掉坐标上升里对每次尝试的幂运算改用查表法把 compute_Rs 里的重复计算提出来每次相位尝试只更新被改动单元对应的那部分如果还不够就把 Q 降到 16先用粗糙精度确认趋势。复现已有了完整算法趋势再提高精度不要一开始就追求完美。5.4 曲线趋势对但绝对值差 2 dB现象曲线形状和论文一致都是上升后饱和的形状但数值上整体差 2 dB 或者 0.5 bit/s/Hz。原因大部分是噪声功率定义不一致。你的噪声功率是 σ²但有些论文把噪声功率归一化到 1把发射功率 P 写成信噪比的形式还有路径损耗模型不同比如有的用 d^-2有的用 d^-4曲线形状接近但绝对值差不少。解决先把单位对齐到“噪声功率为 1P 是线性信噪比”跑一条简单场景的曲线验证一下量级路径损耗系数参照论文的描述设置如果论文没有明说就说明它是归一化信道模型你应该做的不是对齐绝对值而是对齐趋势。5.5 结果每次运行都不一样无法判断是否改对了现象同一套代码连续跑两次曲线有肉眼可见的差异。原因随机信道最大信道没有固定随机种子每次蒙特卡洛的实现不同。这是复现里最容易让人崩溃的情况——改了一个参数无法判断曲线差异是参数造成的还是随机波动造成的。解决主脚本里加流 rng(固定整数)需要对比多组参数时显式保存第一组信道用于后续所有实验。这个习惯也是投稿和写技术报告时别人能信你数据的前提。随机种子固定后复现出的曲线就是确定性的任何变化都能明确归因到代码改动。6. 把这套复现变成自己的工具验证方法与进阶调整6.1 用最简场景验证算法的正确性复现标准流程走完后我会先用一个退化场景验证代码逻辑把窃听者信道设成极弱比如让 loss_E 比 loss_B 小 20 dB这时保密速率应该约等于合法用户的信道容量即 log2(1 P|h_eff_B|² / σ²)。如果优化后的保密速率明显低于这个理论值说明波束成形或相位更新有问题而不是“信道太复杂导致的正常现象”。这个验证只需要几分钟但能过滤掉大部分维度错误和符号错误。6.2 相位精度与初始化策略的进阶调整如果需要在“随 N 变化”曲线上复现出论文的量化损失规律我一般把坐标上升里的候选相位数改成 2 的整数次幂分别做 1-bit、2-bit、3-bit 量化实验。你会看到N 较小时量化损失占比较大N 增大后量化损失相对占比变小因为 IRS 的相位自由度变多量化误差被平均掉了。这个规律在很多论文里是核心观察复现出来后很有说服力。初始化策略上除了随机初始化增加一个“合法用户相位对齐”的确定性初始化作为一个对照配置写进代码里。6.3 验证代码正确性的最后一关最后我会做一次“手工小规模验证”设 M1、N4、固定一组信道系数把保密速率的每一步中间变量打印出来手算一遍等效信道和功率归一化。这种验证看起来很笨但能一次性发现共轭转置方向、矩阵乘法顺序、路径损耗系数等所有基础性错误。做完这个验证后再把蒙特卡洛次数、N 扫描范围调回论文配置这时跑出来的曲线就能放心写在实验记录里。这个习惯帮我在复现 IRS 安全类论文时省了大量回头排查的时间——先把小规模数值算对再上规模。希望这篇笔记能帮你在复现时少走几步弯路。本文还有配套的精品资源点击获取

关于本文作者

来自尧图内容编辑团队

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

尧图内容编辑团队

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

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

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

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

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

网站改版的5个关键决策

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

获取专属建站方案

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

立即免费咨询