简介:本资源面向电子信息、通信工程及相关专业的本科生、硕士生与教研人员,提供基于Matlab模拟无穷小偶极子天线近场与远场的完整仿真代码,帮助理解天线辐射特性、近远场分布规律及电磁场数值计算方法。压缩包共6个文件,约1.08MB,包含1个m脚本主程序、1个zip压缩包、1个txt说明文档以及3个png结果图,其中m文件为核心仿真代码,txt用于补充说明,png直观展示运行结果,便于快速核对与学习。目前已有24人学习下载,适合课程设计、毕业设计及科研入门参考。读者可借助主程序复现偶极子天线近场与远场的电场、磁场分布,观察不同参数下的方向图与场强变化,并对照说明文档理解代码结构与物理含义,从而掌握Matlab在天线仿真中的建模思路与实现方法,为后续复杂天线阵列或电磁兼容分析打下基础。
1. 无穷小偶极子天线的近场远场:为什么你算的场总在 λ/10 处开始崩
很多人第一次用 Matlab 模拟偶极子天线,都会卡在同一个地方:远场公式背得滚瓜烂熟,方向图也能画出来,可一旦把观察点往天线附近挪,结果就开始离谱——增益虚高、相位乱跳、能量不守恒。问题不在代码,在于你拿远场近似去算近场。无穷小偶极子天线(infinitesimal dipole)是天线理论里最干净的解析模型,它的近场和远场有严格的闭式解,正好拿来当标尺:什么时候能用远场公式,什么时候必须回到完整场表达式,一测便知。这篇笔记就围绕 Matlab 复现这条边界展开,从场分量推导、网格划分、近远场判据,到可视化与常见翻车点,给一套能直接抄的流程。适合正在做天线仿真、射频链路预算,或者想用最短代码验证电磁场公式的工程师。
2. 无穷小偶极子的完整场表达式:先分清哪一项在近场说了算
2.1 从矢量位到 E、H 分量:三个距离项各管一段
无穷小偶极子沿 z 轴放置,长度 dl 远小于波长,电流 I 均匀分布。标准推导从磁矢量位 A 出发,得到球坐标下的场分量。这里不重复教科书推导,直接给结论,因为落地时你需要的是一眼能看出量级关系的表达式。
电场两个分量:
- E_r = (η I dl cosθ / 2π) · (1/r²) · (1 + 1/(jkr)) · e^(-jkr)
- E_θ = (jη k I dl sinθ / 4π) · (1/r) · (1 + 1/(jkr) - 1/(kr)²) · e^(-jkr)
磁场只有一个分量:
- H_φ = (j k I dl sinθ / 4π) · (1/r) · (1 + 1/(jkr)) · e^(-jkr)
关键在括号里那几项。1/r 项是辐射场,随距离一次衰减,远场主角;1/r² 项是感应场,近场主导;1/r³ 项是静电场,只在极近处才压得住前两项。E_θ 里同时含 1/r、1/r²、1/r³,E_r 只有 1/r² 和 1/r³,没有辐射项——这就是为什么轴向电场在远场可以忽略。
判断近远场的常用门槛是 kr = 1,即 r = λ/(2π) ≈ λ/6。工程上更保守取 λ/10 或 λ/2π 作为近场边界。低于这个距离,1/r² 和 1/r³ 项不能丢;高于它,只保留 1/r 项误差就很小。很多人翻车就是把远场公式直接套到 r = 0.05λ,结果 E_r 被算成零,方向图完全变形。
2.2 为什么用无穷小偶极子做标尺:解析解可验证
选它不是因为简单,而是因为它有闭式解,任何数值方法(FDTD、MoM、FEM)都能拿它当基准。你用 Matlab 写一遍完整场,再写一遍远场近似,两条曲线一叠,误差随 kr 的变化立刻可见。这比直接上 HFSS 跑一个真实天线更有诊断价值——真实天线的近场没有解析参照,你连错在哪都不知道。
另一个理由是参数少。只有 I、dl、f 三个输入,波长由 f 决定,η 和 k 都是常数。变量少意味着你能把注意力放在距离和角度上,而不是被网格、边界条件、端口设置分散精力。等这套标尺跑通了,再迁移到半波振子或阵列,心里有底。
3. 用 Matlab 把近场和远场算出来:网格、参数与向量化写法
3.1 参数设定与观察网格生成
先定物理量。取 f = 1 GHz,λ = 0.3 m,dl = λ/50(满足无穷小条件),I = 1 A。自由空间 η ≈ 377 Ω,k = 2π/λ。
观察区域用球坐标网格。r 从 0.01λ 到 5λ 对数分布,θ 从 0 到 π,φ 固定取 0(偶极子轴对称,φ 不影响幅度)。用对数分布是因为近场变化剧烈,线性网格在近处点太稀。
% 无穷小偶极子近场/远场计算 - 参数与网格 c = 3e8; % 光速 m/s f = 1e9; % 频率 1 GHz lambda = c / f; % 波长 0.3 m k = 2*pi / lambda; % 波数 eta = 377; % 自由空间波阻抗 I = 1; % 电流幅度 A dl = lambda / 50; % 偶极子长度,远小于波长 % 观察网格:r 对数分布,theta 线性分布 r = logspace(log10(0.01*lambda), log10(5*lambda), 400); theta = linspace(1e-3, pi-1e-3, 200); % 避开 0 和 pi 的奇异点 [R, TH] = meshgrid(r, theta);这里 theta 避开 0 和 pi,是因为 E_r 和 E_θ 含 cosθ/sinθ 和 1/sinθ 因子,端点会出 Inf 或 NaN。实际天线轴向场确实存在,但公式在端点需要取极限,数值上直接绕开更省事。
3.2 完整场与远场近似的向量化实现
Matlab 里不要写双重 for 循环,直接矩阵运算。完整场按 2.1 的公式逐项写,远场只保留 1/r 项。
% 完整场表达式 kr = k * R; exp_term = exp(-1j * kr); Er_full = (eta * I * dl * cos(TH) ./ (2*pi)) .* ... (1 ./ R.^2) .* (1 + 1./(1j*kr)) .* exp_term; Etheta_full = (1j * eta * k * I * dl * sin(TH) ./ (4*pi)) .* ... (1 ./ R) .* (1 + 1./(1j*kr) - 1./(kr).^2) .* exp_term; Hphi_full = (1j * k * I * dl * sin(TH) ./ (4*pi)) .* ... (1 ./ R) .* (1 + 1./(1j*kr)) .* exp_term; % 远场近似:只保留 1/r 辐射项 Etheta_ff = (1j * eta * k * I * dl * sin(TH) ./ (4*pi)) .* ... (1 ./ R) .* exp_term; Hphi_ff = Etheta_ff / eta;注意 E_θ 完整式里三项的符号:+1/(jkr) 和 -1/(kr)²。符号写错是高频错误,会导致近场相位完全反。写完拿一个点手算验证:r = λ/2π 时 kr = 1,三项分别是 1、-j、-1,实部抵消,只剩虚部,这是近远场过渡的特征。
3.3 近场与远场的误差量化
光看图不够,要给出误差随 kr 的曲线。定义 E_θ 的相对误差:
% 取 theta = 90 度这一行做误差分析 idx90 = round(numel(theta)/2); Etheta_full_90 = Etheta_full(idx90, :); Etheta_ff_90 = Etheta_ff(idx90, :); rel_err = abs(Etheta_ff_90 - Etheta_full_90) ./ abs(Etheta_full_90); figure; semilogx(r/lambda, rel_err*100, 'LineWidth', 1.5); xlabel('r / \lambda'); ylabel('相对误差 (%)'); title('远场近似相对误差随距离变化'); grid on;跑出来你会看到:r = 0.1λ 时误差可能超过 30%,r = 0.5λ 降到 5% 以内,r = 2λ 基本小于 1%。这条曲线就是你的判据表,比背 λ/2π 更直观。不同 theta 角误差不同,theta 越接近 90° 误差越小,因为轴向本来就没有辐射项。
4. 近场和远场到底怎么分:判据、可视化与三个必调参数
4.1 kr = 1 不是万能线:按误差容忍度反推边界
教科书说 kr >> 1 是远场,但“远大于”太模糊。落地时应该反过来:先定你能接受的误差,再从 3.3 的曲线读出对应距离。比如要求幅度误差小于 5%,从图上读 r ≈ 0.4λ;要求相位误差小于 5°,边界还要往外推。
三个必调参数:
| 参数 | 作用 | 典型取值 | 调错后果 |
|---|---|---|---|
| dl/λ | 决定“无穷小”是否成立 | ≤ 0.02 | 偏大时电流分布假设失效 |
| r 网格下限 | 决定近场分辨率 | 0.01λ | 太大会漏掉 1/r³ 主导区 |
| theta 避开量 | 规避奇异点 | 1e-3 rad | 太小出 NaN,太大丢轴向信息 |
dl/λ 是最容易被忽视的。无穷小偶极子的前提是电流均匀,dl 超过 λ/10 后电流呈正弦分布,公式不再适用。我一般取 λ/50 到 λ/100,既满足条件又不至于让场强小到数值下溢。
4.2 近场可视化:为什么幅度图和相位图要分开看
近场区幅度和相位都剧烈变化,画在一张图里会互相掩盖。建议分开:
% 近场幅度分布(theta-r 平面) figure; imagesc(r/lambda, theta*180/pi, abs(Etheta_full)); set(gca, 'YDir', 'normal'); xlabel('r / \lambda'); ylabel('\theta (度)'); title('|E_\theta| 近场幅度分布'); colorbar; % 近场相位分布 figure; imagesc(r/lambda, theta*180/pi, angle(Etheta_full)); set(gca, 'YDir', 'normal'); xlabel('r / \lambda'); ylabel('\theta (度)'); title('E_\theta 相位分布'); colorbar;幅度图上你会看到近场能量集中在 theta = 90° 附近,随 r 快速衰减;相位图上近场相位随距离非线性滚动,远场区才变成规整的 -kr 线性相位。相位图是判断近远场最灵敏的工具——远场相位斜率恒定,近场斜率一直在变。
4.3 从近场积分到远场方向图:一致性检查
一个可靠的验证方法:用近场等效原理,把近场面上算出的场积分得到远场,再和直接远场公式对比。虽然无穷小偶极子有解析远场,但走一遍积分流程能验证你的近场数据是否自洽。
简化做法:取 r = λ 的球面作为等效面,对 E_θ 和 H_φ 做远场变换。如果近场算对了,积分结果应该和 3.2 的 Etheta_ff 在远区吻合。这一步在 Matlab 里用 trapz 对 theta 积分即可,不需要复杂代码,但能抓出符号错误和系数遗漏。
5. 避坑与排查:近场远场模拟里最常见的五个翻车点
5.1 现象:r 很小时结果为 NaN 或 Inf
原因:theta 网格包含 0 或 pi,1/sinθ 和 cosθ/sinθ 发散。解决:theta 端点内缩 1e-3 rad,或者对端点单独取极限值。轴向场 E_r 在 theta=0 处实际为有限值,但公式形式在端点奇异,数值上绕开最省事。
5.2 现象:近场幅度比远场还小
原因:E_θ 三项符号写错,1/(jkr) 和 -1/(kr)² 的符号搞反,导致近场项相互抵消。解决:取 kr=1 手算三项,确认实部虚部关系;或者用 3.3 的误差曲线反查,符号错时误差曲线形状会异常。
5.3 现象:远场方向图在 theta=0 处不为零
原因:用了 E_θ 的远场近似,但 sinθ 在 0 处为零,方向图应该为零。如果画出来不为零,多半是网格端点处理错误或者归一化除了零。解决:检查 theta 向量是否包含精确的 0,归一化时用 max 而非端点值。
5.4 现象:dl 取 λ/10 后结果和解析解对不上
原因:无穷小条件被破坏,电流均匀假设失效。解决:dl 压到 λ/50 以下。如果必须用较长偶极子,换用正弦电流分布模型,那是另一套公式。
5.5 现象:相位图在远场区不是直线
原因:r 网格上限不够,或者 exp(-jkr) 的符号写成了 exp(+jkr)。解决:确认时间约定是 e^(jωt) 还是 e^(-jωt),全文统一。Matlab 里常用 e^(-jkr) 表示外向波,符号反了相位斜率就反。
6. 把标尺用起来:从无穷小偶极子迁移到真实天线的验证习惯
这套代码的价值不在无穷小偶极子本身,而在于它给你一条可量化的近远场边界。我现在的习惯是:任何新天线模型上手,先拿无穷小偶极子的解析场跑一遍同样的网格和误差分析,确认自己的后处理流程没问题,再换真实模型。这样能把“公式错”和“模型复杂”两类问题分开,省下大量排查时间。
具体迁移时,把 3.2 的完整场替换成你的数值求解器输出,3.3 的误差分析换成“数值解 vs 解析标尺”的对比。如果数值解在近场区偏离标尺,先查网格分辨率;远场区偏离,查边界条件和辐射边界距离。无穷小偶极子的近场衰减是 1/r³ 和 1/r²,如果你的数值解衰减更快,说明网格吸收或边界反射在作祟。
最后一个技巧:把 kr 作为横轴而不是 r,所有频率的结果会归一化到同一条曲线上。这样你换频率时不用重新标定边界,直接读 kr 值就行。我一般把 kr=1 标成近场红线,kr=10 标成远场绿线,中间是过渡区,任何结果落在这个区间都要多看一眼。
这套流程我用了几年,最大的教训是:不要相信任何没做过近远场一致性检查的远场结果。方向图好看不代表近场算对了,而近场错了,远场只是碰巧对。希望帮到你。
本文还有配套的精品资源,点击获取