
简介面向电子工程、通信与雷达方向的学习者与研究人员这份资源围绕直线天线阵的MATLAB仿真展开帮助读者理解阵元间距、馈电相位与频率对阵列远场方向图的影响并掌握波束扫描、增益提升与旁瓣抑制的分析方法适合具备一定电磁场基础、希望动手验证阵列理论的中高级读者。压缩包共9个文件约1.1MB以8张png仿真结果图和1个m脚本为主脚本承担阵列建模与方向图计算图片则直观呈现不同配置下的二维与三维辐射结果便于对照理解参数变化带来的性能差异。目前已有612人学习说明该主题在相关课程与工程实践中具有稳定的参考需求。读者可借助脚本复现偶极子直线阵的建模、分析与优化流程结合结果图评估主瓣宽度、旁瓣电平与方向性等指标并在此基础上调整阵元间距与相位参数开展迭代实验形成可迁移的阵列仿真思路。1. 直线天线阵仿真从需求到可交付方案做直线天线阵仿真最容易翻车的不是代码写不出来而是方向图对不上。我见过不少同学阵元间距、相位差、扫描角全都填了跑出来的波束却偏了十几度最后发现是相位参考点选错了。这套基于 MATLAB 的直线天线阵仿真方案要解决的就是这类“公式看着都对、结果就是不对”的问题。它面向两类人一是要做天线课设或毕设、需要交出一份能跑出方向图、能解释参数含义的学生二是需要快速验证均匀直线阵扫描特性、又不想从零搭脚本的从业者。整套方案围绕阵因子计算、方向图绘制、扫描角与栅瓣分析、参数敏感性对比四条主线展开最终交付一套可复现、可改参数、可写进报告的仿真流程。2. 总体设计阵因子模型与四个功能模块的职责划分直线天线阵仿真的核心不是画图而是把阵列几何关系翻译成可计算的阵因子。均匀直线阵的阵因子通常写成AF(θ) Σ exp[j·n·(k·d·cosθ β)]n 从 0 到 N-1其中 N 是阵元数d 是阵元间距k 2π/λ 是波数β 是相邻阵元间的递变相位。这个式子看起来简单但每一项的物理含义决定了后面所有参数怎么设。我一般把整个仿真拆成四个模块参数配置、阵因子计算、方向图可视化、结果分析。四个模块各管一件事改参数只动配置区算错了只查计算区画图丑只调可视化区排查路径清晰。2.1 参数配置模块把物理量集中管理参数配置模块负责把 N、d/λ、扫描角 θ₀、极化方式这些量集中定义避免散落在脚本各处。通常的做法是用一个结构体cfg承载所有参数后面所有函数只读这个结构体。这样做的好处是做参数扫描时只需要改结构体字段不用去翻每一行代码找硬编码的数字。% 参数配置所有物理量集中在此后续函数只读不改 cfg.N 8; % 阵元数 cfg.d 0.5; % 阵元间距单位波长 cfg.theta0 30; % 主瓣扫描角单位度 cfg.freq 3e9; % 工作频率单位 Hz cfg.c 3e8; % 光速 cfg.lambda cfg.c / cfg.freq; % 波长 cfg.beta -2*pi*cfg.d*cosd(cfg.theta0); % 递变相位由扫描角反推这里的关键是cfg.beta的符号。扫描角 θ₀ 是从阵列轴线量起的当 θ₀ 90° 时 β 0主瓣指向侧射方向当 θ₀ 偏离 90°β 取负值才能让主瓣朝 θ₀ 偏。符号搞反方向图就会镜像翻转这是最常见的翻车点之一。cfg.d用波长归一化是为了后面分析栅瓣时直接看 d/λ 的取值不用反复换算。2.2 阵因子计算模块向量化写法与相位参考阵因子计算模块是整个方案的心脏。MATLAB 里最忌讳用双重 for 循环逐点累加速度慢且容易写错索引。我一般用矩阵运算一次算出所有角度上的阵因子function AF array_factor(cfg, theta_deg) % 输入cfg 参数结构体theta_deg 角度向量度 % 输出AF 复阵因子与 theta_deg 同尺寸 theta deg2rad(theta_deg(:)); % 转弧度并拉成列向量 n (0:cfg.N-1).; % 阵元索引列向量 psi 2*pi*cfg.d*cos(theta). cfg.beta; % 每个角度的递进相位 AF exp(1j * n * psi); % N×M 矩阵每列一个角度 AF sum(AF, 1); % 沿阵元维度求和 AF reshape(AF, size(theta_deg)); % 恢复原尺寸 end这段代码的核心是n * psi这一步n是 N×1 的列向量psi是 1×M 的行向量相乘得到 N×M 矩阵每一列对应一个观察角度上所有阵元的相位。sum(AF, 1)沿第一维求和得到每个角度的阵因子。向量化写法比循环快一到两个数量级做参数扫描时差别很明显。相位参考点选在第一个阵元n0这样 β 的物理意义最直观不会出现“参考点偏移导致波束偏转”的玄学问题。2.3 方向图可视化模块归一化与 dB 显示方向图可视化模块负责把复阵因子转成可读的幅度图。通常画两张一张线性归一化幅度看主瓣宽度和副瓣电平一张 dB 图看副瓣衰减细节。归一化用AF / max(abs(AF))dB 用20*log10并且要设一个下限比如 -40 dB避免对数发散。theta -90:0.1:90; % 观察角范围0.1 度分辨率 AF array_factor(cfg, theta); AF_norm abs(AF) / max(abs(AF)); % 线性归一化 AF_dB 20*log10(max(AF_norm, 1e-6)); % dB 转换下限 -120 dB 防发散 figure; subplot(1,2,1); polarplot(deg2rad(theta), AF_norm); % 极坐标线性图 title(归一化幅度方向图); subplot(1,2,2); plot(theta, AF_dB); ylim([-40 0]); grid on; xlabel(角度 (度)); ylabel(归一化幅度 (dB)); title(dB 方向图);max(AF_norm, 1e-6)这个下限是血泪经验当某个角度上阵因子恰好为零时log10(0)返回-Inf画图会直接崩掉或者出现断线。设一个 1e-6 的下限对应 -120 dB远低于实际关心的 -40 dB 范围不影响读数。极坐标图用polarplot而不是老式的polar后者在新版 MATLAB 里已经不推荐使用。2.4 结果分析模块主瓣宽度与副瓣电平提取结果分析模块负责从方向图里自动提取关键指标半功率波束宽度HPBW、第一副瓣电平SLL、栅瓣出现角度。这些指标是写报告和答辩时被问得最多的手动从图上读既不准也说不清。通常的做法是在 dB 图上找主瓣峰值两侧第一个 -3 dB 点算 HPBW找主瓣外第一个局部极大值算 SLL。% 在主瓣附近搜索 -3 dB 点估算 HPBW [~, idx_max] max(AF_dB); left find(AF_dB(1:idx_max) -3, 1, last); right find(AF_dB(idx_max:end) -3, 1, first) idx_max - 1; if ~isempty(left) ~isempty(right) HPBW theta(right) - theta(left); fprintf(半功率波束宽度约 %.2f 度\n, HPBW); end这段搜索逻辑假设主瓣在角度范围内完整可见如果扫描角接近 ±90°主瓣可能被边界截断此时 HPBW 会偏小需要在报告里注明“主瓣部分超出观察范围”。第一副瓣的提取更简单在主瓣两侧各找第一个局部极大值取较大者转 dB。这些数值和理论公式比如 N8、d0.5λ 时 HPBW 约 12.8°对得上就说明仿真链路是通的。3. 关键参数落地扫描角、间距与阵元数的联动调试参数不是随便填的每一个都牵着方向图的形状。这一章把三个最常调的参数——扫描角、阵元间距、阵元数——单独拎出来讲清楚它们怎么影响结果以及调的时候看什么。3.1 扫描角设置β 的符号与波束指向验证扫描角 θ₀ 决定了主瓣往哪偏而它完全由 β 控制。前面配置里写了cfg.beta -2*pi*cfg.d*cosd(cfg.theta0)这个负号来自阵列相位递进的定义方向。验证方法很直接设 θ₀ 60°跑完看 dB 图的峰值是不是落在 60° 附近。如果峰值跑到 120°镜像位置说明 β 符号反了如果峰值在 90° 不动说明 β 没生效检查是不是cosd写成了cos后者吃弧度。我一般会做一个扫描角扫描的小循环把 θ₀ 从 30° 到 150° 每隔 30° 跑一遍把主瓣峰值角度打出来对照for t0 30:30:150 cfg.theta0 t0; cfg.beta -2*pi*cfg.d*cosd(t0); AF array_factor(cfg, theta); [~, imax] max(abs(AF)); fprintf(设定扫描角 %3d 度实际峰值 %6.1f 度\n, t0, theta(imax)); end正常情况下设定值和实际峰值应该差在 0.1° 以内受角度分辨率限制。差超过 1°先查 β 公式再查theta向量的定义范围是否覆盖了扫描角。这个对照表放进报告里比单纯贴一张方向图有说服力得多。3.2 阵元间距与栅瓣d/λ 超过 0.5 之后发生了什么阵元间距 d 是栅瓣的开关。均匀直线阵不出现栅瓣的条件是 d/λ 1/(1|cosθ₀|)侧射时θ₀90°就是 d/λ 1但工程上通常取 0.5λ 留裕量。当 d/λ 增大到 0.7、0.8方向图上会冒出和主瓣差不多高的栅瓣这时候能量被分走主瓣增益下降实际系统里是灾难。调试方法固定 N8、θ₀90°把 d/λ 从 0.5 扫到 1.0观察 dB 图上除了 90° 主瓣之外是否在 ±arcsin(λ/d) 附近出现等高峰。这个角度就是栅瓣位置公式是 θ_g arccos(±λ/d - cosθ₀) 的解。把扫描结果整理成表栅瓣出现与否一目了然d/λ主瓣位置是否出现栅瓣栅瓣大致角度0.590°否—0.790°是±45° 附近1.090°是0°、180° 附近这张表是答辩时解释“为什么间距不能随便取大”的最直接证据。注意 d/λ 1.0 时栅瓣和主瓣一样高方向图完全失去选择性这个极端情况值得单独跑一次留作反例。3.3 阵元数对波束宽度的影响N 增大主瓣变窄的定量关系阵元数 N 决定主瓣宽度和增益。N 越大主瓣越窄方向性越强但阵元数上去之后副瓣数量也增多。侧射时 HPBW 的近似公式是 0.886·λ/(N·d) 弧度换算成度再和仿真提取值对照误差在 5% 以内算正常。我一般固定 d/λ0.5、θ₀90°把 N 取 4、8、16 各跑一次把 HPBW 和第一副瓣电平列出来。N4 时 HPBW 约 25°N8 约 12.8°N16 约 6.4°基本是反比关系。第一副瓣电平对均匀阵来说固定在 -13.2 dB 左右不随 N 变这个“副瓣电平与 N 无关”的结论是均匀阵的固有特性报告里点出来能体现理解深度。如果仿真出来的 SLL 明显偏离 -13.2 dB先查是不是角度分辨率太粗导致峰值没采到把theta步长从 0.1° 降到 0.01° 再试。4. 避坑与排查仿真结果对不上时的五条检查路径方向图不对别急着改公式按下面五条顺序查八成能定位到问题。现象一主瓣指向和设定扫描角镜像对称。原因几乎都是 β 符号取反。解决确认cfg.beta -2*pi*cfg.d*cosd(cfg.theta0)里的负号以及cosd用的是角度制。如果阵列定义方向相反比如从最后一个阵元开始编号符号也要跟着翻。现象二dB 图出现断线或-Inf警告。原因是阵因子在某些角度为零log10(0)发散。解决在 dB 转换前加幅度下限max(AF_norm, 1e-6)下限取 -120 dB 足够低不影响 -40 dB 范围内的读数。现象三HPBW 提取值明显偏小。原因是扫描角接近 ±90°主瓣被观察范围边界截断-3 dB 点只找到一侧。解决把theta范围扩到 -180° 到 180°或者在报告里注明主瓣部分可见。另一种可能是角度步长太粗-3 dB 点落在两个采样点之间把步长降到 0.01° 再提取。现象四副瓣电平远高于 -13.2 dB。均匀阵的理论 SLL 是 -13.2 dB偏高通常是角度分辨率不够峰值没采准或者归一化时用了局部最大值而不是全局最大值。解决确认max(abs(AF))取的是全角度范围的最大值并把步长调细。如果 SLL 在 -10 dB 左右晃基本就是采样问题。现象五改了 N 或 d 之后结果完全不变。原因是参数改了但没重新计算 β或者函数里读的是硬编码的旧值。解决所有参数走cfg结构体改完配置后确认array_factor内部没有残留的局部常量。我习惯在脚本开头加一句clear cfg防止工作区里旧结构体字段干扰。提示每次改参数后先跑一次单角度验证比如只看 θθ₀ 处的阵因子是否接近 N确认链路通了再画全图比直接看方向图快得多。5. 验收与答辩用三张对照表证明仿真可信仿真做完不等于能交验收的核心是“结果可复现、指标可对照、异常可解释”。我一般准备三张表放进报告第一张是扫描角对照表设定值和实际峰值角度并排差值控制在 0.1° 以内第二张是阵元数-HPBW 对照表仿真值和 0.886λ/(Nd) 理论值并排误差列出来第三张是间距-栅瓣表d/λ 从 0.5 到 1.0 逐档标注栅瓣有无和大致角度。三张表往那一放评委问“你怎么知道结果对”的时候直接指表比口头解释管用。答辩时最容易被追问的是“为什么取 d0.5λ”。回答要落到栅瓣条件上d/λ 1/(1|cosθ₀|)侧射时上限是 1但取 0.5 是为了在扫描时也留裕量同时兼顾互耦和加工。如果被问“扫描到 60° 时栅瓣条件变了吗”把公式里 |cosθ₀| 带进去算上限变成 1/(10.5)0.667所以 d0.5λ 在 60° 扫描下仍然安全这个推导过程比背结论有说服力。还有一个实操技巧答辩前把脚本跑三遍确认每次结果一致并把随机数种子固定如果用了任何随机成分。MATLAB 默认每次启动随机种子不同虽然这套仿真没有随机量但养成固定种子的习惯能避免“昨天跑的和今天不一样”的尴尬。另外把theta步长、dB 下限、归一化方式这三个参数在报告的方法部分写清楚评委照着能复现可信度直接上一个台阶。从那以后我每次交仿真类方案都强制自己先跑一遍“单角度验证 三张对照表”确认链路通了再画图写报告省下来的返工时间远比这一步多。希望帮到你。本文还有配套的精品资源点击获取