褶积合成地震记录

目的:
通过编写和运行相关程序,利用褶积理论实现水平层状模型自激自收合成地震记录。
内容及要求:
1、计算水平层状模型垂直入射反射系数序列r(t)
已知双层模型,界面水平,第一层厚度100m,纵波速度1500m/s,密度2000kg/m3,第二层纵波速度2200m/s,密度2100kg/m3。
根据已知两层介质、水平界面模型,计算界面垂直入射反射系数R。
根据第一层厚度及纵波速度,计算界面反射波双程旅行时t0,计算反射系数序列r(t).
2、褶积合成地震记录
设置子波为50Hz的雷克子波,利用褶积理论合成地震记录。要求:
1)合成的自激自收地震道,子波为零相位子波(子波最大振幅和反射系数位置对应)。
2)将反射系数序列r(t)、子波w(t)和地震道s(t)绘制到一副图中,要求纵坐标为时间。

实验原理:
计算反射系数计算公式:在这里插入图片描述,和自激自收时间:在这里插入图片描述,然后计算反射系数序列。子波取雷克子波,其函数为:在这里插入图片描述
线性褶积模型公式为:在这里插入图片描述,式中t为反射波自激自收双程旅行时,w(t)为时间域子波序列,r(t)为时间域反射系数序列。褶积时需要对子波进行相位校正,从而实现了波零相位化,使得地震道中子波振幅最大值对应界面的反射系数。校正方法为褶积运算后地震道“向上移动”半个子波序列长度。
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
代码如下
.
.
.
1.反射系数序列r(t)Python代码

/**
 仅供学习,如有纰漏,望请指正
*/
1.import numpy as np
2.import matplotlib.pyplot as plt
3.import scipy
4.import math
5.
6.
7.ρ1 = 2000
8.ρ2 = 2100
9.h = 100
10.v1 = 1500
11.v2 = 2200
12.R = (ρ2*v2 - ρ1*v1)/(ρ2*v2 + ρ1*v1)
13.t0 = 2*h/v1
14.
15.r = np.linspace(-0.3, 0.3, 200)
16.x1 = 0
17.x2 = R
18.y1 = t0
19.y2 = t0
20.f1 = 50
21.t = np.linspace(-0.055, 0.055, 500)
22.rick1 = (1-2*(math.pi*f1*t)**2)*math.e**(-1*(math.pi*f1*t)**2)
23.
24.
25.plt.figure(figsize=(10,6))
26.fig,ax = plt.subplots()
27.plt.ylim(0.3, 0)
28.plt.xlim(-0.3, 0.3)
29.ax.set_aspect(4)
30.plt.axvline(0, color='b')
31.ax.plot([x1, x2], [y1, y2], linewidth=1)
32.ax.set_xlabel("R")
33.ax.set_ylabel("Time")
34.ax.set_title('r(t)')
35.ax.legend()
36.plt.show()

2(1).合成的自激自收地震道,子波为零相位子波Python代码

/**
 仅供学习,如有纰漏,望请指正 --by wxw
*/
1.import numpy as np
2.import matplotlib.pyplot as plt
3.import scipy
4.import math
5.
6.f1 = 50
7.
8.t = np.linspace(-0.055, 0.055, 500)
9.rick1 = (1-2*(math.pi*f1*t)**2)*math.e**(-1*(math.pi*f1*t)**2)
10.
11.plt.figure(figsize=(10,6))
12.fig,ax = plt.subplots()
13.plt.ylim(0.02, -0.02)
14.plt.xlim(-0.5, 1)
15.ax.set_aspect(80)
16.ax.plot(rick1, t, '--', label="50Hz")
17.ax.set_xlabel("Time")
18.ax.set_ylabel("Amp")
19.ax.set_title('rick')
20.ax.legend()
21.plt.show()

2(2).反射系数序列r(t)、子波w(t)和地震道s(t)Python代码

/**
 仅供学习,如有纰漏,望请指正 --by wxw
*/
1.import numpy as np
2.import matplotlib.pyplot as plt
3.import scipy
4.import math
5.
6.
7.h = 100
8.ρ1 = 2000
9.ρ2 = 2100
10.v1 = 1500
11.v2 = 2200
12.R = (ρ2*v2 - ρ1*v1)/(ρ2*v2 + ρ1*v1)
13.t0 = 2*h/v1
14.f = 50
15.dt = 0.0001
16.t_max = 0.3
17.ts_max = 0.1
18.
19.# r(t)
20.r = np.linspace(-0.3, 0.3, 200)
21.x1 = 0
22.x2 = R
23.y1 = t0
24.y2 = t0
25.
26.# w(t)
27.t = np.linspace(-0.055, 0.055, 500)
28.rick = (1-2*(math.pi*f*t)**2)*math.e**(-1*(math.pi*f*t)**2)
29.
30.# s(t)
31.r = np.zeros((round(t_max/dt), 1))
32.rd = round(t0/dt)
33.r[rd] = R
34.r = np.array(r).flatten()
35.ts = np.linspace(-0.15, 0.33, 3000)
36.rick1 = (1-2*(math.pi*f*ts)**2)*math.e**(-1*(math.pi*f*ts)**2)
37.nts = round(ts_max/dt)+1
38.trace = np.zeros((round(t_max/dt), 1))
39.trace_conv = np.convolve(rick1, r, mode='full')
40.trace = trace_conv[np.arange(round(ts_max/2/dt)+1, round(ts_max/2/dt)+round(t_max/dt)+1, 1)]
41.
42.
43.plt.figure(figsize=(12, 6))
44.fig, ax = plt.subplots(1, 3)
45.ax1 = ax[0]
46.ax2 = ax[1]
47.ax3 = ax[2]
48.
49.ax1.set_ylim(0.3, 0)
50.ax1.set_xlim(-0.2, 0.3)
51.ax1.set_aspect(4)
52.ax1.axvline(0, color='b')
53.ax1.plot([x1, x2], [y1, y2], linewidth=2, color='g')
54.ax1.set_xlabel("R")
55.ax1.set_ylabel("Time")
56.ax1.set_title('r(t)')
57.ax1.legend()
58.
59.ax2.set_ylim(-0.02, 0.02)
60.ax2.set_xlim(-0.5, 1)
61.ax2.set_aspect(90)
62.ax2.plot(rick, t)
63.ax2.set_xlabel("Amp")
64.ax2.set_ylabel("Time")
65.ax2.set_title('w(t)')
66.ax2.legend()
67.
68.ax3.set_ylim(0.3, 0)
69.ax3.set_xlim(-0.2, 0.3)
70.ax3.set_aspect(4)
71.ax3.plot(trace, ts)
72.ax3.set_xlabel("Amp")
73.ax3.set_ylabel("Time")
74.ax3.set_title('s(t)')
75.ax3.legend()
76.
77.plt.show()
  • 12
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是使用PyTorch编代码来实现地震褶积合成地震记录并添加陷落柱构造的一般步骤: 1. 导入所需的Python和PyTorch库,如torch、numpy、matplotlib等。 2. 定义模型结构:这个模型可以使用卷积神经网络,其中包含多个卷积层和池化层,用于模拟地震数据中的波形变化。在模型结构中添加一些全连接层,以模拟陷落柱的结构。 3. 定义损失函数和优化器:损失函数用于衡量模型的预测结果与真实数据之间的误差。优化器用于更新模型参数,以最小化损失函数。 4. 加载地震数据:这可以是真实地震记录合成地震记录。在加载数据时,需要将其转换为PyTorch张量。 5. 训练模型:将地震数据输入到模型中,使用损失函数和优化器来训练模型。这通常涉及多个训练轮次,每个轮次中都会使用不同的数据子集进行训练,并且在每个轮次之后,都会计算并记录损失函数的值。 6. 生成陷落柱构造:使用模型生成一些陷落柱构造。这可以通过将模型输入一些随机噪声数据来实现。 7. 将陷落柱构造添加到地震记录中:将生成的陷落柱构造与地震记录相加,得到最终的地震记录。最后,将这些记录保存到文件中,以备将来使用。 总之,以上是使用PyTorch编代码实现地震褶积合成地震记录并添加陷落柱构造的一般步骤。具体的代码实现会涉及更多的细节和复杂性,需要根据具体情况进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Uranus^

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值