☰
Matlab仿真无穷小偶极子天线:近场远场可视化全解析
2026/10/22 7:45:30 网站建设 项目流程

简介:本资源是面向本科及硕士阶段电磁场与天线课程教学与科研实践的Matlab仿真案例,聚焦无穷小偶极子天线近场与远场辐射特性的数值建模与可视化分析。通过理论公式推导与Matlab编程实现,直观呈现电场/磁场空间分布、方向图、场强衰减规律等核心物理特性,助力理解天线辐射机理与近远场划分标准。压缩包共6个文件(1.08MB),含主程序main.m、3幅关键结果图像(png)、说明文档txt及推广引导图,结构简洁、开箱即用;所有代码兼容Matlab 2014a/2019a,附运行结果截图,降低调试门槛。目前已有23人学习下载,适合电磁场仿真入门者快速掌握天线场计算流程,并可延伸至阵列设计、方向图综合等进阶应用。 做天线仿真这个事,很多人第一次上手就卡在“理论公式我全记住了,可一写代码就懵”。大一学电磁场时,老师让我们用 Matlab 画一个无穷小偶极子天线的近场和远场,我当时觉得这有什么难的,直接套公式不就行了。结果真动手才发现,坐标变换、复数运算、近场远场切换条件、三维可视化,每一个环节都有坑。等我全部调通,把那张漂亮的 3D 方向图截下来交作业时,我才算真正把“辐射”“波阻抗”“归一化方向函数”这些概念连成了一条线。

这个项目看起来只是一个小小的仿真作业,但它实际上是把《电磁场与电磁波》和《天线原理》两门课里最重要的概念——偶极子辐射、近场感应、远场辐射、方向图、功率密度——全部串起来的一次实操。适合三类人看:正在学电磁场与天线课程的学生、刚入门的射频工程师,以及想把 Matlab 数值计算能力用在电磁仿真上的硬件爱好者。这篇文章就把我当时的完整思路、代码、踩坑记录全部摊开讲清楚。

1. 为什么无穷小偶极子天线是天线仿真的必修课

1.1 一个被低估的“标准模型”

很多初学者不理解为什么要在“无穷小偶极子”上下功夫——现实中哪有无穷小的天线?我又不能拿它去发 WiFi 信号,学了有什么用?

这里我得说个实在话:无穷小偶极子(Hertzian Dipole)不是让你直接用的天线,而是从数学上逼出来的最小辐射单元。它的定义很简单:一段长度 \( l \) 远小于工作波长 \( \lambda \) 的直导线,上面流过一个均匀的时谐电流 \( I_0 \),电流幅度和相位处处相同。因为 \( l \ll \lambda \),所以可以把整个单元看成“一个点”,这就是“无穷小”这个说法的来源。

这个模型最大的价值在于,它是唯一一个能用初等函数写出严格解析解的辐射系统。随便翻一本天线教材,第一个推导的就是赫兹偶极子。你把它的场解搞明白了,后面所有线天线、阵列天线、面天线,本质上都是把这个“最小单元”按照不同方式叠加起来。你可以把无穷小偶极子理解成天线世界的“积木块”,单块可能长得不起眼,但它是整个摩天大楼的基础。

1.2 从麦克斯韦方程组到工程建模的桥梁

我当时做这个题目时有个很深的感受:课本上麦克斯韦方程组写得漂漂亮亮,真让你拿来算天线辐射,你根本不知道从哪下手。无穷小偶极子恰好提供了这条路径:先引入磁矢位 \( \mathbf{A} \),通过亥姆霍兹方程解出 \( A_z \),再借助 \( \mathbf{E} = -j\omega\mathbf{A} - \nabla\Phi \) 和 \( \mathbf{H} = \frac{1}{\mu}\nabla \times \mathbf{A} \) 这两个关系式,一步步把电场和磁场分量抠出来。

正是这套推导,让我理解了为什么工程上要用“矢量位”而不是直接解电场。矢量位在球坐标系下只有一个 \( z \) 方向分量,方程形式极其简单;而直接去解 \( \mathbf{E} \),要面对的是三个耦合分量,手推一遍就知道有多痛苦。仿真也是一样,你选对了中间变量,代码就会好写很多,数值稳定性和可读性也会完全不同。

另一个重要收获是“模型简化”思维。无穷小偶极子的 \( l \ll \lambda \) 假设,把辐射特性收敛到“点源辐射”这一极限情形,没有方向性副瓣、没有互耦、没有阻抗带宽这些工程因素干扰。这样你研究近场和远场的物理本质时,看到的就是最纯粹的电磁波传播行为,不会被次要因素带偏。

2. 远场与近场的数学表达及关键参数拆解

2.1 完整电场与磁场表达式

做这个项目,你必须在代码里同时处理近场和远场,所以我先把理论公式完整写出来。设偶极子沿 \( z \) 轴放置,中心位于原点,电流 \( I_0 \) 方向为正 \( z \),长度为 \( l \),则球坐标系中的非零场分量为:

\( E_r = \frac{\eta I_0 l \cos\theta}{2\pi r^2}\left(1 + \frac{1}{jkr}\right)e^{-jkr} \)

\( E_\theta = \frac{j\eta k I_0 l \sin\theta}{4\pi r}\left(1 + \frac{1}{jkr} - \frac{1}{(kr)^2}\right)e^{-jkr} \)

\( H_\phi = \frac{jk I_0 l \sin\theta}{4\pi r}\left(1 + \frac{1}{jkr}\right)e^{-jkr} \)

其中 \( \eta = \sqrt{\mu_0/\varepsilon_0} \approx 120\pi \approx 377\, \Omega \) 是自由空间波阻抗,\( k = 2\pi/\lambda \) 是波数,\( \omega \) 是角频率,\( E\)、\(H\) 之间满足 \(\mu H_\phi\) 和 \(E_\theta\) 的量纲匹配。

我工作后回看这几条公式,发现它们其实在讲三件事:

  • 括号里的1对应远场辐射项,随 \( 1/r \) 衰减;
  • 第二项\( 1/(jkr) \)是感应近场项,随 \( 1/r^2 \) 衰减;
  • 第三项\( -1/(kr)^2 \)是静电场项,只出现在 \( E_\theta \) 和 \( E_r \) 中,随 \( 1/r^3 \) 衰减。

离天线很近时,第三项数值大得吓人,但它只在天线周围转圈,不会把能量真正送走;离天线足够远后,第一项占据绝对主导,这一项才代表“真正的辐射”。我在仿真时就是通过分别绘制每一项的贡献,直观看到了这三者随距离换班的画面。

2.2 近场区和远场区的判据

既然公式里有 \( kr \) 这个无量纲数,那判据就从它来,这一点非常关键。

  • 当 \( kr \ll 1 \),也就是 \( r \ll \lambda/(2\pi) \) 时,场主要被高次项控制,称为近场区(无功近场区)。这个区域里的电场和磁场相位差接近 \( 90°\),所以平均坡印廷矢量的实部很小,能量大多储存在天线附近,并不辐射出去。
  • 当 \( kr \gg 1 \),也就是 \( r \gg \lambda/(2\pi) \) 时,1/r 项占主导,\( E_\theta \) 和 \( H_\phi \) 同相,比值趋近 \( \eta \),这就是远场区(夫琅禾费区),能量真正向外传播。
  • 中间那段过渡区域通常叫做辐射近场区(菲涅尔区),它没有严格的解析边界,工程上一般按场景取经验值。

我之前看到有同学直接把“近场”等同于“ \( r<\lambda \) ”,这其实是粗略做法,正确的判据要看 \( r \ll \lambda/(2\pi) \)。 \( \lambda/(2\pi) \approx 0.159\lambda \),也就是大约六分之一波长。我一般仿真时把观察半径取到 \( 3\lambda \) 以上,就能同时覆盖近场区和远场区,在图上可以清晰看到场分量角色切换。

下面这张表是我常用的快速参考:

区域名称判据主导衰减项能量性质
无功近场区\( r \ll \lambda/(2\pi) \)\( 1/r^3 \)、\( 1/r^2 \) 项储能为主,几乎不辐射
辐射近场区\( r \approx \lambda/(2\pi) \) 到 \( r<2D^2/\lambda \)\( 1/r^2 \) 项过渡到 \( 1/r \) 项储能与辐射并存
远场区\( r \gg 2D^2/\lambda \)\( 1/r \) 项辐射为主,波阻抗趋于 \( \eta \)

对无穷小偶极子,等效口径 \( D \) 很小,\( 2D^2/\lambda \) 几乎可以忽略,所以只要 \( r \gg \lambda/(2\pi) \) 就能当远场处理。我做这个题目时,把观察点从 \( 0.1\lambda \) 扫到 \( 10\lambda \),画出的电场幅值曲线在约 \( 0.5\lambda \) 之后斜率就基本稳定到 \( -20dB/十倍距 \),这就是远场衰减特征。

2.3 为什么方向图函数和辐射电阻也重要

做偶极子仿真,不能只盯着电场幅值,方向图和辐射电阻是另外两个绕不开的结果。无穷小偶极子的归一化方向图函数是:

\( F(\theta) = |\sin\theta| \)

也就是说,它在 \( \theta=90°\)(赤道面)辐射最强,沿着偶极子轴线(\(\theta=0°\) 和 \(\theta=180°\))方向完全没有辐射。这个“面包圈”形状在三维图里特别明显,是识别偶极子辐射最直观的特征。

辐射电阻则反映天线把多少输入功率转化成了辐射功率。对无穷小偶极子:

\( R_r = 80\pi^2 \left(\frac{l}{\lambda}\right)^2 \)

如果 \( l = \lambda/50 \),算出来只有 \( 80\pi^2 \times (1/50)^2 \approx 0.316\, \Omega \)。这个值非常小,实际中很难匹配,所以在工程上不会直接用这么短的偶极子发射功率,这正是这个模型的“教学属性”所在。但模拟它时,你需要把 \( R_r \) 也放到代码里,作为检验仿真结果的一个重要坐标——如果仿真算出的辐射增益和理论值对不上,就能很快发现问题。

3. Matlab实现路线与核心代码拆解

3.1 三条可走的路:解析公式、矩量法、联合仿真

拿到“Matlab模拟无穷小偶极子天线近场和远场”这个任务,大多数人第一反应是直接套公式画图,这也确实是最快能出结果的路径。但作为过来人,我建议你至少先了解三条路:

第一,完全用解析公式计算场分布。把上一节列出的 \( E_r \)、\( E_\theta \)、\( H_\phi \) 公式原样翻译成 Matlab 代码,用ndgrid或meshgrid生成空间网格,逐点计算复数场值,再取模、相位、功率密度。优点是代码短、无需额外工具箱、逻辑透明,适合验证理论;缺点是你无法处理任意复杂结构,只能算点源、偶极子这类理想模型。

第二,用 Matlab 自己实现矩量法(MoM)代码。把偶极子沿长度切分成若干小段,每段假设为一个小偶极子,建立阻抗矩阵并求解电流分布。这个过程会用到矩阵求逆,复杂度高于解析解,但能处理有限长度天线的端部效应和阻抗变化。如果不追求工程级精度,完全可以在纯 Matlab 中跑通。

第三,用 Matlab 控制外部电磁仿真软件。比如通过 Matlab 脚本驱动 HFSS 或 CST 建模并取回结果,再用 Matlab 做数据后处理和绘图。这条路适合你自己会的求解器已有限而还想复用 Matlab 生态的情况,缺点是需要额外授权且学习曲线较陡。

我在这次项目里选的是第一条路,因为任务本身就是“模拟无穷小偶极子的近场和远场”,解析公式就是最匹配的工具,能直接在代码里体现出每一项的物理意义。后面如果想扩展到半波偶极子、阵列天线,再考虑 MoM 也不迟。

3.2 核心代码:三维方向图与近场/远场可视化

解析法实现的核心是一个双层循环或者网格化运算。我用的代码如下,工程上叫“向量化”,避免for循环逐点算:

clear; close all; clc; % ========== 输入参数 ========== lambda = 1; % 工作波长,单位m k = 2*pi/lambda; % 波数 eta = 120*pi; % 自由空间波阻抗 I0 = 1; % 电流幅度,单位A l = lambda/50; % 偶极子长度,远小于波长 % ========== 观察网格 ========== N = 80; % 网格密度 r = linspace(0.1*lambda, 3*lambda, N); % 径向距离,避开原点 theta = linspace(0, pi, N); % 俯仰角,0~pi phi = linspace(0, 2*pi, N); % 方位角,0~2pi [R, Theta] = ndgrid(r, theta); % 距离-俯仰角网格 % ========== 解析场计算 ========== E_r = eta*I0*l*cos(Theta)./(2*pi*R.^2) ... .* (1 + 1./(1j*k*R)) .* exp(-1j*k*R); E_theta = 1j*eta*k*I0*l*sin(Theta)./(4*pi*R) ... .* (1 + 1./(1j*k*R) - 1./(k*R).^2) .* exp(-1j*k*R); H_phi = 1j*k*I0*l*sin(Theta)./(4*pi*R) ... .* (1 + 1./(1j*k*R)) .* exp(-1j*k*R); % 取模用于绘图 E_r_mag = abs(E_r); E_theta_mag = abs(E_theta); H_phi_mag = abs(H_phi);

这段代码的核心是把课本公式一行行翻译过来,没有用到任何信号处理或通信工具箱,纯基础 Matlab 就能运行。注意1j表示虚数单位,避免用i作为变量名导致复数单位被意外覆盖,这是初学者常吃的暗亏。

画三维方向图时,我推荐在球坐标下进行,因为方向图本身就是 \( F(\theta)=\sin\theta \),天然适合球面展开:

% ========== 三维辐射方向图 ========== figure('Color', 'w', 'Position', [100 100 640 500]); [Phi_mesh, Theta_mesh] = ndgrid(phi, theta); R_dir = abs(sin(Theta_mesh)); % 归一化方向函数 % Matlabsph2cart坐标系中第二个参数是仰角,需把theta换算成elev [X_dir, Y_dir, Z_dir] = sph2cart(Phi_mesh, pi/2 - Theta_mesh, R_dir); surf(X_dir, Y_dir, Z_dir, R_dir, 'EdgeColor', 'none', 'FaceAlpha', 0.85); xlabel('x / \lambda'); ylabel('y / \lambda'); zlabel('z / \lambda'); title('无穷小偶极子天线三维方向图 F(\theta)=sin\theta'); axis equal; colormap(jet); colorbar; view(135, 30);

运行这段代码你会看到一个“面包圈”形状——赤道方向凸出来,两极方向凹陷到零。这和我们前面说的 \( \theta=90°\) 辐射最强完全吻合。

近场和远场的可视化,建议分两个图分别画,不要挤在一起:

% ========== E_theta近场幅值分布 ========== figure('Color', 'w'); [X_cart, Y_cart, Z_cart] = sph2cart(Theta*0, pi/2-Theta, R); % 这里要先转二维 % 直接用二维切面展示更直观 [Phi_cut, R_cut] = ndgrid([0, pi/2, pi, 3*pi/2], r); [X_cut, Y_cut, Z_cut] = sph2cart(Phi_cut, 0, R_cut); % 计算E_theta模值在该切面上的分布 E_cut = abs(1j*eta*k*I0*l*sin(pi/2)./(4*pi*R_cut) ... .* (1 + 1./(1j*k*R_cut) - 1./(k*R_cut).^2) .* exp(-1j*k*R_cut)); plot(R_cut, E_cut, 'LineWidth', 1.6); xlabel('距离 r / \lambda'); ylabel('|E_\theta| (V/m)'); title('E_\theta 幅值随距离变化(赤道面)'); grid on; set(gca, 'YScale', 'log');

这张图能很清楚地看到,在 \( r<0.5\lambda \) 时场幅值快速起伏并衰减,过了远场区后则平滑地按 \( 1/r \) 规律下降。我通常还会叠加一条理论参考曲线 \( C/r \) 做对比,方便判断是否进入了正确的远场区间。

3.3 四种可视化方法的取舍

近场和远场数据是复数,怎么展示也是可以琢磨一下的:

可视化方式代码难度物理信息适用场景
三维方向图曲面简单辐射强度空间分布远场方向图展示
二维切面幅值曲线简单幅值随距离变化趋势近场/远场切换验证
球坐标场强热力图中等近场幅度分布云图观察近场能量聚集
相位等值面动画较复杂波前传播过程理解等相位面运动

我做作业时最常用的组合是“三维方向图 + 切面曲线 + 热力图”,因为三维图直观,切面曲线能定量校验衰减趋势,热力图能一眼看出近场的能量集中位置。相位动画虽然好看,但计算量大,而且对初学者来说不如幅值图容易解读。

4. 实操过程与可复现的完整仿真流程

4.1 参数初始化和网格设计

任何仿真项目,第一步都是把物理参数想清楚,否则后面的代码就是空中楼阁。我把关键参数列成一张表,写代码前先填好:

参数符号取值说明
工作波长\( \lambda \)1 m归一化处理,便于缩放
波数\( k \)\( 2\pi \) rad/m由波长决定
偶极子长度\( l \)\( \lambda/50 \)满足远小于波长假设
电流幅值\( I_0 \)1 A归一化电流
观察半径范围\( r \)0.1\(\lambda\) ~ 3\(\lambda\)覆盖近场和远场
网格点数N80平衡精度和计算速度

选 \( \lambda=1 \) 是为了归一化,后面的距离、场强全都可缩放,这个技巧在做理论验证时非常实用。网格点数 80 在我的旧笔记本上大概零点几秒跑完,如果调到 300 也能跑,但三维图会明显变慢,内存占用也高。网格设计的核心原则是:在“关键变化区域”加密,在平缓区域稀疏。近场区场变化剧烈,我会在 \( 0.1\lambda \) 到 \( 1\lambda \) 之间用对数或分段线性方式加密;远场区变化平缓,均匀网格就够。

4.2 分段实现代码

完整项目建议拆成四个功能模块,这样方便调试和复用。我当时的代码目录结构大概是:

dipole_simulation/ ├─ main.m % 主脚本 ├─ init_params.m % 参数初始化 ├─ compute_fields.m % 计算近场/远场电场磁场 ├─ plot_3d_pattern.m % 画三维方向图 └─ plot_fields_2d.m % 画切面幅值曲线和热力图

main.m只负责调用各模块并控制整体流程,这样每个函数都能单独测试。写功能模块时注意尽可能向量化,Matlab 在数组运算上的性能远高于循环。如果要用循环,也建议预分配数组,例如E_field = zeros(Nr, Ntheta);,否则循环中动态增长数组会导致内存反复分配,速度慢一个量级。

关键模块compute_fields.m的核心代码在前面已经给出了,这里补充一个判断近场/远场的辅助函数:

function region = classify_region(r, lambda) Kr = 2*pi*r/lambda; if Kr < 1 region = "near"; % 无功近场区 elseif Kr < 3 region = "transition"; % 过渡区 else region = "far"; % 远场区 end end

这里把 \( kr < 1 \) 当作近场判据,\( kr >3 \) 当作远场判据,是有依据的:\( kr=1 \) 时 \( 1/(kr)^2 \) 项与 1 项等大,此后高次项迅速衰减;\( kr=3 \) 时高次项已经小于 \( 11\% \),可以安全忽略。实际打印各区域的场值进行对比,能帮你更直观理解“近场和远场的角色转换”。

4.3 结果解读:从等相位面到功率密度

代码跑出来后,不能只截个图就交差。我建议至少解读三个层面:

第一,看幅值变化。在赤道面(\( \theta=90°\))取一条径向线,画 \( |E_\theta| \) 随 \( r \) 的变化曲线,对数坐标下观察斜率。在近场区,曲线起伏明显,因为 \( 1/r^2 \) 和 \( 1/r^3 \) 项剧烈相互影响;进入远场区后,曲线变成一条斜率为 \( -20dB/十倍距离 \) 的直线,这就是 \( 1/r \) 衰减的典型特征。看到这条直线,才说明仿真范围确实覆盖到了远场区。

第二,看相位。对 \( E_\theta \) 的相位做空间分布,远场区的等相位面是同心球面,相位值随 \( r \) 线性增加;近场区的等相位面则明显偏离球面,因为感应场分量的相位和辐射场不同。你可以通过angle(E_theta)提取相位并做三维切片,那画面很有冲击力。

第三,看功率密度。算实功率密度:

P_avg = 0.5 * real(E_theta .* conj(H_phi)); % 时间平均坡印廷矢量

在近场区,\( P_{avg} \) 会有明显振荡甚至负值,但那不意味着能量回流,只是因为在无功近场区储能项占主导,局部坡印廷矢量方向会出现来回摆动;到了远场区,\( P_{avg} \) 变成平滑的正值且与 \( 1/r^2 \) 成正比,此时能量稳定外流。我习惯把功率密度和幅值画在同一张图里,两相对照,物理过程非常清楚。

5. 常见问题与排查技巧实录

5.1 角坐标映射错位

我在这个项目里踩过的第一个大坑是:画出的三维方向图方向不对,总觉得“面包圈”的轴线偏了。后来才发现是sph2cart的坐标系约定和物理学中常用的球坐标不一致。Matlab 的sph2cart(az, elev, r)中第二个参数是仰角,范围在 \([-\pi/2, \pi/2]\),而天线理论里用的 \(\theta\) 是俯仰角,范围在 \([0, \pi]\),两者之间差一个 \(\pi/2\)。转换时必须写成:

[X, Y, Z] = sph2cart(phi, pi/2 - theta, r);

否则 \( \theta=0 \) 的位置会指向赤道方向而不是北极方向,整个方向图就旋转了 90 度。这类坐标约定问题在所有三维绘图软件里都存在,遇到图形方向不对时,永远先检查坐标变换。

5.2 原点奇点和数值溢出

公式里带 \( 1/r^2 \) 和 \( 1/r^3 \) 项,如果不做处理,\( r=0 \) 时运算直接产生Inf或NaN,绘图就会缺一块。我的做法是让径向网格从 \( r=0.1\lambda \) 开始,从物理角度这也合理——偶极子本身有长度,原点附近也不是理想点源。如果你需要观察更近的区域,也要加一个很小的eps偏移,比如 \( r = 1e-6\lambda \),而不是直接取 0。

另一个数值问题是复数运算的浮点误差。当 \( kr \) 很大时,exp(-1j*k*r)的相位快速旋转,数组里的实部和虚部可能出现大量相互抵消导致的精度损失。这个在偶极子模型里不太明显,但如果计算阵列方向图时相位差很小,就会暴露出来。建议用vpa或者其他高精度手段做局部验证,至少心里有数。

5.3 网格分辨率与内存平衡

网格数从 80 提升到 500,肉眼几乎看不出方向图差异,但计算时间从零秒变成了几十秒,三维surf也会卡顿。我后来摸索出的经验是:方向图画 60~100 个点就够了,曲线图可以细分到 500 个点,不要全局加密。对想要观察近场细节的区域,可以单独做一个局部高分辨率网格;对远场,均匀稀疏网格即可。如果机器内存有限,尽量避免在同一个数组里保存全空间三维复数场,可以分区域计算、分区域绘图。

5.4 复数直接surf导致的空白图

surf函数默认不接受复数输入,如果你直接把E_theta传给surf,它要么报错,要么只画出实部,虚部被静默忽略。更麻烦的是,plot对复数会默认按实部为横轴、虚部为纵轴绘制,出来的图看起来像一条螺旋线,和你想的完全不是一回事。所以,一切绘图前先取abs()、angle()或real(),不要直接拿复数矩阵去画。这是一个特别低级的错误,但我在给学弟学妹看代码时经常看到类似写法。

5.5 近场为什么画不出“波”的形状

有同学跟我说,他想画近场的“波状传播”,但画出来的图一点波动都没有。问题在于,他把 \( kr=0.5 \) 到 \( kr=500 \) 的全部范围放在线性坐标里,导致近场区域的快速变化被远场的缓慢变化压扁,根本看不出波纹。解决方法是改用对数坐标显示,或者分段裁剪:先单独画 \( r \in [0.1\lambda, 2\lambda] \),再画 \( r \in [2\lambda, 100\lambda] \)。另外,如果你想看到清晰的驻波或行波特征,需要同时画电场实部和虚部,只看幅值是看不出相位传播的。

我把上面这些问题整理成一个排查表,方便你按图索骥:

症状可能原因检查方法
方向图轴线偏转sph2cart仰角/俯仰角混用检查pi/2 - theta
原点附近有空白/Inf\( r=0 \) 未做偏移将 \( r \) 起点设为 0.1\(\lambda\)
曲线忽大忽小难以观察线性坐标压缩近场细节尝试YScale','log'
surf报错或画不出复数直接传入先abs()再绘图
远场衰减斜率不对观察范围未覆盖远场增大 \( r \) 至 \( 3\lambda\) 以上
相位动画不连贯相位跳变 2\(\pi\)使用unwrap处理

6. 从偶极子到实用天线:下一步该怎么走

6.1 半波偶极子和无方向性天线对比

跑通了无穷小偶极子,你手里其实已经握住了一套可以向上扩展的方法论。最自然的下一步是半波偶极子(长度 \( l=\lambda/2 \)),它的电流不再均匀分布,而是近似余弦分布,方向图函数变成:

\( F(\theta) = \frac{\cos(\frac{\pi}{2}\cos\theta)}{\sin\theta} \)

和 \( \sin\theta \) 相比,半波偶极子的方向图在赤道面更扁平,方向性系数从 1.5 提升到 1.64,辐射电阻也从不到 1 欧姆跳到约 73 欧姆,更接近实际工程中的 50 欧姆或 75 欧姆系统。这个对比非常直观地说明了“为什么工程上不用无穷小偶极子,而要用半波偶极子”。

代码层面,你只需要改动方向图函数和场表达式中的电流分布项,其余网格、绘图、后处理逻辑全部复用。这也是为什么我强调要把项目拆成模块,扩展性会好很多。

6.2 Matlab与全波仿真软件的协作

Matlab 在理论验证和算法原型上很强,但处理复杂结构时,工业界更依赖 HFSS、CST 这类全波仿真工具。那么两者怎么协作?我见过一种非常高效的用法:用 HFSS 建模复杂天线结构,导出远场方向图数据和近场场分布数据,再用 Matlab 做深度后处理——画方向图、算波束形成权值、做优化算法迭代。HFSS 自带脚本功能,可以批量导出结果到文本或.mat文件,Matlab 直接读取后处理。对正在找工作或者搞科研的人,掌握这条数据链路是很加分的。

如果你不想装全波仿真软件,也可以直接在 Matlab 里写矩量法代码。对偶极子天线,矩量法实现不复杂:把偶极子分 N 段,每段上的电流用基函数展开,构建阻抗矩阵 \( Z_{mn} \),求解电流系数,再叠加所有小段的辐射场。这一步做完,你对“数值解”和“解析解”的关系理解会再上一个台阶。

6.3 我的工具链建议和心得

做这类仿真项目,我的个人建议是:先把解析模型玩透,再碰通用电磁仿真软件。理由很简单,你只有知道了正确答案长什么样,才能判断软件给出的结果到底可不可信。我用 HFSS、CST 都建过很多天线模型,经常遇到网格剖分不合理、端口激励设置错误等问题导致结果严重偏离理论值,如果心里没有解析解做锚点,你根本无法分辨这是真实物理现象还是仿真错误。

还有一条是关于版本选择的:Matlab 自身版本对这类小项目几乎没有影响,R2020a 和 R2024a 跑同样代码都一样快。真正影响效率的是你写代码的方式,比如用向量化而不是循环、用模块化而不是单文件堆到底、用clear和clc保持工作区干净。这些习惯比版本本身值钱得多。

结尾

回到这个项目本身,我认为它最大的价值不是画出一张漂亮图,而是逼着你去理解“近场和远场到底是怎么分界的”。我在做这个仿真之前,对 \( kr \ll 1 \) 和 \( kr \gg 1 \) 只有一个模糊的印象,真到代码里设定判据、观察曲线斜率变化时,才意识到这个划分背后是电磁场能量从“储能”到“辐射”的物理切换。所以如果你也在做类似的验证,千万别只抄代码,动手改一改参数,比如把 \( \lambda \) 从 1 改成 10,把网格密度调大调小,把观察距离从 1\(\lambda\) 拉到 10\(\lambda\),你会明显感觉到自己对场分布的理解会发生变化。

最后再分享一个小技巧:保存仿真图时,建议把三维方向图和近场/远场切面图分开保存成矢量图格式,这样论文里放大后不会糊。Matlab 里exportgraphics(gca, 'dipole_pattern.pdf', 'ContentType', 'vector')一行就能搞定。这个细节在写期末报告或发小论文时很加分,我当年就是吃了截图模糊的亏才养成了这个习惯。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询