电磁波仿真实验全流程:FDTD从传播反射到极化干涉的代码实现与报告撰写

发布时间:2026/10/14 20:05:43
电磁波仿真实验全流程:FDTD从传播反射到极化干涉的代码实现与报告撰写 简介这份资料是湖南大学电磁场与微波技术课程的实验合集面向学习电磁波理论的高校学生及相关自学者围绕PEC与PMC边界条件、线性极化波合成圆极化与椭圆极化波、矩形波导中TE与TM模式传播等核心内容展开。资源包共240个文件以198个ed数据文件、12个ewp工程文件、12个ewd与12个ewd_mesh网格文件为主另含m脚本、docx实验报告、pdf说明及esd文件整体约118.86MB可配合Eastwave仿真软件复现实验流程。已有2250人学习下载读者可借助波端口入射源设置与模式参数调整理解传播常数、截止频率等概念并通过实验报告将操作过程、观察结果与理论分析结合锻炼仿真建模与问题解决能力为微波器件设计与分析打下基础。1. 电磁波四个实验到底在练什么从仿真波形到实验报告的闭环很多同学第一次拿到电磁波实验任务时第一反应是“公式都学过但动手就懵”。这个标题指向的是一套典型的电磁波实验训练四个实验覆盖波的传播、反射与折射、极化、干涉与衍射等核心现象最终要交出一份能自圆其说的实验报告。它解决的不是“会不会推导公式”而是“能不能把物理过程用数值工具跑出来、把结果解释清楚、把误差说明白”。适合正在做电磁场与电磁波课程实验的本科生也适合想用脚本复现经典电磁现象的自学者。四个实验通常不是孤立的它们共享同一套仿真环境、同一套数据处理流程甚至同一套画图模板。把这四个实验串起来做比一个一个孤立地做效率高得多报告也更容易写出连贯性。2. 四个实验的仿真环境怎么搭从零到能跑通第一个波形2.1 为什么选脚本化仿真而不是纯手工计算电磁波实验的核心矛盾是解析解只对极少数理想边界条件成立而实验报告需要展示“波在空间中如何变化”。纯手工计算只能画几个离散点根本看不出传播过程。常见做法是用 Python 的 NumPy 做场分布计算用 Matplotlib 做动态或静态可视化。选脚本化而不是商业仿真软件理由有三个一是环境轻不需要额外授权二是每一步计算过程都暴露在代码里报告里可以直接引用公式和对应实现三是四个实验可以复用同一套工具函数改参数就能切换场景。我一般会先建一个em_wave_lab.py作为公共模块把网格生成、边界条件、场更新、绘图封装成函数后面四个实验只写各自的参数和调用逻辑。2.2 一维 FDTD 最小可跑通模板一维 FDTD时域有限差分是理解电磁波传播最直观的入口。下面这段代码实现真空中的高斯脉冲传播是四个实验里最基础的一个。import numpy as np import matplotlib.pyplot as plt # 参数设置 c 3e8 # 光速 dx 0.01 # 空间步长 dt dx / (2 * c) # 时间步长满足 CFL 条件 nx 400 # 网格点数 nt 600 # 时间步数 # 初始化场量 Ez np.zeros(nx) Hy np.zeros(nx - 1) # 高斯脉冲源 def gaussian(t, t0, tau): return np.exp(-((t - t0) / tau) ** 2) # 更新系数 coeff dt / (dx * 1.0) # 真空磁导率与介电常数归一化后 # 主循环 for n in range(nt): # 更新磁场 Hy[:] Hy[:] - coeff * (Ez[1:] - Ez[:-1]) # 更新电场 Ez[1:-1] Ez[1:-1] - coeff * (Hy[1:] - Hy[:-1]) # 软源注入 Ez[50] gaussian(n * dt, 1e-9, 2e-10) # 绘图 plt.plot(Ez) plt.title(1D FDTD 电场分布) plt.xlabel(网格索引) plt.ylabel(Ez) plt.show()逻辑说明FDTD 的核心是交替更新电场和磁场电场用磁场空间差分更新磁场用电场空间差分更新。参数说明dx和dt必须满足 CFL 条件dt dx / (c * sqrt(dim))一维下就是dx / (2c)更保守nx决定计算域大小太小会反射回来干扰源nt决定总模拟时长要保证脉冲完全传播出去。跑通这段代码后你会看到高斯脉冲向右传播这就是后面三个实验的起点。2.3 边界条件怎么设才不翻车一维模板跑通后马上会遇到边界反射问题。如果边界不处理波传到端点会反射回来和源叠加波形就乱了。常见做法是加一阶 Mur 吸收边界或 PML完美匹配层。对于课程实验一阶 Mur 足够用实现简单报告里也好解释。具体做法是在边界处用前一时刻的场值修正当前时刻场值代码只需在更新后加两行。注意PML 参数多调不好反而引入不稳定新手先用 Mur等四个实验都跑通了再考虑升级。3. 实验一和实验二传播与反射折射的数值实现3.1 实验一均匀介质中的波传播与速度测量实验一的目标是验证波速与介质参数的关系。在 FDTD 里波速由1 / sqrt(mu * epsilon)决定。你可以通过改变相对介电常数eps_r来观察波速变化。具体操作在公共模块里把coeff改成dt / (dx * eps_r)的对应形式然后记录脉冲峰值到达某个网格点的时间用v distance / time反推速度。参数设置建议eps_r取 1、2、4 三组每组跑一次记录峰值位置。注意源的位置要固定测量点要离源足够远避免近场影响。报告里要画出“峰值时间 vs 距离”的线性拟合斜率就是波速。3.2 实验二反射与折射的界面处理实验二在计算域中间放一个介质界面左边eps_r1右边eps_r2。FDTD 处理界面时电场更新系数在界面两侧不同。常见做法是定义一个eps_r数组每个网格点对应一个值更新时用局部值计算。代码改动很小但物理意义重大你会看到部分波反射、部分波透射。参数说明反射系数和透射系数由波阻抗决定Gamma (eta2 - eta1) / (eta2 eta1)Tau 2 * eta2 / (eta2 eta1)。报告里要把仿真测到的反射波幅值和理论值对比误差控制在 5% 以内算合格。如果误差大先检查界面处网格是否对齐再检查源频谱是否太宽导致色散。3.3 把两个实验的数据串成一条报告主线实验一和实验二在报告里不要分开写。我一般会先写“波在均匀介质中传播”再写“波遇到界面发生反射折射”这样逻辑上是递进的。数据上实验一测到的波速可以用来验证实验二里介质参数的设置是否正确。报告里放一张对比表理论波速、仿真波速、误差理论反射系数、仿真反射系数、误差。这样导师一眼就能看出你不是在凑数据。4. 实验三和实验四极化与干涉的仿真与验证4.1 实验三极化状态的生成与判别极化实验需要二维或三维 FDTD。常见做法是二维 TM 或 TE 模式通过两个正交方向的源相位差来生成线极化、圆极化、椭圆极化。具体操作在Ez和Hy之外增加Ex和Hz分量源用正弦波两个方向相位差分别取 0、90、45 度。参数说明相位差 0 度是线极化90 度且幅度相等是圆极化其他是椭圆极化。判别方法在远场取一个点记录Ex和Ey随时间变化画李萨如图形。报告里要放三张李萨如图分别对应三种极化。注意二维仿真里要确保源不引入额外相位误差源的位置要远离测量点。4.2 实验四双缝干涉的场分布计算干涉实验用二维 FDTD 加两个缝隙源。具体操作在计算域中间放一个金属挡板挡板上开两个缝缝处设置软源。参数说明缝间距d和波长lambda决定条纹间距Delta lambda * L / d其中L是观察屏距离。仿真时dx要小于lambda / 10否则条纹模糊。跑完后用imshow画出稳态场分布能看到明显的明暗条纹。报告里要测量条纹间距和理论公式对比。如果条纹不对称检查挡板是否完全吸收缝隙宽度是否一致。4.3 四个实验的代码复用与参数管理四个实验不要各写一套代码。我一般会建一个config字典把nx、nt、dx、eps_r、源类型、源位置都放进去每个实验只改字典。这样报告里可以写“通过修改配置文件切换实验场景”显得工程化。参数管理还有一个好处做误差分析时可以批量跑不同参数自动记录结果。常见做法是用for循环遍历eps_r列表把每次的峰值时间和幅值存到列表里最后统一画图。5. 避坑与排查四个实验里最容易翻车的五个点5.1 数值色散导致波形失真现象脉冲传播一段距离后波形出现振荡拖尾峰值下降。原因dx不够小或者源频谱太宽FDTD 的数值色散误差累积。解决把dx减小到lambda_min / 20以下或者改用更窄的脉冲。我一般会先跑一个单频正弦确认稳定后再换高斯脉冲。5.2 边界反射污染测量结果现象测量点记录到的波形在脉冲之后又出现一个反向脉冲。原因吸收边界没加或参数不对。解决加一阶 Mur 边界或者把计算域加大让反射波在测量窗口之后才到达。注意加大计算域会增加计算量但比调 PML 参数省心。5.3 源注入方式不对导致场不干净现象源附近场值异常大或者源不辐射。原因硬源直接赋值会反射软源叠加更干净。解决用软源即Ez[src] source(t)而不是Ez[src] source(t)。另外源的位置要离边界至少 10 个网格。5.4 极化实验里相位差设置错误现象李萨如图不是预期的圆或直线。原因两个方向的源相位差没设对或者幅度不相等。解决在代码里显式写出Ex A * sin(omega * t)Ey A * sin(omega * t phi)检查phi是否按弧度制。注意numpy的sin用弧度别混用角度。5.5 干涉实验里缝间距和波长不匹配现象条纹太密或太疏看不清。原因d / lambda太大或太小。解决先算一下理论条纹间距再调整d或lambda让条纹在计算域内出现 3 到 5 条。注意dx要足够小否则缝的边缘会引入额外衍射。6. 实验报告怎么写才像做过数据、误差与可复现性6.1 报告结构从问题到验证的闭环报告不要写成“实验目的、实验原理、实验步骤、实验结果”的八股。我一般按“要验证什么 → 怎么建模 → 参数怎么选 → 结果是什么 → 误差从哪来”来写。每个实验一节节内先放理论公式再放代码关键片段再放结果图最后放误差分析。这样导师能看到你的思考过程而不是抄来的模板。6.2 误差分析把仿真和理论的差距说清楚误差来源主要有三个数值色散、边界反射、源频谱宽度。报告里要定量说明比如“波速仿真值 2.98e8理论值 3e8误差 0.67%主要来自网格离散”。不要只写“误差很小”要给出具体数字和原因。常见做法是跑三组不同dx画误差随dx变化的曲线证明收敛性。6.3 可复现性让别人能跑出你的结果报告里要附上完整代码或关键代码片段并说明运行环境Python 版本、NumPy 版本。参数要写清楚不要写“适当调整”。我一般会在报告最后放一个“复现步骤”小节列出命令和预期输出。这样别人照着做就能得到相似结果报告的可信度会高很多。6.4 一个具体技巧用动画代替静态图静态图只能看一个时刻动画能看传播过程。用 Matplotlib 的FuncAnimation可以生成 GIF 或 MP4放在报告里作为附件。代码改动很小只需在循环里更新line.set_ydata(Ez)。注意动画文件不要太大帧数控制在 100 到 200 帧否则报告文件会臃肿。我一般会同时保留静态图和动画静态图放正文动画放附件。做这四个实验最大的教训是不要一开始就追求完美参数先把最小模板跑通看到波形动起来再逐步加边界、加介质、加极化。每次只改一个参数记录变化这样出问题容易定位。希望帮到你。本文还有配套的精品资源点击获取

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询