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

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

        (均以宽角法数据为例子,剖面法数据处理方式都是相同的)假设,我们现在已经获得了一个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.

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

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

相关文章

有关排序的算法

目录 选择法排序 冒泡法排序 qsort排序(快速排序) qsort排序整型 qsort排序结构体类型 排序是我们日常生活中比较常见的问题,这里我们来说叨几个排序的算法。 比如有一个一维数组 arr[8] {2,5,3,1,7,6,4,8},我们想要把它排成升序&#…

StarNet实战:使用StarNet实现图像分类任务(一)

文章目录 摘要安装包安装timm 数据增强Cutout和MixupEMA项目结构计算mean和std生成数据集 摘要 https://arxiv.org/pdf/2403.19967 论文主要集中在介绍和分析一种新兴的学习范式——星操作(Star Operation),这是一种通过元素级乘法融合不同子…

排序-快速排序

快速排序(Quick Sort)是一种高效的排序算法,由英国计算机科学家霍尔(C. A. R. Hoare)在1960年提出。它的基本思想是:通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一…

探究Spring Boot自动配置的底层原理

在当今的软件开发领域,Spring Boot已经成为了构建Java应用程序的首选框架之一。它以其简单易用的特性和强大的功能而闻名,其中最引人注目的特性之一就是自动配置(Auto-Configuration)。Spring Boot的自动配置能够极大地简化开发人…

VS2022 使用C++访问 mariadb 数据库

首先,下载 MariaDB Connector/C++ 库 MariaDB Products & Tools Downloads | MariaDB 第二步,安装后 第三步,写代码 #include <iostream> #include <cstring> #include <memory> #include <windows.h>#include <mariadb/conncpp.hpp>…

使用 Python 进行测试(6)Fake it...

总结 如果我有: # my_life_work.py def transform(param):return param * 2def check(param):return "bad" not in paramdef calculate(param):return len(param)def main(param, option):if option:param transform(param)if not check(param):raise ValueError(…

js中有哪些函数?

命名函数&#xff1a;通过function声明的函数&#xff1b; 匿名函数&#xff1a;通过函数表达式定义的函数&#xff1b; 自执行函数&#xff1a;自动执行的函数&#xff0c;不可以被调用&#xff0c;也称为一次性函数&#xff1b; 闭包函数&#xff1a;内部可以访问外部&…

winform 应用程序 添加 wpf控件后影响窗体DPI改变

第一步&#xff1a;添加 应用程序清单文件 app.manifest 第二步&#xff1a;把这段配置 注释放开&#xff0c;第一个配置true 改成false

Java——只保留一位小数

使用return Math.random(); 要将 Math.random() 的结果保留一位小数&#xff0c;您可以使用以下代码&#xff1a; double randomNumber Math.random(); double roundedNumber Math.round(randomNumber * 10.0) / 10.0; return roundedNumber; 这里的关键是将随机数乘以 …

Wifi通信协议:WEP,WPA,WPA2,WPA3,WPS

前言 无线安全性是保护互联网安全的重要因素。连接到安全性低的无线网络可能会带来安全风险&#xff0c;包括数据泄露、账号被盗以及恶意软件的安装。因此&#xff0c;利用合适的Wi-Fi安全措施是非常重要的&#xff0c;了解WEP、WPA、WPA2和WPA3等各种无线加密标准的区别也是至…

实战 | 基于YOLOv10的车辆追踪与测速实战【附源码+步骤详解】

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

go 基础笔记

文章目录 go 基础笔记Go项目依赖关系ORM&#xff08;对象关系映射&#xff09;库mysql 建库 go 基础笔记 _ "github.com/go-sql-driver/mysql"该行代码是Go语言中的导入语句&#xff0c;但带有下划线&#xff08;_&#xff09;前缀表示该包被导入但其内容不会被直接…

【单片机毕业设计选题24008】-基于单片机的寝室系统设计

系统功能: 1. 采用STM32最小系统板控制&#xff0c;将采集到温湿度光照等传感器数据显示在OLED上 2. 通过离线语音模块开关灯&#xff0c;风扇&#xff0c;门。 3. 监测到MQ2烟雾后触发报警。 4. 语音&手动&定时控制窗帘。 5. 按键开启布防模式&#xff0c;布防后…

上位机图像处理和嵌入式模块部署(h750 mcu和usb虚拟串口)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 对于mcu usb而言&#xff0c;大部分情况下&#xff0c;它和上位机之间的关系都是device的关系。一般usb&#xff0c;可以分成host和device。如果mc…

自动化测试git的使用

git是一款分布式的配置管理工具。本文主要讲git如何在自动化测试中安装&#xff0c;上传及拉取下载代码。 1 、git 介绍 每天早上到公司&#xff0c;从公司的git服务器上下载最新的代码&#xff0c;白天在最新的代码基础上&#xff0c;编写新的代码&#xff0c;下班时把“代码…

SSID简介

一、 SSID 概念定义 SSID&#xff08;Service Set Identifier&#xff09;即服务集标识符。它是无线网络中的一个重要标识&#xff0c;用于区分不同的无线网络。 相当于无线网络的名称&#xff0c;用于区分不同的无线网络。用户在众多可用网络中识别和选择特定网络的依据。通…

消息队列-消息队列保证消息可靠性的一些建议

如何检测到消息丢失&#xff1f; 美团消息队列文章中提到了对消息队列的监控手段&#xff0c;我理解消息丢失&#xff0c;根据不同节点来查看监控&#xff1a; 生产者生产丢失&#xff1a;监控中生产者生产量异常消费者消费丢失&#xff1a;查看消费者消息延迟监控、消费者 o…

新能源汽车高压上电、高压下电逻辑分析

高压上电逻辑 新能源汽车的上电分为高压上电和低压上电&#xff0c;高压上电流程一般理解为高压件通电的过程&#xff0c;具体流程如下&#xff1a; 1、点火开关处于ON档时&#xff0c;仪表盘点亮&#xff0c;低压电接通。 2、VCU、BMS、MCU等控制模块依次被唤醒并开始进行自检…

基于Java自习室在线预约系统 的设计与实现

博主介绍&#xff1a; 大家好&#xff0c;本人精通Java、Python、C#、C、C编程语言&#xff0c;同时也熟练掌握微信小程序、Php和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我有丰富的成品Java、Python、C#毕设项目经验&#xff0c;能够为学生提供各类…

解决JupyteNotebook打不开问题

问题&#xff1a;打开jupyternotebook出现黑色界面&#xff0c;马上闪退 步骤&#xff1a; 1、winr&#xff0c;cmd进入&#xff0c;conda activate yes 进入yes环境&#xff08;后面是要下载新的jupyter notebook&#xff09;,我这里下载到了yes环境下 2、下载jupyter Note…