简介:MVDR(最小方差无失真响应)波束形成是阵列信号处理中的经典算法,该资源提供了一套完整的MATLAB实现源码,面向通信、雷达、声学等领域需掌握自适应波束形成的开发人员,也适合入门新手对照学习。项目共5个文件,其中3个.m脚本为可运行源码,用于实现MVDR波束形成、期望方向信号增强及干扰抑制仿真;另2个.asv文件为MATLAB自动保存的备份版本,便于追溯编辑过程。压缩包整体仅2KB,轻量整洁,下载后即可快速运行修改。当前已有527人学习下载,可见该主题关注度较高。通过阅读与运行代码,读者可直观理解MVDR在期望方向让波束尽可能多通过、同时对干扰进行有效抑制的稳健性优势,掌握算法核心思路与工程实现细节,并能在此基础上进一步拓展至LCMV、自适应阵列等进阶内容。
1. MVDR 波束形成:经典在原理,稳健在工程
MVDR 方法(Minimum Variance Distortionless Response,最小方差无失真响应)能成为波束形成里的经典,靠的不是花哨结构,而是它把问题收敛成一个非常干净的二次约束优化:期望方向保持增益 1,同时最小化阵列输出功率。换句话说,如果某个角度方向有一个强干扰,它会自动用一个深零陷把它压下去;如果干扰和期望信号离得远,波束的其它地方也会自动兜住。很多资料都会强调它稳健性强,但真的用 MATLAB 跑一个 8 元均匀线阵仿真,你就会看到反差:公式直接套,目标信号反而最容易被“顺手”消掉。所以这篇笔记不打算复述教材,而是按照“原理 → 最小实现 → 稳健化 → 排障 → 验证”的顺序,把一套能复现、能调参、能判断好坏的 MVDR 全流程放出来。
这套内容适合正在做阵列信号处理、雷达测向、麦克风阵列或任何需要空间滤波的工程师。我会用复数窄带模型把推导讲清楚,再把代码一段段拆开讲参数。新手可以照抄跑通,熟手可以直接跳到最后两章看稳健性边界。
2. MVDR 的数学本质:约束最优问题与闭式解
2.1 窄带阵列模型与导向矢量构造
先固定一个足够通用的模型:N 个阵元排成均匀线阵(ULA),阵元间距 d,期望信号和干扰都是窄带远场平面波,到达角分别为 θs 和 θj。以第一个阵元为相位参考,第 n 个阵元相对参考点的波程差是 n·d·sinθ,对应的相位差是 2π·n·d·sinθ/λ。把这 N 个相位差写成一个列向量,就是导向矢量:
a(θ) = [1, e^{-j2πd sinθ/λ}, ..., e^{-j2π(N-1)d sinθ/λ}]^T
这个矢量的物理含义很直白:它描述了从 θ 方向来的单位幅度信号,在 N 个阵元上分别“看到”的复幅度。阵列流型和导向矢量是所有空间滤波算法的前提,MVDR 也不例外。MATLAB 里用匿名函数写是最方便的,因为后面扫描角度、构造不同方向的导向矢量都只需要传入 θ。
% 参数区 N = 8; % 阵元数 fc = 10e9; % 载频 10 GHz c = 3e8; % 光速 lambda = c / fc; % 波长 d = 0.5 * lambda; % 半波长布阵,避免栅瓣 % 导向矢量函数:输入角度(度),输出 N x 1 复向量 steer = @(thetaDeg) exp(-1j*2*pi*(0:N-1)'*(d/lambda)*sind(thetaDeg));逻辑说明:sind 是 MATLAB 的按度数计算正弦函数,避免手动转弧度带来的低级错误;d/lambda 在 ULA 里等于 0.5,所以相位项里直接是 π·n·sinθ。参数说明:如果阵列不是 ULA,或者阵元位置有随机扰动,就不能再用这种闭合表达式,而要用几何投影法逐个计算阵元坐标的时延差。这是后文避坑章里非常重要的一点,很多人直接套 ULA 公式去算圆阵,结果导向矢量是错的。
2.2 最小方差约束问题的推导
窄带阵列某一时刻的快照 x(t) ∈ C^N,包含期望信号 s(t)·a(θs)、干扰 j(t)·a(θj) 和噪声 n(t)。对每个快照做加权求和,y(t) = w^H x(t)。我们想要的是:来自 θs 方向的信号无失真通过,也就是 w^H a(θs) = 1;同时让输出功率 E[|y|^2] = w^H R w 最小,其中 R = E[x x^H] 是阵列协方差矩阵。
于是得到一个标准的线性约束最小方差问题:
min_w w^H R w,约束条件 w^H a(θs) = 1
用拉格朗日乘子法,构造 L(w, λ) = w^H R w + λ(w^H a(θs) - 1),对 w 求梯度并令其为零,得到 R w = -λ a(θs),再代回约束解出 λ,最终得到闭式解:
w_MVDR = R^{-1} a(θs) / (a(θs)^H R^{-1} a(θs))
这个形式非常简洁,但它的成立依赖两个前提:一是 R 可逆,二是模型里的导向矢量和真实传播导向一致。只要有一个被破坏,闭式解就会变得很极端。后面稳健性章节展开讨论的,就是这两个前提被破坏时会发生什么。
2.3 为什么它能同时抑制干扰:白化视角
MVDR 的“抑制干扰”能力,从白化角度理解最直观。把协方差矩阵做特征分解 R = U Σ U^H,其中大特征值对应强干扰或强信号方向,小特征值对应噪声底。权向量 w = R^{-1} a / (a^H R^{-1} a),本质上是对导向矢量做了一次协方差逆的映射,也就是白化加投影。这个过程会把强干扰方向的特征值倒数放大,从而在波束图里对应位置产生零陷。
更具体地说,如果只有一个强干扰在 θj,MVDR 会在 θj 方向形成一个大约 N 元阵列理论极限那么窄的零陷,同时对噪声方向做均匀化,压低旁瓣。相比常规延时相加波束形成,MVDR 的主瓣宽度没有本质改变,但零陷深度和旁瓣抑制能力都强很多,因为它是数据自适应的,会持续跟踪 R 中出现的能量集中方向。
这里有一个重要的边界条件:零陷数量最多只有 N-1 个。因为权向量只有 N 个自由度,一个约束 w^H a(θs)=1 已经占用一个自由度,剩下 N-1 个自由度用于在干扰方向置零。如果干扰数量超过 N-1,MVDR 只能“平均”地压低这一片区域,无法每个干扰都精确零陷。
2.4 和常规波束形成的分水岭
常规延时相加波束形成(CBF)的权向量是 w = a(θs)/N,它完全不看数据,只做相位对齐和幅度平均。优点是稳健,缺点是分辨率受瑞利限约束,主瓣宽度约为 0.89λ/(Nd) 弧度,而且强干扰进入旁瓣时基本压不住。MVDR 用数据驱动的方式换取分辨率,代价是它对模型误差和采样误差更敏感。
在 MATLAB 里我常用一句口诀来区分两者:CBF 是固定滤镜,MVDR 是自适应滤镜。CBF 只要你给定角度就能算权向量;MVDR 必须先估计 R,再从 R 里反演出权值。这意味着 MVDR 的每一次更新都和你的快拍质量、干扰强度、数值稳定性绑定。理解了这一点,就不会再问“为什么我用 MVDR 波束图比 CBF 还难看”这种问题了——因为你的 R 本身就有问题。
3. 用 MATLAB 跑通 MVDR:从阵列仿真到权向量
3.1 实验设置:ULA、信噪比与干扰强度
搭建仿真时,我习惯把参数全部放到脚本最前面,方便做蒙特卡洛扫描。这里用一个 8 元 ULA,期望信号来自 10°,干扰来自 -40°,信噪比 10 dB,干噪比 30 dB。之所以把干扰放在 30 dB,是为了让“普通 CBF 被干扰抬高压不住,而 MVDR 能凹出深零陷”的差异足够明显,观察起来更清楚。
% 生成两个复基带信号源 numSnap = 2000; % 快拍数 tIdx = 0 : numSnap-1; % 离散时间索引 SNR_dB = 10; % 期望信号信噪比 INR_dB = 30; % 干扰干噪比 sSig = 10^(SNR_dB/20) * exp(1j*0.12*2*pi*tIdx); % 期望信号复包络 jSig = 10^(INR_dB/20) * exp(1j*0.37*2*pi*tIdx); % 干扰复包络参数说明:两个信号的数字频率 0.12 和 0.37 是随便选的,只要保证它们在时域不完全相关即可。SNR 和 INR 分贝值换算成幅度时除以 20,因为功率是幅度的平方。快拍数这里取 2000,实际上是故意选得很宽裕,先把采样误差的影响排除,后面的避坑章节会把快拍数降到接近阵元数,让你看到问题是怎么冒出来的。
3.2 采样协方差矩阵与 MVDR 权向量
核心的求解几乎就是一行公式,但工程上要注意两点:一是用反斜杠求解而非显式求逆,二是用采样协方差 R_hat 近似真实 R。
% 构建阵列快照矩阵:N x numSnap X = steer(10) * sSig + steer(-40) * jSig + ... (randn(N, numSnap) + 1j*randn(N, numSnap)) / sqrt(2); % 采样协方差矩阵 R = X * X' / numSnap; % MVDR 权向量:w = R^{-1} a / (a^H R^{-1} a) a_s = steer(10); % 期望方向导向矢量 w = R \ a_s; % 这一步先解 R w = a_s w = w / (a_s' * w); % 归一化满足约束 % 波束输出 y = w' * X; outPower = mean(abs(y).^2);逻辑说明:R = X·X'/numSnap 得到的是最大似然采样协方差,要求 numSnap 远大于 N 才对。求解 w 时先做 R\a_s,再接一个标量除法,等价于闭式解,但是数值上更稳。最后 outPower 只是用来检查输出是否合理,不是核心指标。参数说明:期望方向 a_s 必须和 steer(10) 同源,不要用手敲的复数数组去替代函数生成的导向矢量,否则相位参考很容易搞错。
3.3 画出波束图并查看零陷
权向量算出来后,常规操作是扫描整个角度范围,画出波束图,确认期望方向增益是 0 dB,干扰方向有深零陷。
thetaGrid = -90:0.1:90; pattern = zeros(size(thetaGrid)); for k = 1 : numel(thetaGrid) pattern(k) = w' * steer(thetaGrid(k)); end figure; plot(thetaGrid, 20*log10(abs(pattern)), 'LineWidth', 1.5); xlabel('角度 (deg)'); ylabel('归一化增益 (dB)'); ylim([-60 5]); grid on;这里有个值得记住的细节:波束图扫描的粒度不要取太大,0.1° 就够;如果你发现零陷不在 -40° 而是在 -39.7°,通常不是算法错了,而是扫描网格和信号生成角度之间差了半个网格。更严谨的做法是把峰值/零陷位置用二次插值或者直接在信号频率处重新算,而不是把网格加密到 0.001°,那样只会浪费计算时间但不会提升物理分辨率。
3.4 快拍数、阵元数和加载量的第一轮权衡
当你把 numSnap 从 2000 改成 200,波束图仍然正常;改成 20,R 变成 8×8 的矩阵,协方差矩阵只是近似满秩,零陷位置开始漂移。改成 8 以下,R 直接奇异,反斜杠会给出一个非常夸张的权向量,增益图里出现随机尖峰。这个趋势就是快拍数和阵元数的第一层权衡:理论上 numSnap 至少大于 N,工程上为了稳健,我一般要求 numSnap 不小于 10N。如果硬件条件限制快拍数,就必须在下一章引入对角加载。
4. 稳健性强化:对角加载、特征子空间与最坏情况约束
4.1 裸 MVDR 不稳健的三个根源
先说结论:裸 MVDR 的稳健性差,不是公式推导错,而是三个工程条件在真实系统里很难同时满足。
第一是采样误差。真实 R 是统计期望,但实际只能用有限快拍估计,协方差矩阵的小特征值会被低估或高估,对应的特征向量方向就会被权向量放大,造成旁瓣畸变。第二是导向矢量失配。阵元位置误差、互耦、通道幅相不一致、来波波前弯曲,都会让真实导向矢量和理论公式不一致。当失配超出一定范围时,MVDR 会把这个“想保留但没保住”的信号当成干扰去抑制,输出 SINR 反而大跌。第三是数值条件数。如果存在一个 40 dB 的强干扰,R 的最大最小特征值之比可以到 10^4 以上,求逆过程会放大噪声底的误差。
4.2 对角加载:一行代码补回来的稳健性
对角加载(Diagonal Loading)是在采样协方差矩阵上叠加一个对角阵 βI,核心作用是把小特征值抬高,降低特征值扩散程度,从而抑制权向量范数爆炸。
beta = 10 * 1; % 加载量, 先取噪声方差估计的 10 倍 R_dl = R + beta * eye(N); w_dl = R_dl \ a_s; w_dl = w_dl / (a_s' * w_dl);逻辑说明:噪声方差在仿真里是 1,所以 10 倍就是加 10。代码里 w_dl 的求解流程和前面完全一致,只是 R 换成了 R_dl。参数说明:beta 太小的效果不明显,beta 太大则 MVDR 退化为常规延时相加波束形成,自适应能力被抹平。加载量的选取有时像玄学,常见的几条经验是:一是用噪声方差估计乘以 10 到 100;二是用 R 的迹除以 N 得到平均功率,再乘一个 0.01 到 0.1 的系数;三是直接做参数扫描找 SINR 峰值。工程上我倾向第三种,相当于给加载量留一个旋钮,而不是拍脑袋定死。
4.3 特征子空间稳健波束形成
特征子空间方法(Eigenspace-Based MVDR)的思路比对角加载更精确:协方差矩阵的特征向量分成信号加干扰子空间和噪声子空间,把期望方向的导向矢量投影到信号子空间后,再代入 MVDR 公式。这样既保留了干扰抑制能力,又消除了由噪声子空间误差导致的权向量扰动。
% 先做一次轻加载,防止特征分解时数值异常 R_tmp = R + 1e-6 * eye(N); [eVec, eVal] = eig(R_tmp); eValVec = diag(eVal); [~, sortIdx] = sort(real(eValVec), 'descend'); pDim = 2; % 信号子空间维度:期望信号 + 干扰 Us = eVec(:, sortIdx(1:pDim)); a_proj = Us * (Us' * a_s); % 导向矢量向信号子空间投影 w_es = R_tmp \ a_proj; w_es = w_es / (a_proj' * w_es);逻辑说明:eig 输出的特征向量按特征值升序排列,所以 sort 之后取前 pDim 列。pDim 的选取是整个方法的关键:它的准确值等于“非噪声源的数量”。在仿真里我们明确知道是两个源,所以取 2;真实场景里通常用 MDL 或 AIC 准则估计源数,或者干脆把 pDim 设成比源数大 1 到 2,作为容差。参数说明:如果你把 pDim 取 1,只保留期望信号方向,那么干扰方向的零陷也会消失,因为干扰子空间被丢了;取 3,就把一个噪声特征向量当成信号子空间,稳健性提升有限。这个参数我习惯用模拟数据预扫一遍,找到 SINR 对 pDim 的拐点。
4.4 最坏情况鲁棒 MVDR 的做法
更理论化的稳健化思路叫做最坏情况鲁棒 MVDR(Worst-Case Robust MVDR),它把导向矢量失配建模为一个不确定集合,假设真实导向矢量在标称导向矢量附近的一个椭球或球内,然后优化最坏情况下的输出 SINR。数学上通常会得到一个带约束的二次规划,可以用 CVX 求解,但在 MATLAB 里有一种常见的便宜近似:在标称导向矢量周围取一组扰动导向矢量,构造一个“扩展协方差”,然后做对角加载。
如果不想引入额外工具箱,我一般用两点近似替代:一是把导向矢量本身做平滑,也就是在 θs 附近 ±Δθ 范围内取多个导向矢量平均,得到 a_smooth。这个均值导向矢量本身就降低了失配灵敏度。二是把约束从一条点约束放松为几个角度采样点的线性约束,即令 w^H [a(θs-Δ), a(θs), a(θs+Δ)] = [1,1,1],相当于给主瓣区域加了一个平坦约束。这个做法在麦克风阵列里叫主瓣约束,本质上是牺牲少量分辨率换取稳健性。实现时只需要把分母变成矩阵形式:w = R^{-1} C (C^H R^{-1} C)^{-1} g,其中 C 是约束矩阵,g 是期望响应向量。这个方法对失配非常友好,我在有阵元位置误差时特别喜欢用。
如果要用代码表达,LCMV 形式如下:
deltaDeg = 2; % 主瓣保护范围 C = [steer(10-deltaDeg), steer(10), steer(10+deltaDeg)]; g = [1; 1; 1]; % 三个角度都要求增益为 1 R_dl = R + 10 * eye(N); w_lcmv = R_dl \ C * ((C' * (R_dl \ C)) \ g);参数说明:deltaDeg 选取要和阵列波束宽度匹配,8 元半波长 ULA 的 3 dB 波束宽度大约十几度,取 2° 对主瓣影响很小,但如果阵元数到 32,同样 2° 就可能压掉主瓣的一部分,需要缩小到 0.5° 附近。
5. 常见问题与排查:MVDR 翻车现场的几条血泪经验
5.1 协方差矩阵奇异:快拍不够或信源相干
现象:R \ a_s 报矩阵接近奇异,或者不报错但波束图出现随机尖峰。把权向量范数打印出来,会发现它比正常情况大很多,输出功率也剧烈抖动。
原因:常见原因有两个,一是快拍数少于阵元数,导致采样协方差秩亏;二是多个信号完全相干,比如同一信号的强多径,理论 R 本身就是奇异的。这两种情况都会让小特征值接近零,逆矩阵映射把噪声子空间振幅放大。
解决:先把快拍数提到 N 的 5 到 10 倍;如果受限,就先对角加载。对相干信号问题,加载救不了物理根源,常用的修复是用空间平滑技术,把阵列划成重叠子阵,将各子阵协方差平均。前向-后向平滑可以把秩恢复一半以上,适合双路径反射场景。这个属于去相关处理,和 MVDR 本身是两码事,但它决定了你喂给 MVDR 的 R 是不是满秩。
5.2 导向矢量失配:期望信号被当成干扰消掉
现象:仿真里设定期望信号在 10°,但波束图在 10° 附近出现了一个浅凹坑,输出 SINR 比理论值低了 10 dB 以上。
原因:权向量计算用的导向矢量是 steer(10),但真实信号可能由于阵元位置误差、通道幅度误差或波前弯曲,实际导向矢量等效在 9.5°。MVDR 的约束只锁定了公式里的方向名称,并没有锁定物理空间里的真实来波。于是它把这个“不在约束方向的信号”当成需要压制的干扰。
解决:这是最需要优先排查的一步。先用常规 CBF 扫一遍来波方向,确认峰值角度;把峰值角度作为 MVDR 的约束方向,而不是直接用先验角度。如果先验角度只能精确到 2°,那么就用 4.4 节的主瓣展宽约束;如果系统里每个阵元有独立的幅相校准系数,一定要把校准系数乘进导向矢量再算,而不是在数据上做后处理。
5.3 强干扰叠加下的数值病态
现象:INR 从 30 dB 提到 60 dB,波束图里的零陷确实更深了,但主瓣也出现畸变,且权向量范数从个位数暴涨到几千甚至上万。输出 SINR 反而变差。
原因:强干扰让 R 的特征值跨度变得极大,最大特征值可能到 10^6,最小特征值还是噪声底 1。尽管数学上可逆,但数值精度有限,双精度浮点在这种条件数下已经不太可靠,求逆结果主要由舍入误差决定。
解决:先做对角加载,把特征值跨度压到可控范围,加载量至少要和最大特征值的 0.1% 到 1% 相当。然后再看权向量范数是否收敛。另外,把 R 换成用 SVD 求伪逆而不是显式 inv,可以在一定程度上缓解病态,但治标不治本。真正该做的还是在硬件端控制干扰功率,或者用削波/杂波图处理,避免超大动态范围直接冲击自适应求解。
5.4 训练数据里混入期望信号
现象:发射站和接收站距离很近,训练快照里一直含有强期望信号,MVDR 算出来的权向量把期望方向彻底压制,输出 SINR 变成负值。
原因:MVDR 约束是 w^H a_s = 1,但如果 R 中存在一个比噪声强几个数量级的信号分量,最小化输出功率时算法会试图把这个分量和干扰一起抑制,但约束又强制它在 a_s 上保留,最终妥协结果往往是权向量幅度极大,主瓣方向呈撕裂状。
解决:最直接的做法是“去期望信号训练”,例如利用发射波形的副本做相消,再把剩余快照拿去估计 R。另一种思路是用对角加载把信号特征值的相对权重压下去,让算法不敢对期望信号方向动真格。这两种路径分别对应数据级和算法级的修复,大多数工程场景下先用对角加载看趋势,不够再加时域相消。
5.5 阵元位置误差与幅度相位不一致
现象:同一套算法在仿真 ULA 里完美工作,换到实际阵列或者随机布阵的实验室测试台上,波束图严重变形,零陷错位,输出 SINR 大幅下降。
原因:程序里 steer 函数用的是理想等距 ULA 相位差,实际阵元的相位中心、幅度响应、互耦都和理想情况不同。失配量超过波束宽度的十分之一后,MVDR 的零陷就开始失效。
解决:从实测校准数据里重建导向矢量,而不是用理想公式。常见的校准手段是:把已知方位的大功率信源放在不同角度,对每个角度采集快照,用 CBF 粗扫出峰值,再用该峰值采样的特征向量作为该方向的导向矢量。做完这一步,MVDR 的约束才有工程意义。如果阵元位置本身是随机布阵,导向矢量函数也要改成按坐标投影计算,而不是套 ULA 的闭式表达式。
6. 验证与进阶:用输出 SINR 衡量稳健性并扩展约束
6.1 输出 SINR 的定义与计算
波束图好看只是直观印象,真正衡量算法好坏的指标是输出 SINR。它把期望信号功率、干扰功率和噪声功率分开度量,才能反映出“期望信号保住多少、干扰压掉多少”这两件事。
% 理论干扰+噪声协方差矩阵 Rn = 10^(INR_dB/10) * (steer(-40) * steer(-40)') + eye(N); % 输出 SINR(dB) SINR_lin = abs(w' * steer(10))^2 * 10^(SNR_dB/10) / real(w' * Rn * w); SINR_dB = 10 * log10(SINR_lin);逻辑说明:这里刻意没有把期望信号放进 Rn,因为约束本身保证 w^H a_s=1,放进 Rn 会把固定 1 的增益也乘进去,反而干扰比较。如果我们想考察失配场景,就应该把 steer(10) 换乘实际失配导向矢量 a_true,同时用 a_true 计算权向量的 w^H a_true,这时它就未必等于 1 了,SINR 才真正反映稳健性损失。
6.2 稳健性随加载量的变化:参数扫描法
与其争论加载量取几倍噪声方差,不如做一次扫描,直接用 SINR 曲线选点。我在每个项目里都会保留这段代码,它给后续调参省了大量时间。
betaSet = logspace(-2, 6, 40); sinrArr = zeros(size(betaSet)); for m = 1 : numel(betaSet) R_dl = R + betaSet(m) * eye(N); wTmp = R_dl \ a_s; wTmp = wTmp / (a_s' * wTmp); sinrArr(m) = 10*log10( abs(wTmp'*a_s)^2 * 10^(SNR_dB/10) / ... real(wTmp'*Rn*wTmp) ); end semilogx(betaSet, sinrArr, 'LineWidth', 1.5); xlabel('加载量 beta'); ylabel('输出 SINR (dB)'); grid on;这条曲线的典型形态是:beta 很小时 SINR 低,因为过拟合;beta 适中时出现平台峰值;beta 继续增大,SINR 缓慢回落,逐渐逼近 CBF 的 SINR。峰值对应的是“充分拟合干扰,又不放大噪声子空间误差”的平衡点。我一般取峰值的两倍到五倍作为工程保守值,这样可以容忍更多未知失配。
6.3 从 MVDR 到 LCMV 的一小步
如果主瓣保护还不够,可以走 LCMV,把约束矩阵从单个导向矢量扩展为多个方向的约束。除了前面 4.4 节的主瓣约束,另一种常见用法是给已知干扰方向强制零响应,比如 w^H a(θj) = 0,这会形成一个更深的固定零陷。但它有个代价:如果干扰方向估计有偏,固定零陷反而浪费了自由度,结果还不如让 MVDR 自己去找零陷。所以在是否把干扰约束侦测写死这件事上,我的经验是:干扰方位测量精度高于 0.5° 时才值得加硬约束,否则就交给数据自适应。
最后说一个我反复遇到的教训:MVDR 的代码实现可以压缩到十行,但真正值钱的是你对 R、对 a(θ)、对加载量那几步的处理方式。不要一上来就追求花哨算法,先把裸 MVDR 在理想仿真里跑通,再逐步加入失配、快拍受限、相干源这些实际条件,每一次修改都用输出 SINR 去验收,而不是只看波束图是否“看起来够深”。这套验证习惯能让你避开大多数工程翻车,希望帮到你。
本文还有配套的精品资源,点击获取