简介:面向阵列天线方向图学习与仿真的文档压缩包,适合电子信息、通信工程等专业学生及天线设计初学者阅读。文档系统讲解阵列天线波束形成原理与方向图函数推导,重点介绍方向图相乘原理在多元天线阵中的应用,并在此基础上给出三组MATLAB示例程序,分别控制阵列个数n、波长lamda、阵元间距d变化,绘制方向图曲线并对比分析变化规律。包体仅1个doc文件,97KB,内容紧凑,便于打印或导入笔记软件;文中的源程序与仿真图配合讲解,可直接按步骤运行复现,帮助读者理解参数对主瓣、副瓣和收敛性的影响。资源已有344人学习下载,对于正在完成阵列天线课程设计或准备相关实验报告的人群具有较强参考价值。
1. 阵列天线方向图:比 S 参数更值得先看的那条曲线
做天线的人刚接触阵列时,往往习惯先看 S11、看驻波,觉得匹配好了天线就"通"了。但阵列天线和单天线最大的不同在于:它的辐射特性不再由单元独自决定,而是由单元之间的干涉共同决定——同一个阵列,换一组馈电幅度和相位,主瓣指向、波束宽度、旁瓣电平会发生剧烈变化,而 S11 几乎纹丝不动。方向图才是阵列天线的"指纹"。这就是为什么阵列天线方向图及其 MATLAB 仿真这个题目,几乎所有微波工程课程都会作为大作业或毕业设计出现:它要求你从阵因子理论出发,自己写代码把方向图综合、波束扫描、低旁瓣加权这套流程跑通。这篇博文就按"理论 -> 代码 -> 综合 -> 验证"的顺序,把方向图计算和 MATLAB 仿真的完整套路拆开讲。无论是准备课程报告,还是工作中需要快速评估一个阵列方案,本文给出的脚本和参数表都能直接改着用。
2. 方向图乘积定理:阵列方向图仿真的理论地基
2.1 阵因子与单元因子的拆分
阵列天线方向图仿真里最核心的公式只有一个——方向图乘积定理。它的表述非常简洁:一个阵列的远场方向图,等于单元方向图(Element Pattern)和阵因子(Array Factor)的乘积。
这个定理成立的前提是单元间互耦可以忽略,或者互耦效应已经折算进单元方向图里。工程上做初步综合时,通常直接把单元方向图简化成 cos 函数形式,比如一个沿 z 轴放置的贴片天线,单元方向图近似为:
% 单元方向图: 假设沿 z 轴放置的贴片, 用 cos(theta)^q 近似 theta = linspace(-pi/2, pi/2, 181); % 半空间角度 q = 1; % 贴片阶数, q越大波束越窄 element_pattern = cos(theta).^q;这段代码里,linspace(-pi/2, pi/2, 181)把角度从 -90 度到 90 度均匀切了 180 份,q控制单元波束的窄宽。实际工作中,q 的取值可以通过全波仿真提取,比如用 HFSS 仿真单个贴片天线后,把远场方向图导出来再拟合出 q 值。这里先不展开,继续看阵因子。
阵因子是阵列仿真里真正要动手算的部分。对于 N 个各向同性单元组成的线阵,阵因子的通用形式为:
% 均匀线阵阵因子 N = 8; % 阵元数 d = 0.5; % 阵元间距, 单位: 波长 alpha = 0; % 单元间相位差, 单位: 弧度 theta = linspace(-pi/2, pi/2, 181); AF = zeros(size(theta)); for k = 1:N AF = AF + exp(1j * k * (2*pi*d*sin(theta) - alpha)); end AF = abs(AF); AF = AF / max(AF); % 归一化这段代码的循环写法比较容易理解:每个阵元的相位贡献是k * (2*pi*d*sin(theta) - alpha),其中2*pi*d*sin(theta)是空间相位延迟,alpha是馈电相位。N 个阵元依次叠加,最后取模、归一化。
将单元方向图和阵因子相乘,得到的乘积方向图才是阵列的真实响应。乘积定理的工程意义在于:它把"阵列设计"拆成了两个相对独立的环节——先确定单元,再确定阵因子。单元不好换,但阵因子完全由 N、d、alpha 这三个参数控制,仿真时可以非常自由地调节。
2.2 从公式到 MATLAB 代码的三个参数对应关系
很多人在这一步犯的错误是只算阵因子,把单元方向图当作 1 来处理。对全向单元(如偶极子垂直于纸面摆放时,H 面方向图确实是全向的)这样做没问题,但工程上大多数微带贴片、喇叭天线都不是全向的。正确做法是把乘积定理写进代码:
% 方向图乘积定理的MATLAB实现 P_total = element_pattern .* AF_normalized; % 逐元素相乘 P_total_dB = 20*log10(P_total + eps); % 转dB, 加eps防止log(0)这里有个细节值得注意:AF归一化和element_pattern归一化必须各自独自完成,再相乘。如果先乘后归一化,会把两者的相对关系搞混。20*log10(P_total + eps)里的eps是 MATLAB 内置的极小值,用来避免取对数时出现 -Inf。
在代码里,阵元数 N、阵元间距 d、单元间相位差 alpha 是三个直接可见的调优参数。N 增加,主瓣变窄、增益升高;d 增大,主瓣同样变窄,但旁瓣也会升高,甚至会引入栅瓣;alpha 改变,主瓣方向发生偏转。理解了这三个参数的独立作用,后面做波束扫描和低旁瓣综合时就不容易绕晕。
| 参数 | 主瓣宽度 | 旁瓣电平 | 栅瓣风险 | 典型取值 |
|---|---|---|---|---|
| N(阵元数) | 增大则变窄 | 基本不变 | 无 | 8~32 |
| d(间距/λ) | 增大则变窄 | 升高 | d ≥ 1 时可能 | 0.4~0.7 |
| alpha(相位差) | 不变 | 基本不变 | 扫描角过大时出现 | -π ~ π |
表格里的数字是理论结论。实际仿真中,d 超过 0.7 个波长后旁瓣会明显抬高,d 接近 1 个波长时栅瓣就会进入可见空间,这些都是可以在 MATLAB 脚本里几秒钟验证的事。
3. 均匀线阵方向图的 MATLAB 完整实现
3.1 一个可直接使用的方向图仿真函数
把上一章的思路整理成一个可复用的函数,是工程习惯。下面这个函数接受 N、d、alpha、角度范围作为输入,输出极坐标方向图和直角坐标方向图:
function [theta, AF_dB] = array_pattern(N, d, alpha, scan_theta) % 均匀线阵方向图仿真 % 输入: % N - 阵元数量 % d - 阵元间距 (波长倍数) % alpha - 馈电相位差 (弧度) % scan_theta - 角度扫描范围, 如 [-90, 90] (度) % 输出: % theta - 角度向量 (度) % AF_dB - 归一化阵因子 (dB) theta_deg = linspace(scan_theta(1), scan_theta(2), 1000); theta = theta_deg * pi / 180; % 转弧度 AF = zeros(1, length(theta)); for k = 0:N-1 AF = AF + exp(1j * k * (2*pi*d*sin(theta) - alpha)); end AF = abs(AF); AF_dB = 20*log10(AF/max(AF) + 1e-6); % 极坐标方向图 figure; polarplot(theta, AF_dB + 30); % +30是为了让负dB值可见 title('极坐标方向图'); % 直角坐标方向图 figure; plot(theta_deg, AF_dB, 'LineWidth', 1.5); grid on; xlabel('角度 (度)'); ylabel('归一化幅度 (dB)'); title('直角坐标方向图'); axis([scan_theta(1), scan_theta(2), -40, 0]); end这个函数里有两个值得留意的设计:一是角度采样点取了 1000 个,保证主瓣和旁瓣的细节不会因为采样不足而丢失;二是AF_dB + 30的偏移量,因为 dB 值都是负数,直接画极坐标图会把零点附近的曲线全部挤在圆心,加一个偏移量之后,-30dB 以下的旁瓣能看得更清楚。
调用方式非常直接:
theta, AF_dB] = array_pattern(8, 0.5, 0, [-90 90]);这里 N=8、d=0.5λ、alpha=0,得到的是一个侧射阵(broadside array)方向图:主瓣指向 0 度,第一旁瓣约 -13.3dB,符合均匀线阵的理论值。你可以试着把 N 改大,比如改成 16,第一旁瓣的电平仍然是 -13.3dB 左右,但主瓣宽度会显著变窄——这正好呼应了上一章表格里"N 增大则主瓣变窄,旁瓣电平基本不变"的结论。
3.2 波束扫描仿真:alpha 与指向角的关系
改变相位差 alpha 可以让主瓣偏离侧射方向,这就是相控阵波束扫描的原理。这里的关键公式是:主瓣峰值出现在sin(theta_0) = alpha / (2*pi*d)处,因此 alpha 的换算关系是:
% 从期望指向角反算alpha theta_0 = 30; % 期望波束指向 (度) d = 0.5; % 间距为半波长 alpha = 2*pi*d*sind(theta_0); % 反算单元间相位差 % 调用上面定义的函数 theta, AF_dB] = array_pattern(8, d, alpha, [-90 90]);仿真出来会看到主瓣峰值正好出现在 30 度位置。但伴随而来的是:波束扫描后主瓣宽度会略微展宽,第一旁瓣会变得不对称,一侧升高、一侧降低。这是因为阵列投影口径随扫描角增大而减小,等效于口径尺寸变小。
当 d=0.5λ 时,最大扫描角约 90 度,也就是端射方向。如果 d=0.4λ,最大扫描角会变小,超过之后主瓣会发生畸变。实际工程中,d 通常取 0.5λ 到 0.6λ,这样既能保证扫描范围,又不至于让栅瓣出现。再多说一句:如果 alpha 超过理论计算值,扫描角对应的 sin 值会超过 1,方向图上主瓣消失,变成一堆杂散的瓣,这是仿真发散的一种常见表现——但这不是求解器发散,是你给的参数越界了。
3.3 栅瓣的产生条件与可视化验证
栅瓣是阵列天线仿真里最先遇到的"坑"。它的出现条件可以用一个不等式判断:
% 栅瓣判断: d/lambda > 1/(1+sin(theta_0)) 时出现栅瓣 d = 1.0; % 改成1个波长间距 theta_0 = 0; % 侧射情况 criteria = 1 / (1 + sind(theta_0)); fprintf('临界间距: %.2f lambda, 当前间距: %.2f lambda\n', criteria, d); if d > criteria disp('出现栅瓣, 需要减小阵元间距'); end把这段代码放到上一节的函数环境里跑一遍,d=1.0λ 时方向图上除了 0 度主瓣,还会在 ±90 度方向出现两个等高的栅瓣。栅瓣的物理含义是:在这些方向上,各个阵元的辐射在远场同相叠加,和主瓣方向一样形成干涉极大值。
栅瓣的工程危害很大:主瓣能接收信号,栅瓣同样能接收,而且接收方向你不知道,相当于雷达或通信系统的方向图出现了"幽灵耳朵"。这就是为什么相控阵天线设计里,间距 d 被反复强调不能超过半波长——半波长是避免栅瓣的最保险选择,d 取 0.5λ 时理论上扫描到 ±90 度也不会出现栅瓣。
4. 从线阵到平面阵:矩形面阵方向图的二维仿真
4.1 可分离激励下的二维阵因子
线阵只能控制一个维度的波束,通信基站、雷达多数时候需要的是二维扫描,这就必须上平面阵。最常见的平面阵是矩形栅格排布,行方向 M 个单元、列方向 N 个单元。当每行的激励幅度分布和每列的激励幅度分布互相独立时(学术上叫"可分离分布"),整个面阵的阵因子可以写成两个线阵因子的乘积:
% 矩形面阵方向图仿真 M = 8; % x方向阵元数 N = 6; % y方向阵元数 dx = 0.5; % x方向间距 (λ) dy = 0.5; % y方向间距 (λ) % 定义二维角度扫描面 theta = linspace(0, pi, 91); % 俯仰角 0~180度 phi = linspace(0, 2*pi, 181); % 方位角 0~360度 [THETA, PHI] = meshgrid(theta, phi); % 生成波数向量 kx = 2*pi*dx*sin(THETA).*cos(PHI); ky = 2*pi*dy*sin(THETA).*sin(PHI); AF_x = zeros(size(THETA)); AF_y = zeros(size(THETA)); for m = 0:M-1 AF_x = AF_x + exp(1j * m * kx); end for n = 0:N-1 AF_y = AF_y + exp(1j * n * ky); end AF_2D = abs(AF_x .* AF_y); % 面阵阵因子 = 线阵因子乘积 AF_2D = AF_2D / max(AF_2D(:));这段代码里的meshgrid是维度扩展的核心:theta有 91 个采样点,phi有 181 个采样点,meshgrid把它们扩展成两个二维矩阵THETA和PHI,这样sin(THETA).*cos(PHI)就能一次性计算出所有方位角、俯仰角组合下的波数分量。
AF_x和AF_y的循环结构跟前面的均匀线阵一致,区别在于这里用的是kx和ky——二维空间里,阵列因子在 x 方向的相位延迟取决于sin(theta)*cos(phi),在 y 方向取决于sin(theta)*sin(phi),两者的乘积就是整个面阵的响应。
4.2 用 mesh 和 surf 画三维方向图
二维阵因子算完之后,画图是一个容易被忽略的步骤。如果直接把 91x181 的矩阵画出来,方向图的形状会非常不直观。常用的做法是把幅度转成 dB 后,在球坐标系里绘制:
% 将线极化分量转换为直角坐标 AF_dB_2D = 20*log10(AF_2D + 1e-6); AF_dB_2D = max(AF_dB_2D, -40); % 限制动态范围, 避免噪底干扰视图 % 球坐标转直角坐标 X = AF_2D .* sin(THETA) .* cos(PHI); Y = AF_2D .* sin(THETA) .* sin(PHI); Z = AF_2D .* cos(THETA); figure; surf(X, Y, Z, AF_dB_2D, 'EdgeColor', 'none'); axis equal; colormap(jet); colorbar; xlabel('X'); ylabel('Y'); zlabel('Z'); title('矩形面阵三维方向图');这段代码的要点在X = AF_2D .* sin(THETA) .* cos(PHI)——这里的AF_2D用的是线性值而不是 dB 值,因为 surf 的坐标必须反映真实的半径距离,用 dB 值会把主瓣压扁成一根针。而surf的第四个参数用AF_dB_2D来控制颜色,这样既能看清方向图的形状,又能通过色标分辨旁瓣电平。
4.3 激励分布不可分离时的通用算法
可分离分布是特例,工程上很多阵列的激励分布是不可分离的,比如圆形阵列、共形阵列,或者为了特定旁瓣形状做了二维联合优化的阵列。这种时候上面那种"先算两个线阵因子再相乘"的捷径走不通,需要回到最基本的概念:把每个单元单独放进去求和。
% 不可分离激励的通用面阵方向图算法 P = zeros(size(THETA)); for p = 0:M-1 for q = 0:N-1 % I(p+1, q+1)是激励幅度, 可以来自任意加权表 amp = I(p+1, q+1); phase = (p * kx + q * ky); P = P + amp .* exp(1j * phase); end end这个双重循环的复杂度是 O(MN点数),对 8x6 的阵列来说完全没问题,但如果你要评估 32x32 的阵列,建议预计算相位矩阵来消除内层循环。工程上的经验是:先用可分离算法快速扫参数,确定可行的设计区间,再用通用算法做最终验证,既快又准。
5. 低旁瓣综合:切比雪夫加权的 MATLAB 实现
5.1 均匀加权方向图哪里不够好
均匀线阵的旁瓣电平固定在 -13.3dB,这个值在许多场景下不满足指标。基站天线要求第一旁瓣低于 -20dB,雷达天线往往要 -30dB 以下,否则旁瓣进来的干扰会直接影响测角和探测性能。压低旁瓣的做法是对阵元激励幅度进行"加权"——让中间阵元幅度大、边缘阵元幅度小。这就是低旁瓣综合的基本思路。
MATLAB 中做切比雪夫加权最方便的工具是内置函数chebwin,但它需要谢昆诺夫变换做前置计算,直接把切比雪夫多项式映射到阵因子方向。对 N 元线阵,调用方式如下:
% 切比雪夫加权: 设计目标旁瓣电平 -30dB N = 10; % 阵元数 SLL_dB = -30; % 目标旁瓣电平 w = chebwin(N, -SLL_dB); % chebwin要求输入正数, 取负注意chebwin的第二个参数要求传入旁瓣电平的绝对值(正数),也就是-SLL_dB。算出来的w是一个 N 维向量,每个分量就是对应阵元的激励幅度。用这个加权系数替代均匀加权,就能得到等旁瓣的方向图特性。
5.2 加权方向图与均匀方向图对比仿真
有了一组加权系数,下一步就是把它带进方向图计算公式。可以复用第 3 节的array_pattern函数逻辑,稍作改动支持自定义权重:
% 对比均匀加权与切比雪夫加权的方向图 N = 10; d = 0.5; theta = linspace(-pi/2, pi/2, 1000); % 均匀加权 w_uniform = ones(1, N); AF_uniform = zeros(size(theta)); for k = 1:N AF_uniform = AF_uniform + w_uniform(k) * exp(1j * k * (2*pi*d*sin(theta))); end % 切比雪夫加权 SLL_dB = -30; w_cheb = chebwin(N, -SLL_dB)'; AF_cheb = zeros(size(theta)); for k = 1:N AF_cheb = AF_cheb + w_cheb(k) * exp(1j * k * (2*pi*d*sin(theta))); end % 归一化并转dB AF_uniform_dB = 20*log10(abs(AF_uniform)/max(abs(AF_uniform)) + 1e-6); AF_cheb_dB = 20*log10(abs(AF_cheb)/max(abs(AF_cheb)) + 1e-6); % 对比绘图 figure; plot(theta*180/pi, AF_uniform_dB, 'r-', 'LineWidth', 1.5); hold on; plot(theta*180/pi, AF_cheb_dB, 'b--', 'LineWidth', 1.5); grid on; legend('均匀加权', '切比雪夫 -30dB'); xlabel('角度 (度)'); ylabel('归一化幅度 (dB)'); axis([-90 90 -50 0]);跑完这段代码,你会看到两个关键变化:切比雪夫加权的第一旁瓣从 -13.3dB 压到了约 -30dB,所有旁瓣基本等高,形成"等旁瓣"特征;但主瓣宽度从约 10 度展宽到了约 14 度。这就是低旁瓣的代价——旁瓣压低多少 dB,主瓣就要展宽相应的比例。
这个 trade-off 在工程上叫"口径效率损失"。均匀分布口径效率最高,波束最窄;切比雪夫加权把一部分能量分配给旁瓣抑制,主瓣方向上的增益就会下降。下表总结了不同旁瓣目标下的实测仿真结果:
| 权重类型 | 第一旁瓣电平 | 主瓣宽度 (-3dB) | 增益损失 |
|---|---|---|---|
| 均匀 | -13.3 dB | 10.2° | 0 dB |
| 切比雪夫 -25dB | -25 dB | 11.5° | ~0.5 dB |
| 切比雪夫 -30dB | -30 dB | 12.8° | ~0.8 dB |
| 切比雪夫 -40dB | -40 dB | 15.1° | ~1.5 dB |
表中数据由 N=10、d=0.5λ 的线阵仿真得出。可以看出,旁瓣要求每提高 10dB,主瓣大概展宽 2~3 度、增益损失 0.5dB 上下。这个规律在设计中可以直接用来做初步预算。
5.3 切比雪夫综合的边界条件
切比雪夫综合并非万能的。当阵元数 N 比较少(比如 N=5)且旁瓣要求很高(比如 -40dB)时,切比雪夫综合的幅度分布会出现边缘阵元幅度过小甚至接近于零的情况。这会导致两个问题:一是边缘阵元的激励幅度太小,实际馈电网络很难实现这么精确的幅度比;二是阵列的容差性能变差——激励误差稍微大一点,方向图就偏离设计值。
工程上的经验法则是:阵列的口径越大(N 越多),切比雪夫加权越容易实现。N=8 时做 -30dB 旁瓣还可以接受,N=16 时做 -35dB 也不难,但 N=4 要 -40dB 就会让边缘阵元幅度比中间阵元低 20dB 以上,这已经接近功分器的加工极限了。
遇到这类情况,替代方案是泰勒加权。泰勒加权只在靠近主瓣的几个旁瓣内保持近似等电平,远离主瓣的旁瓣逐渐衰减,这样既能压低近区旁瓣,又不会像切比雪夫那样把所有的旁瓣都压平,综合出来的幅度分布更温和、工程上更容易实现。MATLAB 里没有直接的泰勒加权内置函数,需要自己写十行左右的代码,或者从天线工具包中调用taylorwin。
6. 方向图仿真的验证技巧与常见发散原因排查
6.1 仿真发散先查参数越界而非算法错误
很多人看到方向图"乱了"就怀疑代码写错了,实际上 90% 的异常都出在参数越界上。最典型的是alpha越界:当你设定的扫描角对应的sin(theta)大于 1 时,方向图的主瓣会消失,取而代之的是一堆均匀散落的杂瓣,每个瓣的高度基本相同,看起来就像是"仿真发散"。判定方法很简单——检查2*pi*d*sind(theta_0)的绝对值是否大于2*pi*d,如果大于,说明实际扫描角超出了可见空间范围。把期望扫描角限制在[-90, 90]且间距不超过 0.5λ,这类问题就基本不会出现。
另一种"发散"其实是角度采样不足。第 3 节函数里用了 1000 个采样点,如果你偷懒用了 100 个点,波束指向角在 30 度时主瓣峰值处可能只有 2 个采样点,画出来的方向图会呈现明显锯齿状。验证方法很粗暴:把采样点从 100 改成 1000,如果方向图形状明显变化,说明是采样问题,不是物理模型的体积变化。对窄波束(N 大)要尤其注意,波束越窄、主瓣需要越高的角度分辨率。
6.2 用理论值校验仿真结果
方向图仿真脚本完成之后,第一件事不应该是去调参数,而是验证正确性。最有效的验证是检查两类理论值:第一旁瓣电平和主瓣零点位置。均匀线阵的第一旁瓣电平固定是 -13.3dB,不管 N 等于多少,这个值不变。主瓣的零点位置由sin(theta) = n*lambda/(N*d)给出。写一个断言式检查:
% 验证第一旁瓣电平是否接近理论值 AF_dB_sorted = sort(AF_dB, 'descend'); measured_sll = AF_dB_sorted(2); % 第二大的dB值是第一旁瓣 theoretical_sll = -13.3; fprintf('实测第一旁瓣: %.2f dB, 理论值: %.2f dB\n', measured_sll, theoretical_sll); if abs(measured_sll - theoretical_sll) < 0.5 disp('旁瓣电平验证通过'); else disp('旁瓣电平异常, 检查N、d参数'); end这短短几行代码就是"仿真结果验证"里最值钱的部分。结构复杂的代码可能出错,但有了这些理论锚点,错误会立刻暴露。更严格的做法是把主瓣零点位置和理论公式也做一次对比,两者如果误差超过一个采样间隔,就要检查是否归一化出了问题。
6.3 方向图数据导出与全波仿真对照
MATLAB 仿真的阵因子基于理想点源,忽略了单元互耦、边缘截断、地板衍射等效应。实际产品设计时,方向图要用 HFSS、CST 做全波仿真。最常见的工作流是:MATLAB 先把方向图综合的激励幅度和相位算出来,导出一份表格,然后把这个表格作为全波仿真的馈源条件代入,最后把两者的方向图叠在一起对比。
% 导出切比雪夫加权系数到CSV文件 w = chebwin(10, 30)'; csvwrite('cheb_weights.csv', w);全波仿真的结果和 MATLAB 理想计算之间会存在系统性差异:第一旁瓣电平会比理想值高 1~2dB,零点会被填充,波束指向可能偏移 1 度以内。这些差异主要是互耦导致单元方向图畸变造成的。如果差异过大,优先检查阵列边缘单元的方向图和中心单元差多少——边缘单元由于截断效应,方向图会向阵列内部倾斜,这是全波仿真中"仿真发散"类问题最常见的根源之一。认识了这个边界,你就能更准确地判断 MATLAB 理想仿真的适用范围:它适合方案论证和参数扫描,不适合直接作为最终设计的天线指标依据。
本文还有配套的精品资源,点击获取