
简介这份资源围绕无穷小偶极子天线这一经典电磁学模型提供基于Matlab的完整仿真实现面向电子信息、通信工程等专业的本科生、研究生及教研人员用于理解天线近场与远场的辐射特性、场强分布规律及数值计算方法。压缩包共6个文件约1.08MB以m脚本文件为核心配合png结果图、说明文档与嵌套压缩包便于直接运行、对照结果并快速上手。资源已在平台获得24人学习下载可作为课程设计、实验报告或科研入门的参考素材。读者可借助main.m脚本复现偶极子天线近区与远区的电磁场计算流程结合生成的图像直观观察场强随距离与角度的变化趋势并参考说明文档理解参数设置与仿真思路从而掌握从理论公式到Matlab编程实现的完整链路为后续天线阵列、电磁兼容等方向的仿真打下基础。1. 无穷小偶极子天线的近场远场为什么它是天线仿真的第一块试金石很多人第一次在 Matlab 里画偶极子天线方向图都会下意识把 r 设成一个很大的值然后心安理得地认为远场嘛肯定准。结果把 r 从 100λ 缩到 0.1λ方向图几乎没变于是得出结论近场远场差不多。这个结论是错的错在把无穷小偶极子当成了普通半波振子。无穷小偶极子infinitesimal dipole也叫赫兹偶极子长度 dl 远小于波长电流沿长度均匀分布它是唯一能写出严格闭式解的辐射源也是所有天线教材推导近场、远场分界的起点。Matlab 在这里的价值不是画一张好看的 3D 图而是让你亲手把 1/r³、1/r²、1/r 三项拆开看清哪一项在哪个距离上主导。这套东西适合三类人正在学天线理论但公式记不住的学生、需要验证 HFSS 或 CST 远场导出数据是否合理的一线工程师、以及要给近场探头或 NFC 线圈做理论基准的人。下面我按公式怎么落到代码、参数怎么设、哪里会翻车的顺序讲一遍。2. 从赫兹偶极子闭式解到 Matlab 可执行公式先立住理论再动手2.1 三个场分量和三个距离区间无穷小偶极子沿 z 轴放置长度 dl电流 I₀位于原点。在球坐标 (r, θ, φ) 下磁场只有 φ 分量电场有 r 和 θ 两个分量。标准闭式解Balanis《Antenna Theory》第 4 章写成H_φ j·(I₀·dl·sinθ / 4π) · (k/r) · (1 1/(jkr)) · e^(-jkr)E_r η·(I₀·dl·cosθ / 2π) · (1/r²) · (1 1/(jkr)) · e^(-jkr)E_θ j·η·(I₀·dl·sinθ / 4π) · (k/r) · (1 1/(jkr) - 1/(kr)²) · e^(-jkr)其中 k 2π/λ 是波数η ≈ 377 Ω 是自由空间波阻抗。关键在括号里那几项E_r 只有 1/r² 和 1/r³ 量级没有辐射项E_θ 同时含 1/r辐射、1/r²感应、1/r³静场三项H_φ 只有 1/r 和 1/r²。这就是近场远场分界的物理来源——不是人为规定而是三项随距离衰减速度不同。工程上习惯用 kr 划界kr ≪ 1 是近场静场和感应场主导kr ≫ 1 是远场辐射场主导kr ≈ 1 即 r λ/(2π) ≈ 0.159λ 是过渡区。注意这个 0.159λ 和常说的远场边界 2D²/λ不是一回事后者是针对有限尺寸天线的口径判据对无穷小偶极子这种点源2D²/λ 会退化成 0没有意义。这是第一个容易混的点。2.2 把公式写成可复用的 Matlab 函数我一般不会把公式直接塞进脚本而是写成一个返回三个分量的函数方便后面扫距离、扫角度。下面这段在 R2016b 以后的版本都能跑注意用 element-wise 运算function [Er, Etheta, Hphi] infDipoleField(r, theta, I0, dl, lambda) % 无穷小偶极子近场/远场闭式解 % r : 观察点距离 (m)可为向量 % theta : 极角 (rad)可为向量 % I0 : 电流幅值 (A) % dl : 偶极子长度 (m)需满足 dl lambda % lambda : 工作波长 (m) k 2*pi/lambda; eta 377; % 自由空间波阻抗 kr k .* r; % 防止 r0 导致除零实际使用时 r 从 0.001*lambda 起 Er eta * I0 * dl * cos(theta) ./ (2*pi) .* ... (1./r.^2) .* (1 1./(1j*kr)) .* exp(-1j*kr); Etheta 1j * eta * I0 * dl * sin(theta) ./ (4*pi) .* ... (k./r) .* (1 1./(1j*kr) - 1./(kr).^2) .* exp(-1j*kr); Hphi 1j * I0 * dl * sin(theta) ./ (4*pi) .* ... (k./r) .* (1 1./(1j*kr)) .* exp(-1j*kr); end逻辑说明kr 单独算出来是为了让三个括号项写起来干净也方便你后面单独把 1/(kr)² 那一项拎出来看。参数上dl 必须远小于 lambda我一般取 dl lambda/1000 到 lambda/50超过 lambda/10 闭式解就开始失真因为电流均匀分布的假设崩了。I0 取 1 A 只是为了归一化实际算方向图时幅值会被约掉。r 不能取 0物理上原点处场发散代码里从 0.001λ 起步。2.3 用一段脚本验证三项主导关系光看公式没感觉跑一段扫距离的脚本把 |E_θ| 的三个分量分别画出来你会立刻明白近场远场是怎么回事lambda 1; I0 1; dl lambda/100; r logspace(-3, 2, 500) * lambda; % 0.001λ 到 100λ theta pi/2; % 赤道面sinθ1E_θ 最大 k 2*pi/lambda; eta 377; kr k*r; % 三项分别计算去掉公共系数 C eta * I0 * dl / (4*pi) * k; rad C ./ r; % 1/r 辐射项 ind C ./ (r .* kr); % 1/r² 感应项 stat C ./ (r .* kr.^2); % 1/r³ 静场项 loglog(r/lambda, abs(rad), r, r/lambda, abs(ind), g, ... r/lambda, abs(stat), b, LineWidth, 1.5); xlabel(r / \lambda); ylabel(|E_\theta| 分量幅值); legend(1/r 辐射,1/r^2 感应,1/r^3 静场,Location,southwest); grid on; xline(1/(2*pi), k--, kr1);跑完你会看到三条斜率不同的直线在 r ≈ 0.159λ 处感应项和辐射项交叉静场项在更近处就掉下去了。这就是近场远场最直观的证据。参数说明logspace 保证近场区域采样够密否则 0.001λ 到 0.01λ 这段会被挤成一条线theta 取 pi/2 是因为 E_r 在赤道面为零只剩 E_θ分析最干净。3. 近场和远场方向图到底差在哪用 Matlab 把差异画出来3.1 远场方向图标准的 sinθ 甜甜圈远场kr → ∞时括号里只剩 1E_θ 退化成E_θ ≈ j·η·(I₀·dl·k / 4π) · (sinθ / r) · e^(-jkr)归一化方向图就是 |sinθ|与 φ 无关3D 形状是个甜甜圈。Matlab 里用 meshgrid 扫 θ 和 φ 就能画theta linspace(0, pi, 181); phi linspace(0, 2*pi, 361); [TH, PH] meshgrid(theta, phi); % 远场归一化方向图 F abs(sin(TH)); % 转直角坐标画 3D X F .* sin(TH) .* cos(PH); Y F .* sin(TH) .* sin(PH); Z F .* cos(TH); surf(X, Y, Z, F, EdgeColor, none); axis equal; colormap jet; colorbar; title(无穷小偶极子远场方向图);这段没什么坑唯一注意 theta 从 0 到 pi 而不是 0 到 2pi否则 z 轴会重复画一遍。远场方向图的最大值在 θ 90°零点在 θ 0° 和 180°前后比无穷大理想点源没有后瓣。3.2 近场方向图形状随距离变形近场里 E_θ 的括号项 (1 1/(jkr) - 1/(kr)²) 是个复数模和相位都随 kr 变。这意味着近场方向图不只是幅值缩放形状本身会变。我一般固定 r扫 θ把 |E_θ| 归一化后和远场叠在一起看lambda 1; I0 1; dl lambda/100; eta 377; k 2*pi/lambda; theta linspace(0.01, pi-0.01, 300); r_list [0.05, 0.159, 0.5, 5] * lambda; % 近场到远场 figure; hold on; for r r_list kr k*r; E abs(1j * eta * I0 * dl * sin(theta) / (4*pi) * (k/r) * ... (1 1/(1j*kr) - 1/(kr)^2) * exp(-1j*kr)); plot(theta*180/pi, E/max(E), LineWidth, 1.5); end legend(r0.05\lambda,r0.159\lambda,r0.5\lambda,r5\lambda); xlabel(\theta (deg)); ylabel(归一化 |E_\theta|); grid on;跑出来你会发现 r 0.05λ 时方向图明显比 sinθ 窄r 0.159λ 时接近但还没完全重合r 5λ 时和 sinθ 几乎分不出差别。这就是近场方向图变形的量化表现。参数上 r_list 特意选了 0.159λ 这个 kr1 的点它是过渡区的标志。注意归一化用的是每个 r 各自的最大值如果你想看绝对幅值差异去掉 /max(E) 即可但那样远场曲线会被压到看不见。3.3 波阻抗近场不是 377 Ω远场里 E_θ/H_φ η 377 Ω这是大家背熟的。但近场里这个比值是复数且随 kr 变。算一下kr logspace(-2, 2, 200); Zw 377 * (1 1./(1j*kr) - 1./(kr).^2) ./ (1 1./(1j*kr)); semilogx(kr, abs(Zw), b, kr, real(Zw), r--, kr, imag(Zw), g-.); xlabel(kr); ylabel(波阻抗 (\Omega)); legend(|Z_w|,Re,Im); grid on; xline(1,k--);kr ≪ 1 时 |Z_w| 远大于 377且虚部主导说明近场以储能为主不是辐射kr ≫ 1 时收敛到 377 实数。这个图是判断我到底在近场还是远场最硬的依据比记 0.159λ 更靠谱因为不同天线结构过渡点不一样。4. 避坑与排查无穷小偶极子仿真里最容易翻车的 5 个地方4.1 现象方向图在近场出现多瓣以为算错了原因把 E_r 和 E_θ 的模直接相加或者用 abs(Er) abs(Etheta) 当总场。E_r 和 E_θ 是正交分量总场模应该是 sqrt(|Er|² |Eθ|²)而且它们相位不同直接标量相加会造出假瓣。解决算总场用 sqrt(abs(Er).^2 abs(Etheta).^2)或者干脆只看 E_θ赤道面 E_r0。我一般分析方向图时固定 θ 扫 φ 或固定 φ 扫 θ避免分量混叠。4.2 现象r 取 0.001λ 时结果爆炸或 NaN原因公式里有 1/r³ 项r 太小时浮点数溢出或者 kr 小到 1/(kr)² 超过 double 精度。解决r 下限设成 0.001λ 到 0.005λ再小物理上也没意义偶极子本身有尺寸 dlr dl 时点源近似失效。代码里加一句 r max(r, 0.001*lambda) 兜底。4.3 现象dl 取 lambda/4 结果和教材对不上原因无穷小偶极子的前提是 dl ≪ λ 且电流均匀。dl 到 lambda/4 时电流分布已经接近正弦均匀假设崩了闭式解不再成立。解决dl 控制在 lambda/50 以内。如果你要算半波振子得用正弦电流分布积分不能套这个公式。这是标题里无穷小三个字的硬约束。4.4 现象用 2D²/λ 算远场边界得到 0 或负数原因无穷小偶极子 D → 02D²/λ 判据失效。这个判据是给口径天线用的。解决点源类天线用 kr ≥ 10即 r ≥ 1.6λ作为远场工程判据或者直接看波阻抗是否收敛到 377。别硬套 2D²/λ。4.5 现象Matlab 2023 中文注释乱码原因R2023 之前默认编码是 GBK脚本存成 UTF-8 后中文注释变问号。热词里matlab 2023 的中文注释乱码就是这个。解决在 R2023b 及以后用 matlab.editor 设置里把编码改成 UTF-8老版本在脚本开头加 %% 后手动另存为 GBK或者干脆注释写英文。我现在的习惯是函数头注释用英文正文说明写在外面省得跨版本折腾。5. 进阶把近场数据导出给 HFSS 对比以及一个验证小技巧实际项目里Matlab 算出来的近场经常要拿去和 HFSS 或 CST 的场监视器结果对比。热词里hfss导出远场数据就是这个场景。HFSS 导出的远场数据一般是 .csv 或 .fld列是 theta、phi、|E|、相位。我的做法是Matlab 这边在同样的 r、theta、phi 网格上算一遍两边都归一化到各自最大值然后算相对误差。如果远场区域误差在 5% 以内说明模型对得上如果近场误差大先检查 HFSS 里场监视器的 r 是不是设在了辐射边界内部——很多人把监视器放在 PML 里面数据本身就是吸收边界反射后的当然对不上。一个我常用的验证技巧不画方向图直接画 |E_θ| 随 r 的衰减斜率。远场区域 log-log 斜率应该是 -11/r近场静场区是 -31/r³过渡区在 -1 和 -3 之间。用 polyfit 对 log(r) 和 log(|E|) 做一次线性拟合斜率对不上就说明你的 r 区间选错了或者 dl 太大破坏了点源假设。这个比看方向图灵敏得多方向图在过渡区变化很缓肉眼容易骗过去。% 衰减斜率验证 r logspace(-2, 2, 200) * lambda; kr 2*pi/lambda * r; E abs(1./(r) .* (1 1./(1j*kr) - 1./(kr).^2)); % 去掉常数系数 p polyfit(log10(r), log10(E), 1); fprintf(拟合斜率 %.3f (远场应趋近 -1近场趋近 -3)\n, p(1));跑出来你会看到整段拟合斜率大概在 -1.5 左右因为跨越了过渡区。正确做法是分段拟合r 0.05λ 取一段r 2λ 取一段分别看斜率。我踩过的坑就是一开始拿整段拟合斜率 -1.5 看着挺合理实际上把两个区域平均掉了什么问题都发现不了。分段之后近场段 -2.9、远场段 -1.02才算真正验证通过。这套东西值不值得做如果你只是要一张方向图交作业直接画 sinθ 就行五分钟的事。但如果你要建立对近场远场的物理直觉、要验证商业软件的场数据、要给近场耦合问题打基准那把这三个分量拆开跑一遍是绕不过去的。我自己的习惯是每换一个天线结构先用无穷小偶极子的闭式解跑一遍衰减斜率和波阻抗确认自己的观察距离落在哪个区再去跑全波仿真。这个基准花不了半小时但能省掉后面几天的为什么仿真结果和实测对不上的排查。希望帮到你。本文还有配套的精品资源点击获取