简介面向大规模MIMO与混合波束成形初学者的Matlab示例包系统展示了混合波束成形在5G及未来无线网络中的应用价值帮助读者理解如何结合数字与模拟波束成形在有限硬件下实现接近全数字的性能并降低功耗。压缩包共5个文件以Matlab主程序为核心配合两张仿真结果截图、一份原理说明文档及配置文件整体仅63KB轻量易用。通过可运行的m脚本和注释学习者能逐步理解大规模MIMO系统建模、模拟与数字波束成形结合、预编码、信道估计与反馈等核心环节截图帮助快速对照仿真输出md文档则梳理了运行要点和设计思路。目前已有307人学习下载。这套资源兼顾理论与仿真实践适合无线通信方向的学生和工程师快速上手从系统模型搭建到发射机/接收机设计、波束成形算法实现再到误码率、信干比等性能指标分析都能获得清晰参考可作为入门或课程设计的辅助材料。1. 大规模MIMO混合波束成形它解决的不是算法问题是射频成本问题一份标注为 Massive-MIMO-Hybrid-Beamforming-master 的工程代码包在通信方向的学生和从业者手里出现频率相当高。它解决的是毫米波 Massive-MIMO 下的现实问题全数字波束成形性能最优但每根天线都要独立射频链路64 根天线就是 64 条射频链路成本和功耗在工程上直接劝退。混合波束成形Hybrid Beamforming把预编码拆成模拟域移相器和数字域基带两级射频链数量可以远少于天线数再靠算法把性能拉回接近全数字水平。这个方向也是通信算法岗笔试面试的常客代码库里的信道生成、混合预编码和互信息MI评估正好组成一套标准闭环。适合用 MATLAB 做物理层仿真、准备课程设计或无线算法笔试的读者下面这套方案可以完整复现出从信道到频谱效率曲线的整个过程。2. 系统模型与互信息目标混合方案逼近全数字性能的底气从哪来任何波束成形仿真第一步都不是写算法而是把信道、收发模型和优化目标三者对齐。很多人上来就抄一段预编码代码跑出来曲线异常往往就是这层基础没有立稳。2.1 毫米波信道模型与阵列响应稀疏性是一切的前提毫米波 Massive-MIMO 的信道不能直接搬 Rayleigh 模型。载频高、波长极短散射体少信道在角度域呈现出明显的稀疏性——真正起作用的传播路径通常只有十几条而不是几百条。于是业界普遍采用几何簇射信道模型也就是 Saleh-Valenzuela 模型在毫米波频段的简化形式H sqrt(Nt·Nr/(Ncl·Nray)) · Σ αₗ · a_r(θₗ) · a_t(φₗ)ᵀ其中 Ncl 是散射簇数Nray 是每簇内的路径数αₗ 是第 l 条路径的复增益a_t 和 a_r 分别是发射端和接收端阵列的转向矢量。对均匀线性阵列ULA而言转向矢量可以写成a_t(φ) [1, e^{jπ·1·sinφ}, e^{jπ·2·sinφ}, …, e^{jπ·(Nt-1)·sinφ}]ᵀ / √Nt这里的 π 来自半波长天线间距d λ/2所以电相位差是 2πd·sinφ/λ π·sinφ。如果把 2πd/λ 整体误写成 2π展开公式时就会引入二倍关系方向参数全部错位。这是个非常隐蔽的坑后面避坑章节细说。这个模型有几个对算法设计至关重要的性质。第一H 的行列相关性完全由到达角和离开角决定自然带有流形结构。第二由于路径少H 的右奇异空间可以用少量平面波的线性组合近似这才是 OMP正交匹配追踪这类贪心算法能工作的数学基础。换句话说如果信道换成独立同分布高斯矩阵稀疏性不存在OMP 把奇异向量投影到码本上的做法会严重失效。这也是为什么混合波束成形的论文几乎都在毫米波稀疏信道假设下展开。2.2 互信息怎么算从预编码矩阵到频谱效率的推导路径仿真中衡量预编码好坏的指标通常是互信息代码注释和论文里经常简写成 MI。它假设发端未知信道、接收端做最优检测这时系统容量近似为R log₂ det( I_Ns (ρ/Ns) · F_BBᵀ F_RFᵀ Hᵀ H F_RF F_BB )其中 ρ 是总发射功率噪声功率归一化到 1。注意这里的唯一变化是把普通 MIMO 容量公式中的 H 替换成等效信道 H_eff H·F_RF·F_BB。所以实现时第一步永远是先算等效信道再丢进 det 公式不要去动 H 本身。用互信息而不是误码率来评估有三个原因。第一它直接反映预编码矩阵对信道奇异空间的利用程度与波束成形的目标天然一致。第二计算量小不需要调制解调和信道编码环节迭代一百次信道也能承受。第三论文里普遍用它做横轴指标复现结果好对比。如果后面要做星座级仿真可以换用 EVM 或误码率但混合预编码的调优阶段用 MI 就够了。还要注意一个约定预编码矩阵 F_RF·F_BB 通常归一化到 Frobenius 范数的平方等于流数 Ns也就是发射总功率被平摊到 Ns 个流上。这个约定直接决定 ρ/Ns 这一项怎么进入公式归一化不一致会让曲线在不同流数设定下整体平移影响对比结论。2.3 全数字、混合与纯模拟三种方案的边界把三种方案放在同一张性能图里边界就很清楚。方案发射端射频链数预编码自由度实现复杂度全数字Nt幅度 相位射频硬件成本高混合Ns ~ Nt 之间模拟域仅相位数字域幅度 相位折中纯模拟1仅相位低但性能受限全数字方案中 NRF Nt最优解就是 SVD 右奇异向量 V 的前 Ns 列这是所有对比的基准上界。纯模拟方案一次只能形成一套波束相位恒定模约束下自由度严重不足性能明显偏低。混合方案卡在两者之间射频链数 NRF 通常取 Ns 到 Nt 之间的值模拟域用移相器网络数字域在基带上做精密调整。混合方案能逼近全数字上界的核心底气来自信道的稀疏性。既然右奇异空间只由少数几个方向决定那么用模拟码本里的若干转向矢量去张成近似子空间剩余误差就可以在数字域补偿掉。Ncl·Nray 的路径数远小于 Nt 时这种分解需要的模拟列数也非常有限性能损失被压得很低。工程上经常能看到混合和全数字在 0~10 dB 信噪比区间只差 0.5~1 bit/s/Hz这就是稀疏信道给的底气。3. 二十分钟跑通最小混合波束成形仿真MATLAB 代码骨架与三种参数理论立住之后下面这份代码骨架是我自己搭建混合波束成形仿真时常用的起手式。它只做三件事生成稀疏毫米波信道、用 OMP 构造混合预编码器、扫描信噪比画互信息曲线。三块拼起来就是一个能跑的完整脚本。3.1 生成毫米波稀疏信道代码与两组常用参数信道生成函数是全部仿真的地基。它输入天线数、散射簇数、每簇路径数和角度扩展输出一个已按功率归一化的复信道矩阵。function H gen_mmwave_channel(Nt, Nr, Ncl, Nray, sigma_phi, sigma_theta) % 生成毫米波窄带稀疏信道 % 输入 % Nt 发射天线数 % Nr 接收天线数 % Ncl 散射簇数 % Nray 每簇内路径数 % sigma_phi 离开角角度扩展弧度 % sigma_theta 到达角角度扩展弧度 % 输出 % H [Nr x Nt] 复信道矩阵已按 E[||H||_F^2] Nt*Nr 归一化 H zeros(Nr, Nt); for cl 1:Ncl % 簇中心到达角 / 离开角在 [-pi, pi] 均匀分布 phi_mean 2 * pi * rand - pi; theta_mean 2 * pi * rand - pi; for ray 1:Nray % 实际角度中心角加高斯扰动 phi phi_mean sigma_phi * randn; theta theta_mean sigma_theta * randn; % 复增益实部虚部独立同分布单条路径单位能量 alpha (randn 1j * randn) / sqrt(2); % 发射端 / 接收端转向矢量ULA 半波长间距 at exp(1j * pi * (0:Nt-1). * sin(phi)); % [Nt x 1] ar exp(1j * pi * (0:Nr-1). * sin(theta)); % [Nr x 1] H H alpha * (ar * at); end end % 功率归一化让信道矩阵的 Frobenius 范数期望等于 sqrt(Nt*Nr) H H * sqrt(Nt * Nr / (Ncl * Nray)); end这段代码里最关键的是最后一行归一化。如果不乘 sqrt(Nt·Nr/(Ncl·Nray))信道矩阵的能量会随散射簇数增加而线性膨胀等效 SNR 被抬高画出来的频谱效率曲线虚高一截。乘完之后无论 Ncl、Nray 取多少信道能量的期望都稳定在 Nt·Nr才谈得上跨参数对比。实际仿真里 Ncl 和 Nray 的两组常用组合是一组是室内场景Ncl4、Nray5路径总数 20 条角度扩展取 10 度左右另一组是室外微蜂窝Ncl8、Nray10角度扩展取 5 度到 8 度。前者更稀疏OMP 表现更好后者路径多对混合方案的要求也更高。初学建议先用第一组曲线更光滑。3.2 OMP 混合预编码器从全数字最优解到码本稀疏分解OMP 的思路很直接先把全数字 SVD 预编码器算出来然后模拟域从码本里挑转向矢量列数字域用最小二乘重构残差反复迭代直到射频链数用完。function [F_RF, F_BB] omp_hybrid(F_opt, A, NRF) % 基于正交匹配追踪的混合预编码设计 % 输入 % F_opt [Nt x Ns] 全数字预编码器SVD 右奇异向量前 Ns 列 % A [Nt x n_cand] 发射端模拟码本每列已归一化 % NRF 射频链数量 % 输出 % F_RF [Nt x NRF] 模拟预编码器恒模约束 % F_BB [NRF x Ns] 数字预编码器已做功率约束 Nt size(A, 1); Ns size(F_opt, 2); R F_opt; % 残差初始为全数字最优解 used false(size(A, 2), 1); % 标记已被选中的码本列 sel_idx zeros(NRF, 1); for n 1:NRF % 计算每个码本列与残差的相关能量 corr A * R; % [n_cand x Ns] energy real(sum(conj(corr) .* corr, 2)); energy(used) -inf; % 已选列排除防止重复选择 [~, idx] max(energy); sel_idx(n) idx; used(idx) true; % 用已选列做最小二乘重构更新残差 A_sel A(:, sel_idx(1:n)); F_BB (A_sel * A_sel 1e-8 * eye(n)) \ (A_sel * F_opt); R F_opt - A_sel * F_BB; end % 取出最终模拟矩阵并做总功率归一化 F_RF A(:, sel_idx); F_BB sqrt(Ns) * F_BB / norm(F_RF * F_BB, fro); end逻辑上需要特别留意两点。第一残差 R 的更新必须用当前已选列的完整最小二乘重构结果而不是只减最近选中的那一列否则 OMP 退化成逐列能量贪心性能会明显变差。第二选列时在能量上加了 1e-8 的正则项再求逆这是为了防止码本里两列近似相关导致矩阵奇异。功率归一化放在最后一步先解出无约束的 F_BB再整体乘一个系数让 F_RF·F_BB 的 Frobenius 范数平方等于 Ns。这个系数同时作用于所有流不会改变各流之间的功率比例是工程上最常用的等功率分配方式。如果要做注水功率分配需要在这个位置换成按奇异值分配系数的版本。3.3 主仿真脚本从信道到互信息曲线的完整链路把前两段拼起来再套一层蒙特卡洛循环就是完整的主脚本。% 主仿真脚本单用户混合波束成形频谱效率对比 clear; clc; rng(42); % 固定随机种子保证结果可复现 % ---------------- 系统参数 ---------------- Nt 64; Nr 16; Ns 4; NRF 4; Ncl 4; Nray 5; sigma_phi 10 * pi / 180; sigma_theta 10 * pi / 180; % ---------------- 发射端码本 ---------------- n_cand 181; sin_grid linspace(-1, 1, n_cand); % 在 sin 域均匀采样 A exp(1j * pi * (0:Nt-1). * sin_grid) / sqrt(Nt); % ---------------- 蒙特卡洛与 SNR 扫描 ---------------- SNR_dB -10:5:15; n_trial 200; MI_mix zeros(size(SNR_dB)); MI_full zeros(size(SNR_dB)); for s 1:length(SNR_dB) rho 10^(SNR_dB(s) / 10); tmp_mix 0; tmp_full 0; for t 1:n_trial H gen_mmwave_channel(Nt, Nr, Ncl, Nray, sigma_phi, sigma_theta); % 全数字 SVD 预编码基线 [~, ~, V] svd(H); F_d V(:, 1:Ns); F_d sqrt(Ns) * F_d / norm(F_d, fro); tmp_full tmp_full compute_mi(H, F_d, Ns, rho, 1); % 混合方案OMP 从码本里挑模拟列 [F_RF, F_BB] omp_hybrid(V(:, 1:Ns), A, NRF); tmp_mix tmp_mix compute_mi(H, F_RF * F_BB, Ns, rho, 1); end MI_mix(s) tmp_mix / n_trial; MI_full(s) tmp_full / n_trial; end figure; plot(SNR_dB, MI_full, o-, SNR_dB, MI_mix, s-); grid on; legend(全数字上界, 混合波束成形); xlabel(SNR (dB)); ylabel(频谱效率 (bit/s/Hz));对应的互信息函数如下接口设计得很省心传进去的 F 既可以是全数字预编码矩阵也可以是混合预编码器的级联矩阵 F_RF·F_BB。function R compute_mi(H, F, Ns, rho, sigma2) % 计算给定预编码矩阵 F 下的互信息 % F 已满足 ||F||_F^2 Ns噪声方差为 sigma2 Heff H * F; % [Nr x Ns] R log2(real(det(eye(Ns) (rho / Ns / sigma2) * (Heff * Heff)))); end跑完这段你会看到混合曲线和全数字曲线在低信噪比几乎重叠高信噪比拉开 0.5~1 bit/s/Hz 左右的差距。这个差距就是模拟域恒模约束带来的硬损失任何混合算法都无法完全消除只能缩小。如果跑出来的差距超过 3 bit/s/Hz基本可以断定代码里有 bug优先查信道归一化和功率约束。4. 把频谱效率曲线调高码本分辨率、射频链数与蒙特卡洛配置代码能跑通只是第一步调参才是让仿真结果可信、论文可用的关键环节。同一套代码参数配得不好曲线可能掉 1~2 dB 的等效功率结论直接反转。4.1 码本分辨率空间频率域均匀采样比角度域更好码本构造有两种常见写法。一种是角度域均匀网格angle_grid -90:2:90再套进 e^{jπi sinφ}。另一种是空间频率域均匀网格sin_grid linspace(-1,1,N)直接构造 A exp(jπi·sin_grid)。我强烈建议用第二种。转向矢量的相位只与 sinφ 相关在 sin 域均匀采样码本列在阵列流形上才是真正均匀分布的。角度域均匀网格会在角度接近 ±90° 时出现转向矢量过度密集的现象浪费码本容量而在主瓣指向 0° 附近时分辨率反而不足。对 Nt64 的 ULA 来说主瓣宽度约 2/Nt 弧度大约 1.8 度。码本间隔取 2 度时波束峰值增益损失可能在 0.5 dB 附近取 0.5 度到 1 度损失压到 0.2 dB 以内计算量增加却很不明显。OMP 每次迭代的核心开销是 A·R码本从 91 列加到 361 列也就是多算一次矩阵乘法的事。验证码本建得是否合理有个直观手段把信道的最大奇异向量投影到码本上画出投影能量分布。% 检查码本覆盖对某个信道实现的主奇异向量观察投影能量 [~, ~, V] svd(H); W V(:, 1); figure; plot(sin_grid, abs(A * W).^2); xlabel(sin(\phi)); ylabel(投影能量);正常投影能量图应该只有一个尖锐的主峰旁瓣比主峰低 10 dB 以上。如果出现多个相近峰值说明码本分辨率不足或角度覆盖范围不合适OMP 会在多个方向之间摇摆选列不稳定。4.2 射频链数量与空间复用的边界混合波束成形里 NRF 的取值直接决定性能上限。NRFNs 是常规配置每个数据流占一条射频链代码里 NRF4、Ns4 就是这种。NRF 大于 Ns 时额外射频链给了模拟域更多自由度OMP 能挑选更多码本列参与重构通常会带来一点增益但收益递减非常明显从 4 条加到 8 条频谱效率收益可能不到 5%。NRF 小于 Ns 就要出问题流数大于射频链数时数字域根本没有足够维度去区分 Ns 个流等效信道矩阵秩不足互信息公式里的行列式会出现奇异。这种情况下系统要么被迫减少有效流数要么靠接收端多天线硬抗干扰频谱效率会和理论值严重偏离。所以参数校验时坚持一条底线Ns ≤ NRF ≤ Nt且接收天线数 Nr 必须不小于 Ns。还有一个容易疏忽的边界接收端如果也用混合结构接收射频链数同样不能小于 Ns否则接收空间自由度不够MI 公式里的等效信道要换成接收端混合合并后的形式。单边混合和双边混合的设置不要混用。4.3 蒙特卡洛次数曲线上的抖动暴露了什么毫米波信道本身是随机的单次信道实现跑出来的频谱效率没有说服力必须做蒙特卡洛平均。n_trial 取多少合适我的经验是 100 次起步200 次曲线就足够平滑500 次主要是延长运行时间收益不大。有个直观的检验方法连续跑两次相同参数、不同随机种子的仿真比较曲线的波动幅度。如果 5 dB 信噪比处的频谱效率波动超过 0.3 bit/s/Hz就说明蒙特卡洛次数不够。抖动通常集中在中间信噪比区间低信噪比下噪声主导、高信噪比下信道主导反而是中等信噪比对信道实现最敏感。看到曲线在这个区间上下抖动先去加次数不要急着改算法。固定随机种子 rng(42) 是保证可复现的最低要求。提交代码或写实验报告时随机种子一固定别人复现你的曲线就只需要跑同一份脚本不会出现“我这边结果不一样”的扯皮。4.4 迭代类算法的收敛设置交替最小化的调优区间OMP 是非迭代的贪心算法选列一次完成没有收敛问题。但如果你把代码库里的模拟预编码器换成交替最小化Alternating Minimization也叫流形优化就需要设迭代次数。常见做法是初始化时把 SVD 前 NRF 列强制恒模然后固定 F_RF 求 F_BB 的最小二乘解再固定 F_BB 沿梯度方向更新 F_RF 的相位循环往复。这种算法迭代 100 次基本能达到 OMP 九成以上的性能300 次后增益趋近于零。如果 500 次迭代曲线还在缓慢上升不是算法不行很可能是步长设得过大导致振荡或过小导致收敛太慢需要先把步长调小一倍观察残差是否单调下降。相比之下OMP 的优点是稳定、快、无超参我一般先跑 OMP 拿到一个性能下界再决定要不要上交替最小化。参数推荐值说明OMP 码本间隔0.5°~1°对应 Nt64过大会损失波束增益NRF等于 Ns常规配置加多了收益递减蒙特卡洛次数200曲线平滑运行时间可接受交替最小化迭代300 次超过后收益低于 0.1 bit/s/HzSNR 扫描区间-10~15 dB毫米波预编码研究常用区间5. 混合波束成形避坑指南五个仿真现场回放与排查这一章是把我在混合波束成形仿真里翻过车、也帮别人排查过的五类问题提炼出来的。每一条都按“现象 → 原因 → 解决”写对照着查能省下大量调 bug 的时间。5.1 坑一转向矢量的相位因子写错频谱效率整体乱掉现象OMP 跑出来的频谱效率曲线形态正确但绝对值比论文里的参考结果偏低 2~3 bit/s/Hz怎么调参数都补不回来。原因转向矢量公式里的相位是 2πd·sinφ/λdλ/2 时等于 π·sinφ。把系数误写成 2π会导致码本里的波束指向全部翻倍码本与真实信道角度不匹配。还有一种变体是把 (0:Nt-1) 误写成 (1:Nt)带来一个固定相偏虽然单列波束图形状不变但 OMP 重构时残差更新出现系统性偏差。解决打印码本任意两列的相位差和理论值对比。更直接的办法是检查 A*A 的对角元素自相关必须等于 1而相邻列互相关的峰值位置应该与 sin(Δφ) 对应。发现整体偏低时先怀疑这一处。5.2 坑二信道功率没有归一化曲线随参数跳变现象Ncl 或 Nray 改一下频谱效率曲线就整体上下移动 1~2 dB而且没有规律。原因信道生成时少乘了 sqrt(Nt·Nr/(Ncl·Nray))。路径数增加时 H 的 Frobenius 范数随之增大等效 SNR 被抬高曲线虚高换参数后表现不稳定。解决在信道函数末尾检查 norm(H,fro) 的均值应该在 sqrt(Nt·Nr) 附近。偏差超过 5% 就要检查归一化因子。蒙特卡洛循环里每个信道实现都要独立归一化不能在循环外只乘一次。5.3 坑三码本列没有归一化OMP 反复选出同一方向现象OMP 选出的 NRF 列里有重复角度残差下降停顿最终性能甚至不如只用一条射频链。原因码本列的能量不一致。A exp(jπi sinφ) 没除 sqrt(Nt) 时每列范数是 sqrt(Nt)OMP 的相关能量天然偏向某些列部分列归一化、部分列没归一化时选择会直接乱掉。还有另一种隐蔽情况是把码本从角度域网格切到 sin 域网格时列之间密度不均匀导致一部分方向的候选列能量偏高。解决对 A 做一次显式归一化 A A ./ vecnorm(A)然后画一张码本列范数分布图所有列范数应严格等于 1。检查 max(abs(A(:))) 是否等于 1/sqrt(Nt)如果接近 1 说明漏了恒模归一化。5.4 坑四SNR 定义混淆发射功率被算了两遍现象全数字基线和混合曲线在低信噪比下有交叉或者混合曲线在某个 SNR 点突然“超过”全数字上界这是明显的不合理现象。原因互信息公式里 ρ 的定义不一致。有些代码把 SNR 直接当成 ρ另一些又把总发射功率按流数再除一次导致等效功率偏移 10·log10(Ns) dB。全数字和混合两条曲线可能一个用了 ρ、一个用了 ρ/Ns交叉就出现了。解决在全数字基线上做自检设置 Ns1、NRFNt混合应退化为全数字两条曲线应该严格重合。如果这里都重合不了优先检查 compute_mi 里 ρ 和 Ns 的位置。另一个自检手段是让 SNR 趋近无穷频谱效率应趋近 log2(det(H_eff*H_eff)) 的有限值而不是无界增长。我一般会在脚本里写一条 assertion 做这种检查。5.5 坑五只跑一条信道就下结论曲线抖动大没法看现象修改算法后频谱效率提升 0.3 bit/s/Hz但换一次随机种子提升就变成 −0.2结论没法复现。原因没有做蒙特卡洛平均或者平均次数太少。单条信道的 SVD 和 OMP 结果对具体角度分布极度敏感偶然生成一个角度集中的信道混合性能就会虚高。解决至少 200 次蒙特卡洛平均并在脚本头部固定 rng(42)。改算法时坚持“同一随机种子、同一条信道”的前提下对比新旧算法收敛后再放开随机种子跑全量曲线。把随机种子、信道参数、码本参数都在脚本开头集中声明形成一套固定的实验配置后续排错会少很多弯路。6. 从单用户扩展到 MU-MIMO最后一步工程化改造与验证方法单用户混合波束成形跑通以后往下走最常见的需求是把系统扩展到多用户 MU-MIMO。工程上的改造思路并不复杂模拟域波束成形器对所有用户是共享的数字域预编码器则负责把用户间干扰去掉。具体做法是先根据所有用户的信道方向联合设计 F_RF让模拟波束覆盖全部用户的角度范围然后把每个用户与 F_RF 的等效信道 H_k·F_RF 拼起来在数字域用 ZF 或块对角化消除用户间干扰。写代码时注意一个边界条件多用户的总流数K×Ns_k不能超过 NRF否则数字域没有足够维度同时服务所有用户。改造后的验证方法我认为比单用户时更重要因为多用户场景的“性能好”不能只看总频谱效率还要看每个用户是否公平。我习惯的做法是同时画出三样东西系统总频谱效率随 SNR 的变化曲线、单用户最差频谱效率随 SNR 的变化曲线以及全数字 ZF 基线的对比曲线。如果混合方案的总频谱效率接近全数字但最差用户曲线掉得很厉害那说明数字域没有做好公平性调度还有优化空间。另一项值得养的工程习惯是把自己调试过的参数表和关键曲线截图保存下来。混合波束成形这个方向复现门槛不低你记录下 Ncl、Nray、码本间隔、蒙特卡洛次数这些参数后无论是自己隔三个月再回头改代码还是帮同学复现你的结果都能省掉大量重新试错的时间。我自己就吃过亏——当年调好一组参数后没有记录换电脑重跑时花了整整两天才把曲线对齐回原来的样子。从那以后凡是涉及随机信道和迭代算法的仿真我先把参数清单写进脚本注释再动算法。希望帮到你。本文还有配套的精品资源点击获取