代码分享:gprMax钻孔地质雷达波场模拟

news2024/9/9 4:43:17

代码分享:gprMax钻孔地质雷达波场模拟

前言

gprMax模拟地面地质雷达被广泛使用,但是在钻孔内进行地质雷达的模拟较少。本博文尝试利用gprMax进行钻孔地质雷达的模拟,代码仅供大家借鉴。

文章目录

  • 代码分享:gprMax钻孔地质雷达波场模拟
        • 前言
    • 1、钻孔地质雷达模拟效果
        • 1.1、发射源在孔口
        • 1.2、发射源在孔底
        • 1.3、发射源在孔中
    • 2、模型参数设置
    • 3、python代码

1、钻孔地质雷达模拟效果

为了显示电磁波在钻孔内传播的状态,利用paraview将模拟的结果动态展示。

1.1、发射源在孔口

在这里插入图片描述

1.2、发射源在孔底

在这里插入图片描述

1.3、发射源在孔中

在这里插入图片描述

2、模型参数设置

假设钻孔间距为20m,钻孔深度为30m,背景介质设置为花岗岩,介电常数为6,电导率为0.005;设置两个方形充水空洞,介电常数为81,电导率为0.003。模型图如下:
在这里插入图片描述
雷达天线频率设置为32MHz,gprMax模拟的具体参数设置如下:

#title: krast_carbonatite_Bscan_2D
#domain: 21.000 30.000 0.050
#dx_dy_dz: 0.050 0.050 0.050
#time_window: 50e-8

#material: 6 0.005 1 0 granite
#material: 81 0.003 1 0 krast

#waveform: ricker 5 3.2e7 my_ricker

#hertzian_dipole: z 0.55 29.5 0 my_ricker

#python:
for i in range(1,31):
    print("#rx: 20.450 {} 0".format(i-0.5))
#end_python:

#src_steps: 0 0 0
#rx_steps: 0 0.000 0

#box: 0 0 0 21.000 30.000 0.050 granite
#box: 3.000 5.000 0 8.000 10.000 0.050 krast
#box: 11.000 19.000 0 16.000 24.000 0.050 krast

cylinder: 15.500 15.000 0 15.500 15.000 2.000 0.500 krast

geometry_view: 0 0 0 21.000 30.000 0.010 0.010 0.010 0.010 krast_carbonatite n

#python:
for i in range(1, 51):
    print("#snapshot: 0 0 0 21.000 30.000 0.050 0.050 0.050 0.050 {} snapshot{}".format(i*1e-8, i))
#end_python:

本参数设置的不是很合理,但是不影响模拟出结果。

3、python代码

运行模拟的主程序代码由python编辑,代码如下:

"""
python运行gprmax
读取.in文件
运行api函数模拟
"""

import os
import numpy as np
import matplotlib.pyplot as plt
from gprMax.gprMax import api
from tools.outputfiles_merge import get_output_data, merge_files

# 文件路径+文件名
dmax = r"D:\Learnfile\gprmaxSTU\guanxian3D"  # 项目目录
# filename = os.path.join(dmax, 'guanxian_granite_Bscan_2D.txt')

# # 正演  n:仿真次数(A扫描次数)->B扫描
# api(filename, n=98, geometry_only=False )  # geometry_only:仅几何图形
merge_files(dmax+'/'+'PVC03', removefiles=True)
7
# # # 获取回波数据
# # # A B扫描时out文件名不一样
filename = os.path.join(dmax+'/'+'PVC03'+'_merged.out')
rxnumber = 1
rxcomponent = 'Ez'
outputdata, dt = get_output_data(filename, rxnumber, rxcomponent)

# # # 保存回波数据
np.savetxt('shangxiang.txt', outputdata, delimiter=' ')

# # 提取振幅
# def get_ez_value(data):
#     data = abs(data)
#     get_Evalue = data.sum(axis = 0)
#     return get_Evalue

# # print(get_ez_value(outputdata))
# plt.plot(np.arange(1, outputdata.shape[1]+1, 1), get_ez_value(outputdata))
# plt.show()

# # 提取走时
# def get_firsttime_value(data):
#     [a, b] = np.shape(data)
#     door=np.zeros(b)  
#     trvp = []
#     for i in range(b):
#         door[i] = np.max(abs(data))*0.02
#         for j in range(a):
#             if abs(data[j][i]) > door[i]:
#                 trvp = np.append(trvp, data[j][i])
#                 break
#     return trvp

# a = get_firsttime_value(outputdata)
# print(a.shape)
# plt.plot(np.arange(1, outputdata.shape[1]+1, 1), get_firsttime_value(outputdata))
# plt.show()

## B扫描绘图
# from tools.plot_Bscan import mpl_plot
# plt = mpl_plot(filename, outputdata, dt*1e9, rxnumber, rxcomponent)
# plt.ylabel('Time [ns]')
# plt.show()

# # # # A扫描绘图
# # # from tools.plot_Ascan import mpl_plot
# # # from gprMax.receivers import Rx
# # # outputs = Rx.defaultoutputs
# # # outputs = ['Ez']
# # # print(outputs)
# # # plt = mpl_plot(filename, outputs)
# # # plt.show()
# # # # #
# # # #
# # # # A扫描图
# # # outputdata[1:200,]=0    ## 通过置零消除天线耦合波
# # # output = outputdata[:,0]  # 第i道A扫信号:序号从0开始
# # # plt.plot(output)
# # # plt.show()
# # # #
# # # #
# 堆叠波形
# space_signal = float(0.01)   # 信号间隔(按实际情况变更)
# tw = 10              # 时间窗(与in文件一致)
# trace_number = len(outputdata[0])
# for i in range(trace_number):
#     plt.plot(outputdata[:,i]+(i+1)*space_signal,np.linspace(0,tw,len(outputdata)),color='m')
# # plt.xticks(range(space_signal,trace_number*space_signal+1,space_signal),range(1,trace_number+1))
# plt.xlim(0, space_signal*(trace_number+2))
# plt.ylim(0, tw)
# # plt.xlabel('trace_number')
# plt.ylabel('Time [ns]')
# ax = plt.gca()          # 获取句柄
# ax.invert_yaxis()       # y轴反向
# ax.xaxis.tick_top()     # x轴放在上方
# plt.show() 

注:程序运行出现bug,注意文件目录与路径的调整。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/393862.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【数据结构】链表练习题(1)

练习题1.移除链表元素(LeetCode203)2.链表的中间结点(LeetCode876)3.链表的倒数第k个结点(剑指offer)4.反转链表(LeetCode206)5.合并两个有序链表(LeetCode21)6.链表分割(牛客)7.链表的回文结构(牛客)1.移除链表元素(LeetCode203) 给你一个链表的头结点 head 和一个整数 val &…

第十四届蓝桥杯三月真题刷题训练——第 4 天

目录 题目 1 :九数算式_dfs回溯(全排列) 题目描述 运行限制 代码: 题目2:完全平方数 问题描述 输入格式 输出格式 样例输入 1 样例输出 1 样例输入 2 样例输出 2 评测用例规模与约定 运行限制 代码: 题目 1 &am…

数据结构刷题(十九):77组合、216组合总和III

1.组合题目链接过程图:先从集合中取一个数,再依次从剩余数中取k-1个数。思路:回溯算法。使用回溯三部曲进行解题:递归函数的返回值以及参数:n,k,startIndex(记录每次循环集合从哪里开始遍历的位…

场景式消费激发春日经济,这些电商品类迎来消费热潮

春日越临近,商机越浓郁。随着气温渐升,春日经济已经潜伏在大众身边。“春菜”、“春装”、“春游”、“春季养生”等春日场景式消费走热。 下面,鲸参谋为大家盘点几个与春日经济紧密相关的行业。 •春日仪式之春游踏青 ——户外装备全面开花…

查看 WiFi 密码的两种方法

查看 WiFi 密码的两种方法1. 概述2. 在控制面板中查看 WiFi 密码3. 使用 CMD 查看 WiFi 密码结束语1. 概述 突然忘记 WiFi 密码怎么办? 想连上某个使用过的 WiFi,但有不知道 WiFi 密码怎么办? 使用电脑如何查询 WiFi 密码? 以下是…

zabbix4.0 网络发现-自动添加主机-自动注册

zabbix的网络发现 网络发现的好处: 加快zabbix部署 简化管理 无需过多管理就能在快速变化的环境中使用zabbix zabbix网络发现给予以下信息 IP范围 可用的外部服务(FTP,SSH,WEB,POP3,IMAP,TCP等&…

一篇深入解析BTF 实践指南

BPF 是 Linux 内核中基于寄存器的虚拟机,可安全、高效和事件驱动的方式执行加载至内核的字节码。与内核模块不同,BPF 程序经过验证以确保它们终止并且不包含任何可能锁定内核的循环。BPF 程序允许调用的内核函数也受到限制,以确保最大的安全性…

FPGA使用GTX实现SFP光纤收发SDI视频 全网首创略显高端 提供工程源码和技术支持

目录1、前言2、设计思路和框架3、vivado工程详解4、上板调试验证并演示5、福利:工程代码的获取1、前言 FPGA实现SDI视频编解码目前有两种方案: 一是使用专用编解码芯片,比如典型的接收器GS2971,发送器GS2972,优点是简…

如何让网络安全的防守技术更强?20年白帽子老江湖告诉你【蓝队】

网络安全的防守技术是网络安全工程师必备技能,只有攻防兼备的白帽子,才算是真正的网安精英。 网络安全的攻击技术在前面我已经讲过了,感兴趣的可以去看看: 90%的人都不算会网络安全,这才是真正的白帽子技术【红队】 . …

蓝桥杯--成绩分析

成绩分析 技巧 求最大值与最小值 if(a[i]>max) maxa[i]; if(a[i]<min) mina[i]; 这里的max为最小值0 这里的min为最大值100 这道题比较简单 题目大意 小蓝给学生们组织了一场考试&#xff0c;卷面总分为 100 分&#xff0c;每个学生的得分都是一个 0 到 100 的整数。 请…

【GO】K8s 管理系统项目33[前端部分–登录和登出]

K8s 管理系统项目[前端部分–登录和登出] 1. 登录登出流程 1.1 登录流程 登入流程总的分为5步: 账号密码验证token生成token验证验证成功进行跳转验证失败返回/login 1.2 登出流程 登出流程就相对简单,分为2步 删除Token跳转/login 2. 登录代码 src/views/login/Login.v…

vue双向绑定原理

Vue双向绑定的原理 vue的双向绑定原理&#xff1a;vue数据的双向绑定是通过数据劫持结合发布者-订阅者模式的方式来实现的。其核心就是通过obj.defineProperty()方法来实现数据的劫持&#xff0c;在数据变化时发布消息给订阅者&#xff0c;触发相应的监听回调。也就是说数据和视…

windows安装Stable Diffusion WebUI及问题解决记录

本文将详细介绍stable diffusion webui的下载、安装及问题解决。 StableDiffusion是2022年发布的深度学习文本到图像生成模型。它主要用于根据文本的描述产生详细图像&#xff0c;尽管它也可以应用于其他任务&#xff0c;如内补绘制、外补绘制&#xff0c;以及在提示词​&#…

AUTOSAR知识点Com(五):CANIf模式PUD Channel

1、概述 每个L-PDU分配给一个专用的物理CAN通道&#xff0c;该通道连接CAN控制器和CAN网络。通过这种方式&#xff0c;所有属于物理通道的L-PDU都可以在处理逻辑上&#xff0c;单一的L-PDU通道组上进行控制。这些逻辑组表示ECU连接到底层CAN网络的所有I-PDU。图 展示了L-PDU信道…

category排序专辑

case1——对有限类型的字段按指定要求排序&#xff1a; #学历分布 xueli_tsdf.pivot_table(index学历,values教师id,aggfunccount,marginsTrue,margins_name总计) xueli_ts[占比]np.round(xueli_ts[教师id]/xueli_ts.loc[总计,教师id],2) xueli_ts.reset_index(inplaceTrue)xu…

Adding Conditional Control to Text-to-Image Diffusion Models

安全验证 - 知乎知乎&#xff0c;中文互联网高质量的问答社区和创作者聚集的原创内容平台&#xff0c;于 2011 年 1 月正式上线&#xff0c;以「让人们更好的分享知识、经验和见解&#xff0c;找到自己的解答」为品牌使命。知乎凭借认真、专业、友善的社区氛围、独特的产品机制…

Java要学到什么程度才能找工作?小白怎么去面试Java岗位?

作为一个Java初学者&#xff0c;到底要学哪些知识点才能找到月薪过万的工作&#xff1f;或者说&#xff0c;怎样才能适应企业的开发流程&#xff0c;不至于进了公司都不知道怎么把需求转换成代码。甚至&#xff0c;唯唯诺诺的加班&#xff0c;一点自信都没有。本期文章&#xf…

STM32开发(18)----CubeMX配置RTC

CubeMX配置RTC前言一、什么是RTC&#xff1f;RTC时钟源RTC备份域二、实验过程1.CubeMX配置2.代码实现3.实验结果总结前言 本章介绍使用STM32CubeMX对RTC进行配置的方法&#xff0c;RTC的原理、概念和特点&#xff0c;配置各个步骤的功能&#xff0c;并通过实验方式验证。 一、…

Linux常见漏洞修复

一、nginx 修复TLS1.0&#xff0c;TLS1.1协议漏洞 1、漏洞描述 服务端口漏洞名称加固建议nginx443TLS版本1.0协议检测启用对TLS 1.2或1.3的支持&#xff0c;并禁用对TLS 1.0的支持。nginx443TLS版本1.1协议检测启用对TLS 1.2或1.3的支持&#xff0c;并禁用对TLS 1.1的支持。 …

Linux27 -- 通过抓包观察三次握手和四次挥手、链接的状态(tcp状态转移图)、TIME_WAIT 存在的原因

tcp协议的特点&#xff1a; 面向连接的&#xff0c;可靠的&#xff0c;流式服务 //面试常问&#xff1a; 一、通过抓包观察三次握手、四次挥手 工具&#xff1a;tcpdump 命令 抓冲我到他从他到我的数据包。 需要管理员权限。 运行示例&#xff1a; 进入管理员权限&#xff…