Reference
JetPackTransforms.JopDct — MethodA = 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*m2D
A = JopDct(Float64, 128, 64)
m = rand(domain(A))
d = A*m2D transform over 3D array
A = JopDct(Float64,128,64,32;dims=(1,2))
m = rand(domain(A))
d = A*mNotes
- the adjoint pair is achieved by application
sqrt(2/N)andsqrt(2)factors. See:- https://en.wikipedia.org/wiki/Discretecosinetransform
- http://www.fftw.org/fftw3doc/1d-Real002deven-DFTs-0028DCTs0029.html#gt1d-Real002deven-DFTs-0028DCTs0029
JetPackTransforms.JopDwt — MethodA = 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))JetPackTransforms.JopFft — MethodA = 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*m1D, complex to complex
A = JopFft(ComplexF64,128)
m = rand(domain(A))
d = A*m2D, real to complex
A = JopFft(Float64,128,256)
m = rand(domain(A))
d = A*m3D, real to complex, transforming over only the first dimension
A = JopFft(Float64,128,256; dims=(1,))
m = rand(domain(A))
d = A*mJetPackTransforms.JopSft — Methodop = 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.
JetPackTransforms.JopSlantStack — MethodA = 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 isz-hort-htheta=-45:1.0:45- range of incidence angles used whenmode="depth"p=range(-dz/dh,dz/dh,128)- ray parameter sampling used whenmode="time"padz=0.0,padh=0.0- fractional padding in depth and offset to apply before applying the Fourier transformtaperz=(0,0)- beginning and end taper (fractional) in the z-direction (or t-direction) before transforming fromz-htokz-khort-htof-khtaperh=(0,0)- beginning and end taper (fractional) in the h-direction before transforming fromz-htokz-khort-htof-khtaperkz=(0,0)- beginning and end taper (fractional) in the kz-direction (or frequency) before samplingtaperkh=(0,0)- beginning and end taper (fractional) in the kh-direction before sampling
Notes
- If the mode is "time", then
padzis the padding for the time dimension,dzis the time sampling interval,taperzis the taper for the time dimension andtapkerkzis the taper for frequency. - For mode="depth", typically theta needs to cover both positive and negative angles and must be < 90 degrees.
JetPackTransforms.JopSlantStack3D — MethodA = 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 isz-hx-hyort-hx-hy.theta=-45:1.0:45- range of incidence angles used whenmode="depth".phi=0:45.0:135- range of azimuth angles used whenmode="depth".dip=0.0- geologic dip (degrees) used whenmode="depth"azimuth=0.0- geologic azimuth (degrees) used whenmode="depth"px=range(-dz/dhx,dz/dhx,64)- ray parameter sampling used whenmode="time"py=range(-dz/dhy,dz/dhy,64)- ray parameter sampling used whenmode="time"padz=0.0,padhx=0.0,padhy=0.0- fractional padding in depth and offset to apply before applying the Fourier transformtaperz=(0,0)- beginning and end taper (fractional) in the z-direction (or t-direction) before transforming fromz-hx-hytokz-khx-khyort-hx-hytof-khx-khytaperhx=(0,0)- beginning and end taper (fractional) in the hx-direction before transforming fromz-hx-hytokz-khx-khyort-hx-hytof-khx-khytaperhy=(0,0)- beginning and end taper (fractional) in the hy-direction before transforming fromz-hx-hytokz-khx-khyort-hx-hytof-khx-khytaperkz=(0,0)- beginning and end taper (fractional) in the kz-direction (or frequency) before samplingtaperkhx=(0,0)- beginning and end taper (fractional) in the khx-direction before samplingtaperkhy=(0,0)- beginning and end taper (fractional) in the khy-direction before sampling
Notes
- If the mode is "time", then
padzis the padding for the time dimension,dzis the time sampling interval,taperzis the taper for the time dimension andtapkerkzis the taper for frequency. - For mode="depth", typically
thetaneeds to cover both positive and negative angles and must be < 90 degrees. - For mode="depth", the incidence angle depends on the geologic
dipandazimuth(see 3-D Seismic Imaging by Prof. Biondo Biondi, Chapter 6). If not provided, this dependency is ignored. - Typically, geologic
dip∈ [0, 90] degrees andazimuth∈ [0, 360] degrees, which is different fromthetaandphiranges. - For mode="depth", only scalar
dipandazimuthare 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.
JetPackTransforms.JopSlantStackShiftSum — MethodA = 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 isz-hort-htheta=-45:1.0:45- range of incidence angles used whenmode="depth"p=range(-dz/max(diff(h)),dz/max(diff(h)),128)- ray parameter sampling used whenmode="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
dzis the time sampling interval,taperzis the taper for the time dimension. - For mode="depth", typically theta needs to cover both positive and negative angles and must be < 90 degrees.
JetPackTransforms.JopSlantStackShiftSum3D — MethodA = 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 isz-hx-hyort-hx-hytheta=-45:1.0:45- range of incidence angles used whenmode="depth"phi=0:45.0:135- range of image azimuth angles used whenmode="depth"dip=0.0- geologic dip used whenmode="depth"azimuth=0.0- geologic azimuth used whenmode="depth"px=range(-dz/max(diff(hx)),dz/max(diff(hx)),64)- ray parameter sampling used whenmode="time"py=range(-dz/max(diff(hy)),dz/max(diff(hy)),64)- ray parameter sampling used whenmode="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
dzis the time sampling interval,taperzis the taper for the time dimension. - For mode="depth", typically
thetaneeds to cover both positive and negative angles and must be < 90 degrees. - For mode="depth", the incidence angle depends on the geologic
dipandazimuth(see 3-D Seismic Imaging by Prof. Biondo Biondi, Chapter 6). If not provided, this dependency is ignored. - Typically, geologic
dip∈ [0, 90] degrees andazimuth∈ [0, 360] degrees, which is different fromthetaandphiranges.