拓冰建站拓冰建站
首页 / 资讯中心 / 正文

Matlab实现相控阵波束扫描动态可视化:从原理到仿真

简介本资源是一份面向通信工程、雷达系统及信号处理方向初学者与实践者的MATLAB相控阵波束扫描仿真教学包聚焦波束形成原理、动态扫描机制与方向图可视化等核心问题适用于课程设计、毕业设计及科研入门场景。压缩包为RAR格式共含2个MATLAB脚本文件.m总大小仅2KB轻量精炼其中包含实现波束方向图绘制与极坐标增益显示的核心函数支持线阵配置下的实时相位调控与扫描动画生成。已有1060人学习下载反映出其在高校教学与自学实践中的高频使用价值。读者可直接运行代码观察波束随扫描角变化的动态过程理解阵元间距、工作频率与相位差之间的定量关系并基于源码快速拓展至多频段扫描、宽角覆盖或干扰抑制等进阶仿真任务是掌握MATLAB phased工具箱基础应用的实用起点。1. 项目概述从静态到动态让波束“活”起来在雷达、通信和声纳这些领域相控阵天线绝对是个明星技术。它的核心魅力在于不需要物理转动天线仅通过电子方式控制阵列中每个辐射单元的相位就能让天线波束在空间里灵活地“指哪打哪”。对于工程师和学生来说理解波束如何随相位变化而扫描是掌握相控阵原理的关键一步。而Matlab作为工程计算和仿真的瑞士军刀无疑是实现这一可视化过程的绝佳工具。很多人会用Matlab画出一个特定指向的静态波束方向图这解决了“知其形”的问题。但“知其所以然”则需要看到波束连续扫描的动态过程。一个生动的、可交互的“动图”能将抽象的相位差、波程差概念转化为直观的波束指向变化对于教学演示、方案验证和报告展示都极具价值。这个项目就是要解决如何用Matlab从生成一组离散的波束方向图数据开始一步步将它们合成为清晰、流畅的GIF或视频动画完整呈现相控阵波束扫描的“生命”轨迹。无论你是刚接触阵列天线的新手还是需要优化扫描算法性能的工程师这个动态可视化过程都能带来更深的洞察。2. 核心原理与模型构建相位差如何驱动波束转向在动手写代码之前我们必须把背后的物理和数学模型吃透。波束扫描的本质是“干涉”利用的是波的叠加原理。当多个阵元同时辐射电磁波时它们在空间远场某点的场强会叠加。如果每个阵元发出的波到达该点时相位相同则同相叠加信号最强形成波束最大值方向主瓣。通过给不同阵元施加不同的相位偏移我们就能人为地控制这个“同相叠加”发生在哪个空间方向上。2.1 一维线阵的波束形成公式推导我们从最简单的一维均匀直线阵入手。假设有N个阵元等间距d排列在一条直线上。通常以阵列中心或一端作为相位参考点。对于期望波束指向与阵列法线方向夹角为θ的情况相邻阵元之间由于波程差引起的空间相位差为Δφ_space (2π/λ) * d * sin(θ)其中λ是波长。为了让波束最大值指向θ方向我们需要用移相器补偿这个空间相位差即给第n个阵元施加一个激励相位φ_nφ_n - (2π/λ) * d * n * sin(θ) 以阵列中心为参考时n从-(N-1)/2 到 (N-1)/2那么远场观察方向与法线夹角为θ’处的总场强E(θ‘)就是所有阵元辐射场的矢量和。假设每个阵元是各向同性的点源其方向图函数为f(θ‘)则阵列方向图F(θ‘)为F(θ‘) f(θ‘) * Σ [ I_n * exp(j * (φ_n (2π/λ) * d * n * sin(θ‘)) ) ]其中I_n是第n个阵元的激励幅度通常为等幅分布即I_n1j是虚数单位。这个求和项就是著名的阵列因子。对于均匀等幅线阵其阵列因子可以简化为一个辛格函数sinc的形式AF(θ‘) sin( N * π * d/λ * (sin(θ‘) - sin(θ)) ) / sin( π * d/λ * (sin(θ‘) - sin(θ)) )这个公式是核心。波束指向θ就藏在里面。当我们改变期望指向θ时整个函数图形就会在sin(θ‘)轴上平移体现在直角坐标或极坐标里就是波束主瓣的移动。注意栅瓣问题。公式中分母有可能为零产生栅瓣在非期望方向出现与主瓣等大的波瓣。为了避免栅瓣阵元间距d通常需要满足d ≤ λ/2当扫描角θ在±90°范围内时。在仿真中我们可以故意设置d λ/2来直观演示栅瓣的出现这对于理解阵列设计约束非常重要。2.2 从公式到Matlab离散化计算在Matlab中我们无法对连续的θ‘进行计算需要将其离散化。通常我们将观察角度范围如-90°到90°均匀采样为M个点。对于每一个扫描角度θ我们想让它动起来的角度我们都要计算一遍所有M个观察角度θ‘上的阵列因子幅度|AF|。计算过程是一个双重循环外层循环遍历不同的波束指向θ用于生成动画的每一帧内层循环可向量化遍历所有观察角度θ‘计算每个θ‘对应的AF值。最终我们会得到一个二维矩阵行对应观察角度θ‘列对应不同的波束指向θ即动画的帧索引。3. Matlab仿真环境搭建与核心代码实现理论清晰后我们进入实战环节。我将分步拆解代码并解释每一部分的设计意图和关键参数。3.1 初始化与参数设置首先我们定义仿真的基本物理和几何参数。这些参数直接影响波束图的形态。% 相控阵波束扫描动画仿真 clear; close all; clc; % 1. 基本参数设置 fc 10e9; % 工作频率 10GHz典型雷达频段 c 3e8; % 光速 lambda c / fc; % 波长 N 16; % 阵元数量 d 0.5 * lambda; % 阵元间距设为半波长以避免栅瓣 % 2. 角度网格设置 theta_deg -90:0.1:90; % 观察角度范围度分辨率0.1° theta_rad deg2rad(theta_deg); % 转换为弧度用于计算sin值 M length(theta_deg); % 观察角度点数 % 3. 扫描角度设置波束指向即动画的每一帧 scan_angle_deg -60:1:60; % 波束扫描范围从-60度到60度步进1度 scan_angle_rad deg2rad(scan_angle_deg); num_frames length(scan_angle_rad); % 动画总帧数 % 4. 初始化阵列因子矩阵 AF_matrix zeros(M, num_frames); % M行观察角num_frames列扫描角参数选择解析fc10e9选择X波段8-12GHz作为示例这是雷达常用频段波长在厘米级便于理解。N16阵元数适中既能清晰展示波束形状主瓣窄旁瓣结构可见又不会导致计算量过大。d 0.5*lambda这是避免出现栅瓣的经典条件。在仿真中你可以尝试改为0.7*lambda或lambda观察栅瓣如何产生。theta_deg分辨率0.1°这是一个平衡选择。分辨率太高如0.01°计算量大动画生成慢分辨率太低如1°波束图会显得粗糙主瓣峰值可能捕捉不准。0.1°对于演示目的通常足够平滑。scan_angle_deg步进1°决定了动画的流畅度。1°的步进在±60°范围内产生121帧动画已经比较平滑。如果追求极致流畅或扫描范围小可以增加到0.5°如果只想看关键位置可以设为5°或10°。3.2 波束方向图计算向量化实现为了提高计算效率我们应尽量避免使用嵌套的for循环。利用Matlab的矩阵运算能力我们可以将计算向量化。% 5. 计算阵列因子向量化方法效率高 % 生成阵元位置索引以阵列中心为相位参考 n (0:N-1) - (N-1)/2; % 例如N16时n -7.5, -6.5, ..., 6.5, 7.5 % 更常见的整数索引以第一个阵元为参考为 n 0:N-1; % 这里使用中心参考公式上更对称但两种方式最终方向图形状一致。 % 构建观察角度矩阵和扫描角度矩阵用于向量化计算 % theta_mat: 每一列都是相同的观察角度向量共num_frames列 % scan_mat: 每一行都是相同的扫描角度向量共M行 [theta_mat, scan_mat] meshgrid(theta_rad, scan_angle_rad); theta_mat theta_mat; % 转置使维度变为 M x num_frames scan_mat scan_mat; % 核心计算阵列因子 % 对于均匀线阵阵列因子 AF sum( exp(j * k * d * n * (sin(theta) - sin(scan_angle))) ) % 其中 k 2*pi/lambda k 2 * pi / lambda; % 利用矩阵乘法和bsxfun或隐式扩展Matlab R2016b以后实现高效计算 % 步骤先计算每个(n, theta, scan)组合的相位 phase_term k * d * n(:) .* (sin(theta_mat) - sin(scan_mat)); % 这里是关键维度扩展 % n(:)是Nx1列向量与(M x num_frames)矩阵运算利用广播机制得到(N x M x num_frames)的三维数组 % 然后对第一个维度阵元维度n求和 AF_matrix sum(exp(1j * phase_term), 1); % 对第1维求和结果维度为 (1 x M x num_frames) AF_matrix squeeze(AF_matrix); % 去掉单一的维度得到 M x num_frames AF_dB 20 * log10(abs(AF_matrix) / N); % 归一化并转换为dB值主瓣最大值为0dB代码关键点解析相位参考点选择代码中以阵列中心为参考n包含负值这样计算出的方向图完全对称。如果以一端为参考n 0:N-1公式中的相位项会多出一个线性项但最终归一化的方向图形状是完全相同的。中心参考在数学上更优雅。向量化技巧meshgrid生成网格矩阵结合Matlab的隐式扩展自动广播功能一次性计算出所有(观察角扫描角)组合对应的、对所有阵元求和的相位项。这比写双重循环快数十倍甚至上百倍尤其是当M和num_frames较大时。归一化处理abs(AF_matrix) / N是幅度归一化因为等幅激励下当波束指向与观察方向一致时同相叠加理论最大幅度就是N。转换为分贝dB标度是天线方向图的惯例可以清晰地显示主瓣、旁瓣和零陷的动态范围通常旁瓣比主瓣低十几到几十dB。3.3 动态可视化与动画生成计算得到AF_dB这个二维矩阵后我们就可以制作动画了。我们将采用两种主流方式生成GIF图片和生成MP4视频。% 6. 动态可视化设置 fig figure(Position, [100, 100, 1200, 500]); % 设置大一些的图窗 % 预定义颜色映射使主瓣在动画中更醒目 custom_cmap jet(256); % 为生成GIF做准备 gif_filename phased_array_beam_scanning.gif; delay_time 0.05; % GIF每帧之间的延迟时间秒控制播放速度 for frame_idx 1:num_frames current_scan_angle scan_angle_deg(frame_idx); % 子图1直角坐标下的方向图 subplot(1, 2, 1); plot(theta_deg, AF_dB(:, frame_idx), b-, LineWidth, 1.5); hold on; % 标记当前扫描角度和主瓣峰值 [max_gain, max_idx] max(AF_dB(:, frame_idx)); plot(theta_deg(max_idx), max_gain, ro, MarkerSize, 10, MarkerFaceColor, r); plot([current_scan_angle, current_scan_angle], ylim, k--, LineWidth, 1); % 扫描角度指示线 hold off; grid on; box on; xlabel(观察角度 (度)); ylabel(归一化方向图增益 (dB)); title(sprintf(直角坐标 - 波束指向: %.1f°, current_scan_angle)); xlim([-90, 90]); ylim([-50, 0]); % 固定y轴范围便于观察变化 legend(方向图, 主瓣峰值, 扫描指向, Location, best); % 子图2极坐标下的方向图更直观反映空间指向 subplot(1, 2, 2); polarplot(theta_rad, abs(AF_matrix(:, frame_idx))/N, r-, LineWidth, 1.5); % 极坐标用线性幅度 hold on; % 在极坐标中标记扫描角度 polarplot([current_scan_angle, current_scan_angle]*pi/180, [0, 1], k--, LineWidth, 1.5); hold off; title(sprintf(极坐标 - 波束指向: %.1f°, current_scan_angle)); rlim([0, 1]); % 径向范围固定为0-1 % 整体图标题 sgtitle(sprintf(均匀线阵波束扫描仿真 (N%d, d%.2fλ), N, d/lambda)); drawnow; % 刷新图形 % 捕获当前帧并写入GIF文件 frame getframe(fig); im frame2im(frame); [imind, cm] rgb2ind(im, 256); if frame_idx 1 imwrite(imind, cm, gif_filename, gif, Loopcount, inf, DelayTime, delay_time); else imwrite(imind, cm, gif_filename, gif, WriteMode, append, DelayTime, delay_time); end end disp([GIF动画已保存为: , gif_filename]);可视化技巧与心得双视图对比直角坐标图擅长精确显示增益值和旁瓣结构而极坐标图则能直观展示波束在360度空间中的指向和宽度。两者结合信息更完整。固定坐标轴在动画中固定直角坐标的ylim和极坐标的rlim至关重要。如果坐标轴随数据自动变化观众会感到眩晕无法聚焦于波束形状的变化本身。清晰的标记用红色圆点标出主瓣峰值用黑色虚线标出理论扫描角度。这能帮助观众立刻抓住“波束是否准确指向了预设方向”这个关键点。GIF生成参数DelayTime控制播放速度。0.05秒即20帧/秒是一个比较流畅的设置。Loopcount设为inf让GIF无限循环播放。注意极坐标图的幅度。在极坐标中我们通常绘制线性幅度abs(AF)/N范围在[0,1]之间这样图形看起来是一个凸起的“花瓣”。如果绘制dB值负值在极坐标中显示效果会很差大部分区域缩在中心。因此极坐标和直角坐标的纵轴量纲是不同的需要在标题或图例中说明。3.4 进阶生成更高质量的视频文件GIF方便预览和嵌入网页但颜色和分辨率有损失。对于报告或演示生成MP4视频是更专业的选择。% 7. 生成MP4视频可选需要安装对应编码器 video_filename phased_array_beam_scanning.mp4; % 尝试创建VideoWriter对象如果失败则提示 try v VideoWriter(video_filename, MPEG-4); v.FrameRate 20; % 帧率与GIF的DelayTime对应 1/0.0520 v.Quality 90; % 质量0-100 open(v); % 重新遍历帧并写入视频可以复用上面的绘图循环但这里为了清晰重写逻辑 for frame_idx 1:num_frames % ... (此处重复上面的绘图代码但移除GIF写入部分) ... drawnow; % 捕获帧并写入视频 writeVideo(v, getframe(fig)); end close(v); disp([MP4视频已保存为: , video_filename]); catch ME warning(无法创建MP4视频文件可能缺少编码器。将仅生成GIF。); disp([错误信息: , ME.message]); end视频生成要点帧率FrameRate应设置为1/DelayTime以保持和GIF相同的播放速度。质量Quality设置为90能在文件大小和画质间取得很好平衡。错误处理使用try-catch块是因为某些Matlab环境可能未安装MPEG-4编码器。如果失败程序会优雅降级至少保证GIF生成。4. 参数影响分析与高级仿真案例掌握了基础仿真后我们可以通过修改参数深入探究相控阵的各种特性。4.1 阵元间距对栅瓣的影响让我们验证一下理论阵元间距d大于半波长时会在某些扫描角度出现栅瓣。% 案例1观察不同阵元间距下的方向图固定扫描角为30度 d_ratios [0.4, 0.7, 1.0, 1.5]; % 阵元间距与波长的比值 fixed_scan_angle 30; % 度 figure(Position, [100, 100, 1000, 800]); for i 1:length(d_ratios) d_current d_ratios(i) * lambda; % 重新计算阵列因子仅针对一个扫描角 u pi * d_current / lambda * (sind(theta_deg) - sind(fixed_scan_angle)); AF sin(N * u) ./ (N * sin(u)); AF(abs(u) 1e-10) 1; % 处理分母为零的情况主瓣峰值处 AF_dB_current 20*log10(abs(AF)); subplot(2, 2, i); plot(theta_deg, AF_dB_current, LineWidth, 1.5); grid on; box on; xlabel(观察角度 (度)); ylabel(增益 (dB)); title(sprintf(d %.1fλ, 扫描角%.0f°, d_ratios(i), fixed_scan_angle)); xlim([-90, 90]); ylim([-50, 0]); hold on; plot([fixed_scan_angle, fixed_scan_angle], ylim, r--, LineWidth, 1); % 标记出明显的栅瓣位置增益大于-20dB的副瓣 [peaks, locs] findpeaks(AF_dB_current, MinPeakHeight, -20); plot(theta_deg(locs), peaks, go, MarkerSize, 8, MarkerFaceColor, g); hold off; if i 1 legend(方向图, 扫描方向, 栅瓣, Location, best); end end sgtitle(阵元间距对栅瓣的影响 (N16));运行这段代码你会清晰地看到d0.4λ时只有主瓣旁瓣电平很低。d0.7λ时在远离主瓣的大角度可能出现栅瓣取决于扫描角。d1.0λ和1.5λ时栅瓣非常明显甚至在某些角度出现多个与主瓣幅度相近的波瓣。这在实际系统中是必须避免的因为它会导致角度模糊和干扰。4.2 阵元数量对波束宽度的影响波束宽度主瓣宽度是相控阵的重要指标它与阵元数量N成反比。% 案例2观察不同阵元数量下的波束宽度固定d0.5λ扫描角0度 N_list [8, 16, 32, 64]; d_fixed 0.5 * lambda; scan_angle 0; figure; for i 1:length(N_list) N_current N_list(i); n_idx (0:N_current-1) - (N_current-1)/2; phase_shift -2*pi/lambda * d_fixed * n_idx(:) * sind(scan_angle); AF zeros(size(theta_deg)); for ang_idx 1:length(theta_deg) array_response exp(1j * (2*pi/lambda * d_fixed * n_idx(:) * sind(theta_deg(ang_idx)) phase_shift(:))); AF(ang_idx) sum(array_response); end AF_dB_current 20*log10(abs(AF)/N_current); plot(theta_deg, AF_dB_current, LineWidth, 1.5, DisplayName, sprintf(N%d, N_current)); hold on; % 计算-3dB波束宽度近似 peak_power max(10.^(AF_dB_current/10)); % 找到峰值功率线性 half_power peak_power / 2; idx_3dB find(10.^(AF_dB_current/10) half_power); beamwidth_approx theta_deg(idx_3dB(end)) - theta_deg(idx_3dB(1)); fprintf(N%d时近似-3dB波束宽度约为%.2f度\n, N_current, beamwidth_approx); end hold off; grid on; box on; xlabel(观察角度 (度)); ylabel(归一化增益 (dB)); title(sprintf(阵元数量对波束宽度的影响 (d0.5λ, 扫描角%.0f°), scan_angle)); legend(show, Location, best); xlim([-30, 30]); % 放大看主瓣区域 ylim([-40, 0]);从结果图和打印信息可以看出阵元数N越大主瓣越窄方向性越好但天线成本和计算复杂度也越高。这是一个典型的工程折中。4.3 加权窗函数对旁瓣的抑制均匀等幅激励矩形窗会产生较高的旁瓣约-13dB。在实际应用中为了抑制旁瓣、减少干扰会对阵元采用幅度加权即施加窗函数。% 案例3应用切比雪夫窗降低旁瓣电平 N 32; d 0.5 * lambda; scan_angle 20; % 度 sll_dB 40; % 期望的旁瓣电平低于主瓣40dB % 生成切比雪夫窗权重 cheb_weights chebwin(N, sll_dB); % 注意chebwin返回的是线性幅度权重 cheb_weights cheb_weights / sum(cheb_weights) * N; % 重新归一化使主瓣增益为0dB可选 % 计算加窗前后的方向图 theta_rad deg2rad(-90:0.1:90); % 均匀加权 AF_uniform zeros(size(theta_rad)); % 切比雪夫加权 AF_cheb zeros(size(theta_rad)); for ang_idx 1:length(theta_rad) % 阵列响应向量 array_response exp(1j * 2*pi/lambda * d * (0:N-1). * sin(theta_rad(ang_idx) - deg2rad(scan_angle))); % 均匀加权 AF_uniform(ang_idx) sum(array_response); % 切比雪夫加权 AF_cheb(ang_idx) sum(cheb_weights .* array_response); end AF_uniform_dB 20*log10(abs(AF_uniform)/N); AF_cheb_dB 20*log10(abs(AF_cheb)/max(abs(AF_cheb))); % 归一化到峰值 figure; plot(rad2deg(theta_rad), AF_uniform_dB, b-, LineWidth, 1.5, DisplayName, 均匀加权); hold on; plot(rad2deg(theta_rad), AF_cheb_dB, r-, LineWidth, 1.5, DisplayName, sprintf(切比雪夫窗 (SLL%ddB), sll_dB)); plot([scan_angle, scan_angle], ylim, k--, LineWidth, 1, DisplayName, 扫描方向); hold off; grid on; box on; xlabel(观察角度 (度)); ylabel(归一化增益 (dB)); title(幅度加权对旁瓣的抑制效果 (N32, d0.5λ)); legend(show, Location, best); xlim([-90, 90]); ylim([-80, 0]); % 调整y轴下限以观察低旁瓣运行后可以看到切比雪夫窗成功地将旁瓣压到了-40dB以下但代价是主瓣宽度有所展宽。这就是天线设计中的另一个经典权衡旁瓣电平 vs. 波束宽度。5. 常见问题、调试技巧与性能优化在实际仿真过程中你可能会遇到一些问题。这里记录一些典型的坑和解决方法。5.1 方向图出现NaN或Inf值问题描述在计算阵列因子sin(N*u) ./ sin(u)时当u接近m*πm为整数时分子分母都趋近于零在数值计算中可能产生NaN非数。解决方案使用一个小量容差进行判断和替换。u ... % 计算u AF sin(N * u) ./ sin(u); % 找出分母接近零的索引即u接近0, π, 2π...的点对应主瓣和栅瓣峰值 tol 1e-10; idx_special abs(sin(u)) tol; % 在这些特殊点根据洛必达法则极限值为 N * cos(N*u) / cos(u)当u-0时结果为N % 更简单直接的处理对于主瓣峰值u-0直接赋值为N对于栅瓣峰值理论上也是N但通常我们只关心主瓣 % 这里我们简单地将这些点的AF值设为其极限值N对于均匀阵 AF(idx_special) N * cos(N * u(idx_special)) ./ cos(u(idx_special)); % 或者更稳健地只处理u绝对值极小的点主瓣 idx_mainlobe abs(u) tol; AF(idx_mainlobe) N;5.2 动画生成速度太慢问题描述当角度分辨率高、扫描帧数多、阵元数量大时循环计算和绘图会非常耗时。优化策略向量化计算如前文所示使用meshgrid和矩阵运算彻底避免内层循环这是最大的性能提升点。预计算如果阵元权重和位置固定可以预先计算exp(1j * k * d * n)等不随角度变化的部分。降低绘图精度在生成动画的循环中可以先用较低的角度分辨率如0.5°或1°进行快速预览。确定无误后再提高分辨率生成最终版。使用parfor并行循环如果外层循环扫描角很多且计算独立可以使用并行计算工具箱Parallel Computing Toolbox的parfor来加速。但要注意并行循环内部不能有绘图命令。% 确保AF_matrix已预分配内存 AF_matrix zeros(M, num_frames); parfor frame_idx 1:num_frames % 计算每一帧的AF注意变量要独立 current_scan scan_angle_rad(frame_idx); u k * d * (sin(theta_rad) - sin(current_scan)); % ... 计算AF ... AF_matrix(:, frame_idx) AF; end视频生成优化在生成MP4视频时可以考虑先计算并保存所有帧的数据然后一次性读取并生成视频避免计算和绘图在循环中交替进行带来的开销。5.3 极坐标图显示异常问题描述使用polarplot绘制dB值导致图形全部缩在中心附近或者图形显示不全。解决方案只绘制线性幅度如前所述极坐标的径向坐标应为线性值0到1。调整rlim确保rlim([0, 1])让图形充满整个圆形区域。处理角度范围polarplot默认角度范围是0到2π。如果你的观察角度theta_rad是从-π到π需要将其转换为0到2π或者使用polaraxes对象进行更精细的控制。% 方法将-pi到pi的角度转换到0到2pi theta_rad_polar theta_rad; theta_rad_polar(theta_rad_polar 0) theta_rad_polar(theta_rad_polar 0) 2*pi; polarplot(theta_rad_polar, abs(AF)/N);5.4 扩展至二维平面阵一维线阵只能控制一个维度如方位角的扫描。要控制俯仰角和方位角两个维度需要使用二维平面阵。其原理是线阵的扩展阵列因子是两个一维因子的乘积。% 二维矩形平面阵波束扫描示例静态指向 Nx 8; % x方向阵元数 Ny 8; % y方向阵元数 dx 0.5*lambda; dy 0.5*lambda; scan_az 30; % 方位扫描角度 scan_el 10; % 俯仰扫描角度 % 生成二维角度网格 [az_deg, el_deg] meshgrid(-90:1:90, -90:1:90); az_rad deg2rad(az_deg); el_rad deg2rad(el_deg); % 计算方向余弦 u sin(az_rad) .* cos(el_rad); v sin(el_rad); u0 sind(scan_az) * cosd(scan_el); v0 sind(scan_el); % 计算二维阵列因子 AF_2D zeros(size(az_deg)); for mx 0:Nx-1 for ny 0:Ny-1 phase_shift exp(1j * 2*pi/lambda * (mx*dx*(u - u0) ny*dy*(v - v0))); AF_2D AF_2D phase_shift; end end AF_2D_dB 20*log10(abs(AF_2D)/(Nx*Ny)); % 绘制三维方向图 figure; surf(az_deg, el_deg, AF_2D_dB, EdgeColor, none); xlabel(方位角 (度)); ylabel(俯仰角 (度)); zlabel(增益 (dB)); title(sprintf(二维平面阵方向图 (扫描: Az%.0f°, El%.0f°), scan_az, scan_el)); colorbar; axis tight; view(45, 30);制作二维扫描动画的逻辑类似但需要遍历两个角度方位和俯仰计算量更大可视化通常采用三维曲面图随角度变化的动画或者固定一个角度展示另一个角度扫描的切片图。通过这个从原理到实现从基础到进阶的完整流程你不仅能用Matlab画出波束图更能制作出展示其动态扫描过程的“动图”并深入理解每个参数背后的物理意义和工程权衡。这比单纯看教科书上的公式要直观和深刻得多。在实际操作中多尝试修改参数观察图形的变化是巩固理解的最佳途径。本文还有配套的精品资源点击获取
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门