core python functions:sep_function.py
separate_one(data, model, boundary=0, time_interp:int=1, sampling_x:int=1,
segment_x:int=1024, segment_overlap:int=50, iter:int=1, method="up"):
data: input seismic data: A 2-dimentional numpy.array
model: The trained deep learning model
boundary: Boundary slope or boundary T-D curves
time_interp: Time interpolation
sampling_x: Spatial downsampling rate
segment_x: Segment length in the spatial direction
segment_overlap: An overlap is set between the groups
iter: The number of repeated predictions
method: "up"
"down"
"middle"
"outside"
"median"
separate_gathers(data, model, boundary=0, time_interp:int=1, sampling_x:int=1,
segment_x:int=1024, segment_overlap:int=50, iter:int=1, method="up"):
data: 3-dimentional seismic data, 0-axis: list or numpy; 1- and 2-axis: numpy
dim0: gather; dim1: time; dim2: trace
Case 1: VSP upgoing and dwongoing
The trained model, when used with default parameters, can effectively separate upgoing and downgoing waves.
up = separate_gathers(data, model=model_up)
down = data - up
For DAS-VSP data with a high spatial sampling rate (e.g., 1 m or 0.5 m), the value of sampling_x
can be appropriately increased.
up = separate_gathers(data, model=model_up,sampling_x=2)
down = data - up
Case 2: DAS-VSP P/S
Shear and compressional wave separation in single-component DAS data can be achieved based on the the aparent velocity difference.
up = sepf.separate_one(data, model=model_up)
down = data-up
up_s = sepf.separate_one(up, model=model_up,boundary=-2)
up_p = up - up_s
down_p = sepf.separate_one(down, model=model_up, boundary=2.5)
down_s = down - down_p
Using manual picking of wave events (similar to median filtering).
down_p = separate_one(data, model=model_up, boundary=(T-D1,1,-1), method="median")
down_s = separate_one(data-down_p, model=model_up, boundary=(T-D2,1,-1), method="median")
up_p = separate_one(data-down_p-down_s, model=model_up, boundary=(T-D3,1,-1), method="median")
up_s = separate_one(data-down_p-down_s-up_p, model=model_up, boundary=(T-D4,1,-1),method="median")
residual = data-down_p-down_s-up_p-up_s
Case 3: CDP & CMP & CRP
After NMO or migration, the effective signals typically display a horizontal events. Therefore, it is essential to remove high-angle signals, which may include multiples or linear noise.
out = separate_gathers(data, model=model_up, boundary=(1,-1), time_interp=2, method="middle")
Case 4: Common mode noise
The common-mode noise is primarily horizontal events. Since the DAS data has a high spatial resolution, sampling_x can be set to 2 to enhance the slope differences between effective signals and noise.
out = separate_one(data, model=model_up, boundary=(1,-1), sampling_x=2, method="outside")
Case 5: Migration arc noise
The migration algorithm may introduce arc-shaped noise. Since the data is in the depth domain, the parameter time_interp
is essential for controlling the velocity range.
out = separate_gathers(image, model=model_up, boundary=(T-D, 4,-4), time_interp=7, method="median")