Reference

JetPackTransforms.JopDctMethod
A = JopDct(T, n...[;dims=()])

where A is a type II discrete cosine transfrom (DCT), T is the element type of the domain and range if A, and n is the size of A. If dims is not set, then A is the N-dimensional DCT and where N=length(n). Otherwise, A is a DCT over the dimensions specified by dims.

Examples

1D

A = JopDct(Float64, 128)
m = rand(domain(A))
d = A*m

2D

A = JopDct(Float64, 128, 64)
m = rand(domain(A))
d = A*m

2D transform over 3D array

A = JopDct(Float64,128,64,32;dims=(1,2))
m = rand(domain(A))
d = A*m

Notes

  • the adjoint pair is achieved by application sqrt(2/N) and sqrt(2) factors. See:
    • https://en.wikipedia.org/wiki/Discretecosinetransform
    • http://www.fftw.org/fftw3doc/1d-Real002deven-DFTs-0028DCTs0029.html#gt1d-Real002deven-DFTs-0028DCTs0029
source
JetPackTransforms.JopDwtMethod
A = JopDwt(T, n...[, wt=wavelet(WT.haar, WT.Lifting)])

A is the N-D (N=1,2 or 3) wavelet transform operator, operating on the domain of type T and dimensions n. The optional argument wt is the wavelet type. The supported wavelet types are WT.haar and WT.db (Daubechies).

Notes

  • For 2 and 3 dimensional transforms the domain must be square. In other-words, size(dom,1)==size(dom,2)==size(dom,3).
  • If your domain is rectangular, please consider using 1D wavelet transforms in combination wih the kronecker product (JopKron).
  • The wavelet transform is provide by the Wavelets.jl package: http://github.com/JuliaDSP/Wavelets.jl
  • You may try other wavelet classes supported by Wavelets.jl; however, these have yet to be tested for correctness with respect to the

transpose.

Example

A = JopDwt(Float64, 64, 64; wt=wavelet(WT.db5))
d = A*rand(domain(A))
source
JetPackTransforms.JopFftMethod
A = JopFft(T, n...[; dims=()])

where A is a Fourier transform, the domain of A is (T,n). If dims is not set, then A is an N-dimensional Fourier transform and where N=ndims(dom). Otherwise, A is a Fourier transform over the dimensions specifed by dims.

For a complex-to-complex transform: range(A)::JetSpace. For a real-to-complex transform: range(A)::JetSpaceSymmetric. Normally, JopFft is responsible for constructing range(A). In the event that you need to manually construct this space, we provide a convenience method:

R = symspace(JopLn{JopFft_df!}, T, symdim, n...)

where T is the precision (generally Float32 or Float64), n... is the dimensions of the domain of A, and symdim is the first dimension begin Fourier transformed.

Examples

1D, real to complex

A = JopFft(Float64,128)
m = rand(domain(A))
d = A*m

1D, complex to complex

A = JopFft(ComplexF64,128)
m = rand(domain(A))
d = A*m

2D, real to complex

A = JopFft(Float64,128,256)
m = rand(domain(A))
d = A*m

3D, real to complex, transforming over only the first dimension

A = JopFft(Float64,128,256; dims=(1,))
m = rand(domain(A))
d = A*m
source
JetPackTransforms.JopSftMethod
op = JopSft(dom,freqs,dt)

Polychromatic slow Fourier transforms for a specified list of frequencies. Tranform along the fast dimension of dom::JetSpace{<:Real}.

Notes: - it is expected that the domain is 2D real of size [nt,ntrace] - the range will be 2D complex of size [length(freqs),ntrace] - regarding the factor of (2/n): the factor "1/n" is from the Fourier transform, and the "2" is from Hermittian symmetry.

source
JetPackTransforms.JopSlantStackMethod
A = JopSlantStack(dom[; dz=1.0, dh=1.0, h0=0.0, ...])

where A is the 2D slant-stack operator mapping for z-h to z-θ (depth mode) or t-h to tau-p (time mode). The domain of the operator is nz x nh with precision T, dz is the depth spacing (or time interval), dh is the offset spacing, and h0 is the origin of the offset axis. The additional named optional arguments along with their default values are,

  • mode="depth - choose between "depth" and "time" to specify if the input domain is z-h or t-h
  • theta=-45:1.0:45 - range of incidence angles used when mode="depth"
  • p=range(-dz/dh,dz/dh,128) - ray parameter sampling used when mode="time"
  • padz=0.0,padh=0.0 - fractional padding in depth and offset to apply before applying the Fourier transform
  • taperz=(0,0) - beginning and end taper (fractional) in the z-direction (or t-direction) before transforming from z-h to kz-kh or t-h to f-kh
  • taperh=(0,0) - beginning and end taper (fractional) in the h-direction before transforming from z-h to kz-kh or t-h to f-kh
  • taperkz=(0,0) - beginning and end taper (fractional) in the kz-direction (or frequency) before sampling
  • taperkh=(0,0) - beginning and end taper (fractional) in the kh-direction before sampling

Notes

  • If the mode is "time", then padz is the padding for the time dimension, dz is the time sampling interval, taperz is the taper for the time dimension and tapkerkz is the taper for frequency.
  • For mode="depth", typically theta needs to cover both positive and negative angles and must be < 90 degrees.
source
JetPackTransforms.JopSlantStack3DMethod
A = JopSlantStack3D(dom[; dz=1.0, dhx=1.0, dhy=1.0, hx0=0.0, hy0=0.0, ...])

where A is the 3D slant-stack operator mapping for z-hx-hy to z-θ-ϕ (depth mode) or t-hx-hy to tau-px-py (time mode). The domain of the operator is typically nz x nhx x nhy with precision T, dz is the depth spacing (or time interval), dhx and dhy are the offset spacings, and hx0 and hy0 are the origins of the offset axes. The domain can also be nz x ny x nx x nhx x nhy where the y and x dimensions are passive. The additional named optional arguments along with their default values are,

  • mode="depth - choose between "depth" and "time" to specify if the input domain is z-hx-hy or t-hx-hy.
  • theta=-45:1.0:45 - range of incidence angles used when mode="depth".
  • phi=0:45.0:135 - range of azimuth angles used when mode="depth".
  • dip=0.0 - geologic dip (degrees) used when mode="depth"
  • azimuth=0.0 - geologic azimuth (degrees) used when mode="depth"
  • px=range(-dz/dhx,dz/dhx,64) - ray parameter sampling used when mode="time"
  • py=range(-dz/dhy,dz/dhy,64) - ray parameter sampling used when mode="time"
  • padz=0.0,padhx=0.0,padhy=0.0 - fractional padding in depth and offset to apply before applying the Fourier transform
  • taperz=(0,0) - beginning and end taper (fractional) in the z-direction (or t-direction) before transforming from z-hx-hy to kz-khx-khy or t-hx-hy to f-khx-khy
  • taperhx=(0,0) - beginning and end taper (fractional) in the hx-direction before transforming from z-hx-hy to kz-khx-khy or t-hx-hy to f-khx-khy
  • taperhy=(0,0) - beginning and end taper (fractional) in the hy-direction before transforming from z-hx-hy to kz-khx-khy or t-hx-hy to f-khx-khy
  • taperkz=(0,0) - beginning and end taper (fractional) in the kz-direction (or frequency) before sampling
  • taperkhx=(0,0) - beginning and end taper (fractional) in the khx-direction before sampling
  • taperkhy=(0,0) - beginning and end taper (fractional) in the khy-direction before sampling

Notes

  • If the mode is "time", then padz is the padding for the time dimension, dz is the time sampling interval, taperz is the taper for the time dimension and tapkerkz is the taper for frequency.
  • For mode="depth", typically theta needs to cover both positive and negative angles and must be < 90 degrees.
  • For mode="depth", the incidence angle depends on the geologic dip and azimuth (see 3-D Seismic Imaging by Prof. Biondo Biondi, Chapter 6). If not provided, this dependency is ignored.
  • Typically, geologic dip ∈ [0, 90] degrees and azimuth ∈ [0, 360] degrees, which is different from theta and phi ranges.
  • For mode="depth", only scalar dip and azimuth are supported, which means the same geologic angle is applied across the entire depth. This is a simplification and may not be accurate for complex geologies.
source
JetPackTransforms.JopSlantStackShiftSumMethod
A = JopSlantStackShiftSum(dom[; dz=1.0, ...])

where A is the 2D slant-stack operator mapping for z-h to z-θ (depth mode) or t-h to tau-p (time mode). The slant stacking is performed directly on the input domain by shifting and summing along the offset axis. The domain of the operator is nz x nh with precision T, dz is the depth spacing (or time interval), h, if provided, is the array of offsets (can be irregular). If not provided, a regular grid is assumed with same sampling as dz. The additional named optional arguments along with their default values are,

  • mode="depth - choose between "depth" and "time" to specify if the input domain is z-h or t-h
  • theta=-45:1.0:45 - range of incidence angles used when mode="depth"
  • p=range(-dz/max(diff(h)),dz/max(diff(h)),128) - ray parameter sampling used when mode="time"
  • taperz=(0,0) - beginning and end taper (fractional) in the z-direction (or t-direction) before shifting and summing

Notes

  • If the mode is "time", then dz is the time sampling interval, taperz is the taper for the time dimension.
  • For mode="depth", typically theta needs to cover both positive and negative angles and must be < 90 degrees.
source
JetPackTransforms.JopSlantStackShiftSum3DMethod
A = JopSlantStackShiftSum3D(dom[; dz=1.0, ...])

where A is the 3D slant-stack operator mapping for z-hx-hy to z-θ-ϕ (depth mode) or t-hx-hy to tau-px-py (time mode). The slant stacking is performed directly on the input domain by shifting and summing along the offset axis. The domain of the operator is nz x nh (for irregular) or nz x nhx x nhy (for regular) with precision T, dz is the depth spacing (or time interval), hx and hy, if provided, are the arrays of offsets (can be irregular). If not provided, a regular grid is assumed with same sampling as dz. The additional named optional arguments along with their default values are,

  • mode="depth - choose between "depth" and "time" to specify if the input domain is z-hx-hy or t-hx-hy
  • theta=-45:1.0:45 - range of incidence angles used when mode="depth"
  • phi=0:45.0:135 - range of image azimuth angles used when mode="depth"
  • dip=0.0 - geologic dip used when mode="depth"
  • azimuth=0.0 - geologic azimuth used when mode="depth"
  • px=range(-dz/max(diff(hx)),dz/max(diff(hx)),64) - ray parameter sampling used when mode="time"
  • py=range(-dz/max(diff(hy)),dz/max(diff(hy)),64) - ray parameter sampling used when mode="time"
  • taperz=(0,0) - beginning and end taper (fractional) in the z-direction (or t-direction) before shifting and summing

Notes

  • If the mode is "time", then dz is the time sampling interval, taperz is the taper for the time dimension.
  • For mode="depth", typically theta needs to cover both positive and negative angles and must be < 90 degrees.
  • For mode="depth", the incidence angle depends on the geologic dip and azimuth (see 3-D Seismic Imaging by Prof. Biondo Biondi, Chapter 6). If not provided, this dependency is ignored.
  • Typically, geologic dip ∈ [0, 90] degrees and azimuth ∈ [0, 360] degrees, which is different from theta and phi ranges.
source

Index