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-h.theta=-60:1.0:60- 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-khtaperh=(0,0)- beginning and end taper (fractional) in the h-direction before transforming fromz-htokz-khtaperkz=(0,0)- beginning and end taper (fractional) in the kz-direction (or frequency) before transforming fromkz-khtoz-horf-khtot-htaperkh=(0,0)- beginning and end taper (fractional) in the kh-direction before transforming fromkz-khtoz-horf-khtot-h
Notes
- It should be possible to extend this operator to 3D
- 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.