资讯动态

MATLAB数字多波束形成仿真:从均匀线阵建模到稳健自适应波束形成

发布时间:2026/9/5 10:38:54 来源:尧图企业网站定制
简介本资源是一份面向阵列信号处理初学者与工程实践者的数字多波束形成DBFMATLAB仿真代码聚焦雷达、通信等系统中多方向同时波束赋形的核心技术实现。压缩包共2个文件1个MATLAB主程序.m文件 1个说明性txt文件总大小仅2KB轻量易读便于快速理解DBF权值计算、波束扫描及方向图绘制全流程。已有978人学习下载反映出其在高校课程设计、科研入门与算法验证场景中的实用价值。代码支持灵活配置四个独立波束的方位角、俯仰角与载波频率并可自定义阵元数量、间距及空间坐标完整绘制各波束的方位面与俯仰面方向图图形结果与参数设置严格一一对应关键步骤均含中文注释涵盖参数初始化、权向量构造、空域响应计算与多维绘图等模块是掌握DBF原理与MATLAB工程实现的理想学习范例。1. 从“一束光”到“聚光灯”数字多波束形成DBF的工程价值如果你用过手电筒就知道它的光束只能照亮一个方向。在雷达、声呐或者5G/6G通信系统里传统的天线阵列就像这个手电筒一次只能“看”或者“听”一个方向。数字多波束形成Digital Beamforming DBF技术则相当于把一个手电筒瞬间变成了一个可以同时照亮多个方向的“智能聚光灯阵列”。它能让一个天线阵面在同一时刻生成多个独立可控的波束分别指向不同的目标或用户。这个能力是现代相控阵雷达实现多目标跟踪、通信基站实现空分复用以提升容量的核心技术基石。简单来说DBF的核心思想是“先接收后处理”。天线阵列的每个阵元接收到的信号不再像传统模拟波束形成那样直接进行模拟加权合成而是分别进行数字化采样。所有阵元的数字信号被送入处理器比如FPGA或GPU在数字域里我们可以通过软件算法对这些数据进行灵活的加权、求和从而实时、动态地“合成”出指向任意方向的波束并且可以同时合成多个。这种灵活性是模拟系统无法比拟的。为什么MATLAB仿真在这个领域如此重要因为DBF系统的硬件实现尤其是大规模阵列成本极其高昂任何设计失误都意味着巨大的经济损失。在纸上谈兵和真金白银烧硬件之间MATLAB仿真搭建了一座不可或缺的桥梁。它允许我们在电脑上用相对低廉的成本验证波束形成算法、评估阵列性能如波束宽度、旁瓣电平、分析在复杂环境多径、干扰下的鲁棒性并优化关键参数。一个可靠的MATLAB仿真模型是DBF系统从理论走向工程实践的“第一张蓝图”和“安全试车场”。接下来我将以一个典型的均匀线阵ULADBF仿真为例手把手带你从零搭建代码框架并深入每一个技术细节和容易踩坑的环节。2. 仿真基石均匀线阵模型与信号建模在开始写代码之前我们必须把物理世界的问题用精确的数学模型描述清楚。这是所有仿真工作的起点模型建得准后面的结果才有意义。2.1 阵列几何与空间响应向量我们以最简单的均匀线阵Uniform Linear Array ULA为例。假设有N个全向阵元等间距排列在一条直线上阵元间距为d。在远场条件下一个来自方向角θ这里θ为与阵列法线的夹角即方位角的平面波到达阵列。由于波程差信号到达相邻阵元的时间会有一个延迟。这个延迟效应体现在复信号上就是一个相位差。对于载波波长为λ的窄带信号这是DBF的常见假设宽带DBF处理更复杂第n个阵元n0, 1, ..., N-1相对于参考点通常取第一个阵元接收到的信号其复包络会乘以一个相位因子。所有阵元的这些相位因子组合起来就构成了一个至关重要的向量——阵列流形向量或导向向量。在MATLAB中我们这样构建它function a steering_vec_ula(theta, N, d, lambda) % theta: 入射角度度 % N: 阵元数 % d: 阵元间距米 % lambda: 波长米 theta_rad deg2rad(theta); n (0:N-1).; % 列向量 a exp(1j * 2 * pi * d / lambda * n * sin(theta_rad)); end这段代码是DBF仿真的核心之一。2 * pi * d / lambda * sin(theta)计算的是相邻阵元间的相位差。n向量与之相乘并取指数就得到了每个阵元相对于参考阵元的复相位。为什么用sin(theta)这是由几何关系决定的波程差等于d * sin(theta)。这个导向向量a本质上编码了来自θ方向的信号在阵列上的“空间签名”。注意角度约定的坑。这是最容易混淆的地方之一。在仿真中务必统一角度定义如θ0°表示阵列法线方向θ90°表示端射方向。不同的教材和论文可能使用不同的约定如与阵列轴线的夹角一旦混用会导致波束图完全错乱。我建议在代码开头用注释明确写出你的角度定义。2.2 接收信号模型构建有了导向向量我们就可以构建完整的接收信号模型。假设空间中有K个来自不同方向的远场窄带信号源那么阵列在某一快拍snapshot时刻接收到的N×1维数据向量x可以表示为% 参数设置 N 16; % 16阵元 d 0.5; % 半波长间距 lambda 1; % 归一化波长设为1方便计算d0.5即代表半波长间距 theta_signal [10, -20, 45]; % 三个信号源的方向单位度 K length(theta_signal); s sqrt(1/2) * (randn(K, 1) 1j*randn(K, 1)); % 生成K个复信号源功率归一化 noise_power 0.01; % 噪声功率方差 % 构建接收信号 X zeros(N, 1); for k 1:K a_k steering_vec_ula(theta_signal(k), N, d, lambda); X X a_k * s(k); % 信号叠加 end % 添加复高斯白噪声 X X sqrt(noise_power/2) * (randn(N,1) 1j*randn(N,1));这里s是信号源的复振幅通常建模为复高斯随机变量。噪声我们加的是圆对称复高斯白噪声其实部和虚部独立同分布方差各为noise_power/2这样复噪声的总方差就是noise_power。信噪比SNR的定义需要小心通常指单个阵元上的信号功率与噪声功率之比。在仿真中我们可以通过控制s的功率和noise_power来精确设置SNR。3. 核心算法实现从常规波束形成到自适应处理信号模型准备好后我们就可以施展DBF的魔法了。波束形成的本质是给每个阵元的接收信号乘以一个复权重w然后求和形成一个标量输出y w^H * x。权重向量w的选择决定了波束的特性。3.1 常规波束形成CBF与波束图最直观的方法是让波束指向我们期望的方向θ0。这只需要将权重向量设为该方向的导向向量即可有时会进行归一化theta_scan -90:0.1:90; % 扫描角度范围 P_cbf zeros(size(theta_scan)); % 存放波束形成输出功率 w_cbf_0 steering_vec_ula(0, N, d, lambda); % 指向0度的权重 w_cbf_0 w_cbf_0 / norm(w_cbf_0); % 权重归一化不影响方向性但方便比较 for idx 1:length(theta_scan) a_scan steering_vec_ula(theta_scan(idx), N, d, lambda); % 计算阵列对该方向单位功率信号的响应 P_cbf(idx) abs(w_cbf_0 * a_scan)^2; end % 绘制波束图 figure; plot(theta_scan, 10*log10(P_cbf/max(P_cbf)), LineWidth, 1.5); xlabel(角度 (度)); ylabel(归一化功率 (dB)); title(常规波束形成CBF波束图); grid on; xlim([-90, 90]);运行这段代码你会得到一个主瓣指向0°两侧有旁瓣的波束方向图。波束宽度通常指3dB宽度和旁瓣电平是衡量波束性能的关键指标。阵元数N越多主瓣越窄分辨率越高阵元间距d的选择也至关重要d λ/2会导致出现栅瓣在非期望方向出现与主瓣一样高的波瓣这是阵列设计的大忌。为了获得更低的旁瓣我们可以采用窗函数加权如切比雪夫窗、泰勒窗而不是简单的均匀加权即直接用导向向量。% 使用切比雪夫窗压低旁瓣 sll_dB -30; % 期望旁瓣电平为-30dB win chebwin(N, sll_dB); % 生成切比雪夫窗向量 w_cbf_cheb w_cbf_0 .* win; % 对权重进行窗加权 w_cbf_cheb w_cbf_cheb / norm(w_cbf_cheb); % 重新归一化加窗后再次绘制波束图你会发现旁瓣明显被压制了但代价是主瓣会稍微变宽。这是阵列设计中经典的“主瓣宽度-旁瓣电平”权衡。3.2 自适应波束形成ABF与Capon算法常规波束形成是“静态”的它的波束形状和指向是固定的。但在存在强干扰或信号方向未知的情况下我们需要“自适应”地调整权重在期望信号方向保持增益的同时在干扰方向形成零陷。最著名的方法是Capon最小方差无失真响应MVDR波束形成器。它的思想很巧妙最小化阵列输出功率即方差但约束在期望方向θ0上的增益为1无失真。数学上表述为一个约束优化问题其解为w_mvdr (Rxx^-1 * a(θ0)) / (a(θ0)^H * Rxx^-1 * a(θ0))其中Rxx E[x * x^H]是接收数据的协方差矩阵a(θ0)是期望方向的导向向量。在仿真中我们通常用多个快拍的数据来估计Rxx% 生成多快拍数据 num_snapshots 100; X_snapshots zeros(N, num_snapshots); % 假设有两个信号期望信号在10°干扰在-30° theta_desired 10; theta_interf -30; % 生成信号 s_desired sqrt(1/2)*(randn(1, num_snapshots) 1j*randn(1, num_snapshots)); s_interf sqrt(5/2)*(randn(1, num_snapshots) 1j*randn(1, num_snapshots)); % 干扰功率更强 noise sqrt(noise_power/2)*(randn(N, num_snapshots) 1j*randn(N, num_snapshots)); a_desired steering_vec_ula(theta_desired, N, d, lambda); a_interf steering_vec_ula(theta_interf, N, d, lambda); for t 1:num_snapshots X_snapshots(:, t) a_desired * s_desired(t) a_interf * s_interf(t) noise(:, t); end % 计算样本协方差矩阵 Rxx_hat (X_snapshots * X_snapshots) / num_snapshots; % 计算MVDR权重 a0 steering_vec_ula(theta_desired, N, d, lambda); w_mvdr (Rxx_hat \ a0) / (a0 * (Rxx_hat \ a0)); % 使用反斜杠运算符求逆更稳定 % 绘制自适应波束图 P_mvdr zeros(size(theta_scan)); for idx 1:length(theta_scan) a_scan steering_vec_ula(theta_scan(idx), N, d, lambda); P_mvdr(idx) abs(w_mvdr * a_scan)^2; end figure; hold on; plot(theta_scan, 10*log10(P_cbf/max(P_cbf)), b--, DisplayName, CBF); plot(theta_scan, 10*log10(P_mvdr/max(P_mvdr)), r-, LineWidth, 1.5, DisplayName, MVDR); xline(theta_desired, g--, Desired, DisplayName, Desired Signal); xline(theta_interf, k--, Interference, DisplayName, Interference); xlabel(角度 (度)); ylabel(归一化功率 (dB)); title(常规波束形成 vs. MVDR自适应波束形成); legend; grid on; xlim([-90, 90]); hold off;观察结果图你会惊叹MVDR波束在期望的10°方向保持了高增益主瓣同时在干扰的-30°方向形成了一个很深的“零陷”成功抑制了干扰。这就是自适应波束形成的威力。实操心得协方差矩阵估计与对角加载。在实际仿真或处理实测数据时样本协方差矩阵Rxx_hat的估计质量至关重要。快拍数较少时Rxx_hat可能病态或奇异导致求逆不稳定MVDR性能急剧下降。一个行之有效的工程技巧是对角加载Diagonal LoadingRxx_loaded Rxx_hat epsilon * eye(N)其中epsilon是一个小的正数如噪声功率的10倍。这相当于人为增加一点白噪声能显著提高算法的鲁棒性。我通常会写一个封装函数来处理权重计算自动包含对角加载逻辑。4. 多波束生成与空间谱估计DBF的终极魅力在于“多波束”。我们不仅需要一个波束指向一个方向更需要同时生成多个波束覆盖一个扇区或者同时跟踪多个目标。4.1 同时多波束生成生成多个固定指向的波束非常简单本质上就是为每个期望方向θ_i计算一个对应的权重向量w_i然后同时用这些权重对接收数据x进行运算。% 定义多个期望波束指向 beam_directions [-40, -15, 10, 35]; num_beams length(beam_directions); % 为每个波束计算CBF权重 beam_weights zeros(N, num_beams); for b_idx 1:num_beams a_beam steering_vec_ula(beam_directions(b_idx), N, d, lambda); beam_weights(:, b_idx) a_beam / norm(a_beam); % 归一化 end % 假设有一时刻的接收数据x (N x 1) % 同时计算所有波束的输出 beam_outputs beam_weights * X; % 结果为 num_beams x 1 的向量 % beam_outputs(b_idx) 就是指向 beam_directions(b_idx) 的波束输出在通信中这可以让基站同时服务多个位于不同方向的用户空分复用。在雷达中这可以同时监视多个扇区。4.2 空间谱估计MUSIC算法当信号源方向未知时我们需要通过接收数据反过来估计它们的方向。这就是波达方向DOA估计。多重信号分类MUSIC算法是其中的经典方法它利用了信号子空间和噪声子空间的正交性。MUSIC算法的步骤可以概括为计算接收数据协方差矩阵Rxx。对Rxx进行特征值分解。按特征值大小排序将特征向量分为信号子空间和噪声子空间。大特征值对应的特征向量张成信号子空间U_s小特征值对应的张成噪声子空间U_n。定义MUSIC空间谱P_music(θ) 1 / (a(θ)^H * U_n * U_n^H * a(θ))。扫描角度θ谱峰位置即为信号源方向的估计。function [theta_est, P_music] music_doa(X_snapshots, N, d, lambda, num_sources, theta_scan) % X_snapshots: N x num_snapshots 数据矩阵 % num_sources: 预估的信号源数量K % theta_scan: 扫描角度向量 [N, num_snap] size(X_snapshots); % 1. 估计协方差矩阵 Rxx (X_snapshots * X_snapshots) / num_snap; % 2. 特征值分解 [V, D] eig(Rxx); [~, idx] sort(diag(D), descend); V_sorted V(:, idx); % 3. 划分噪声子空间 Un V_sorted(:, num_sources1:end); % 假设小特征值对应噪声 % 4. 计算MUSIC谱 P_music zeros(size(theta_scan)); for idx 1:length(theta_scan) a steering_vec_ula(theta_scan(idx), N, d, lambda); P_music(idx) 1 / (a * (Un * Un) * a); end P_music abs(P_music); % 5. 寻找谱峰简易峰值查找实际应用中需用更稳健的方法 [~, locs] findpeaks(P_music, SortStr, descend, NPeaks, num_sources); theta_est theta_scan(locs); end % 使用示例假设有两个信号源在10°和-20° theta_scan_fine -90:0.05:90; [theta_est, P_music] music_doa(X_snapshots, N, d, lambda, 2, theta_scan_fine); figure; plot(theta_scan_fine, 10*log10(P_music/max(P_music)), LineWidth, 1.5); xlabel(角度 (度)); ylabel(MUSIC谱 (dB)); title(MUSIC算法DOA估计); grid on; xlim([-90, 90]); disp(估计出的信号方向:); disp(theta_est);MUSIC算法在信噪比较高、信号源不相关、且快拍数足够时能提供超分辨率的DOA估计突破瑞利限。但它对模型误差如阵元位置误差、通道不一致性非常敏感。踩坑实录信号源数估计。MUSIC算法需要预先知道或估计信号源数量K。估计不准会严重影响性能。常用的估计方法有信息论准则AIC MDL或基于特征值分布的盖尔圆准则。在仿真中我们通常已知K但在实际中必须集成一个稳健的源数估计模块。一个简单的实现是计算归一化特征值寻找“拐点”。我通常会同时绘制AIC和MDL曲线作为参考并结合实际场景的先验知识做判断。5. 性能评估与工程实践中的关键考量仿真不能只停留在“画出漂亮的图”必须对系统性能进行定量评估并考虑实际工程中的非理想因素。5.1 关键性能指标KPI仿真分析输出信干噪比SINR这是衡量波束形成器性能的核心指标。我们可以通过蒙特卡洛仿真来统计SINR随输入SNR、快拍数等参数的变化。num_monte 500; % 蒙特卡洛仿真次数 snr_db_list -10:2:20; sinr_out_avg zeros(size(snr_db_list)); for snr_idx 1:length(snr_db_list) sinr_temp 0; for mc 1:num_monte % 根据当前SNR生成带噪声和干扰的数据 snr_linear 10^(snr_db_list(snr_idx)/10); % ... 生成数据X ... % 计算MVDR权重使用真实的Rxx或估计的Rxx_hat % 计算输出SINR % 公式: SINR_out (|w^H * a_s|^2 * P_s) / (w^H * R_in * w) % 其中 R_in 是干扰加噪声的协方差矩阵 % 累加 end sinr_out_avg(snr_idx) sinr_temp / num_monte; end figure; plot(snr_db_list, 10*log10(sinr_out_avg), o-); xlabel(输入SNR (dB)); ylabel(输出SINR (dB)); title(MVDR波束形成器SINR性能); grid on;通过这条曲线我们可以评估算法在不同环境下的有效性并找到其性能边界。波束形成响应不仅要看主瓣和零陷还要看在整个空间范围内的响应是否平坦对于干扰抑制或是否在非期望方向有意外的高增益。收敛速度对于自适应算法如LMS RLS需要仿真其权重收敛到最优解所需的迭代次数或快拍数。5.2 非理想因素建模与影响理想的仿真模型和现实总有差距。一个健壮的仿真必须考虑以下非理想因素阵元位置误差与互耦实际天线阵元的位置不可能完全精确阵元间也存在电磁耦合。这会导致实际的导向向量与理论模型偏离。可以在仿真中为每个阵元的位置添加随机扰动或在导向向量中引入一个随机的幅相误差矩阵来模拟。% 模拟通道幅相误差 gain_error 1 0.05 * randn(N, 1); % 幅度误差 ~5% phase_error exp(1j * deg2rad(5 * randn(N,1))); % 相位误差 ~5度 channel_error gain_error .* phase_error; a_imperfect a_theoretical .* channel_error; % 失配的导向向量使用这个失配的a_imperfect去计算权重或进行DOA估计性能尤其是MVDR和MUSIC会显著下降。这引出了稳健自适应波束形成的研究如前面提到的对角加载就是一种简单的稳健化方法。相干/相关信号源当多个信号源高度相关如多径信号时信号协方差矩阵会秩亏导致MUSIC等子空间算法失效。需要采用空间平滑、Toeplitz化等前处理技术。有限快拍数影响样本协方差矩阵Rxx_hat只是真实Rxx的估计。快拍数越少估计误差越大自适应波束形成的性能越差。仿真中必须评估算法在有限快拍下的性能这与实际系统处理能力直接相关。6. 从仿真到原型的桥梁代码优化与硬件部署思考当我们完成算法仿真验证后下一步就是考虑如何将其转化为可在硬件如FPGA DSP上实时运行的代码。MATLAB仿真代码本身也需要为这一步做准备。6.1 MATLAB代码优化与模块化为了提升仿真效率和代码可重用性建议向量化操作尽量避免循环特别是对角度扫描的循环。可以利用MATLAB的矩阵运算能力。例如一次性计算所有扫描角度的导向向量矩阵theta_grid theta_scan(:); % 行向量 n (0:N-1); % 列向量 % 利用广播机制一次性生成所有导向向量 A exp(1j * pi * n * sind(theta_grid)); % 这里假设dlambda/2简化了公式 % 那么波束形成输出功率向量可以一次性计算 P sum(abs(w * A).^2, 1); % 如果w是单波束权重 % 或者对于多个波束权重矩阵W (N x Num_beam) P_all sum(abs(W * A).^2, 1); % 更高效函数封装将核心功能封装成函数如calc_beam_pattern,mvdr_weights,music_doa等。输入输出定义清晰方便单独测试和集成。参数结构体使用结构体来管理仿真参数避免函数调用时一长串参数。params.N 16; params.d 0.5; params.lambda 1; params.theta_signal [10, -20]; % 调用函数时只需传入params result simulate_dbf(params);6.2 硬件实现的考量点仿真时我们用的是双精度浮点数但硬件特别是FPGA通常使用定点数。需要考虑动态范围协方差矩阵Rxx的元素、权重w的值可能很大或很小需要合理的定标缩放因子。计算复杂度矩阵求逆O(N^3)是MVDR的瓶颈。对于大规模阵列N很大需要研究低复杂度算法如采样矩阵求逆SMI的迭代实现RLS、或者基于梯度下降的LMS算法。并行化波束形成y w^H * x本质是点积运算非常适合并行处理。在FPGA上可以用多个乘法累加MAC单元并行计算。流水线化整个处理链路数据接收、协方差计算、矩阵求逆、权重计算、波束形成需要设计成流水线以满足实时性要求。在MATLAB中我们可以先用浮点仿真验证算法正确性然后使用Fixed-Point Designer工具箱进行定点化仿真评估量化误差对性能的影响从而确定硬件所需的字长整数位、小数位。这是将算法成功部署到芯片上的关键一步。7. 一个完整的仿真案例存在位置误差的稳健MVDR让我们综合运用以上知识完成一个更贴近实际的仿真案例在阵元存在随机位置误差的情况下比较标准MVDR和对角加载稳健MVDR的性能。%% 综合仿真阵元位置误差下的稳健波束形成 clear; close all; clc; % 1. 参数设置 N 10; d_nominal 0.5; % 标称半波长间距 lambda 1; theta_desired 5; % 期望信号方向 theta_interf -30; % 干扰方向 snr_db 10; % 期望信号SNR inr_db 20; % 干扰噪声比干扰比信号强 num_snapshots 200; num_monte 1000; % 蒙特卡洛次数 % 2. 模拟阵元位置误差 pos_error_std 0.02; % 位置误差标准差单位波长 % 生成随机位置误差每次蒙特卡洛实验不同 sinr_standard zeros(num_monte, 1); sinr_robust zeros(num_monte, 1); for mc 1:num_monte % 实际阵元位置 标称位置 随机误差 pos_nominal (0:N-1) * d_nominal * lambda; pos_actual pos_nominal pos_error_std * lambda * randn(N, 1); % 3. 生成数据基于实际位置 a_desired_actual exp(1j * 2*pi/lambda * pos_actual * sind(theta_desired)); a_interf_actual exp(1j * 2*pi/lambda * pos_actual * sind(theta_interf)); % 信号与干扰 s_d sqrt(10^(snr_db/10)) * (randn(1, num_snapshots) 1j*randn(1, num_snapshots))/sqrt(2); s_i sqrt(10^(inr_db/10)) * (randn(1, num_snapshots) 1j*randn(1, num_snapshots))/sqrt(2); noise (randn(N, num_snapshots) 1j*randn(N, num_snapshots))/sqrt(2); X a_desired_actual * s_d a_interf_actual * s_i noise; % 4. 计算样本协方差矩阵 Rxx_hat (X * X) / num_snapshots; % 5. 标准MVDR使用标称导向向量存在失配 a_desired_nominal exp(1j * 2*pi/lambda * pos_nominal * sind(theta_desired)); w_standard (Rxx_hat \ a_desired_nominal) / (a_desired_nominal * (Rxx_hat \ a_desired_nominal)); % 6. 稳健MVDR对角加载 loading_factor 10; % 对角加载因子通常设为噪声功率的若干倍 Rxx_loaded Rxx_hat loading_factor * eye(N); w_robust (Rxx_loaded \ a_desired_nominal) / (a_desired_nominal * (Rxx_loaded \ a_desired_nominal)); % 7. 计算输出SINR需要知道真实的干扰噪声协方差矩阵 % 简化计算假设我们知道真实的干扰和噪声统计量 R_interf_noise (a_interf_actual * a_interf_actual) * 10^(inr_db/10) eye(N); signal_power abs(w_standard * a_desired_actual)^2 * 10^(snr_db/10); interference_noise_power real(w_standard * R_interf_noise * w_standard); sinr_standard(mc) signal_power / interference_noise_power; signal_power_r abs(w_robust * a_desired_actual)^2 * 10^(snr_db/10); interference_noise_power_r real(w_robust * R_interf_noise * w_robust); sinr_robust(mc) signal_power_r / interference_noise_power_r; end % 8. 结果统计与展示 sinr_standard_db 10*log10(mean(sinr_standard)); sinr_robust_db 10*log10(mean(sinr_robust)); fprintf(平均输出SINR (标准MVDR): %.2f dB\n, sinr_standard_db); fprintf(平均输出SINR (稳健MVDR): %.2f dB\n, sinr_robust_db); % 绘制一次实验的波束图 figure; theta_plot -90:0.1:90; P_standard zeros(size(theta_plot)); P_robust zeros(size(theta_plot)); for idx 1:length(theta_plot) a_plot_nom exp(1j * 2*pi/lambda * pos_nominal * sind(theta_plot(idx))); P_standard(idx) abs(w_standard * a_plot_nom)^2; P_robust(idx) abs(w_robust * a_plot_nom)^2; end plot(theta_plot, 10*log10(P_standard/max(P_standard)), b-, DisplayName, 标准MVDR); hold on; plot(theta_plot, 10*log10(P_robust/max(P_robust)), r--, LineWidth, 1.5, DisplayName, 稳健MVDR); xline(theta_desired, k:, Desired); xline(theta_interf, k:, Interference); xlabel(角度 (度)); ylabel(归一化响应 (dB)); title(阵元位置误差下波束图对比); legend; grid on; xlim([-90, 90]); hold off;运行这个仿真你会直观地看到在存在阵元误差时标准MVDR的波束零陷可能偏离干扰方向导致性能严重损失。而对角加载的稳健MVDR虽然零陷深度可能变浅但主瓣形状保持更好整体输出SINR通常更优、更稳定。这个案例深刻地说明了仿真必须包含非理想因素并且稳健性设计是工程实践中不可或缺的一环。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价