文章首发于:https://blog.zhaoxuan.site/archives/37.html;
第一时间获取最新文章请关注博客个人站:https://blog.zhaoxuan.site

1. 电磁波信号的正演和反演

正演是使用模拟软件构建地下目标的属性,并通过数值计算的方式模拟其空间的电场属性;反演是指根据电磁探测方法获得的数据来估计地下目标的属性,所估计属性通常包括几何参数(位置、形状和尺寸)和物理特性(材料、水含量和空隙等)。

2. 使用gprMax进行正演模拟的方法

2.1 编写模型A-Scan构建文件

gprMax通过编写后缀为.in的输入文件来构建地下目标物。
首先以官方文档的圆柱体模型为例进行讲解,在“./gprMax/user_models“中可以找到官方提供的示例文件”cylinder_Ascan_2D.in“。为了方便讲解,本文中例子调整了配置项的排列顺序。

#title: A-scan from a metal cylinder buried in a dielectric half-space

#box: 0 0 0 0.240 0.170 0.002 half_space
#cylinder: 0.120 0.080 0 0.120 0.080 0.002 0.010 pec #dx_dy_dz: 0.002 0.002 0.002 #domain: 0.240 0.210 0.002
#time_window: 3e-9 #material: 6 0 1 0 half_space #waveform: ricker 1 1.5e9 my_ricker
#hertzian_dipole: z 0.100 0.170 0 my_ricker #rx: 0.140 0.170 0 #geometry_view: 0 0 0 0.240 0.210 0.002 0.002 0.002 0.002 cylinder_half_space n

(1)给模型起个名咂!
“title”配置项为模型名字,不多赘述。

#title: A-scan from a metal cylinder buried in a dielectric half-space

(2)设定地下目标物参数
"box"配置项对应范围见示意图中“Half Space”部分。
"cylinder"配置项对应范围见示意图中“Metal cylinder”部分。

#box: 0 0 0 0.240 0.170 0.002 half_space
#cylinder: 0.120 0.080 0 0.120 0.080 0.002 0.010 pec

(2)确定网格大小
根据官方文档参数,将网格大小设置为0.002米。

#dx_dy_dz: 0.002 0.002 0.002

(3)设置扫描移动范围和时窗大小
"domain"配置项表示雷达扫描时的移动范围,范围的大小包括额外的加上10个单元的PML吸收边界条件(默认值情况下),可在示意图中看到“Domain boundary”和“PML region”部分的更直观的表示。“time_window”配置项设置为3ns。

#domain: 0.240 0.210 0.002
#time_window: 3e-9

(4)设定材料的构成参数
本例中涉及三种材料:空气、介电半空间、金属圆柱体,其中空气和金属圆柱体的参数已经在gprMax中内置了,因此,只需要指定介电半空间(Half_space)部分的参数设置,"material"参数的6 0 1 0分别对应相对介电常数、电导率为、相对磁化率和零电导率。

#material: 6 0 1 0 half_space

(5)设定源类型和激励频率

#waveform: ricker 1 1.5e9 my_ricker

2.2 根据模型构建进行运算,生成输出文件"cylinder_Ascan_2D.out"

进入gprMax的Python环境中,使用以下命令根据2.1节中的模型A-Scan构建文件生成相应输出文件"cylinder_Ascan_2D.out"。

(gprMax)$ python -m gprMax user_models/cylinder_Ascan_2D.in

2.3 将输出结果可视化为A-Scan图像

使用以下命令将2.2节中的输出数据可视化为A-Scan图像。

(gprMax)$ python -m tools.plot_Ascan user_models/cylinder_Ascan_2D.out

2.4 编写模型B-Scan构建文件

相对于本文2.1节中模型A-Scan构建文件,模型B-Scan构建文件增加了“src_steps”和“rx_steps”两个配置项。“src_steps”配置项指定模型构建运算时信号源的移动步长,“rx_steps”配置项配置项指定模型构建运算时接收器的移动步长。

#title: B-scan from a metal cylinder buried in a dielectric half-space
#domain: 0.240 0.210 0.002
#dx_dy_dz: 0.002 0.002 0.002
#time_window: 3e-9 #material: 6 0 1 0 half_space #waveform: ricker 1 1.5e9 my_ricker
#hertzian_dipole: z 0.040 0.170 0 my_ricker
#rx: 0.080 0.170 0
#src_steps: 0.002 0 0
#rx_steps: 0.002 0 0 #box: 0 0 0 0.240 0.170 0.002 half_space
#cylinder: 0.120 0.080 0 0.120 0.080 0.002 0.010 pec

2.5 根据模型构建进行运算,生成输出文件"cylinder_Bscan_2D.out"

进入gprMax的Python环境中,使用以下命令根据2.4节中的模型B-Scan构建文件生成相应输出文件"cylinder_Bscan_2D.out"。

(gprMax)$ python -m tools.outputfiles_merge user_models/cylinder_Bscan_2D

2.6 将输出结果可视化为B-Scan图像

使用以下命令将2.5节中的输出数据可视化为B-Scan图像。

(gprMax)$ python -m tools.plot_Bscan user_models/cylinder_Bscan_2D_merged.out Ez

3. 总结

本文讲解了使用gprMax进行探地雷达电磁波信号的正演模拟方法,并用官方文档所提供的示例进行了A-Scan图像和B-Scan图像生成过程演示,所模拟电磁场传播如下动图所示。
模拟电磁场传播示意图

Reference

gprMax User Guide — gprMax User Guide

gprMax电磁波正演模拟方法的更多相关文章

  1. ArcGIS中实现指定面积蜂窝(正六边形)方法

    本篇博文为博主(whgiser)原创,转载请注明. 空间聚集研究中,地理尺度大多数都是基于格网构建的,只需fishnet下就行了.也常有使用社区.交通小区(TZ)作为研究单元的.直到发现蜂窝网络做出的 ...

  2. UR机械臂运动学正逆解方法

    最近几个月因为工作接触到了机械臂的项目,突然对机械臂运动方法产生了兴趣,也就是如何控制机械臂的位置和姿态.借用一张网上的图片,应该是ur5的尺寸.我用到的是ur3机械臂,除了尺寸不一样,各关节结构和初 ...

  3. jmockito模拟方法中参数如何指定

    在做单元测试的时候,经常会遇到mock类的方法的情景.在写单测过程中,遇到一些问题,比较困惑,便做了一些测试,并得出一个结论: 在mock类的方法时,当符合 (mock参数).equals(实际调用过 ...

  4. 用OxyPlot在WPF中演示正演磁异常的变化规律

    为了在展示实验成果时动态演示理论球体磁异常随其埋深.磁化倾角的变化规律,我用WPF写了一个小程序来作演示. MatLab计算磁异常数据 首先是计算理论球体磁异常数据,在Matlab中可以很方便地计算. ...

  5. 圆锥体完全均衡下重力异常正演 [MATLAB]

    在完全均衡的模型下,若地表有一圆锥体(山峰等),计算跨越山顶的截面上所得到的各种重力异常. 地壳密度 $kg\cdot m^{-3}$ 上地幔密度 $g\cdot cm^{-3}$ 地表地形圆锥体半径 ...

  6. VB模拟键盘输入的N种方法

    VB模拟键盘输入的N种方法http://bbs.csdn.net/topics/90509805hd378发表于: 2006-12-24 14:35:39用VB模拟键盘事件的N种方法 键盘是我们使用计 ...

  7. VS2012 Unit Test(Void, Action, Func) —— 对无返回值、使用Action或Func作为参数、多重载的方法进行单元测试

    [提示] 1. 阅读文本前希望您具备如下知识:了解单元测试,了解Dynamic,熟悉泛型(协变与逆变)和Lambda,熟悉.NET Framework提供的 Action与Func委托.2.如果您对单 ...

  8. 对无返回值、使用Action或Func作为参数、多重载的方法进行单元测试

    VS2012 Unit Test(Void, Action, Func) —— 对无返回值.使用Action或Func作为参数.多重载的方法进行单元测试 [提示] 1. 阅读文本前希望您具备如下知识: ...

  9. Monte Carlo Method(蒙特·卡罗方法)

    0-故事: 蒙特卡罗方法是计算模拟的基础,其名字来源于世界著名的赌城——摩纳哥的蒙特卡罗. 蒙特卡罗一词来源于意大利语,是为了纪念王子摩纳哥查理三世.蒙特卡罗(MonteCarlo)虽然是个赌城,但很 ...

  10. TCP通信实现对接硬件发送与接收十六进制数据 & int与byte的转换原理 & java中正负数的表示

    今天收到的一份需求任务是对接硬件,TCP通信,并给出通信端口与数据包格式,如下: 1.首先编写了一个简单的十六进制转byte[]数组与byte[]转换16进制字符串的两个方法,如下: /** * 将十 ...

随机推荐

  1. 命令行部署KingbaseES流复制

    建立系统数据库安装用户组及用户,在所有的节点执行 root用户登陆服务器,创建用户组及用户并且设置密码 groupadd -g 2000 kingbase useradd -G kingbase -g ...

  2. UE4_C++实现TimeLine

    主要实现蓝图节点中时间轴的功能. 目前UE提供了两种实现方式,一个是使用FTimeLine其是一个时间轴的结构体:另一种方式是使用UTimeLineComponent,其是一个时间轴组件类.两者内部定 ...

  3. JWT 安全令牌

    1 package com.reliable.yang.utils; 2 3 import io.jsonwebtoken.Jwt; 4 import io.jsonwebtoken.JwtBuild ...

  4. #二分,负环#JZOJ 3852 单词接龙

    题目 只要一个单词的最后两个字母和另一个单词的前两个字母相同,那么这两个单词就可以有序的连接起来.给出\(n\)个单词组成单词环,求所有环的环中单词平均长度最大值. 分析 二分答案,判断是否存在正环( ...

  5. #线段树合并#洛谷 3224 [HNOI2012]永无乡

    题目 分析 和主席树不同的是,线段树合并后原树的信息不会保留, 这样就保证空间和常数都比较小,这题比较裸,直接上代码 代码 #include <cstdio> #include <c ...

  6. C++ 中的可移植性和跨平台开发

    在当今软件开发行业中,跨平台开发已经成为了一种非常流行的方式.C++作为一门强大的编程语言,也被广泛应用于跨平台开发中.然而,由于不同操作系统的差异和限制,C++在不同的平台上的表现可能会有所不同.为 ...

  7. Qt获取电脑有几个网卡,并获取对应的IPV4

    标题:Qt获取电脑网卡对应的ip | Qt计算电脑有几个网卡 | Qt获取网卡ip信息 | Qt判断获取到的ip是否是IPV4   demo流程: 1.点击搜索网卡按钮,搜索电脑所有的网卡,将网卡名称 ...

  8. std::thread 六:多线程&单例类

    为了避免单例类在多线程中重复的创建,下面提供了两种解决方法: 1.互斥锁+双重检查 2.std::call_once()   方法一:互斥锁+双重检查 #include <iostream> ...

  9. 重新点亮linux 命令树————网络配置的查看[十一三]

    前言 简单整理一下网络配置. 正文 通过ifconfig 查看. 这个就是ip地址. 网卡mac地址. 还有一块信息非常重要: 这个io开头的信息,这里面就是我们127.0.0.1的信息. 那么就来演 ...

  10. RestfulApi 学习笔记——分页和排序(六)

    前言 分页和排序时一些非常常规的操作,同样也有一些我们注意的点. 正文 分页 先来谈及分页. 看下前端传递的参数. public class EmployeeDtoParameters { priva ...