
简介时域有限差分FDTD是电磁波数值模拟的核心算法探地雷达GPR正演模拟正是基于该方法通过设定介电常数、电导率等介质参数在虚拟空间中还原电磁波传播与反射过程。这一技术不仅帮助工程师预判地下管道、空洞或分层结构的雷达响应还为数据解释、仪器标定乃至深度学习训练样本生成提供了高效实验手段。无论是岩土工程检测、道路病害排查还是考古勘探建立准确的GPR模型都能大幅降低现场试验成本。gprMax 作为开源正演工具凭借灵活的建模语法和Python API成为科研与工程实践的主流选择。从环境配置、.in文件编写到运行出图掌握完整流程即可快速生成A-scan与B-scan剖面让抽象的电磁理论落地为直观的图像证据。本文以实操视角详细拆解gprMax的安装、建模、调试与后处理助你跑通第一个探地雷达正演模型。 选题有点意思。gprMax2D_GprMax2D3D_gprmax教程_这个标题我很熟悉因为它几乎就是我自己当年从零开始学探地雷达数值模拟时搜索框里原样打出来的一串词。gprMax 这个软件对搞地质雷达、无损检测、岩土工程、道路桥梁检测的人来说属于绕不开的正演模拟工具。这篇博文我就从实操角度把这套环境搭建、模型编写、运行出图、问题排查的完整流程一次性讲清楚让你照着做就能跑通自己的第一个 gprMax 模型。先说清楚它是什么、能干什么。gprMax 是一套基于时域有限差分FDTD方法的探地雷达GPRGround Penetrating Radar数值模拟软件核心功能是根据你给定的介电常数、电导率等参数在计算机里搭建一个电磁波传播空间然后模拟雷达天线向地下发射电磁波、接收反射波的全过程最终输出 A-scan单道波形和 B-scan剖面图数据。它本质上解决的是“某种地下结构会产生什么雷达响应”这个问题——比如你要探测的管道埋深 1.2 米直径 200 毫米里面是空心的周围是混凝土那么在什么中心频率的天线、什么介电常数背景下雷达剖面长什么样与其去工地上反复试错不如先在 gprMax 里正演一遍。这套思路对做方法研究、数据解释、仪器标定、甚至人工智能训练样本生成都非常重要适合地质工程、地球物理、道路检测、文物保护等相关方向的学生、工程师和科研人员。我自己当年是被导师一句话推着学的“你把这几个模型跑完雷达图你就看懂了八成。”后来发现这话没夸张。要提一下标题里那串带大小写的版本名你在网上搜的时候会看到gprMax2D、GprMax2D3D、gprMax3D这些写法其实对应了软件的不同发展阶段。建议新人直接学当前主流的 gprMax 3.x也就是 gprMax3D旧版 2D/2D3D 相关教程可以参考思路但不用花精力去装旧版了。为什么下面我会详细拆解。1. 先搞清楚 gprMax 的版本演进别被旧教程带偏1.1 版本拆分2D、2D/3D、3D 到底差在哪gprMax2D是早期版本只能做二维 FDTD 模拟。在那个版本里模型的空间维度是二维的你只能在 x-y 平面内描述几何结构z 方向默认无限延伸相当于把真实的三维地下空间强制压缩到了一个剖面上。二维模拟的好处是计算量小但是碰到真实场景中管道、空洞、钢筋这些在第三维有有限尺寸的目标体时会有明显的近似误差。更关键的问题是二维模型的波场传播特征和真实三维空间有差异很多时候你得到的波形形态只能做定性参考无法直接用于定量反演。GprMax2D3D是后续版本代码里同时支持 2D 和 3D 两种算例输出格式也逐步规范化。这个版本在相当长时间内被国内外很多高校采用教程数量最多你搜到的很多中文资料其实都是基于这个版本写的。但它的输入文件语法、关键词设定和现在的 gprMax 3.x 有区别比如材料定义、激励源设置都不完全一样。现在官方主推的是gprMax 3.x通常就叫 gprMax3D用 Python 重写支持 Python 3.8 到 3.11输入文件语法更规范可以用#geometry_view直接导出 3D 几何模型还提供了api接口方便你用 Python 脚本批量生成模型、批量跑模拟。当前版本能够做真三维建模——比如把钢筋、管道、空洞按真实的三维坐标布置在模型里——模拟精度明显更好而且输出数据用 Python 的h5py库就能读取后处理链路很顺畅。版本维度输入语法输出格式推荐程度gprMax2D2D旧格式旧格式不推荐GprMax2D3D2D/3D旧格式旧格式可参考思路gprMax 3.x2D/3D新格式HDF5强烈推荐1.2 为什么我推荐直接学 gprMax 3.x最重要的原因是生态。gprMax 3.x 的官方文档更新频繁GitHub 仓库里的 issue 讨论、示例模型examples目录都基于新版本。你做后处理时用 Python 读取 HDF5 格式的输出可以无缝衔接numpy、matplotlib、scipy这些科学计算库。旧版本的输出格式一般是文本或二进制自定义格式每次读取都相当痛苦不同版本之间还不完全兼容网上能找到的读取代码经常要改半天。另外现在用 gprMax 做深度学习训练样本的案例非常多新版 API 可以直接在 Python 里定义模型对象、修改模型参数、调用求解器这对批量化生成数据集很关键。我实测下来通过 Python API 循环跑两百个不同参数的模型比逐个手写.in文件再用命令行运行要高效得多。所以如果你还没开始学直接在 3.x 上集中精力一步到位不折腾。1.3 学习 gprMax 需要什么基础说句实在话gprMax 的上手门槛不算特别低但也没有想象中那么高。你需要三个基础一电磁场基本概念知道介电常数、电导率、磁导率、相对介电常数这些参数的意义不需要会推麦克斯韦方程组但至少要知道电磁波在介质中传播速度公式( v \frac{c}{\sqrt{\varepsilon_r}} )二Python 基础不要求多厉害但至少要能读懂脚本、会装库、能执行.py文件因为 gprMax 的运行和结果后处理都要靠 Python三一点点命令行操作能力Windows 下知道怎么打开cmd或PowerShell并进入指定目录。如果你有Anaconda或Miniconda的使用经验那环境这块会很顺。如果没有也不用怕下面第 2 节我带你一步步配好。2. 环境部署把 Python、PyCharm、Git 这些地基打牢2.1 Python 环境选择Miniconda 比 Anaconda 更轻量gprMax 3.x 本质是一个 Python 包依赖numpy、cython、h5py、matplotlib、scipy等。所以第一步是把 Python 环境配好。我强烈建议用 Miniconda而不是直接装系统 Python或者装 Anaconda 全家桶。原因很简单Miniconda 只是一个精简的 conda 包管理器体积小、启动快需要用哪些包再自己装哪些避免环境混乱。Anaconda 自带的包太多和 gprMax 的依赖偶尔会有冲突尤其是numpy版本变化的时候。Miniconda 的安装没有特殊之处官网下载对应 Windows 的安装包一路 Next。安装过程中有一步Add Miniconda3 to my PATH environment variable建议勾选它能让你在cmd里直接使用conda命令。如果不勾选后面每次使用都要先打开 Anaconda Prompt稍微麻烦一些。装完以后打开新的cmd窗口输入conda --version能看到版本号就说明安装成功。接着创建一个独立的 gprMax 环境建议直接用 Python 3.9 或 3.10conda create -n gprMax python3.9 -y conda activate gprMax为什么不用最新的 Python 3.12因为 gprMax 的部分依赖特别是旧版cython编译产物不一定能在最新 Python 上顺利运行。3.9 是久经考验的版本我周围所有跑 gprMax 的同行都用它。2.2 PyCharm写模型文件和 Python 脚本的主力 IDEgprMax 的模型文件本身是.in文本文件理论上你用任何文本编辑器都能写但是配合 IDE 会舒服很多。我推荐 PyCharm 社区版免费而且功能足够。专业版对科研用户也有免费授权但没必要特意申请。PyCharm 安装完成后第一步是配置解释器在File - Settings - Project - Python Interpreter里选择Conda Environment - Existing environment然后指定你刚才创建的gprMax环境下的python.exe。Windows 默认路径通常是C:\Users\你的用户名\miniconda3\envs\gprMax\python.exe。配置好之后PyCharm 终端会自动使用这个 conda 环境这样你在 PyCharm 内执行pip install相关的命令都不会装错环境。有一个小坑如果你是在 PyCharm 内侧边栏打开.in文件默认可能会以纯文本形式打开没有语法高亮。你可以在Settings - Editor - File Types里把*.in注册为 Python 文件类型或者直接当成普通文本写反正这些命令都是简单的关键词不会太影响阅读。2.3 Git下载官方示例和更新代码的必备工具gprMax 的官方代码托管在 GitHub虽然你用pip install gprmax就能装但是官方仓库里的examples示例模型、tools后处理脚本对你学习非常有价值建议用 Git 克隆一份到本地。Git 安装很简单官网下载 Windows 版本默认配置一路 Next 即可。安装完在cmd里验证git --version然后找个存放项目的目录克隆 gprMax 官方仓库git clone https://github.com/gprMax/gprMax.git这样你本地就有一份完整的代码和示例。后续改代码、看 issue、更新版本都会用到 Git所以这一步值得做。还有一个使用细节如果你只是需要跑官方示例克隆完成后不需要额外安装仓库里的依赖直接用 pip 安装过的 gprMax 包就能运行示例.in文件。2.4 Docker Desktop选装项确认有必要再装Docker 主要用于容器化运行 gprMax方便在 Linux 服务器上批量计算时保持环境一致。如果你目前只是本地 Windows 学习先不用装 Docker Desktop。它的安装体量比较大而且需要开启 Windows 的虚拟化功能对新手来说增加系统负担。等你真的要在服务器上大规模并行跑模型再按照官方文档设置 Docker 镜像也不迟。这里不展开避免把入门思路带偏。3. gprMax 安装与启动两种主流方式对比3.1 方式一pip 安装 gprMax最推荐在你创建好的 conda 环境里执行pip install gprmax这个命令会从 PyPI 拉取 gprMax 以及依赖。正常情况下两到三分钟就能完成。如果你观察到类似Building wheel for gprmax的过程不用慌这是它在编译底层 Cython 模块需要本地有 C 编译器环境。Windows 下如果编译报错通常是因为缺少 Microsoft C Build Tools。解决办法是到微软官网下载安装Build Tools for Visual Studio安装时勾选“使用 C 的桌面开发”工作负载然后重新执行 pip install。这一步是 Windows 用户最容易卡住的地方我身边不止一个人卡在这里。装完之后验证一下 import 是否正常python -c import gprmax; print(gprmax.__version__)如果能打印出版本号说明主程序安装成功。3.2 方式二源码方式安装适合想改源码的人如果你打算修改 gprMax 底层代码、加自定义吸收边界或激励源建议用源码方式安装。把 2.3 节克隆下来的仓库作为一个 Python 包安装cd gprMax pip install .这种安装方式和 pip 安装的最大区别是代码直接指向你本地克隆的源码改完保存就生效不用重新安装。对普通使用者来说没必要但对做二次开发的人很关键。3.3 验证安装并做第一个快速运行官方仓库里有很多.in文件示例。运行 gprMax 的标准命令行格式是python -m gprMax 模型文件名.in -n 1-n指定并行线程数单机调成1就行也可以适当调大加速。找一个最简单的示例比如仓库里examples目录下的某个 2D 模型文件切换到对应目录执行python -m gprMax cylinder_Ascan_2D.in -n 1跑完之后目录下会生成一个同名但后缀为.out的文件这就是 HDF5 格式的输出结果。如果这一步成功说明你的整个环境链条已经打通可以做后续建模了。4. 核心实操从写一个 .in 模型到画出 B-scan 剖面4.1 理解 .in 文件的基本结构.in文件是 gprMax 的模型描述文件本质是一系列命令的集合每条命令以#开头从宏观参数到微观几何逐层定义模型空间。刚接触的人容易把每个命令当成不可更改的“魔法”实际上理解规律后就会发现非常直白。下面是一个最基础的 2D 模型文件保存为my_first_model.in我逐行解释#domain: 0.600 0.400 0.002 #dx_dy_dz: 0.002 0.002 0.002 #time_window: 12e-9 #material: 6 0.01 1.0 0.0 my_soil #material: 3 0.001 1.0 0.0 my_concrete #box: 0 0 0 0.600 0.400 0.002 my_soil #box: 0 0.150 0 0.600 0.250 0.002 my_concrete #hertzian_dipole: z 0.300 0.350 0.002 0 #rx: 0.315 0.350 0.002 #src_steps: 0.005 0 0 #rx_steps: 0.005 0 0逐条说明#domain: 0.600 0.400 0.002定义模型整体尺寸单位是米。三个数分别为 x、y、z 方向的长度。2D 模式下z 方向只给一个很小的厚度0.002 m表示一个网格单元就够了。#dx_dy_dz: 0.002 0.002 0.002定义网格步长。空间网格尺寸通常不超过介质中最短波长的十分之一后面我会讲怎么确定。#time_window: 12e-9定义模拟时间窗口单位秒。即电磁波从发射到停止跟踪一共持续 12 纳秒。时间窗口小了会丢深部反射信息大了浪费计算时间。#material定义材料。格式是#material: 介电常数 电导率 磁导率 磁损耗 材料名称。这里的6是相对介电常数0.01是电导率1.0是相对磁导率0.0是磁损耗my_soil是自定义名称。介电常数越大电磁波传播越慢。#box定义一个矩形实体区域。格式是#box: xmin ymin zmin xmax ymax zmax 材料名称。第一个 box 把整个模型填充为土壤第二个 box 在 y 方向 0.150 到 0.250 之间填充了一层混凝土模拟一个水平层状界面。#hertzian_dipole: z 0.300 0.350 0.002 0定义发射源。z表示天线极化方向沿 z 轴后面三个数是源的位置坐标最后一个0表示激励源波形是 Ricker 子波0 代表 Ricker1 代表高斯脉冲。Ricker 子波是探地雷达模拟中最常用的波形。#rx: 0.315 0.350 0.002定义一个接收点位置在发射点右侧 0.015 m 处。这个间距需要根据天线尺寸去设定。#src_steps和#rx_steps定义了发射源和接收点在 x 方向上的移动步长。两者一致时相当于收发天线作为一个整体沿测线移动从而模拟 B-scan 剖面测量。建议新手从 2D 模型入手因为它计算量小、参数简单便于理解每个命令的作用。等你把 2D 跑明白了再往 3D 模型扩展也不迟。4.2 网格步长和时间窗口怎么定网格步长不是随便设的。FDTD 算法的稳定性条件要求时间步长和空间步长满足一定关系而空间步长本身要能分辨介质中的最小波长。经验法则是每个波长至少要有 10 个网格单元。介质中的波长公式为[ \lambda \frac{c}{f \sqrt{\varepsilon_r}} ]其中 ( c ) 是真空光速 ( 3 \times 10^8 ) m/s( f ) 是天线中心频率( \varepsilon_r ) 是介质相对介电常数。举例如果天线中心频率为 1.6 GHz介质的相对介电常数为 6则 ( \lambda \approx \frac{3 \times 10^8}{1.6 \times 10^9 \times \sqrt{6}} \approx 0.077 ) m那么网格步长取 ( \lambda/10 \approx 0.0077 ) m。上面例子中取#dx_dy_dz: 0.002 0.002 0.002比这个要求更精细是为了获得更好的剖面对比度。网格步长减小会导致计算量急剧增大。三维情况下网格数减少一半内存占用会变成原来的 1/8。我在 3D 建模时通常会在精度和算力之间取舍先用粗网格跑通流程确认模型没有语法或物理错误后再加密网格跑最终结果。时间窗口 ( t_{\max} ) 的估算方法很简单要让电磁波从发射天线传到最深目标再反射回接收天线那么[ t_{\max} \frac{2 \times d_{\max}}{v} ]其中 ( d_{\max} ) 是最深目标体的深度( v c / \sqrt{\varepsilon_r} ) 是介质中的波速。如果预期探测 0.3 m 深、介电常数 6则 ( v \approx 1.22 \times 10^8 ) m/s往返时间约 ( 4.9 ) ns取一定余量#time_window: 12e-9足够。4.3 运行模型并检查输出写完.in文件后在命令行或 PyCharm 终端中执行python -m gprMax my_first_model.in -n 1运行过程会打印 FDTD 计算进度一般几秒到几十分钟不等取决于模型大小和三维或二维。结束后会生成my_first_model.out文件。这里有一个非常核心的概念这个.out文件同时包含了所有时间步、所有收发位置的数据。你可以用官方提供的工具脚本快速画图先检查波形是否正确。我用得比较多的是官方仓库tools目录下的脚本比如python -m tools.plot_Ascan my_first_model.out python -m tools.plot_Bscan my_first_model.out前提是你把当前工作目录设置在仓库根目录或者将tools目录加入PYTHONPATH。如果一切正常A-scan 能看到明显的直达波和反射波峰B-scan 能看到类似双曲线的反射同相轴。这个双曲线形态是探地雷达资料解释中的重要特征——地下点目标比如管道、空洞在剖面上会呈现双曲线形反射因为雷达波以宽波束向地下照射天线在目标正上方时路径最短偏离目标时路径变长。4.4 用 Python 读取 HDF5 输出并绘制剖面官方脚本能应急但很多时候你需要按自己的格式去处理大量数据。gprMax 输出文件是 HDF5 格式我通常这样读取import h5py import numpy as np import matplotlib.pyplot as plt # 读取输出文件 with h5py.File(my_first_model.out, r) as f: print(list(f.keys())) # ElectricField 是电场数据 # 输出数据结构iterations, traces, components field f[ElectricField][...] # shape: (num_iterations, num_traces, 3) # 取 z 分量电场即 Ez Ez field[:, :, 2] # 绘制 B-scan 剖面 plt.figure(figsize(8, 6)) plt.imshow(Ez.T, aspectauto, cmapgray) plt.colorbar(labelElectric Field (V/m)) plt.xlabel(Trace Index) plt.ylabel(Time Index (ns)) plt.show()这里Ez.T转置是因为 imshow 默认行代表 y 轴而我们的数据行是时间、列是空间位置转置后横轴才对应测线位置。实测中你会发现直接把原始电场画出来会出现很强的直达波信号把深层反射信号“压”得看不清楚这时可以做增益补偿比如乘以时间索引的线性或指数系数或者做均值滤波去除水平直达波。我自己的习惯是先用官方脚本快速看图再用自己的 Python 脚本做批量处理和增益调整两者结合效率最高。5. 进阶从 2D 到 3D 模型的关键跨越5.1 2D 和 3D 模型在参数设置上的区别3D 模型的参数设置比 2D 复杂不少。最关键的是天线方向。2D 模型里天线的极化方向通常设为z因为模型在 z 方向只有一个网格天然模拟的是无限长线源。3D 模型里则要明确天线的极化方向是沿 x、y 还是 z电磁波的传播特征会完全不同。以常见的探地雷达天线为例如果天线极化方向沿 x 方向则#hertzian_dipole: x 0.300 0.350 0.050 0接收点要相应调整位置。3D 模型的#domain需要三个方向都给出实际尺寸比如#domain: 0.600 0.400 0.200 #dx_dy_dz: 0.002 0.002 0.002z 方向再也不是一个网格而是真实的空间厚度。这意味着模型体积急剧增大。0.6m × 0.4m × 0.2m 的模型在 0.002 m 网格下是 300 × 200 × 100 600 万个网格单元。如果再加上 10 个时间步内的迭代计算量会吃掉大量内存。所以 3D 模型第一原则网格越粗越好够用就行。5.2 用 geometry_view 查看模型是否正确建模最怕的是几何定义错了看不见。gprMax 提供#geometry_view命令可以直接导出模型的三维几何视图到 VTK 文件用 ParaView 或 Python 的pyvista查看。在.in文件中添加一行#geometry_view: 0.002 0.002 0.002 0.300 0.200 0.100 0.600 0.400 0.200 geom_model然后用官方工具python -m tools.model_viewer geom_model.vtu不过我在实际使用中更喜欢用pyvista库去读 VTU 文件更加灵活。pyvista安装需要一些额外的系统库但确实值得试。5.3 3D 模拟的工程量评估什么时候该上高性能机器如果你要跑一个中等规模的 3D 模型比如 1m × 1m × 0.5m网格 0.005 m那么网格数是 200 × 200 × 100 400 万个网格假设时间步 4000 步每步更新电场需要访问的内存和运算量都很大。实测经验单核 CPU 跑这种模型可能需要数小时到数天最好用多核并行。gprMax 支持 OpenMP 多线程和 MPI 并行命令行里用-n 8试试速度提升。如果你的电脑内存小于 16 GB我建议先用更粗的网格跑通模型再考虑加密。3D 模拟还有一个隐性成本——输出文件巨大。每保存一个时间步的电场数据都会占内存你要是每个时间步都保存输出文件轻松达到几个 GB磁盘很快就满了。可以在.in文件里设置#output相关参数用#geometry_view只输出部分时间窗比如每 4 步保存一次大幅降低文件体积。6. 常见问题与排查技巧实录6.1 安装阶段编译报错和依赖冲突问题pip install gprmax 时出现Microsoft Visual C 14.0 is required原因明确Windows 缺少 C 编译工具。解决安装 Visual Studio Build Tools勾选“使用 C 的桌面开发”重启终端后重新 pip install。实测绝大多数人卡在这。装好后可以不重启电脑但一定要新开一个终端窗口让环境变量生效。问题conda 环境里 import gprmax 报错找不到gprmax模块通常是你没有激活 conda 环境或者 PyCharm 解释器没配置到 conda 环境。在命令行运行conda activate gprMax再试。在 PyCharm 里检查右下角解释器路径。问题numpy 版本冲突pip install gprmax会安装它依赖的 numpy 版本。如果你此前手动装过其他版本可能出现numpy._core相关的报错。最省事的办法是新建一个干净的 conda 环境只装 gprmax 相关包。6.2 建模阶段模型行为和预期不符问题B-scan 剖面看不到双曲线反射只有水平直达波多半是目标体尺寸太小或者介电常数和背景差异不够明显。检查目标体是否有至少一个网格大小并确认#material的介电常数与背景区别足够大。问题模拟出的波形有严重的高频震荡大概率是网格步长太大不满足波长的空间分辨要求。把#dx_dy_dz减小到理论值的 1/2 再试。问题模型运行时间极长几小时跑不完先检查#domain是否设置过大再检查网格是否过密。建议先用#dx_dy_dz放宽一倍跑一个快速试算验证逻辑正确后再加密。问题#time_window太小导致深部反射没有被记录此时剖面在深部会出现截断感或者波形还没走完就戛然而止。增加时间窗即可。6.3 后处理阶段出图结果不符合预期问题用 matplotlib 读 HDF5 文件后画出的图像是全黑的/全白的多半是数据范围问题。电场值可能非常大或非常小直接 imshow 会丢失细节。建议先对数据做归一化并用vmin、vmax控制显示范围。或者先看一眼数据统计量比如np.max(np.abs(Ez))。问题A-scan 波形看起来直接波完全淹没反射波这是探地雷达数据的常态尤其是介电常数差异小的情况。可以做一个简单的去直达波操作把所有道减去第一道或所有道的平均从而突出横向变化。这个操作在实测数据处理中非常有用。问题读文件时h5py报Unable to synchronously open file通常是你打开.out文件时它还在被 gprMax 写入。等运行完全结束再读取不要在半路打开。6.4 避坑总结我最想提醒新手的几件事第一不要一上来就尝试宏大逼真的三维模型。先用二维模型理解物理概念跑通全流程再逐步增加模型复杂度。第二认真对待.in文件里的每个数字格式错一个字符程序可能直接报错或者静默生成不合理模型。第三重视 HDF5 读取习惯尽量用脚本批量处理数据而不是靠肉眼翻输出文件。第四遇到问题优先看官方文档很多细节在官方文档的 FAQ 里写得非常清楚。7. 最后再分享一个提效技巧用 Python API 批量生成模型我最后想单独讲一下 gprMax 的 Python API因为这是我从手动改.in文件升级到批量跑模型的关键。gprMax 3.x 可以直接在 Python 中创建模型调用后处理函数省去写.in文件的中间步骤。比如想生成 100 个不同埋深的空洞模型你用 Python 脚本循环改变目标体坐标每次调用求解器自动保存输出文件最终形成一个数据集。需要人工干预的部分大大减少对做参数扫描和训练样本生成尤其有用。基础流程大致是import gprMax from gprMax.input_cmd_funcs import * from gprMax.exceptions import CmdInputError # 构建一个模型 model gprMax.model.Model(dimensions(0.6, 0.4, 0.002), grid_spacing(0.002, 0.002, 0.002), time_window12e-9) # 添加材料和几何体 model.add_material(6, 0.01, 1.0, 0.0, my_soil) model.add_box((0, 0, 0), (0.6, 0.4, 0.002), my_soil) # 添加天线和接收点 model.add_hertzian_dipole(z, (0.3, 0.35, 0.002), 0) model.add_rx((0.315, 0.35, 0.002)) # 运行模拟 model.run()我在自己的项目里就是通过这种脚本批量修改参数一次性生成几十上百个探地雷达正演样本拿来喂给深度学习模型做自动识别。这个技巧非常实用建议你跑通基础流程后尽早尝试。探地雷达正演模拟这条路最大的门槛不是软件本身而是理解“为什么要这样建模”“为什么波形长这样”“参数变了会怎样”。gprMax 给了你一个可以反复试验的实验场你可以肆意更改介电常数、埋深、几何形状然后立刻看到雷达响应变化。这种直观反馈比看一百篇理论文章都更深刻。希望这篇教程能让你少走一些弯路更快跑通自己的第一个模型。本文还有配套的精品资源点击获取