Modelling

Seismic.jl provides various ways to generate synthetic data set, like multi-dimensional linear, parabola, hyperbola events and finite-difference solver for acoustic wave equation (Currently only 2D is supported)

SeisLinearEvents

# Seismic.SeisLinearEventsFunction.

SeisLinearEvents(; <keyword arguments>)

Generate five dimensional data d consisting of linear events.

Arguments

Keyword arguments

  • ot=0.0: first sample for the time axis in secs.
  • dt=0.004: sampling interval in secs.
  • nt=500: number of time samples.
  • ox1=0.0: first sample for the first spatial dimension in meters.
  • dx1=10.0: sample interval for the first spatial dimension in meters.
  • nx1=100: number of samples for the first spatial dimension.
  • ox2=0.0: first sample for the second spatial dimension in meters.
  • dx2=10.0: sample interval for the second spatial dimension in meters.
  • nx2=1: number of samples for the second spatial dimension.
  • ox3=0.0: second sample for the third spatial dimension in meters.
  • dx3=10.0: sample interval for the third spatial dimension in meters.
  • nx3=1: number of samples for the third spatial dimension.
  • ox4=0.0: third sample for the fourth spatial dimension in meters.
  • dx4=10.0: sample interval for the fourth spatial dimension in meters.
  • nx4=1:number of samples for the fourth spatial dimension.
  • tau=[1.0, 1.6]: intercept traveltimes for each event.
  • p1=[0.0000,-0.0001]
  • p2=[0.0003, 0.0002]
  • p3=[-0.0001,-0.0001]
  • p4=[0.0001,-0.0000]
  • amp=[1.0,-1.0]: amplitudes for each linear event.
  • f0=20.0: central frequency of wavelet for each linear event.

Example

julia> d,extent = SeisLinearEvents(); SeisPlot(d);

Credits: Aaron Stanton, 2015

source

SeisParabEvents

# Seismic.SeisParabEventsFunction.

SeisParabEvents(; <keyword arguments>)

Generate five dimensional data d consisting of parabolic events.

Arguments

Keyword arguments

  • ot=0.0: first sample for the time axis in secs.
  • dt=0.004: sampling interval in secs.
  • nt=500: number of time samples.
  • ox1=0.0: first sample for the first spatial dimension in meters.
  • dx1=10.0: sample interval for the first spatial dimension in meters.
  • nx1=100: number of samples for the first spatial dimension.
  • ox2=0.0: first sample for the second spatial dimension in meters.
  • dx2=10.0: sample interval for the second spatial dimension in meters.
  • nx2=1: number of samples for the second spatial dimension.
  • ox3=0.0: second sample for the third spatial dimension in meters.
  • dx3=10.0: sample interval for the third spatial dimension in meters.
  • nx3=1: number of samples for the third spatial dimension.
  • ox4=0.0: third sample for the fourth spatial dimension in meters.
  • dx4=10.0: sample interval for the fourth spatial dimension in meters.
  • nx4=1:number of samples for the fourth spatial dimension.
  • tau=[1.0, 1.6]: intercept traveltimes for each event.
  • `p1=[0.0000,-0.0001]
  • `p2=[0.0003, 0.0002]
  • `p3=[-0.0001,-0.0001]
  • `p4=[0.0001,-0.0000]
  • amp=[1.0,-1.0]: amplitudes for each parabolic event.
  • wavelet="ricker": wavelet used to model the parabolicr events.
  • f0=[20.0]: central frequency of wavelet for each parabolic event.

Example

julia> d, extent = SeisParabEvents(); SeisPlot(d);

Credits: Mauricio D Sacchi, 2015

source

SeisHypEvents

# Seismic.SeisHypEventsFunction.

SeisHypEvents(; )

Generate two dimensional data d consisting of hyperbolic events.

Keyword arguments

  • ot::Real=0.0: first sample for the time axis in secs.
  • dt::Real=0.004: sampling interval in secs.
  • nt::Int=301: number of time samples.
  • ox::Real=-1000.0: first sample for spatial dimension in meters.
  • dx::Real=20.0: sample interval for the spatial dimension in meters.
  • nx::Int=101: number of samples for the spatial dimension.
  • tau::Vector{Real}=[0.2, 0.6, 0.9]: intercept traveltimes for each event.
  • vel::Vector{Real}=[1500.0, 2000.0, 3000.0]: rms velocities in m/s
  • apex::Vector{Real}=[0.0, 0.0, 0.0]: apex-shifts in meters.
  • amp::Vector{Real}=[1.0, -1.0, 1.0]: amplitudes for each event.
  • wavelet::AbstractString="ricker": wavelet used to model the events.
  • f0::Vector{Real}=[20.0]: central frequency of wavelet for each event.

Output

  • d::Array{Real, 2}: two dimensional data consisting of hyperbolic events.
  • extent::Extent: extent of the data d.

Examples

julia> d, extent = SeisHypEvents(); SeisPlot(d, extent);
julia> d, extent = SeisHypEvents(apex=[100, 200, -300], f0=[30, 20, 15]);
SeisPlot(d, extent);

source

SeisAddNoise

# Seismic.SeisAddNoiseFunction.

SeisAddNoise(d, snr; <keyword arguments>)

Add noise at a given signal-to-noise ratio level snr to an N-dimensional input data d. Noise can be band limited using kewyord L.

Arguments

  • d::Array{Real, N}: N-dimensional data.
  • snr::Real: signal-to-noise ratio.

Keyword arguments

  • db::Bool=false: db=false if snr is given by amplitude, db=true if

snr is given in dB.

  • pdf::AbstractString="gaussian": random noise probability distribution:

"gaussian" or "uniform".

  • L::Int=1: averaging operator length to band-limit the random noise.

Examples

julia> w = Ricker(); wn = SeisAddNoise(w, 2); plot(w); plot(wn);
MeasureSNR(w, wn)

julia> d, extent = SeisHypEvents(); dn = SeisAddNoise(d, 1.0, db=true, L=9);
SeisPlot([d dn], extent); MeasureSNR(d, dn, db=true)

Credits: Juan I. Sabbione, 2016

source

SeisAcousticWave

# Seismic.SeisAcousticWaveFunction.

shot = SeisAcousticWave(fidMtx, pos, isz, isx, f0, dt, tmax=2.0)

finite difference modeling of acoustic wave field, generate a common shot gather

Arguments

  • fidMtx :: FidMtx : composite type of sparse matrix
  • pos :: Array{Int64,2}: index of receivers, first column is the vertical index, second column contains horizontal index.
  • isz :: Int64 : vertical index of source
  • isz :: Int64 : horizontal index of source
  • f0 :: Float64 : dominant frequency of Ricker wavelet
  • dt :: Float64 : size of time step

keywords Arguments

  • tmax=1.0 : length of simulation

Output

  • shot :: ShotGather: composite type for common shot gather

source