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.SeisLinearEvents — Function.
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
SeisParabEvents
#
Seismic.SeisParabEvents — Function.
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
SeisHypEvents
#
Seismic.SeisHypEvents — Function.
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/sapex::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 datad.
Examples
julia> d, extent = SeisHypEvents(); SeisPlot(d, extent); julia> d, extent = SeisHypEvents(apex=[100, 200, -300], f0=[30, 20, 15]); SeisPlot(d, extent);
SeisAddNoise
#
Seismic.SeisAddNoise — Function.
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=falseifsnris given by amplitude,db=trueif
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
SeisAcousticWave
#
Seismic.SeisAcousticWave — Function.
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 matrixpos :: Array{Int64,2}: index of receivers, first column is the vertical index, second column contains horizontal index.isz :: Int64: vertical index of sourceisz :: Int64: horizontal index of sourcef0 :: Float64: dominant frequency of Ricker waveletdt :: Float64: size of time step
keywords Arguments
tmax=1.0: length of simulation
Output
shot :: ShotGather: composite type for common shot gather