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_upsampling_x=2)
down = data - up

Example:

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

Example:

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

Example:

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")

Example:

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")

Example:

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")

Example: