【发布时间】:2021-02-02 17:14:55
【问题描述】:
所以,我有一个数组存储在一个维度为 (251, 240) 的矩阵中。接下来,我创建了一个 ricker 小波,我将其与每一列(时间序列)进行卷积。这似乎工作正常。我过程的下一步是用相同的 ricker 小波对卷积的结果进行反卷积。我希望重建我的原始信号,但事实并非如此。我做错了什么,如何正确地对 ricker 小波进行反卷积?
我在下面附上我的一些代码
# the array 'time' and and 'seismic_data' with dimensions (251,) and (251,240) respectively, where created in previous cells.
from scipy import signal
ricker2 = signal.ricker(time.size, 4) #create ricker wavelet with same dimensions as time series
seismogram = []
seismic_trace = [signal.convolve(ricker2,seismic_data[:,i], mode='same')for i in range(offsets.size - 1)] #creates array with each row being the time series convolved
seismogram = np.array(seismic_trace).T #transpose to get time series as columns
# PlottingI
fig,ax = plt.subplots(figsize=(8,10))
ax.imshow(seismic_data, aspect=1400, extent= [np.min(offsets), np.max(offsets),np.max(time),np.min(time)])
plt.title('Central Shot Seismic Gather \n ', fontweight="bold")
plt.xlabel('Offset [m]', fontweight="bold")
plt.ylabel('Time [s]', fontweight="bold")
plt.show()
这里显示的图是我对卷积的期望。 (我还不能添加图片。抱歉)。
下一步(反卷积)似乎无法正常工作。
deconvolved_seismogram = []
for i in range (offsets.size-1):
rems, deconvolved_trace = signal.deconvolve(seismogram[:,i],ricker2)
deconvolved_seismogram.append(deconvolved_trace)
deconvolved_seismogram = np.array(deconvolved_seismogram).T
fig,ax = plt.subplots(figsize=(8,10))
ax.imshow(deconvolved_seismogram, aspect=1400, extent= [np.min(offsets), np.max(offsets),np.max(time),np.min(time)])
plt.title('Deconvolved Central Shot Seismic Gather \n ', fontweight="bold")
plt.xlabel('Offset [m]', fontweight="bold")
plt.ylabel('Time [s]', fontweight="bold")
plt.show()
deconvolved_seismogram 数组具有正确的维度,但信号与原始信号 (seismic_data) 完全不同。我究竟做错了什么?我该如何纠正这个问题?
提前致谢!
【问题讨论】:
标签: python scipy signal-processing convolution deconvolution