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=-60:1.0:60 - 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
  • taperh=(0,0) - beginning and end taper (fractional) in the h-direction before transforming from z-h to kz-kh
  • taperkz=(0,0) - beginning and end taper (fractional) in the kz-direction (or frequency) before transforming from kz-kh to z-h or f-kh to t-h
  • taperkh=(0,0) - beginning and end taper (fractional) in the kh-direction before transforming from kz-kh to z-h or f-kh to t-h

Notes

  • It should be possible to extend this operator to 3D
  • 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

Index