探地雷达正演模拟,基于时域有限差分方法,四

        突然发现第三章后半部分已经讲了使用接收记录成像的问题,所以这一章只讲解简单的数据分析。

        (均以宽角法数据为例子,剖面法数据处理方式都是相同的)假设,我们现在已经获得了一个GPR记录,可以是常用的.sgy格式,也可以是其他的格式,只要读出来是个二维矩阵文件就可以,主要要做的内容:提取三瞬:瞬时相位、振幅和频率,这节主要使用Python,因为C++的话,一般是要写相应的函数的,但是Python的numpy库已经为我们集成了这一章所有要用到的函数,用起来会很简单。

        首先,正演一套数据,可以转换成.sgy文件,但是没必要,正演完就是一个二维矩阵,直接操作就好。根据本章参考文献的讲解,三瞬的提取方法是对数据做希尔伯特变换(Hilbert transform),将实信号转换为复信号,再提取三瞬即可。

        简单讲一下希尔伯特变换,这个变换时非常简单的,用一个公式就可以解释清楚:

x_{img}(t)=x_{real}(t)*\frac{1}{\pi t}

signal(t)=x_{real}(t)+jx_{img}(t )

如果相对希尔伯特变换有更加深入的了解,可以参考CSDN中的相应博客和教科书,这里不做过多赘述。

在对数据进行希尔伯特变换之后,就得到了这个信号的的复信号,接下来根据参考文献中给出的公式,计算三瞬即可:

1、瞬时振幅:

A=\sqrt(x_{real}^2+x_{img}^2)

2、瞬时相位:

\theta=tan^{-1}\frac{x_{img}}{x_{real}}

3、瞬时频率:

F=\frac{d}{dt}\theta

现在,对正演资料进行处理:

# editor: WangBoHua
# date:2024.6.16
# A:瞬时振幅;angle:瞬时相位角;F:瞬时频率
import numpy as np
import cmath
import matplotlib.pyplot as plt
# Read Gpr Signal
# dt=0.001 #dt是实际记录或者接收记录的采样率
GprData=np.genfromtxt("C:/Users/12981/Desktop/signal.data")
trace=GprData[0].size
Samplelength=int(GprData.size/trace)
Hibert=np.complex128(GprData)
# calculate Hibert transform of each trace
t=np.linspace(1,Samplelength,Samplelength,dtype='float')#*dt
Trace=np.linspace(0,trace,trace,dtype='float')
# Time,Trace=np.meshgrid(t,Trace)
hibert=1/(np.pi*t)
for i in range(0,trace):
    v=np.convolve(GprData[:,i],hibert,'same')
    Hibert[:,i]=GprData[:,i]+cmath.sqrt(-1)*v
# calculate A:
Ap=np.abs(Hibert)
# calculate angle:
Angle=np.angle(Hibert)
# calculate frequency:
Frequency=np.diff(Angle)
# draw
fig=plt.figure(figsize=(16,9),dpi=800,layout="constrained")
# amplitude
ax1=fig.add_subplot(3,1,1)
a=ax1.pcolormesh(Trace,t,Ap, rasterized=True,cmap='jet',shading="nearest",vmin=0,vmax=80)
ax1.invert_yaxis()
# angle
ax2=fig.add_subplot(3,1,2)
b=ax2.pcolormesh(Trace,t,Angle, rasterized=True,cmap='jet',shading="nearest",vmin=-3,vmax=3)
ax2.invert_yaxis()
# frequency
ax3=fig.add_subplot(3,1,3)
Trace2=np.linspace(0,trace,trace-1,dtype='float')
c=ax3.pcolormesh(Trace2,t,Frequency, rasterized=True,cmap='jet',shading="nearest",vmin=-0.3,vmax=0.3)
ax3.invert_yaxis()
c1 = fig.colorbar(a, ax=ax1, shrink=1.0)
c2 = fig.colorbar(b, ax=ax2, shrink=1.0)
c3 = fig.colorbar(c, ax=ax3, shrink=1.0)
plt.savefig('sanshun.png')
fig2=plt.figure(figsize=(16,9),dpi=800,layout="constrained")
ax4=fig2.add_subplot(3,1,1)
ax4.plot(t,Ap)
ax4.grid(True,linestyle='-.')
ax5=fig2.add_subplot(3,1,2)
ax5.plot(t,Angle)
ax5.grid(True,linestyle='-.')
ax6=fig2.add_subplot(3,1,3)
ax6.plot(t,Frequency)
ax6.grid(True,linestyle='-.')
plt.savefig('sanshuncurve.png')
plt.show()

时间原因,就不放图片了,可以自己正演试一试,看看效果怎么样。

声明:欢迎使用上述代码,但请标注公式和图片来源,创作不易,请多多支持,非常感谢!

参考文献:

杜衍庆, et al."公路路基浅层疏松病害地质雷达正演模拟及复信号分析."北京交通大学学报 47.06(2023):147-153.

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

DAY03 HTML

文章目录 一 表格1. 表格的语法2. 表格的可选标记3. 不规则的单元格(合并单元格)4. 表格的属性5. 表格的大小 二 列表1. 有序列表2. 无序列表3. 属性4. 列表的嵌套5. 定义列表【了解】 三 表单(重点)1. 表单的语法2. 表单的控件分类3. input元素4. selec…

为什么说Python 是胶水语言?

​ "Python 是胶水语言"这一说法是指它很擅长将不同的程序或代码库连接在一起,能够让来自不同编程语言或框架的组件无缝协作。Python 具有丰富的库和简单的语法,使得它可以轻松调用其他语言编写的程序或使用不同技术栈的模块。 ​ 以下是几个…

如何区分人工智能生成的图像与真实照片(下)

4 功能上的不合理性 AI 生成的图像往往会因为缺乏对现实世界物体结构和相互作用的了解,而产生各种功能不合理之处。这些不合理之处主要表现在以下几个方面: 4.1 构图不合理 物体关系不合逻辑: AI 生成的图像中,物体和人物之间的关系可能不符…

哈希表、递归在二叉树中的应用-1372. 二叉树中的最长交错路径

题目链接及描述 1372. 二叉树中的最长交错路径 - 力扣(LeetCode) 题目分析 题目所述,计算在二叉树中交替遍历的最大深度【左->右->左】【右->左->右】,例如对于从当前根节点root出发,则此时遍历方向有两个…

持续集成jenkins+gitee

首先要完成gitee部署,详见自动化测试git的使用-CSDN博客 接下来讲如何从git上自动拉取代码,实现jenkins无人值守,定时执行测试,生成测试报告。 需要这三个安装包 由于目前的jenkins需要至少java11到java17的版本,所以…

JavaScript——初识:JavaScript的组成、输入和输出语句... | JavaScript基础:变量,数据类型转换

目录 初识JavaScript JavaScript的组成 输入和输出语句 ECMAScript 6保留关键字 变量的命名规范 注意事项 JavaScript基础 变量的数据类型 数据类型分类 数据类型转换 转换为字符串型 转换为数字型 转换为布尔型 例题 初识JavaScript JavaScript的组成 Java…

搭建自己的AI模型应用网站:JavaScript + Flask-Python + ONNX

1. 前言 本文作者以一个前端新手视角,部署自己的神经网络模型作为后端,搭建自己的网站实现应用的实战经历。目前实现的网页应用有: AI 语音服务主页AI 语音识别AI 语音合成AI CP号码生成器 欢迎大家试用感受,本文将以博客基于G…

大数据—“西游记“全集文本数据挖掘分析实战教程

项目背景介绍 四大名著,又称四大小说,是汉语文学中经典作品。这四部著作历久不衰,其中的故事、场景,已经深深地影响了国人的思想观念、价值取向。四部著作都有很高的艺术水平,细致的刻画和所蕴含的思想都为历代读者所…

MyBatis使用 PageHelper 分页查询插件的详细配置

1. MyBatis使用 PageHelper 分页查询插件的详细配置 文章目录 1. MyBatis使用 PageHelper 分页查询插件的详细配置2. 准备工作3. 使用传统的 limit 关键字进行分页4. PageHelper 插件(配置步骤)4.1 第一步:引入依赖4.2 第二步:在m…

河南省文化旅游发展相关统计数据(2014-2023年)

数据时间:2014-2023年,近10年 数据格式:excel 数据来源:中国旅游统计年鉴、河南省统计公报 数据内容:包括河南省近10年来游客量、旅游总收入、旅游景区数量(包括A级)、星级酒店数、旅行社数、公…

mongodb-java apispringboot整合mongodb

mongodb入门mongodb-java api的使用springboot整合mongodb评论 一 MongoDB 1.1 MongoDB简介 ​ MongoDB是一个基于分布式文件存储的数据库。由C语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。 ​ MongoDB是一个介于关系数据库和非关系数据库之间的产品&…

双链表——AcWing.827双链表

双链表 定义 双链表是链表的一种,它的每个节点有两个指针,一个指向前一个节点,一个指向后一个节点。这样使得链表可以双向遍历。 运用情况 频繁进行前后双向遍历操作时非常有用,比如在一些需要来回移动处理数据的场景。可以方…

嵌入式学习——Linux高级编程复习(TCP编程)——day44

基于TCP聊天: clientA.c clientB.c socket socket connect bind listen acce…

2024年了! 为什么还在用串口服务器?

在数字化飞速发展的2024年,串口服务器这一看似古老的技术仍然在工业自动化、远程监控和数据通信等领域发挥着重要作用。本文将从串口服务器的定义、功能、优势和使用场景四个方面来探讨,为什么串口服务器在今天仍然被广泛使用。 1. 什么是串口服务器 串口…

基于51单片机的红外计数器-1602显示

一.硬件方案 本设计的主要原理为:红外发射管发射红外线,红外接收管接收红外线,并且接收管当有红外线照射的时候,电阻比较小,当无线外线照射的时候电阻比较大,这样就可以通过一个电压比较器和一个基准电压进…

线程池ThreadPoolExecutor使用指南

线程池ThreadPoolExecutor使用指南 🧐使用线程池的好处是什么? 统一管理,减少资源获取创建的开销,提高利用率。 🔧线程池的参数 ​ThreadPoolExecutor​ 3 个最重要的参数: ​corePoolSize​ : 任务队列…

Linux系统编程:基础IO

目录 1.C语言文件回顾 2.系统文件I/O 2.1 系统接口介绍 2.2 文件描述符fd 2.3 重定向 2.4 理解缓冲区 2.5 理解文件系统 1.C语言文件回顾 在学习系统文件的操作之前,还记得C语言是如何进行对文件的操作的吗?下面看C语言接口&…

浪潮信息打造业界首款50℃进液温度服务器 PUE逼近理论极限1.0!

在科技飞速发展的今天,浪潮信息以其前瞻性的技术创新思维,再次突破行业极限,推出业界首个支持50℃进液温度的浸没式液冷服务器NF5180G7。这一创新成果不仅展现了浪潮信息在液冷技术领域的深厚实力,更标志着服务器冷却技术的一次重…

【2024亲测无坑】在Centos.7虚拟机上安装Oracle 19C

目录 一、安装环境准备 1、linux虚拟机安装 2、虚拟机快照 3、空间检查&软件上传 二、Oracle软件安装 1.preinstall安装及其他配置准备 2.oracle安装 三、数据库实例的安装 1.netca——网络配置助手 2.dbca——数据库配置助手 四、ORACLE 19C 在linux centos 7上…

基于PPO的强化学习超级马里奥自动通关

目录 一、环境准备 二、训练思路 1.训练初期: 2.思路整理及改进: 思路一: 思路二: 思路三: 思路四: 3.训练效果: 三、结果分析 四、完整代码 训练代码: 测试代码&#…